1 from elixir import Entity, Field, OneToMany, ManyToOne, ManyToMany
2 from elixir import options_defaults, using_options, setup_all, belongs_to
3 from elixir import String, Integer as Int, DateTime, PickleType, Boolean
4 from datetime import datetime,timedelta
8 from monitor.database.dborm import mon_metadata, mon_session
9 __metadata__ = mon_metadata
10 __session__ = mon_session
13 class FindbadNodeRecordSync(Entity):
14 hostname = Field(String(250),primary_key=True) #,alternateMethodName='by_hostname')
15 round = Field(Int,default=0)
17 class FindbadPCURecordSync(Entity):
18 plc_pcuid = Field(Int,primary_key=True) #,alternateMethodName='by_pcuid')
19 round = Field(Int,default=0)
21 class FindbadNodeRecord(Entity):
23 def get_all_latest(cls):
24 fbsync = FindbadNodeRecordSync.get_by(hostname="global")
26 return cls.query.filter_by(round=fbsync.round)
31 def get_latest_by(cls, **kwargs):
32 fbsync = FindbadNodeRecordSync.get_by(hostname="global")
34 kwargs['round'] = fbsync.round
35 return cls.query.filter_by(**kwargs).order_by(FindbadNodeRecord.date_checked.desc())
40 def get_latest_n_by(cls, n=3, **kwargs):
41 fbsync = FindbadNodeRecordSync.get_by(hostname="global")
42 kwargs['round'] = fbsync.round
45 kwargs['round'] = kwargs['round'] - i
46 f = cls.query.filter_by(**kwargs).first()
52 date_checked = Field(DateTime,default=datetime.now)
53 round = Field(Int,default=0)
54 hostname = Field(String,default=None)
55 loginbase = Field(String)
58 kernel_version = Field(String,default=None)
59 bootcd_version = Field(String,default=None)
60 nm_status = Field(String,default=None)
61 fs_status = Field(String,default=None)
62 dns_status = Field(String,default=None)
63 princeton_comon_dir = Field(Boolean,default=False)
64 princeton_comon_running = Field(Boolean,default=False)
65 princeton_comon_procs = Field(Int,default=None)
68 plc_node_stats = Field(PickleType,default=None)
69 plc_site_stats = Field(PickleType,default=None)
70 plc_pcuid = Field(Int,default=None)
71 comon_stats = Field(PickleType,default=None)
72 port_status = Field(PickleType,default=None)
73 ssh_portused = Field(Int,default=22)
74 ssh_status = Field(Boolean,default=False)
75 ssh_error = Field(String,default=None) # set if ssh_access == False
76 ping_status = Field(Boolean,default=False)
79 observed_category = Field(String,default=None)
80 observed_status = Field(String,default=None)
82 # NOTE: this is the child relation
83 action = ManyToOne('ActionRecord', required=False)
85 class FindbadPCURecord(Entity):
87 def get_all_latest(cls):
88 fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0)
90 return cls.query.filter_by(round=fbsync.round)
95 def get_latest_by(cls, **kwargs):
96 fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0)
97 kwargs['round'] = fbsync.round
98 return cls.query.filter_by(**kwargs).order_by(FindbadPCURecord.date_checked.desc())
100 date_checked = Field(DateTime)
101 round = Field(Int,default=0)
102 plc_pcuid = Field(Int) #alternateID=True,alternateMethodName='by_pcuid')
105 plc_pcu_stats = Field(PickleType,default=None)
106 dns_status = Field(String)
107 port_status = Field(PickleType)
108 entry_complete = Field(String)
112 reboot_trial_status = Field(String)