summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2012-11-09 15:00:17 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2013-03-06 04:52:35 +0100
commita3ed36842d1e4762f81d8ad9c10bd36dc73a26c3 (patch)
tree9e8c5d9a27e58e906193c955865294ef620421c0 /src/lib
parent7c51b8e02cc221ed3d9d9f2f7da4ad03f27d2046 (diff)
downloadbcfg2-a3ed36842d1e4762f81d8ad9c10bd36dc73a26c3.tar.gz
bcfg2-a3ed36842d1e4762f81d8ad9c10bd36dc73a26c3.tar.bz2
bcfg2-a3ed36842d1e4762f81d8ad9c10bd36dc73a26c3.zip
pingdata.xml: add new file for dynamic ping data of the clients
bcfg2-ping-sweep saved the pingdata into clients.xml. This is problematic if the repository is tracked by a vcs. Now the dynamic data is saved into pingdata.xml and the DBStat plugin reads the data from there. So the pingdata.xml could be ignored by the vcs.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Server/Lint/Validate.py4
-rw-r--r--src/lib/Server/Plugins/DBStats.py2
-rw-r--r--src/lib/Server/Plugins/Metadata.py12
3 files changed, 13 insertions, 5 deletions
diff --git a/src/lib/Server/Lint/Validate.py b/src/lib/Server/Lint/Validate.py
index 952a65365..50c3956a4 100644
--- a/src/lib/Server/Lint/Validate.py
+++ b/src/lib/Server/Lint/Validate.py
@@ -14,6 +14,7 @@ class Validate(Bcfg2.Server.Lint.ServerlessPlugin):
Bcfg2.Server.Lint.ServerlessPlugin.__init__(self, *args, **kwargs)
self.filesets = {"metadata:groups":"%s/metadata.xsd",
"metadata:clients":"%s/clients.xsd",
+ "metadata:pingdata":"%s/pingdata.xsd",
"info":"%s/info.xsd",
"%s/Bundler/*.xml":"%s/bundle.xsd",
"%s/Bundler/*.genshi":"%s/bundle.xsd",
@@ -148,7 +149,8 @@ class Validate(Bcfg2.Server.Lint.ServerlessPlugin):
# about those.
for fname in all_metadata:
if (fname not in self.filelists['metadata:groups'] and
- fname not in self.filelists['metadata:clients']):
+ fname not in self.filelists['metadata:clients'] and
+ fname not in self.filelists['metadata:pingdata']):
self.LintError("broken-xinclude-chain",
"Broken XInclude chain: Could not determine file type of %s" % fname)
diff --git a/src/lib/Server/Plugins/DBStats.py b/src/lib/Server/Plugins/DBStats.py
index 56420f646..07798b09e 100644
--- a/src/lib/Server/Plugins/DBStats.py
+++ b/src/lib/Server/Plugins/DBStats.py
@@ -54,7 +54,7 @@ class DBStats(Bcfg2.Server.Plugin.Plugin,
start = time.time()
for i in [1, 2, 3]:
try:
- Bcfg2.Server.Reports.importscript.load_stats(self.core.metadata.clients_xml.xdata,
+ Bcfg2.Server.Reports.importscript.load_stats(self.core.metadata.pingdata_xml.xdata,
container,
self.core.encoding,
0,
diff --git a/src/lib/Server/Plugins/Metadata.py b/src/lib/Server/Plugins/Metadata.py
index 4f0ca9686..f89c98d2c 100644
--- a/src/lib/Server/Plugins/Metadata.py
+++ b/src/lib/Server/Plugins/Metadata.py
@@ -237,16 +237,19 @@ class Metadata(Bcfg2.Server.Plugin.Plugin,
try:
core.fam.AddMonitor("%s/%s" % (self.data, "groups.xml"), self)
core.fam.AddMonitor("%s/%s" % (self.data, "clients.xml"), self)
+ core.fam.AddMonitor("%s/%s" % (self.data, "pingdata.xml"), self)
except:
- print("Unable to add file monitor for groups.xml or clients.xml")
+ print("Unable to add file monitor for groups.xml, clients.xml or pingdata.xml")
raise Bcfg2.Server.Plugin.PluginInitError
self.clients_xml = XMLMetadataConfig(self, watch_clients, 'clients.xml')
+ self.pingdata_xml = XMLMetadataConfig(self, watch_clients, 'pingdata.xml')
self.groups_xml = XMLMetadataConfig(self, watch_clients, 'groups.xml')
self.states = {}
if watch_clients:
self.states = {"groups.xml": False,
- "clients.xml": False}
+ "clients.xml": False,
+ "pingdata.xml": False}
self.addresses = {}
self.auth = dict()
self.clients = {}
@@ -266,7 +269,8 @@ class Metadata(Bcfg2.Server.Plugin.Plugin,
self.default = None
self.pdirty = False
self.extra = {'groups.xml': [],
- 'clients.xml': []}
+ 'clients.xml': [],
+ 'pingdata.xml': []}
self.password = core.password
self.query = MetadataQuery(core.build_metadata,
lambda: list(self.clients.keys()),
@@ -530,6 +534,8 @@ class Metadata(Bcfg2.Server.Plugin.Plugin,
ggg))
[self.groups[group][0].add(bund) for bund in bundles]
self.states['groups.xml'] = True
+ elif self.pingdata_xml.HandleEvent(event):
+ self.states['pingdata.xml'] = True
if False not in list(self.states.values()):
# check that all client groups are real and complete
real = list(self.groups.keys())