Skip to content
Snippets Groups Projects
Commit eb3d5a13 authored by wactbprot's avatar wactbprot
Browse files

run init-offset-sequences for multiple devices triggert over http; returns ok:true if all is done

parent b79021bc
No related branches found
No related tags found
No related merge requests found
......@@ -283,29 +283,16 @@ class Anselm(System):
self.run_task(line)
def task_selected(self, combo, line):
task_name = combo.currentText()
doc_id = self.aget('doc_id', line)
task_db = self.db.get_task(doc_id, task_name)
defaults = self.dget('defaults', line)
if defaults:
task = self.db.replace_defaults(task_db, defaults)
self.log.debug(defaults)
else:
self.log.warn("no defaults")
self.aset('task_name', line, task_name)
self.aset('task', line, task)
self.aset('task_db', line, task_db)
self.db.choose_task(task_name, line)
# add elements for next actions
self.add_widget_to_grid(self.make_run_button(line=line), line, self.run_btn_col)
self.log.debug("task: {}".format(task))
self.log.info("task with name {} selected at line {}".format(task_name, line))
def custobj_selected(self, combo, line):
......
......@@ -133,3 +133,28 @@ class DB(System):
self.log.error("replacing defaults fails for")
return task
def choose_task(self, task_name, line):
doc_id = self.aget('doc_id', line)
if doc_id:
task_db = self.get_task(doc_id, task_name)
# dont get defaults from db
# they maybe changed for current line
defaults = self.dget('defaults', line)
if defaults:
task = self.replace_defaults(task_db, defaults)
self.log.debug("defaults: {}".format(defaults))
self.log.debug("task: {}".format(task))
else:
self.log.warn("no defaults")
self.aset('task_name', line, task_name)
self.aset('task', line, task)
self.aset('task_db', line, task_db)
else:
self.log.error("line {} contains no doc_id")
\ No newline at end of file
......@@ -75,6 +75,8 @@ class System:
return self.r.get(k)
def dget(self, key_prefix, line):
"""Get a dict from mem store by key_prefix and line
"""
v = self.aget(key_prefix, line)
if v:
......@@ -82,6 +84,7 @@ class System:
else:
return None
def fget(self, key_prefix, line):
v = self.aget(key_prefix, line)
......@@ -92,3 +95,5 @@ class System:
def now(self):
return datetime.datetime.now().isoformat().replace('T', ' ')
\ No newline at end of file
......@@ -6,14 +6,24 @@ from _thread import start_new_thread
class Worker(System):
work_on_line = None
def __init__(self):
super().__init__()
self.work_on_line = None
relay_dict = self.config.get('relay')
self.relay_dict = relay_dict
self.relay_url = "http://{}:{}".format(relay_dict.get('host'), relay_dict.get('port'))
self.headers = {'content-type': 'application/json'}
def get_worker(self, task, line):
worker = None
acc = task['Action']
if acc == "TCP" or acc == "VXI11" or acc == "MODBUS":
worker = self.relay_worker
if acc == "wait":
worker = self.wait_worker
return worker
def run(self):
"""The member workonline is set ba anselm
......@@ -23,16 +33,12 @@ class Worker(System):
line = self.work_on_line
task = self.dget('task', line)
acc = task['Action']
if acc == "TCP" or acc == "VXI11" or acc == "MODBUS":
worker = self.relay_worker
if acc == "wait":
worker = self.wait_worker
worker = self.get_worker(task, line)
if worker:
start_new_thread( worker, (task, line))
else:
self.log.error("missing worker function")
self.work_on_line = None
else:
self.log.error("member var: work_on_line not set")
......
from flask import Flask, jsonify, request
from anselm.system import System
from anselm.db import DB
from anselm.worker import Worker
from _thread import start_new_thread
import time
app = Flask(__name__)
s = System()
......@@ -12,6 +15,7 @@ def home():
"/cal_ids",
"/dut_max",
"/target_pressures",
"/offset_sequences"
] })
@app.route('/cal_ids')
......@@ -134,6 +138,43 @@ def target_pressure():
else:
return jsonify(res)
@app.route('/offset_all', methods=['POST'])
def offset_all():
@app.route('/offset_sequences', methods=['GET'])
def offset_sequences():
s.log.info("request to target pressures")
keys = s.r.keys('offset_all_sequence@*')
delay = 0.5 #s
work_count = 0
for key in keys:
_ , line = key.split(s.keysep)
time.sleep(delay)
sequence = s.dget('offset_all_sequence', line)
work_count = work_count + len(sequence) -1
start_new_thread( work_seqence, (sequence, line,))
s.p.subscribe("srv")
s.log.info('start listening redis ')
for item in s.p.listen():
s.log.debug("received item: {}".format(item))
if item['type'] == 'message':
s.log.debug(item['data'])
work_count = work_count -1
s.log.info("remaining tasks: {}".format(work_count))
if work_count == 0:
break
return jsonify({'ok':True, })
def work_seqence(sequence, line):
worker = Worker()
delay = 0.2 #s
for task_name in sequence:
db.choose_task(task_name, line)
s.log.debug("choose {} in line {}, start working on".format(task_name, line))
task = s.dget("task", line)
worker_fn = worker.get_worker(task, line)
worker_fn(task, line)
time.sleep(delay)
s.r.publish('srv', line)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment