Source code for obci.control.gui.obci_log_model_real
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from . import obci_log_model
import time
import socket
import select
import json
BUF = 2**15
[docs]class RealLogModel(obci_log_model.LogModel):
def __init__(self, srv_client):
super(RealLogModel, self).__init__()
self.srv_client = srv_client
self.exp_name = ''
self.peer_name = ''
[docs] def next_log(self):
try:
# print("log model real - waiting on socket ...")
ready = select.select([self.socket], [], [], 0.5)
if ready[0]:
data = self.socket.recv(BUF)
# print("log model real - got log!!!!!! "+str(data))
# print("log model real - got log")
return self._process_log(data)
else:
raise Exception("Socket timeout!")
except Exception as e:
return None, None
def _process_log(self, data):
try:
d = json.loads(data.decode())
except Exception:
print("Error while loading log as json....!")
return None, None
else:
try:
return d['name'], ' - '.join([str(d['asctime']), str(d['message'])]) # 'amplifier', data
except Exception:
print("Error while reading logs fields: name, asctime, message!")
return None, None
[docs] def stop_running(self):
self.srv_client.kill_peer(self.exp_name, self.peer_name, remove_config=True)
super(RealLogModel, self).stop_running()
[docs] def start_running(self, exp):
print("log model real - start running")
port = self._init_socket()
self.exp_name = exp.name
self.peer_name = 'logger_' + str(time.time())
exp.add_peer(self.peer_name, 'control/gui/obci_log_peer.py',
config_sources=None, launch_deps=None, custom_config_path=None, machine=socket.gethostname())
exp.update_peer_param(self.peer_name, 'port', str(port))
super(RealLogModel, self).start_running(exp)
[docs] def connect_running(self, exp):
print("log model real - connect running")
port = self._init_socket()
self.exp_name = exp.name
self.peer_name = 'logger_' + str(time.time())
res = self.srv_client.add_peer(exp.uuid, self.peer_name, 'control/gui/obci_log_peer.py',
socket.gethostname(), param_overwrites={'port': str(port)})
self.exp_name = exp.name
print("log model real - Srv client status add: " + str(res))
super(RealLogModel, self).connect_running(exp)
def _init_socket(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.socket.bind(('127.0.0.1', 0))
self.socket.setblocking(0)
s = self.socket.getsockname()[1]
print("log model real - start socket: " + str(s))
return s
[docs] def post_run(self):
try:
print("log model real - close socket " + str(self.socket.getsockname()[1]))
self.socket.close()
except socket.error:
print("log model real - warning - could close socket properly!!!")