driver_tsc/driver/main.py

87 lines
3.1 KiB
Python

'''
Created on 19 mar 2020
@author: Emanuele Trabattoni
@copyright: Briq srl
@contact: Scritto per Briq srl come collaboratore esterno, contiene dei frammenti di codice di proprieta' di Briq srl
'''
from flask import Flask, escape, request
import threading
import queue
import sys
import logging
import os
from waitress import serve
from driver import tsc_manager, notifier
#inizializza ascoltatore di Flask
app = Flask(__name__)
#questo manda le rest di risposta a django
@app.route('/tscprinter/printer/<ip>/<command>', methods=['POST'])
def printer_in(ip, command):
parameters = request.get_json()
logger.debug(f"Comando Stampante: {ip} {command} {str(parameters)}")
# questo prossimo mi sa che non funzia perché la funzione
# inizia a esistere quando si esegue tsc_manager.main ma poi non
# viene esportata nello scope del modulo tsc_manager
queue_id = tsc_manager.get_queue_id(ip)
if queue_id is not None:
queue_id.put({'name': command, 'parameters': parameters})
return "Comando Stampante Inviato", 200
else:
return "Stampante non trovata", 404
@app.route('/tscprinter/gest/<command>', methods=['POST'])
def gest_in(command):
parameters = request.get_json()
logger.debug(f"Comando Gestore: {str(parameters)}")
# istes di sopra
queue_command = tsc_manager.get_queue_command()
if queue_command is not None:
queue_command.put({'name': command, 'parameters': parameters})
return "Comando Gestore Inviato", 200
else:
return "Gestore non Disponibile", 404
def build_logger():
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.propagate = False
formatter = logging.Formatter(("%(asctime)s|%(levelname)-7s|%(funcName)-10s|%(lineno)-3d: %(message)-50s"),
("%m-%d %H:%M:%S"))
# File Logging
fh = logging.FileHandler(("./log/tsc.log"))
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)
# Console Logging
cl = logging.StreamHandler(sys.stdout)
cl.setLevel(logging.DEBUG)
cl.setFormatter(formatter)
logger.addHandler(cl)
return logger
if __name__ == '__main__':
logger = build_logger()
queues_in = {}
queue_command = queue.Queue()
queue_out = queue.Queue()
t_notify_django = threading.Thread(target=notifier.notifier,
args=[queue_out, logger],
daemon=True)
t_notify_django.start()
t_manager = threading.Thread(target=tsc_manager.main,
args=[queues_in, queue_out, queue_command, logger],
daemon=True)
t_manager.start()
listen = "{}:{}".format(os.getenv("TSC_PRINTER_DRIVER_HOST"),
os.getenv("TSC_PRINTER_DRIVER_PORT"))
# dico (aspettando) a django che siamo pronti a ricevere gli indirizzi
# delle stampanti
notifier.send_hello(queue_out)
serve(app, listen=listen)