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