BOSWatch 3
Python Script to receive and decode German BOS Information with rtl_fm and multimon-NG
 
Loading...
Searching...
No Matches
plugin.mysql.BoswatchPlugin Class Reference

Description of the Plugin. More...

Public Member Functions

 __init__ (self, config)
 Do not change anything here!
 
 onLoad (self)
 Called by import of the plugin Remove if not implemented.
 
 setup (self)
 Called before alarm Remove if not implemented.
 
 fms (self, bwPacket)
 Called on FMS alarm.
 
 pocsag (self, bwPacket)
 Called on POCSAG alarm.
 
 zvei (self, bwPacket)
 Called on ZVEI alarm.
 
 msg (self, bwPacket)
 Called on MSG packet.
 
 teardown (self)
 Called after alarm Remove if not implemented.
 
 onUnload (self)
 Called by destruction of the plugin Remove if not implemented.
 
- Public Member Functions inherited from plugin.pluginBase.PluginBase
 parseWildcards (self, msg)
 Return the message with parsed wildcards.
 

Data Fields

 sqlInserts
 
 connection
 
 cursor
 
- Data Fields inherited from plugin.pluginBase.PluginBase
 config
 

Additional Inherited Members

- Protected Member Functions inherited from plugin.pluginBase.PluginBase
 _cleanup (self)
 Cleanup routine calls onUnload() directly.
 
 _run (self, bwPacket)
 start an complete running turn of an plugin.
 
 _getStatistics (self)
 Returns statistical information's from last plugin run.
 
- Protected Attributes inherited from plugin.pluginBase.PluginBase
 _pluginName
 
 _bwPacket
 
 _sumTime
 
 _cumTime
 
 _setupTime
 
 _alarmTime
 
 _teardownTime
 
 _runCount
 
 _setupErrorCount
 
 _alarmErrorCount
 
 _teardownErrorCount
 
- Static Protected Attributes inherited from plugin.pluginBase.PluginBase
list _pluginsActive = []
 

Detailed Description

Description of the Plugin.

Constructor & Destructor Documentation

◆ __init__()

plugin.mysql.BoswatchPlugin.__init__ (   self,
  config 
)

Do not change anything here!

Reimplemented from plugin.pluginBase.PluginBase.

33 def __init__(self, config):
34 r"""!Do not change anything here!"""
35 super().__init__(__name__, config) # you can access the config class on 'self.config'
36

Member Function Documentation

◆ onLoad()

plugin.mysql.BoswatchPlugin.onLoad (   self)

Called by import of the plugin Remove if not implemented.

Reimplemented from plugin.pluginBase.PluginBase.

37 def onLoad(self):
38 r"""!Called by import of the plugin
39 Remove if not implemented"""
40 self.sqlInserts = {
41 "pocsag": "INSERT INTO boswatch (packetTimestamp, packetMode, pocsag_ric, pocsag_subric, pocsag_subricText, pocsag_message, pocsag_bitrate, serverName, serverVersion, serverBuildDate, serverBranch, clientName, clientIP, clientVersion, clientBuildDate, clientBranch, inputSource, frequency) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
42 "zvei": "INSERT INTO boswatch (packetTimestamp, packetMode, zvei_tone, serverName, serverVersion, serverBuildDate, serverBranch, clientName, clientIP, clientVersion, clientBuildDate, clientBranch, inputSource, frequency) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
43 "fms": "INSERT INTO boswatch (packetTimestamp, packetMode, fms_fms, fms_service, fms_country, fms_location, fms_vehicle, fms_status, fms_direction, fms_directionText, fms_tacticalInfo, serverName, serverVersion, serverBuildDate, serverBranch, clientName, clientIP, clientVersion, clientBuildDate, clientBranch, inputSource, frequency) VALUE (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
44 "msg": "INSERT INTO boswatch (packetTimestamp, packetMode, serverName, serverVersion, serverBuildDate, serverBranch, clientName, clientIP, clientVersion, clientBuildDate, clientBranch, inputSource, frequency) VALUE (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
45 }
46
47 self.connection = mysql.connector.connect(
48 host=self.config.get("host"),
49 user=self.config.get("user"),
50 password=self.config.get("password"),
51 database=self.config.get("database"),
52 )
53
54 self.cursor = self.connection.cursor()
55 self.cursor.execute("SHOW TABLES LIKE 'boswatch'")
56
57 if self.cursor.fetchone() is None:
58 with open('init_db.sql') as f:
59 for stmnt in f.read().split(';'):
60 # Change: Remove whitespace and check for empty strings
61 clean_stmnt = stmnt.strip()
62 if clean_stmnt: # only if the string is not empty
63 self.cursor.execute(clean_stmnt)
64 self.connection.commit()
65
66 self.cursor.close()
67

◆ setup()

plugin.mysql.BoswatchPlugin.setup (   self)

Called before alarm Remove if not implemented.

Reimplemented from plugin.pluginBase.PluginBase.

68 def setup(self):
69 r"""!Called before alarm
70 Remove if not implemented"""
71 try:
72 self.connection.ping(reconnect=True, attempts=3, delay=2)
73 except mysql.connector.Error:
74 logging.warning("Connection was down, trying to reconnect...")
75 self.onLoad()
76
77 self.cursor = self.connection.cursor()
78

◆ fms()

plugin.mysql.BoswatchPlugin.fms (   self,
  bwPacket 
)

Called on FMS alarm.

Parameters
bwPacketbwPacket instance Remove if not implemented

Reimplemented from plugin.pluginBase.PluginBase.

