class rrd: def __init__( self , databaseDirectory , imagePath , displayTimeGlobal = "7d" , displayTimeGlobalMonth = "30d" , displayTimeGlobalYear = "356d" , displayTimeGlobalDay = "1d" , displayTimeNode = "1d" ): self.dbPath = databaseDirectory self.globalDb = GlobalRRD(self.dbPath) self.imagePath = imagePath self.displayTimeGlobal = displayTimeGlobal self.displayTimeGlobalMonth = displayTimeGlobalMonth self.displayTimeGlobalYear = displayTimeGlobalYear self.displayTimeGlobalDay = displayTimeGlobalDay self.displayTimeNode = displayTimeNode self.currentTimeInt = (int(time.time())/60)*60 self.currentTime = str(self.currentTimeInt) try: os.stat(self.imagePath) except: os.mkdir(self.imagePath) def update_database(self,db): nodes = db.get_nodes() clientCount = sum(map(lambda d: d.clientcount, nodes)) curtime = time.time() - 60 self.globalDb.update(len(list(filter(lambda x: x.lastseen >= curtime, nodes))), clientCount) for node in nodes: rrd = NodeRRD( os.path.join(self.dbPath, str(node.id).replace(':', '') + '.rrd'), node ) rrd.update() def update_images(self): """ Creates an image for every rrd file in the database directory. """ self.globalDb.graph(os.path.join(self.imagePath, "globalGraph.png"), self.displayTimeGlobal) self.globalDb.graph(os.path.join(self.imagePath, "globalGraphMonth.png"), self.displayTimeGlobalMonth) self.globalDb.graph(os.path.join(self.imagePath, "globalGraphYear.png"), self.displayTimeGlobalYear) self.globalDb.graph(os.path.join(self.imagePath, "globalGraphDay.png"), self.displayTimeGlobalDay) nodeDbFiles = os.listdir(self.dbPath) for fileName in nodeDbFiles: if not os.path.isfile(os.path.join(self.dbPath, fileName)): continue nodeName = os.path.basename(fileName).split('.') if nodeName[1] == 'rrd' and not nodeName[0] == "nodes": rrd = NodeRRD(os.path.join(self.dbPath, fileName)) rrd.graph(self.imagePath, self.displayTimeNode)
class rrd: def __init__( self , databaseDirectory , imagePath , displayTimeGlobal = "7d" , displayTimeNode = "1d" ): self.dbPath = databaseDirectory self.globalDb = GlobalRRD(self.dbPath) self.imagePath = imagePath self.displayTimeGlobal = displayTimeGlobal self.displayTimeNode = displayTimeNode self.currentTimeInt = (int(time.time())/60)*60 self.currentTime = str(self.currentTimeInt) try: os.stat(self.imagePath) except: os.mkdir(self.imagePath) def update_database(self,db): nodes = db.get_nodes() clientCount = sum(map(lambda d: d.clientcount, nodes)) curtime = time.time() - 60 self.globalDb.update(len(list(filter(lambda x: x.lastseen >= curtime, nodes))), clientCount) for node in nodes: rrd = NodeRRD( os.path.join(self.dbPath, str(node.id).replace(':', '') + '.rrd'), node ) rrd.update() def update_images(self): """ Creates an image for every rrd file in the database directory. """ self.globalDb.graph(os.path.join(self.imagePath, "globalGraph.png"), self.displayTimeGlobal) nodeDbFiles = os.listdir(self.dbPath) for fileName in nodeDbFiles: if not os.path.isfile(os.path.join(self.dbPath, fileName)): continue nodeName = os.path.basename(fileName).split('.') if nodeName[1] == 'rrd' and not nodeName[0] == "nodes": rrd = NodeRRD(os.path.join(self.dbPath, fileName)) rrd.graph(self.imagePath, self.displayTimeNode)
class rrd: def __init__( self , databaseDirectory , imagePath , displayTimeGlobal = "7d" , displayTimeNode = "1d" ): self.dbPath = databaseDirectory self.globalDb = GlobalRRD(self.dbPath) self.imagePath = imagePath self.displayTimeGlobal = displayTimeGlobal self.displayTimeNode = displayTimeNode self.currentTimeInt = (int(time.time())/60)*60 self.currentTime = str(self.currentTimeInt) try: os.stat(self.imagePath) except: os.mkdir(self.imagePath) def update_database(self,db): #nodes = db.get_nodes() onlinenodes = [x for x in db.get_nodes() if x.flags['online']] clientCount = sum(map(lambda d: d.clientcount, onlinenodes)) self.globalDb.update(len(onlinenodes), clientCount) for node in onlinenodes: rrd = NodeRRD( os.path.join(self.dbPath, str(node.id).replace(':', '') + '.rrd'), node ) rrd.update() def update_images(self): """ Creates an image for every rrd file in the database directory. """ self.globalDb.graph(os.path.join(self.imagePath, "globalGraph.png"), self.displayTimeGlobal) nodeDbFiles = os.listdir(self.dbPath) for fileName in nodeDbFiles: if not os.path.isfile(os.path.join(self.dbPath, fileName)): continue nodeName = os.path.basename(fileName).split('.') if nodeName[1] == 'rrd' and not nodeName[0] == "nodes": rrd = NodeRRD(os.path.join(self.dbPath, fileName)) rrd.graph(self.imagePath, self.displayTimeNode)
def __init__( self , databaseDirectory , imagePath , displayTimeGlobal = "7d" , displayTimeGlobalMonth = "30d" , displayTimeGlobalYear = "356d" , displayTimeGlobalDay = "1d" , displayTimeNode = "1d" ): self.dbPath = databaseDirectory self.globalDb = GlobalRRD(self.dbPath) self.imagePath = imagePath self.displayTimeGlobal = displayTimeGlobal self.displayTimeGlobalMonth = displayTimeGlobalMonth self.displayTimeGlobalYear = displayTimeGlobalYear self.displayTimeGlobalDay = displayTimeGlobalDay self.displayTimeNode = displayTimeNode self.currentTimeInt = (int(time.time())/60)*60 self.currentTime = str(self.currentTimeInt) try: os.stat(self.imagePath) except: os.mkdir(self.imagePath)
def __init__( self , databaseDirectory , imagePath , displayTimeGlobal = "7d" , displayTimeNode = "1d" ): self.dbPath = databaseDirectory self.globalDb = GlobalRRD(self.dbPath) self.imagePath = imagePath self.displayTimeGlobal = displayTimeGlobal self.displayTimeNode = displayTimeNode self.currentTimeInt = (int(time.time())/60)*60 self.currentTime = str(self.currentTimeInt) try: os.stat(self.imagePath) except: os.mkdir(self.imagePath)
class rrd: def __init__( self , databaseDirectory , imagePath , displayTimeMontly = "31d" , displayTimeGlobal = "7d" , displayTimeNodeMonthly = "28d" , displayTimeNode = "3d" ): self.dbPath = databaseDirectory self.globalDb = GlobalRRD(self.dbPath) self.imagePath = imagePath self.displayTimeMontly = displayTimeMontly self.displayTimeGlobal = displayTimeGlobal self.displayTimeNode = displayTimeNode self.displayTimeNodeMonthly = displayTimeNodeMonthly self.currentTimeInt = (int(time.time())/60)*60 self.currentTime = str(self.currentTimeInt) try: os.stat(self.imagePath) except: os.mkdir(self.imagePath) def update_database(self,db): nodes = {} clientCount = 0 for node in db.get_nodes(): if node.flags['online']: if not node.flags['client']: nodes[node.id] = node node.clients = 0; if 'legacy' in node.flags and node.flags['legacy']: clientCount -= 1 else: clientCount += 1 for link in db.get_links(): source = link.source.interface target = link.target.interface if source in nodes and not target in nodes: nodes[source].clients += 1 elif target in nodes and not source in nodes: nodes[target].clients += 1 elif link.type == 'client': nodes[db.get_nodes()[link.source.id].id].clients += 1 self.globalDb.update(len(nodes), clientCount) for node in nodes.values(): rrd = NodeRRD( os.path.join(self.dbPath, str(node.id).replace(':', '') + '.rrd'), node ) rrd.update() def update_images(self): """ Creates an image for every rrd file in the database directory. """ self.globalDb.graph(os.path.join(self.imagePath, "globalGraph.png"), self.displayTimeGlobal) self.globalDb.graphMonthly(os.path.join(self.imagePath, "globalGraphMonthly.png"), self.displayTimeMontly) nodeDbFiles = os.listdir(self.dbPath) for fileName in nodeDbFiles: if not os.path.isfile(os.path.join(self.dbPath, fileName)): continue nodeName = os.path.basename(fileName).split('.') if nodeName[1] == 'rrd' and not nodeName[0] == "nodes": rrd = NodeRRD(os.path.join(self.dbPath, fileName)) rrd.graph(self.imagePath, self.displayTimeNode)
class rrd: def __init__( self , databaseDirectory , imagePath , displayTimeGlobal = "7d" , displayTimeNode = "1d" ): self.dbPath = databaseDirectory self.globalDb = GlobalRRD(self.dbPath) self.imagePath = imagePath self.displayTimeGlobal = displayTimeGlobal self.displayTimeNode = displayTimeNode self.currentTimeInt = (int(time.time())/60)*60 self.currentTime = str(self.currentTimeInt) try: os.stat(self.imagePath) except: os.mkdir(self.imagePath) def update_database(self,db): nodes = {} clientCount = 0 for node in db.get_nodes(): if node.flags['online']: if not node.flags['client']: nodes[node.id] = node node.clients = 0; if 'legacy' in node.flags and node.flags['legacy']: clientCount -= 1 else: clientCount += 1 for link in db.get_links(): source = link.source.interface target = link.target.interface if source in nodes and not target in nodes: nodes[source].clients += 1 elif target in nodes and not source in nodes: nodes[target].clients += 1 self.globalDb.update(len(nodes), clientCount) for node in nodes.values(): rrd = NodeRRD( os.path.join(self.dbPath, str(node.id).replace(':', '') + '.rrd'), node ) rrd.update() def update_images(self): """ Creates an image for every rrd file in the database directory. """ self.globalDb.graph(os.path.join(self.imagePath, "globalGraph.png"), self.displayTimeGlobal) nodeDbFiles = os.listdir(self.dbPath) for fileName in nodeDbFiles: if not os.path.isfile(os.path.join(self.dbPath, fileName)): continue nodeName = os.path.basename(fileName).split('.') if nodeName[1] == 'rrd' and not nodeName[0] == "nodes": rrd = NodeRRD(os.path.join(self.dbPath, fileName)) rrd.graph(self.imagePath, self.displayTimeNode)
#!/usr/bin/env python3 import os from GlobalRRD import GlobalRRD dbPath = '/srv/ffmap-backend/nodedb/' imgPath = '/var/www/ffmap-d3/nodes/year.png' globalDB = GlobalRRD(dbPath) globalDB.nodesGraph(imgPath, "1y")