diff options
author | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-08-05 14:50:23 -0400 |
---|---|---|
committer | Chris St. Pierre <chris.a.st.pierre@gmail.com> | 2013-08-05 14:51:45 -0400 |
commit | cb8b6e95e010ae322cb6be9b79e1a89009f45948 (patch) | |
tree | 43f5491fd3d1c5d6d02a22ca89ec83d124c06c13 /src/lib/Bcfg2/Server/Plugins/Probes.py | |
parent | dd97411cd650bfc157a7835ed9b859f5def5abb0 (diff) | |
download | bcfg2-cb8b6e95e010ae322cb6be9b79e1a89009f45948.tar.gz bcfg2-cb8b6e95e010ae322cb6be9b79e1a89009f45948.tar.bz2 bcfg2-cb8b6e95e010ae322cb6be9b79e1a89009f45948.zip |
Multiprocessing: proxy RecvProbeData calls
This proxies RecvProbeData calls to child cores to expire the probe
cache. The probe data itself is not relayed, just the fact that there
was probe data received from a given client.
Fixes #129.
Diffstat (limited to 'src/lib/Bcfg2/Server/Plugins/Probes.py')
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Probes.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/lib/Bcfg2/Server/Plugins/Probes.py b/src/lib/Bcfg2/Server/Plugins/Probes.py index 407cfc2d4..b58fbf715 100644 --- a/src/lib/Bcfg2/Server/Plugins/Probes.py +++ b/src/lib/Bcfg2/Server/Plugins/Probes.py @@ -266,12 +266,14 @@ class Probes(Bcfg2.Server.Plugin.Probing, hostname=client.hostname).exclude( group__in=self.cgroups[client.hostname]).delete() - def load_data(self): + def load_data(self, client=None): """ Load probe data from the appropriate backend (probed.xml or the database) """ if self._use_db: - return self._load_data_db() + return self._load_data_db(client) else: + # the XML backend doesn't support loading data for single + # clients, so it reloads all data return self._load_data_xml() def _load_data_xml(self): @@ -296,16 +298,23 @@ class Probes(Bcfg2.Server.Plugin.Probing, elif pdata.tag == 'Group': self.cgroups[client.get('name')].append(pdata.get('name')) - def _load_data_db(self): + def _load_data_db(self, client=None): """ Load probe data from the database """ self.probedata = {} self.cgroups = {} - for pdata in ProbesDataModel.objects.all(): + if client is None: + probedata = ProbesDataModel.objects.all() + groupdata = ProbesGroupsModel.objects.all() + else: + probedata = ProbesDataModel.objects.filter(hostname=client) + groupdata = ProbesGroupsModel.objects.filter(hostname=client) + + for pdata in probedata: if pdata.hostname not in self.probedata: self.probedata[pdata.hostname] = ClientProbeDataSet( timestamp=time.mktime(pdata.timestamp.timetuple())) self.probedata[pdata.hostname][pdata.probe] = ProbeData(pdata.data) - for pgroup in ProbesGroupsModel.objects.all(): + for pgroup in groupdata: if pgroup.hostname not in self.cgroups: self.cgroups[pgroup.hostname] = [] self.cgroups[pgroup.hostname].append(pgroup.group) |