da7775aea049766ad7640b20be36b58dc0705d9d
[monitor.git] / monitor / database / info / findbad.py
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
5 import elixir
6 import traceback
7
8 from monitor.database.dborm import mon_metadata, mon_session
9 __metadata__ = mon_metadata
10 __session__  = mon_session
11
12
13 class FindbadNodeRecordSync(Entity):
14         hostname = Field(String(250),primary_key=True) #,alternateMethodName='by_hostname')
15         round    = Field(Int,default=0)
16         
17 class FindbadPCURecordSync(Entity):
18         plc_pcuid = Field(Int,primary_key=True) #,alternateMethodName='by_pcuid')
19         round     = Field(Int,default=0)
20
21 class FindbadNodeRecord(Entity):
22         @classmethod
23         def get_all_latest(cls):
24                 fbsync = FindbadNodeRecordSync.get_by(hostname="global")
25                 return cls.query.filter_by(round=fbsync.round)
26
27         @classmethod
28         def get_latest_by(cls, **kwargs):
29                 fbsync = FindbadNodeRecordSync.get_by(hostname="global")
30                 kwargs['round'] = fbsync.round
31                 return cls.query.filter_by(**kwargs)
32
33         @classmethod
34         def get_latest_n_by(cls, n=3, **kwargs):
35                 fbsync = FindbadNodeRecordSync.get_by(hostname="global")
36                 kwargs['round'] = fbsync.round
37                 ret = []
38                 for i in range(0,n):
39                         kwargs['round'] = kwargs['round'] - i
40                         f = cls.query.filter_by(**kwargs).first()
41                         if f:
42                                 ret.append(f)
43                 return ret
44
45 # ACCOUNTING
46         date_checked = Field(DateTime,default=datetime.now)
47         round = Field(Int,default=0)
48         hostname = Field(String,default=None)
49         loginbase = Field(String)
50
51 # INTERNAL
52         kernel_version = Field(String,default=None)
53         bootcd_version = Field(String,default=None)
54         nm_status = Field(String,default=None)
55         fs_status = Field(String,default=None)
56         dns_status = Field(String,default=None)
57         princeton_comon_dir = Field(Boolean,default=False)
58         princeton_comon_running = Field(Boolean,default=False)
59         princeton_comon_procs = Field(Int,default=None)
60
61 # EXTERNAL
62         plc_node_stats = Field(PickleType,default=None)
63         plc_site_stats = Field(PickleType,default=None)
64         plc_pcuid      = Field(Int,default=None)
65         comon_stats    = Field(PickleType,default=None)
66         port_status    = Field(PickleType,default=None)
67         ssh_portused = Field(Int,default=22)
68         ssh_status = Field(Boolean,default=False)
69         ssh_error = Field(String,default=None)  # set if ssh_access == False
70         ping_status = Field(Boolean,default=False)
71
72 # INFERRED
73         observed_category = Field(String,default=None)
74         observed_status = Field(String,default=None)
75
76         # NOTE: this is the child relation
77         action = ManyToOne('ActionRecord', required=False)
78
79 class FindbadPCURecord(Entity):
80         @classmethod
81         def get_all_latest(cls):
82                 fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0)
83                 print "round: ", fbsync.round
84                 return cls.query.filter_by(round=fbsync.round)
85
86         @classmethod
87         def get_latest_by(cls, **kwargs):
88                 fbsync = FindbadPCURecordSync.get_by(plc_pcuid=0)
89                 kwargs['round'] = fbsync.round
90                 return cls.query.filter_by(**kwargs)
91 # ACCOUNTING
92         date_checked = Field(DateTime)
93         round = Field(Int,default=0)
94         plc_pcuid = Field(Int) #alternateID=True,alternateMethodName='by_pcuid')
95
96 # EXTERNAL
97         plc_pcu_stats = Field(PickleType,default=None)
98         dns_status = Field(String)
99         port_status = Field(PickleType)
100         entry_complete = Field(String)
101
102 # INTERNAL
103 # INFERRED
104         reboot_trial_status = Field(String)