79 def fms(self, bwPacket):
80 r"""!Called on FMS alarm
81
82 @param bwPacket: bwPacket instance
83 Remove if not implemented"""
84 val = (
85 datetime.fromtimestamp(float(bwPacket.get("timestamp"))),
86 bwPacket.get("mode"),
87 bwPacket.get("fms"),
88 bwPacket.get("service"),
89 bwPacket.get("country"),
90 bwPacket.get("location"),
91 bwPacket.get("vehicle"),
92 bwPacket.get("status"),
93 bwPacket.get("direction"),
94 bwPacket.get("directionText"),
95 bwPacket.get("tacticalInfo"),
96 bwPacket.get("serverName"),
97 bwPacket.get("serverVersion"),
98 bwPacket.get("serverBuildDate"),
99 bwPacket.get("serverBranch"),
100 bwPacket.get("clientName"),
101 bwPacket.get("clientIP"),
102 bwPacket.get("clientVersion"),
103 bwPacket.get("clientBuildDate"),
104 bwPacket.get("clientBranch"),
105 bwPacket.get("inputSource"),
106 bwPacket.get("frequency")
107 )
108 self.cursor.execute(self.sqlInserts.get("fms"), val)
109

◆ pocsag()

plugin.mysql.BoswatchPlugin.pocsag (   self,
  bwPacket 
)

Called on POCSAG alarm.

Parameters
bwPacketbwPacket instance Remove if not implemented

Reimplemented from plugin.pluginBase.PluginBase.

110 def pocsag(self, bwPacket):
111 r"""!Called on POCSAG alarm
112
113 @param bwPacket: bwPacket instance
114 Remove if not implemented"""
115 val = (
116 datetime.fromtimestamp(float(bwPacket.get("timestamp"))),
117 bwPacket.get("mode"),
118 bwPacket.get("ric"),
119 bwPacket.get("subric"),
120 bwPacket.get("subricText"),
121 bwPacket.get("message"),
122 bwPacket.get("bitrate"),
123 bwPacket.get("serverName"),
124 bwPacket.get("serverVersion"),
125 bwPacket.get("serverBuildDate"),
126 bwPacket.get("serverBranch"),
127 bwPacket.get("clientName"),
128 bwPacket.get("clientIP"),
129 bwPacket.get("clientVersion"),
130 bwPacket.get("clientBuildDate"),
131 bwPacket.get("clientBranch"),
132 bwPacket.get("inputSource"),
133 bwPacket.get("frequency")
134 )
135 self.cursor.execute(self.sqlInserts.get("pocsag"), val)
136

◆ zvei()

plugin.mysql.BoswatchPlugin.zvei (   self,
  bwPacket 
)

Called on ZVEI alarm.

Parameters
bwPacketbwPacket instance Remove if not implemented

Reimplemented from plugin.pluginBase.PluginBase.

137 def zvei(self, bwPacket):
138 r"""!Called on ZVEI alarm
139
140 @param bwPacket: bwPacket instance
141 Remove if not implemented"""
142 val = (
143 datetime.fromtimestamp(float(bwPacket.get("timestamp"))),
144 bwPacket.get("mode"),
145 bwPacket.get("tone"),
146 bwPacket.get("serverName"),
147 bwPacket.get("serverVersion"),
148 bwPacket.get("serverBuildDate"),
149 bwPacket.get("serverBranch"),
150 bwPacket.get("clientName"),
151 bwPacket.get("clientIP"),
152 bwPacket.get("clientVersion"),
153 bwPacket.get("clientBuildDate"),
154 bwPacket.get("clientBranch"),
155 bwPacket.get("inputSource"),
156 bwPacket.get("frequency")
157 )
158 self.cursor.execute(self.sqlInserts.get("pocsag"), val)
159

◆ msg()

plugin.mysql.BoswatchPlugin.msg (   self,
  bwPacket 
)

Called on MSG packet.

Parameters
bwPacketbwPacket instance Remove if not implemented

Reimplemented from plugin.pluginBase.PluginBase.

160 def msg(self, bwPacket):
161 r"""!Called on MSG packet
162
163 @param bwPacket: bwPacket instance
164 Remove if not implemented"""
165 val = (
166 datetime.fromtimestamp(float(bwPacket.get("timestamp"))),
167 bwPacket.get("mode"),
168 bwPacket.get("serverName"),
169 bwPacket.get("serverVersion"),
170 bwPacket.get("serverBuildDate"),
171 bwPacket.get("serverBranch"),
172 bwPacket.get("clientName"),
173 bwPacket.get("clientIP"),
174 bwPacket.get("clientVersion"),
175 bwPacket.get("clientBuildDate"),
176 bwPacket.get("clientBranch"),
177 bwPacket.get("inputSource"),
178 bwPacket.get("frequency")
179 )
180 self.cursor.execute(self.sqlInserts.get("msg"), val)
181

◆ teardown()

plugin.mysql.BoswatchPlugin.teardown (   self)

Called after alarm Remove if not implemented.

Reimplemented from plugin.pluginBase.PluginBase.

182 def teardown(self):
183 r"""!Called after alarm
184 Remove if not implemented"""
185 self.connection.commit()
186 self.cursor.close()
187

◆ onUnload()

plugin.mysql.BoswatchPlugin.onUnload (   self)

Called by destruction of the plugin Remove if not implemented.

Reimplemented from plugin.pluginBase.PluginBase.

188 def onUnload(self):
189 r"""!Called by destruction of the plugin
190 Remove if not implemented"""
191 self.connection.close()

Field Documentation

◆ sqlInserts

plugin.mysql.BoswatchPlugin.sqlInserts

◆ connection

plugin.mysql.BoswatchPlugin.connection

◆ cursor

plugin.mysql.BoswatchPlugin.cursor