mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2025-02-25 18:55:32 -06:00
Add files via upload
This commit is contained in:
parent
17fa7a65d2
commit
8cf90c29a9
@ -164,8 +164,8 @@ def refreshShapers():
|
|||||||
elemUploadMax = data[elem]['uploadBandwidthMbps']
|
elemUploadMax = data[elem]['uploadBandwidthMbps']
|
||||||
#Based on calculations done in findBandwidthMins(), determine optimal HTB rates (mins) and ceils (maxs)
|
#Based on calculations done in findBandwidthMins(), determine optimal HTB rates (mins) and ceils (maxs)
|
||||||
#The max calculation is to avoid 0 values, and the min calculation is to ensure rate is not higher than ceil
|
#The max calculation is to avoid 0 values, and the min calculation is to ensure rate is not higher than ceil
|
||||||
elemDownloadMin = round(min(max(data[elem]['downloadBandwidthMbpsMin'],(elemDownloadMax/8)),(elemDownloadMax/2)))
|
elemDownloadMin = round(min(max(data[elem]['downloadBandwidthMbpsMin'],(elemDownloadMax/8)),(elemDownloadMax*.95)))
|
||||||
elemUploadMin = round(min(max(data[elem]['uploadBandwidthMbpsMin'],(elemUploadMax/8)),(elemUploadMax/2)))
|
elemUploadMin = round(min(max(data[elem]['uploadBandwidthMbpsMin'],(elemUploadMax/8)),(elemUploadMax*.95)))
|
||||||
print(tabs + "Download: " + str(elemDownloadMin) + " to " + str(elemDownloadMax) + " Mbps")
|
print(tabs + "Download: " + str(elemDownloadMin) + " to " + str(elemDownloadMax) + " Mbps")
|
||||||
print(tabs + "Upload: " + str(elemUploadMin) + " to " + str(elemUploadMax) + " Mbps")
|
print(tabs + "Upload: " + str(elemUploadMin) + " to " + str(elemUploadMax) + " Mbps")
|
||||||
print(tabs, end='')
|
print(tabs, end='')
|
||||||
@ -228,6 +228,10 @@ def refreshShapers():
|
|||||||
if device['hostname'] not in devicesShaped:
|
if device['hostname'] not in devicesShaped:
|
||||||
print('Device ' + device['hostname'] + ' was not shaped. Please check to ensure its parent Node is listed in network.json.')
|
print('Device ' + device['hostname'] + ' was not shaped. Please check to ensure its parent Node is listed in network.json.')
|
||||||
|
|
||||||
|
#Save for stats
|
||||||
|
with open('qdiscs.json', 'w') as infile:
|
||||||
|
json.dump(devices, infile)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
currentTimeString = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
currentTimeString = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
|
||||||
print("Successful run completed on " + currentTimeString)
|
print("Successful run completed on " + currentTimeString)
|
||||||
|
73
v1.1/stats.py
Normal file
73
v1.1/stats.py
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
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
|
||||||
|
|
||||||
|
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 == interfaceB:
|
||||||
|
device['packetLossDownload'] = packetLoss
|
||||||
|
device['bytesSentDownload'] = bytesSent
|
||||||
|
device['foundStats'] = True
|
||||||
|
else:
|
||||||
|
device['packetLossUpload'] = packetLoss
|
||||||
|
device['bytesSentUpload'] = bytesSent
|
||||||
|
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", "GB Down/Up"]
|
||||||
|
sortableList = []
|
||||||
|
pickTop = 30
|
||||||
|
for device in devices:
|
||||||
|
name = device['hostname']
|
||||||
|
AP = 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 = GBuploadedString + '/' + GBdownloadedString
|
||||||
|
avgDropped = (packetLossDownload + packetLossUpload)/2
|
||||||
|
sortableList.append((name, AP, ipv4, ipv6, packetLossDownload, packetLossUpload, avgDropped, GBstring))
|
||||||
|
res = sorted(sortableList, key = itemgetter(4), reverse = True)[:pickTop]
|
||||||
|
for stat in res:
|
||||||
|
name, AP, ipv4, ipv6, packetLossDownload, packetLossUpload, avgDropped, GBstring = stat
|
||||||
|
if not name:
|
||||||
|
name = ipv4
|
||||||
|
downloadDroppedString = "{0:.3%}".format(packetLossDownload)
|
||||||
|
uploadDroppedString = "{0:.3%}".format(packetLossUpload)
|
||||||
|
x.add_row([name, AP, ipv4, ipv6, downloadDroppedString, uploadDroppedString, GBstring])
|
||||||
|
print(x)
|
Loading…
Reference in New Issue
Block a user