X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=monitor%2Fdatabase%2Finfo%2Ffindbad.py;h=dbe0eca4d1d3918a5ffbce9024ef3ea7bf42d428;hb=035a846d8617889c01cae12bc6d64eb7c48b64bd;hp=e58ef3a4f2196ea48cc174d8b8d10e631df6f8ed;hpb=3f501b69f366b8b6c62d35d6aea4ebf5fa0f1192;p=monitor.git diff --git a/monitor/database/info/findbad.py b/monitor/database/info/findbad.py index e58ef3a..dbe0eca 100644 --- a/monitor/database/info/findbad.py +++ b/monitor/database/info/findbad.py @@ -4,54 +4,34 @@ from elixir import String, Integer as Int, DateTime, PickleType, Boolean from datetime import datetime,timedelta import elixir import traceback +from elixir.ext.versioned import * from monitor.database.dborm import mon_metadata, mon_session __metadata__ = mon_metadata __session__ = mon_session -class FindbadNodeRecordSync(Entity): - hostname = Field(String(250),primary_key=True) #,alternateMethodName='by_hostname') - round = Field(Int,default=0) - -class FindbadPCURecordSync(Entity): - plc_pcuid = Field(Int,primary_key=True) #,alternateMethodName='by_pcuid') - round = Field(Int,default=0) - class FindbadNodeRecord(Entity): @classmethod def get_all_latest(cls): - fbsync = FindbadNodeRecordSync.get_by(hostname="global") - if fbsync: - return cls.query.filter_by(round=fbsync.round) - else: - return [] + return cls.query.all() + + @classmethod + def get_latest_by(cls, **kwargs): + return cls.query.filter_by(**kwargs).first() @classmethod def get_latest_by(cls, **kwargs): - fbsync = FindbadNodeRecordSync.get_by(hostname="global") - if fbsync: - kwargs['round'] = fbsync.round - return cls.query.filter_by(**kwargs).order_by(FindbadNodeRecord.date_checked.desc()) - else: - return [] + return cls.query.filter_by(**kwargs).first() @classmethod def get_latest_n_by(cls, n=3, **kwargs): - fbsync = FindbadNodeRecordSync.get_by(hostname="global") - kwargs['round'] = fbsync.round - ret = [] - for i in range(0,n): - kwargs['round'] = kwargs['round'] - i - f = cls.query.filter_by(**kwargs).first() - if f: - ret.append(f) - return ret + return cls.query.filter_by(**kwargs) # ACCOUNTING date_checked = Field(DateTime,default=datetime.now) round = Field(Int,default=0) - hostname = Field(String,default=None) + hostname = Field(String,primary_key=True,default=None) loginbase = Field(String) # INTERNAL @@ -79,27 +59,23 @@ class FindbadNodeRecord(Entity): observed_category = Field(String,default=None) observed_status = Field(String,default=None) + acts_as_versioned(ignore=['date_checked']) # NOTE: this is the child relation - action = ManyToOne('ActionRecord', required=False) + #action = ManyToOne('ActionRecord', required=False) class FindbadPCURecord(Entity): @classmethod def get_all_latest(cls): - fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0) - if fbsync: - return cls.query.filter_by(round=fbsync.round) - else: - return [] + return cls.query.all() @classmethod def get_latest_by(cls, **kwargs): - fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0) - kwargs['round'] = fbsync.round - return cls.query.filter_by(**kwargs).order_by(FindbadPCURecord.date_checked.desc()) + return cls.query.filter_by(**kwargs).first() + # ACCOUNTING date_checked = Field(DateTime) round = Field(Int,default=0) - plc_pcuid = Field(Int) #alternateID=True,alternateMethodName='by_pcuid') + plc_pcuid = Field(Int) # EXTERNAL plc_pcu_stats = Field(PickleType,default=None) @@ -110,3 +86,5 @@ class FindbadPCURecord(Entity): # INTERNAL # INFERRED reboot_trial_status = Field(String) + + acts_as_versioned(ignore=['date_checked'])