Added first hopefully running version

This commit is contained in:
Nis Wechselberg 2017-11-20 21:56:45 +01:00
parent d7d286556e
commit 24ea84160c

View file

@ -1,56 +1,95 @@
#!/usr/bin/python3
import sys
import os.path import os.path
import serial
import time import time
import random
import logging import logging
import argparse
import serial
import subprocess
import re
def get_bytes(t, iface='enp0s25'):
port_addr = '/dev/ttyACM0' with open('/sys/class/net/' + iface + '/statistics/' + t + '_bytes', 'r') as f:
data = f.read();
return int(data)
logging.warning("Staring up") def get_link_speed(iface='enp0s25'):
ethtool=subprocess.Popen(['ethtool',iface], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
s = re.search('Speed: (?P<Speed>\d+)Mb/s', ethtool.stdout.read().decode('utf-8'))
return int(s.group('Speed')) * 125000
if os.path.exists(port_addr): if __name__ == '__main__':
port = serial.Serial( parser = argparse.ArgumentParser()
port=port_addr, parser.add_argument('-v', '--verbose', action='count', default=0,
baudrate=115200, help='increase logging verbosity')
bytesize=serial.EIGHTBITS, parser.add_argument('-s', '--serial', type=str, default='/dev/ttyACM0',
parity=serial.PARITY_NONE, help='serial port for arduino connection')
stopbits=serial.STOPBITS_ONE, parser.add_argument('-t', '--time', type=float, default=0.02,
timeout=1, help='update interval for measurements')
xonxoff=False, parser.add_argument('interfaces', metavar='interface', type=str, nargs='+',
rtscts=False, help='network interfaces to take into account')
dsrdtr=False, args = parser.parse_args()
write_timeout=None,
inter_byte_timeout=None)
logging.warning("Opening port") # Process verbosity
if args.verbose == 0:
LOGLEVEL = logging.WARNING
elif args.verbose == 1:
LOGLEVEL = logging.INFO
elif args.verbose >= 2:
LOGLEVEL = logging.DEBUG
time.sleep(2) logging.basicConfig(format='%(levelname)s:%(name)s:%(asctime)s:%(message)s', level=LOGLEVEL)
logging.info("Network utilization visualization starting up")
logging.warning("Opened port") if not os.path.exists(args.serial):
logging.error("Serial output not available, quitting!")
sys.exit(1)
else:
logging.info("Opening serial port %s", args.serial)
port = serial.Serial(
port=args.serial,
baudrate=115200,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
timeout=1,
xonxoff=False,
rtscts=False,
dsrdtr=False,
write_timeout=None,
inter_byte_timeout=None)
val1 = random.randint(0,100) time.sleep(2)
val2 = random.randint(0,100)
logging.warning("Staring with values %d and %d", val1, val2) logging.info("Serial port opened")
while True: sum_max = 0
val1 += random.randint(-10,10) ifaces = []
val2 += random.randint(-10,10) for iface in args.interfaces:
if val1 < 0: ifaces.append({
val1 = 0 'name': iface,
if val1 > 100: 'rx': get_bytes('rx', iface),
val1 = 100 'tx': get_bytes('tx', iface)})
if val2 < 0: sum_max += get_link_speed(iface) * args.time
val2 = 0
if val2 > 100:
val2 = 100
message = bytearray(3) while True:
message[0] = 0xFF sum_rx = 0;
message[1] = val1 sum_tx = 0;
message[2] = val2
port.write(message) for iface in ifaces:
if_rx = get_bytes('rx', iface['name'])
if_tx = get_bytes('tx', iface['name'])
sum_rx += if_rx - iface['rx']
sum_tx += if_tx - iface['tx']
iface['rx'] = if_rx
iface['tx'] = if_tx
time.sleep(0.01) message = bytearray(3)
message[0] = 0xFF
message[1] = int(sum_tx * 100 / sum_max)
message[2] = int(sum_rx * 100 / sum_max)
port.write(message)
time.sleep(args.time)