-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmynotify.py
More file actions
116 lines (91 loc) · 3.58 KB
/
Copy pathmynotify.py
File metadata and controls
116 lines (91 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python
#------------------------------------------------------------
# FILE: mynotify.py
# PURPOSE:
#
# AUTHOR: Jason G Yates
# DATE: 25-Apr-2017
# MODIFICATIONS:
#------------------------------------------------------------
import datetime, time, sys, signal, os, threading
import myclient, mylog
#---------- GenNotify::init--- ------------------------------------------
class GenNotify:
def __init__(self,
host="127.0.0.1",
port=9082,
log = None,
onready = None,
onexercise = None,
onrun = None,
onrunmanual = None,
onalarm = None,
onservice = None,
onoff = None,
onmanual = None):
self.AccessLock = threading.Lock()
self.ThreadList = []
self.LastEvent = None
self.Events = {} # Dict for handling events
if log != None:
self.log = log
else:
# log errors in this module to a file
self.log = mylog.SetupLogger("client", "/var/log/myclient.log")
# init event callbacks
if onready != None:
self.Events["READY"] = onready
if onexercise != None:
self.Events["EXERCISING"] = onexercise
if onrun != None:
self.Events["RUNNING"] = onrun
if onrunmanual != None:
self.Events["RUNNING-MANUAL"] = onrunmanual
if onalarm != None:
self.Events["ALARM"] = onalarm
if onservice != None:
self.Events["SERVICEDUE"] = onservice
if onoff != None:
self.Events["OFF"] = onoff
if onmanual != None:
self.Events["MANUAL"] = onmanual
self.Generator = myclient.ClientInterface(host = host, log = log)
# start thread to accept incoming sockets for nagios heartbeat
self.StartThread(self.MainPollingThread, Name = "PollingThread")
# ---------- GenNotify::StartThread------------------
def StartThread(self, ThreadFunction, Name = None):
ThreadObj = threading.Thread(target=ThreadFunction, name = Name)
ThreadObj.daemon = True
ThreadObj.start() # start thread
self.ThreadList.append(ThreadObj)
# ---------- GenNotify::MainPollingThread------------------
def MainPollingThread(self):
while True:
with self.AccessLock:
data = self.Generator.ProcessMonitorCommand("generator: getbase")
if self.LastEvent == data:
time.sleep(3)
continue
if self.LastEvent != None:
print "Last : <" + self.LastEvent + ">, New : <" + data + ">"
self.CallEventHandler(False) # end last event
self.LastEvent = data
self.CallEventHandler(True) # begin new event
time.sleep(3)
#---------- GenNotify::CallEventHandler ---------------------------------
def CallEventHandler(self, Status):
EventCallback = self.Events.get(self.LastEvent, None)
# Event has ended
if EventCallback != None:
EventCallback(Status)
#---------- GenNotify::SendCommand ---------------------------------
def SendCommand(self, Command):
if len(Command) == 0:
return "Invalid Command"
with self.AccessLock:
data = self.Generator.ProcessMonitorCommand(Command)
return data
#---------- GenNotify::Close ---------------------------------
def Close(self):
self.Generator.Close()
return False