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
7 from elixir.ext.versioned import *
8 from pcucontrol import reboot
10 from monitor.database.dborm import mon_metadata, mon_session
11 __metadata__ = mon_metadata
12 __session__ = mon_session
15 class FindbadNodeRecord(Entity):
17 def get_all_latest(cls):
18 return cls.query.all()
21 def get_latest_by(cls, **kwargs):
22 return cls.query.filter_by(**kwargs).first()
25 def get_latest_by(cls, **kwargs):
26 return cls.query.filter_by(**kwargs).first()
29 def get_latest_n_by(cls, n=3, **kwargs):
30 return cls.query.filter_by(**kwargs)
33 date_checked = Field(DateTime,default=datetime.now)
34 round = Field(Int,default=0)
35 hostname = Field(String,primary_key=True,default=None)
36 loginbase = Field(String)
39 kernel_version = Field(String,default=None)
40 bootcd_version = Field(String,default=None)
41 boot_server = Field(String,default=None)
42 install_date = Field(String,default=None)
43 nm_status = Field(String,default=None)
44 fs_status = Field(String,default=None)
45 iptables_status = Field(String,default=None)
46 dns_status = Field(String,default=None)
47 external_dns_status = Field(Boolean,default=True)
48 uptime = Field(String,default=None)
49 rpms = Field(String,default=None)
50 princeton_comon_dir = Field(Boolean,default=False)
51 princeton_comon_running = Field(Boolean,default=False)
52 princeton_comon_procs = Field(Int,default=None)
55 plc_node_stats = Field(PickleType,default=None)
56 plc_site_stats = Field(PickleType,default=None)
57 plc_pcuid = Field(Int,default=None)
58 comon_stats = Field(PickleType,default=None)
59 port_status = Field(PickleType,default=None)
60 firewall = Field(Boolean,default=False)
61 ssh_portused = Field(Int,default=22)
62 ssh_status = Field(Boolean,default=False)
63 ssh_error = Field(String,default=None) # set if ssh_access == False
64 traceroute = Field(String,default=None)
65 ping_status = Field(Boolean,default=False)
68 observed_category = Field(String,default=None)
69 observed_status = Field(String,default=None)
71 acts_as_versioned(ignore=['date_checked'])
72 # NOTE: this is the child relation
73 #action = ManyToOne('ActionRecord', required=False)
75 class FindbadPCURecord(Entity):
77 def get_all_latest(cls):
78 return cls.query.all()
81 def get_latest_by(cls, **kwargs):
82 return cls.query.filter_by(**kwargs).first()
85 if self.plc_pcu_stats['hostname'] is not None and self.plc_pcu_stats['hostname'] is not "":
86 return self.plc_pcu_stats['hostname']
87 elif self.plc_pcu_stats['ip'] is not None and self.plc_pcu_stats['ip'] is not "":
88 return self.plc_pcu_stats['ip']
92 def format_ports(self):
96 supported_ports=reboot.model_to_object(self.plc_pcu_stats['model']).supported_ports
97 data = self.port_status.copy()
99 if data and len(data.keys()) > 0 :
100 for port in supported_ports:
102 state = data[str(port)]
106 if state == "filtered":
109 retval.append( (port, state) )
112 retval = [( "Closed/Filtered", "" )]
114 if filtered_length == len(supported_ports):
115 retval = [( "All Filtered", "" )]
119 def format_pcu_shortstatus(self):
121 if self.reboot_trial_status:
122 if self.reboot_trial_status == str(0):
124 elif self.reboot_trial_status == "NetDown" or self.reboot_trial_status == "Not_Run":
125 status = self.reboot_trial_status
131 def test_is_ok(self):
132 if self.reboot_trial_status == str(0):
137 def pcu_errors(self):
139 message += "\tModel: %s\n" % self.plc_pcu_stats['model']
140 message += "\tMissing Fields: %s\n" % ( self.entry_complete == "" and "None missing" or self.entry_complete )
141 message += "\tDNS Status: %s\n" % self.dns_status
142 message += "\tPort Status: %s\n" % self.format_ports()
143 message += "\tTest Results: %s\n" % self.format_pcu_shortstatus()
147 date_checked = Field(DateTime)
148 round = Field(Int,default=0)
149 plc_pcuid = Field(Int)
152 plc_pcu_stats = Field(PickleType,default=None)
153 dns_status = Field(String)
154 port_status = Field(PickleType)
155 entry_complete = Field(String)
159 reboot_trial_status = Field(String)
161 acts_as_versioned(ignore=['date_checked'])