fix a bug with pause_penalty.
[monitor.git] / monitor / database / info / history.py
1 from elixir import Entity, Field, OneToMany, ManyToOne, ManyToMany
2 from elixir import options_defaults, using_options, setup_all
3 from elixir import String, Integer as Int, DateTime, Boolean
4 from elixir.ext.versioned import *
5
6 from datetime import datetime,timedelta
7
8 from monitor.database.dborm import mon_metadata, mon_session
9 __metadata__ = mon_metadata
10 __session__  = mon_session
11
12 # your data model
13 class HistoryNodeRecord(Entity):
14         hostname = Field(String(250),primary_key=True)
15         last_checked = Field(DateTime,default=datetime.now)
16         last_changed = Field(DateTime,default=datetime.now)
17         status = Field(String,default="unknown")
18         haspcu = Field(Boolean,default=False)
19         firewall = Field(Boolean,default=False)
20         plc_nodeid = Field(Int,default=1)
21         plc_siteid = Field(Int,default=1)
22
23         acts_as_versioned(ignore=['last_changed', 'last_checked'])
24
25         @classmethod
26         def by_hostname(cls, hostname):
27                 return cls.query.filter_by(hostname=hostname).first()
28
29 class HistoryPCURecord(Entity):
30         plc_pcuid = Field(Int,primary_key=True)
31
32         last_checked = Field(DateTime,default=datetime.now)
33         last_changed = Field(DateTime,default=datetime.now)
34         status = Field(String,default="unknown")
35
36         last_valid = Field(DateTime,default=None)
37         valid  = Field(String,default="unknown")
38
39         acts_as_versioned(ignore=['last_changed', 'last_checked'])
40
41         @classmethod
42         def by_pcuid(cls, pcuid):
43                 return cls.query.filter_by(pcuid=pcuid).first()
44
45
46 class HistorySiteRecord(Entity):
47         loginbase = Field(String(250),primary_key=True)
48         plc_siteid = Field(Int,default=1)
49
50         last_checked = Field(DateTime,default=datetime.now)
51         last_changed = Field(DateTime,default=datetime.now)
52
53         nodes_total = Field(Int,default=0)
54         nodes_up = Field(Int,default=0)
55         slices_total = Field(Int,default=0)
56         slices_used = Field(Int,default=0)
57
58         # all nodes offline and never-contact.
59         new = Field(Boolean,default=False)
60
61         enabled = Field(Boolean,default=False)
62
63         status = Field(String,default="unknown")
64
65         message_id = Field(Int, default=0)
66         message_status = Field(String, default=None)
67         message_queue = Field(String, default=None) 
68         message_created = Field(DateTime, default=None)
69         #message_last_reply = Field(DateTime, default=None)
70
71         penalty_level   = Field(Int, default=0)
72         penalty_applied = Field(Boolean, default=False)
73         penalty_pause   = Field(Boolean, default=False)
74         penalty_pause_time   = Field(DateTime, default=None)
75
76         acts_as_versioned(ignore=['last_changed', 'last_checked', 'message_status', 'penalty_pause_time'])
77
78         @classmethod
79         def by_loginbase(cls, loginbase):
80                 return cls.query.filter_by(loginbase=loginbase).first()
81