mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2025-02-25 18:55:32 -06:00
Delete stats.py
This commit is contained in:
parent
ace4a318f9
commit
f069e9eb09
129
v1.1/stats.py
129
v1.1/stats.py
@ -1,129 +0,0 @@
|
|||||||
import os
|
|
||||||
import subprocess
|
|
||||||
from subprocess import PIPE
|
|
||||||
import io
|
|
||||||
import decimal
|
|
||||||
import json
|
|
||||||
from operator import itemgetter
|
|
||||||
from prettytable import PrettyTable
|
|
||||||
from ispConfig import fqOrCAKE, interfaceA, interfaceB
|
|
||||||
import decimal
|
|
||||||
from itertools import groupby
|
|
||||||
|
|
||||||
def getStatistics():
|
|
||||||
with open('qdiscs.json', 'r') as infile:
|
|
||||||
devices = json.load(infile)
|
|
||||||
interfaceList = [interfaceA, interfaceB]
|
|
||||||
|
|
||||||
for interface in interfaceList:
|
|
||||||
for device in devices:
|
|
||||||
try:
|
|
||||||
command = 'tc -j -s qdisc show dev ' + interface + ' parent ' + device['qdisc']
|
|
||||||
commands = command.split(' ')
|
|
||||||
tcShowResults = subprocess.run(commands, stdout=subprocess.PIPE).stdout.decode('utf-8')
|
|
||||||
jsonVersion = json.loads(tcShowResults)
|
|
||||||
drops = int(jsonVersion[0]['drops'])
|
|
||||||
packets = int(jsonVersion[0]['packets'])
|
|
||||||
bytesSent = int(jsonVersion[0]['bytes'])
|
|
||||||
packetLoss = round((drops/packets),6)
|
|
||||||
if interface == interfaceA:
|
|
||||||
device['packetLossDownload'] = packetLoss
|
|
||||||
device['bytesSentDownload'] = bytesSent
|
|
||||||
device['packetsDownload'] = packets
|
|
||||||
device['dropsDownload'] = drops
|
|
||||||
device['foundStats'] = True
|
|
||||||
else:
|
|
||||||
device['packetLossUpload'] = packetLoss
|
|
||||||
device['bytesSentUpload'] = bytesSent
|
|
||||||
device['packetsUpload'] = packets
|
|
||||||
device['dropsUpload'] = drops
|
|
||||||
device['foundStats'] = True
|
|
||||||
except:
|
|
||||||
print("Failed to retrieve stats for device " + device['hostname'])
|
|
||||||
device['foundStats'] = False
|
|
||||||
devicesWhereWeFoundStats = []
|
|
||||||
for device in devices:
|
|
||||||
if device['foundStats'] == True:
|
|
||||||
devicesWhereWeFoundStats.append(device)
|
|
||||||
return devicesWhereWeFoundStats
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
devices = getStatistics()
|
|
||||||
|
|
||||||
# Display table of Customer CPEs with most packets dropped
|
|
||||||
|
|
||||||
x = PrettyTable()
|
|
||||||
x.field_names = ["Hostname", "ParentNode", "IPv4", "IPv6", "DL Dropped", "UL Dropped", "Avg Dropped", "GB Down", "GB Up"]
|
|
||||||
sortableList = []
|
|
||||||
pickTopCPEs = 5
|
|
||||||
pickTopAPs = 10
|
|
||||||
for device in devices:
|
|
||||||
name = device['hostname']
|
|
||||||
ParentNode = device['ParentNode']
|
|
||||||
ipv4 = device['ipv4']
|
|
||||||
ipv6 = device['ipv6']
|
|
||||||
packetLossDownload = device['packetLossDownload']
|
|
||||||
packetLossUpload = device['packetLossUpload']
|
|
||||||
GBdownloadedString = str(round((device['bytesSentDownload']/1000000000),3))
|
|
||||||
GBuploadedString = str(round((device['bytesSentUpload']/1000000000),3))
|
|
||||||
GBstring = GBdownloadedString + '/' + GBuploadedString
|
|
||||||
avgDropped = round((packetLossDownload + packetLossUpload)/2,3)
|
|
||||||
sortableList.append((name, ParentNode, ipv4, ipv6, packetLossDownload, packetLossUpload, avgDropped, GBdownloadedString, GBuploadedString))
|
|
||||||
res = sorted(sortableList, key = itemgetter(4), reverse = True)[:pickTopCPEs]
|
|
||||||
for stat in res:
|
|
||||||
name, AP, ipv4, ipv6, packetLossDownload, packetLossUpload, avgDropped, GBdownloadedString, GBuploadedString = stat
|
|
||||||
if not name:
|
|
||||||
name = ipv4
|
|
||||||
downloadDroppedString = "{0:.3%}".format(packetLossDownload)
|
|
||||||
uploadDroppedString = "{0:.3%}".format(packetLossUpload)
|
|
||||||
avgDroppedString = "{0:.3%}".format(avgDropped)
|
|
||||||
x.add_row([name, AP, ipv4, ipv6, downloadDroppedString, uploadDroppedString, avgDroppedString, GBdownloadedString, GBuploadedString])
|
|
||||||
print(x)
|
|
||||||
|
|
||||||
listOfParentNodes = []
|
|
||||||
listOfParentNodesWithStats = []
|
|
||||||
for device in devices:
|
|
||||||
if device['ParentNode'] not in listOfParentNodes:
|
|
||||||
listOfParentNodes.append(device['ParentNode'])
|
|
||||||
for parentNode in listOfParentNodes:
|
|
||||||
bytesSentDownloadDropped = 0
|
|
||||||
bytesSentUploadDropped = 0
|
|
||||||
bytesSentDownload = 0
|
|
||||||
bytesSentUpload = 0
|
|
||||||
packetsDownload = 0
|
|
||||||
packetsUpload = 0
|
|
||||||
packetsDownloadDropped = 0
|
|
||||||
packetsUploadDropped = 0
|
|
||||||
counter = 0
|
|
||||||
for device in devices:
|
|
||||||
if device['ParentNode'] == parentNode:
|
|
||||||
bytesSentDownload += device['bytesSentDownload']
|
|
||||||
bytesSentUpload += device['bytesSentUpload']
|
|
||||||
packetsDownload += device['packetsDownload']
|
|
||||||
packetsUpload += device['packetsUpload']
|
|
||||||
packetsDownloadDropped += device['dropsDownload']
|
|
||||||
packetsUploadDropped += device['dropsUpload']
|
|
||||||
counter += 1
|
|
||||||
if bytesSentDownload > 0:
|
|
||||||
packetLossDownload = round(packetsDownloadDropped/packetsDownload,5)
|
|
||||||
else:
|
|
||||||
packetLossDownload = 0
|
|
||||||
if bytesSentUpload > 0:
|
|
||||||
packetLossUpload = round(packetsUploadDropped/packetsUpload,5)
|
|
||||||
else:
|
|
||||||
packetLossUpload = 0
|
|
||||||
GBdownload = round((bytesSentDownload/1000000000),3)
|
|
||||||
GBupload = round((bytesSentUpload/1000000000),3)
|
|
||||||
packetLossAvg = (packetLossDownload+packetLossUpload)/2
|
|
||||||
listOfParentNodesWithStats.append((parentNode,packetLossDownload,packetLossUpload,packetLossAvg, GBdownload,GBupload))
|
|
||||||
res = sorted(listOfParentNodesWithStats, key = itemgetter(3), reverse = True)[:pickTopAPs]
|
|
||||||
|
|
||||||
x = PrettyTable()
|
|
||||||
x.field_names = ["ParentNode", "Download Dropped", "Upload Dropped", "Avg Dropped", "GB Down", "GB Up"]
|
|
||||||
for stat in res:
|
|
||||||
parentNode,packetLossDownload,packetLossUpload,packetLossAvg, GBdownload,GBupload = stat
|
|
||||||
packetLossDownloadString = "{0:.3%}".format(packetLossDownload)
|
|
||||||
packetLossUploadString = "{0:.3%}".format(packetLossUpload)
|
|
||||||
avgLossString = "{0:.3%}".format(packetLossAvg)
|
|
||||||
x.add_row([parentNode,packetLossDownloadString,packetLossUploadString,avgLossString, GBdownload,GBupload])
|
|
||||||
print(x)
|
|
Loading…
Reference in New Issue
Block a user