-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathlogger.py
More file actions
52 lines (45 loc) · 1.84 KB
/
Copy pathlogger.py
File metadata and controls
52 lines (45 loc) · 1.84 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
import logging
class PortStateLogger(object):
def __init__(self, dp, ryudp, logname, influxdb):
self.dp = dp
self.ryudp = ryudp
self.logger = logging.getLogger(logname)
self.influxdb = influxdb
def update(self, rcv_time, msg):
reason = msg.reason
port_no = msg.desc.port_no
ofp = msg.datapath.ofproto
if reason == ofp.OFPPR_ADD:
self.logger.info("port added %s", port_no)
elif reason == ofp.OFPPR_DELETE:
self.logger.info("port deleted %s", port_no)
elif reason == ofp.OFPPR_MODIFY:
link_down = (msg.desc.state & ofp.OFPPS_LINK_DOWN)
if link_down:
self.logger.info("port deleted %s", port_no)
else:
self.logger.info("port added %s", port_no)
else:
self.logger.info("Illegal port state %s %s", port_no, reason)
class PortStateInfluxDBLogger(PortStateLogger):
def ship_points(self, points):
return self.influxdb.write_points(points=points, time_precision='s')
def update(self, rcv_time, msg):
super(PortStateInfluxDBLogger, self).update(rcv_time, msg)
reason = msg.reason
port_no = msg.desc.port_no
if port_no in self.dp.ports:
port_name = self.dp.ports[port_no].name
port_tags = {
"dp_name": self.dp.name,
"port_name": port_name,
}
points = [{
"measurement": "port_state_reason",
"tags": port_tags,
"time": int(rcv_time),
"fields": {"value": reason}}]
self.logger.warn("Port Status %s", points)
print "Port Status {0}".format(points)
if not self.ship_points(points):
self.logger.warning("error shipping port_state_reason points")