def updateiwstatus(): from pilib import insertstringdicttablelist, systemdatadatabase, gettimestring import netfun iwdict = netfun.getiwstatus() iwdict['updatetime'] = gettimestring() # put into database insertstringdicttablelist(systemdatadatabase, 'iwstatus', [iwdict])
def updatehamachistatus(): from pilib import insertstringdicttablelist, systemdatadatabase, gettimestring import netfun try: hamdicts = netfun.gethamachidata() except: pass else: for index, dict in enumerate(hamdicts): hamdicts[index]['updatetime'] = gettimestring() # put into database insertstringdicttablelist(systemdatadatabase, 'hamachistatus', hamdicts)
def updatenetstatus(lastnetstatus=None): import pilib import time import subprocess from netfun import getifacestatus, getwpaclientstatus, getifconfigstatus netconfigdata = pilib.readonedbrow(pilib.systemdatadatabase, 'netconfig')[0] """ We get last netstatus so that we can save last online times, previous online status, etc. """ if not lastnetstatus: try: lastnetstatus = pilib.readonedbrow(pilib.systemdatadatabase, 'netstatus')[0] except: pilib.log(pilib.syslog, 'Error reading netstatus. Attempting to recreate netstatus table with default values. ', 1, pilib.networkloglevel) try: pilib.emptyandsetdefaults(pilib.systemdatadatabase, 'netstatus') lastnetstatus = pilib.readonedbrow(pilib.systemdatadatabase, 'netstatus')[0] except: pilib.log(pilib.syslog, 'Error recreating netstatus. ', 1, pilib.networkloglevel) """ Pyiface is one way to read some iface data, but it doesn't always appear to show all interfaces(?!) So we wrote our own instead. A work in progress but quite functional at the moment. """ pilib.log(pilib.networklog, 'Reading ifaces with ifconfig status. ', 4, pilib.networkloglevel) ifacesdictarray = getifconfigstatus() # ifacesdictarray = getifacestatus() """ We supplement with wpa status on the wlan interfaces """ updateddictarray = [] for interface in ifacesdictarray: if interface['name'].find('wlan') >= 0: interface['wpastate'] = pilib.dicttojson(getwpaclientstatus(interface['name'])) else: interface['wpastate'] = '' updateddictarray.append(interface) ifacesdictarray = updateddictarray """ Then write it to the table """ if ifacesdictarray: pilib.log(pilib.networklog, 'Sending ifaces query. ', 5, pilib.networkloglevel) # print(ifacesdictarray) pilib.insertstringdicttablelist(pilib.systemdatadatabase, 'netifaces', ifacesdictarray) else: pilib.log(pilib.networklog, 'Empty ifaces query. ', 2, pilib.networkloglevel) pilib.log(pilib.networklog, 'Completed pyiface ifaces. ', 4, pilib.networkloglevel) """ Now we check to see if we can connect to WAN """ pilib.log(pilib.networklog, 'Checking pingtimes. ', 4, pilib.networkloglevel) okping = float(netconfigdata['pingthreshold']) from netfun import runping netstatusdict = {} querylist=[] pingresults = runping('8.8.8.8') # pingresults = [20, 20, 20] pingresult = sum(pingresults) / float(len(pingresults)) if pingresult == 0: wanaccess = 0 latency = 0 else: if pingresult < okping: wanaccess = 1 pilib.setsinglevalue(pilib.systemdatadatabase, 'netstatus', 'WANaccess', 1) if lastnetstatus['WANaccess'] == 0 or not lastnetstatus['onlinetime']: pilib.setsinglevalue(pilib.systemdatadatabase, 'netstatus', 'onlinetime', pilib.gettimestring()) else: wanaccess = 0 pilib.setsinglevalue(pilib.systemdatadatabase, 'netstatus', 'WANaccess', 0) if lastnetstatus['WANaccess'] == 1 or not lastnetstatus['offlinetime']: pilib.setsinglevalue(pilib.systemdatadatabase, 'netstatus', 'offlinetime', pilib.gettimestring()) latency = pingresult # we set all the values here, so when we retreive it we get changed and also whatever else happens to be there. pilib.setsinglevalue(pilib.systemdatadatabase, 'netstatus', 'latency', latency) updatetime = pilib.gettimestring() pilib.setsinglevalue(pilib.systemdatadatabase, 'netstatus', 'updatetime', updatetime) pilib.setsinglevalue(pilib.systemdatadatabase, 'netstatus', 'WANaccess', wanaccess) pilib.log(pilib.networklog, 'Done checking pings. ', 4, pilib.networkloglevel) if netconfigdata['netstatslogenabled']: # print('going to log stuff') pilib.logtimevaluedata(pilib.logdatabase, 'system_WANping', time.time(), pingresult, 1000, netconfigdata['netstatslogfreq']) #This is kinda ugly. Should be fixed. # netstatusdict = {'WANaccess':wanaccess, 'latency': latency, 'updatetime': updatetime} netstatusdict = pilib.readonedbrow(pilib.systemdatadatabase, 'netstatus')[0] return {'netstatusdict': netstatusdict, 'ifacesdictarray': ifacesdictarray, 'netconfigdata':netconfigdata}