Poll for network info via a thread
This commit is contained in:
@@ -4,9 +4,10 @@ import json
|
|||||||
import uuid
|
import uuid
|
||||||
import os
|
import os
|
||||||
import socket
|
import socket
|
||||||
import bbctrl
|
|
||||||
import iw_parse
|
import iw_parse
|
||||||
from tornado import gen
|
import threading
|
||||||
|
import subprocess
|
||||||
|
import time
|
||||||
from watchdog.observers import Observer
|
from watchdog.observers import Observer
|
||||||
from watchdog.events import FileSystemEventHandler
|
from watchdog.events import FileSystemEventHandler
|
||||||
|
|
||||||
@@ -20,6 +21,7 @@ def call_get_output(cmd):
|
|||||||
|
|
||||||
|
|
||||||
class UploadChangeHandler(FileSystemEventHandler):
|
class UploadChangeHandler(FileSystemEventHandler):
|
||||||
|
|
||||||
def __init__(self, state):
|
def __init__(self, state):
|
||||||
self.state = state
|
self.state = state
|
||||||
|
|
||||||
@@ -28,7 +30,9 @@ class UploadChangeHandler(FileSystemEventHandler):
|
|||||||
|
|
||||||
|
|
||||||
class State(object):
|
class State(object):
|
||||||
|
|
||||||
def __init__(self, ctrl):
|
def __init__(self, ctrl):
|
||||||
|
self.lock = threading.Lock()
|
||||||
self.ctrl = ctrl
|
self.ctrl = ctrl
|
||||||
self.log = ctrl.log.get('State')
|
self.log = ctrl.log.get('State')
|
||||||
|
|
||||||
@@ -72,39 +76,40 @@ class State(object):
|
|||||||
self.load_files()
|
self.load_files()
|
||||||
|
|
||||||
observer = Observer()
|
observer = Observer()
|
||||||
observer.schedule(UploadChangeHandler(
|
observer.schedule(UploadChangeHandler(self),
|
||||||
self), self.ctrl.get_upload(), recursive=True)
|
self.ctrl.get_upload(),
|
||||||
|
recursive=True)
|
||||||
observer.start()
|
observer.start()
|
||||||
|
|
||||||
self._updateNetworkInfo()
|
threading.Thread(target=self._updateNetworkInfo, daemon=True).start()
|
||||||
|
|
||||||
@gen.coroutine
|
|
||||||
def _updateNetworkInfo(self):
|
def _updateNetworkInfo(self):
|
||||||
try:
|
while True:
|
||||||
ipAddresses = call_get_output(['hostname', '-I']).split()
|
try:
|
||||||
except:
|
ipAddresses = call_get_output(['hostname', '-I']).split()
|
||||||
ipAddresses = ""
|
except:
|
||||||
|
ipAddresses = ""
|
||||||
|
|
||||||
hostname = socket.gethostname()
|
hostname = socket.gethostname()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
wifi = json.loads(call_get_output(['config-wifi', '-j']))
|
wifi = json.loads(call_get_output(['config-wifi', '-j']))
|
||||||
except:
|
except:
|
||||||
wifi = {'enabled': False}
|
wifi = {'enabled': False}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
lines = iw_parse.call_iwlist().decode("utf-8").split("\n")
|
lines = iw_parse.call_iwlist().decode("utf-8").split("\n")
|
||||||
wifi['networks'] = iw_parse.get_parsed_cells(lines)
|
wifi['networks'] = iw_parse.get_parsed_cells(lines)
|
||||||
except:
|
except:
|
||||||
wifi['networks'] = []
|
wifi['networks'] = []
|
||||||
|
|
||||||
self.set('networkInfo', {
|
self.set('networkInfo', {
|
||||||
'ipAddresses': ipAddresses,
|
'ipAddresses': ipAddresses,
|
||||||
'hostname': hostname,
|
'hostname': hostname,
|
||||||
'wifi': wifi
|
'wifi': wifi
|
||||||
})
|
})
|
||||||
|
|
||||||
self.timeout = self.ctrl.ioloop.call_later(5, self._updateNetworkInfo)
|
time.sleep(5)
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
# Unhome all motors
|
# Unhome all motors
|
||||||
@@ -217,15 +222,20 @@ class State(object):
|
|||||||
self.callbacks[self.resolve(name)] = cb
|
self.callbacks[self.resolve(name)] = cb
|
||||||
|
|
||||||
def set(self, name, value):
|
def set(self, name, value):
|
||||||
name = self.resolve(name)
|
self.lock.acquire()
|
||||||
|
try:
|
||||||
|
name = self.resolve(name)
|
||||||
|
|
||||||
if not name in self.vars or self.vars[name] != value:
|
if not name in self.vars or self.vars[name] != value:
|
||||||
self.vars[name] = value
|
self.vars[name] = value
|
||||||
self.changes[name] = value
|
self.changes[name] = value
|
||||||
|
|
||||||
# Trigger listener notify
|
# Trigger listener notify
|
||||||
if self.timeout is None:
|
if self.timeout is None:
|
||||||
self.timeout = self.ctrl.ioloop.call_later(0.25, self._notify)
|
self.timeout = self.ctrl.ioloop.call_later(
|
||||||
|
0.25, self._notify)
|
||||||
|
finally:
|
||||||
|
self.lock.release()
|
||||||
|
|
||||||
def update(self, update):
|
def update(self, update):
|
||||||
for name, value in update.items():
|
for name, value in update.items():
|
||||||
@@ -377,7 +387,7 @@ class State(object):
|
|||||||
softMax = int(self.get(axis + '_tm', 0))
|
softMax = int(self.get(axis + '_tm', 0))
|
||||||
if softMax <= softMin + 1:
|
if softMax <= softMin + 1:
|
||||||
return 'max-soft-limit must be at least 1mm greater ' \
|
return 'max-soft-limit must be at least 1mm greater ' \
|
||||||
'than min-soft-limit'
|
'than min-soft-limit'
|
||||||
|
|
||||||
def motor_enabled(self, motor):
|
def motor_enabled(self, motor):
|
||||||
return bool(int(self.vars.get('%dme' % motor, 0)))
|
return bool(int(self.vars.get('%dme' % motor, 0)))
|
||||||
|
|||||||
Reference in New Issue
Block a user