From 7b7ed9879cd764784144efd73dd298fe1526e771 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Tue, 3 Mar 2009 03:54:16 +0000 Subject: Get Snapshots working for Service entries git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5095 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Server/Plugins/Snapshots.py | 42 ++++++++++++++++++++++--------------- src/lib/Server/Snapshots/model.py | 28 ++++++++++++++++++++----- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/src/lib/Server/Plugins/Snapshots.py b/src/lib/Server/Plugins/Snapshots.py index f5b69d18f..6f33fff4d 100644 --- a/src/lib/Server/Plugins/Snapshots.py +++ b/src/lib/Server/Plugins/Snapshots.py @@ -13,7 +13,7 @@ class Snapshots(Bcfg2.Server.Plugin.Statistics, def __init__(self, core, datastore): Bcfg2.Server.Plugin.Plugin.__init__(self, core, datastore) Bcfg2.Server.Plugin.Statistics.__init__(self) - self.session = Bcfg2.Server.Snapshots.db_from_config() + self.session = Bcfg2.Server.Snapshots.setup_session() def process_statistics(self, metadata, data): return self.statistics_from_old_stats(metadata, data) @@ -26,28 +26,36 @@ class Snapshots(Bcfg2.Server.Plugin.Statistics, ('Service', dict()), ('Path', dict())]) extra = dict([('Package', list()), ('Service', list()), ('Path', list())]) + pdisp = {'Package': 'version', + 'Service': 'status'} for entry in xdata.find('.//Bad'): - print entry.tag, entry.get('name') - if entry.tag == 'Package': + if entry.tag not in pdisp: + print "Not Found", entry.tag, entry.get('name') + continue + else: data = [False, False, unicode(entry.get('type')), - unicode(entry.get('current_version')), - unicode(entry.get('current_version'))] - entries['Package'][entry.get('name')] = data + unicode(entry.get('%s_%s' % ('current', pdisp[entry.tag]))), + unicode(entry.get('%s_%s' % ('current', pdisp[entry.tag])))] + entries[entry.tag][entry.get('name')] = data for entry in xdata.find('.//Modified'): - print entry.tag, entry.get('name') - if entry.tag == 'Package': - if entry.get('name') in entries['Package']: - entries['Package'][entry.get('name')][0] = True + if entry.tag in pdisp: + if entry.get('name') in entries[entry.tag]: + entries[entry.tag][entry.get('name')][0] = True else: - data = [True, True, unicode(entry.get('type')), - unicode(entry.get('current_version')), - unicode(entry.get('version'))] + data = [False, False, unicode(entry.get('type')), + unicode(entry.get('%s_%s' % ('current', pdisp[entry.tag]))), + unicode(entry.get(pdisp[entry.tag]))] + entries[entry.tag][entry.get('name')] = data + else: + print entry.tag, entry.get('name') for entry in xdata.find('.//Extra'): - if entry.tag == 'Package': - edata = dict([('name', unicode(entry.get('name'))), + if entry.tag in pdisp: + tname = pdisp[entry.tag] + data = dict([('name', unicode(entry.get('name'))), ('type', unicode(entry.get('type'))), - ('version', unicode(entry.get('version')))]) - extra['Package'].append(edata) + (tname, unicode(entry.get(tname)))]) + else: + print "extra", entry.tag, entry.get('name') t2 = time.time() snap = Snapshot.from_data(self.session, metadata, entries, extra) self.session.save(snap) diff --git a/src/lib/Server/Snapshots/model.py b/src/lib/Server/Snapshots/model.py index b9dff0501..d6592bf6e 100644 --- a/src/lib/Server/Snapshots/model.py +++ b/src/lib/Server/Snapshots/model.py @@ -66,10 +66,10 @@ class Metadata(Base): def from_metadata(cls, mysession, mymetadata): client = Client.by_value(mysession, name=unicode(mymetadata.hostname)) m = cls(client=client) - for group in metadata.groups: + for group in mymetadata.groups: m.groups.append(Group.by_value(mysession, name=unicode(group))) - for connector in metadata.connectors: - data = getattr(metadata, connector) + for connector in mymetadata.connectors: + data = getattr(mymetadata, connector) if not isinstance(data, dict): continue for key, value in data.iteritems(): @@ -105,7 +105,7 @@ class PackageCorrespondence(Base): start = Package.by_value(mysession, name=unicode(name), type=ptype, version=s_vers) if s_vers != e_vers: - start = Package.by_value(mysession, name=unicode(name), type=ptype, + end = Package.by_value(mysession, name=unicode(name), type=ptype, version=e_vers) else: end = start @@ -115,7 +115,7 @@ package_snap = Table('package_snap', Base.metadata, Column('ppair_id', Integer, ForeignKey('package_pair.id')), Column('snapshot_id', Integer, ForeignKey('snapshot.id'))) -class Service(Base): +class Service(Base, Uniquer): __tablename__ = 'service' id = Column(Integer, primary_key=True) name = Column(Unicode(16)) @@ -132,6 +132,18 @@ class ServiceCorrespondence(Base): modified = Column(Boolean) correct = Column(Boolean) + @classmethod + def from_record(cls, mysession, name, record): + (mod, corr, ptype, s_status, e_status) = record + start = Service.by_value(mysession, name=unicode(name), type=ptype, + status=s_status) + if s_status != e_status: + end = Service.by_value(mysession, name=unicode(name), type=ptype, + status=e_status) + else: + end = start + return cls(start=start, end=end, modified=mod, correct=corr) + service_snap = Table('service_snap', Base.metadata, Column('spair_id', Integer, ForeignKey('service_pair.id')), Column('snapshot_id', Integer, ForeignKey('snapshot.id'))) @@ -209,5 +221,11 @@ class Snapshot(Base): for data in extra['Package']: extra_pkg = Package.by_value(session, **data) snap.extra_packages.append(extra_pkg) + for pkg, pdata in entries['Service'].iteritems(): + snap.services.append(\ + ServiceCorrespondence.from_record(session, pkg, pdata)) + for data in extra['Service']: + extra_svc = Service.by_value(session, **data) + snap.extra_services.append(extra_svc) return snap -- cgit v1.2.3-1-g7c22