summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Desai <desai@mcs.anl.gov>2009-03-03 03:54:16 +0000
committerNarayan Desai <desai@mcs.anl.gov>2009-03-03 03:54:16 +0000
commit7b7ed9879cd764784144efd73dd298fe1526e771 (patch)
tree9b29b1e66b14eca0a875f8b1c90fc1181e6c0673
parent0f0039aff8f6d764ab9fb26da107d5b284329d3c (diff)
downloadbcfg2-7b7ed9879cd764784144efd73dd298fe1526e771.tar.gz
bcfg2-7b7ed9879cd764784144efd73dd298fe1526e771.tar.bz2
bcfg2-7b7ed9879cd764784144efd73dd298fe1526e771.zip
Get Snapshots working for Service entries
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5095 ce84e21b-d406-0410-9b95-82705330c041
-rw-r--r--src/lib/Server/Plugins/Snapshots.py42
-rw-r--r--src/lib/Server/Snapshots/model.py28
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