Commit b0b757a5 by Oleksandr Barabash

xlsx file added to the logging

parent de94346c
......@@ -9,6 +9,8 @@ from typing import Optional
from absl import app, flags
from absl.flags import FLAGS
from marshmallow import EXCLUDE
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
from utils.ether_service.entities.data.kr_packet import KrPacketV2
from utils.ether_service.utils.json_func import json_loads
......@@ -18,7 +20,7 @@ from utils.ws_client import WSClient
logger = logging.getLogger(__name__)
flags.DEFINE_string('station_id', None, "Station_id")
flags.DEFINE_string('station_id', None, "Station Id")
flags.DEFINE_string('file', None, "File where to save the history")
......@@ -43,18 +45,70 @@ def stop_server(server: WSClient, io_loop: AbstractEventLoop):
return wr
class SpreadSheetHelper:
""" SpreadSheetHelper implementation """
def __init__(self):
self.workbook = Workbook()
self.sheet = self.workbook.active
self.sheet.title = "DoA"
self.row = 1
self.column = 1
self.create_headers()
self.format_columns()
def create_headers(self) -> None:
""" Create headers """
self.sheet.cell(self.row, self.column, "Station ID")
self.sheet.cell(self.row, self.column + 1, "Timestamp")
self.sheet.cell(self.row, self.column + 2, "Frequency")
self.sheet.cell(self.row, self.column + 3, "DoA")
self.sheet.cell(self.row, self.column + 4, "Confidence")
self.sheet.cell(self.row, self.column + 5, "Power")
self.sheet.cell(self.row, self.column + 6, "Serial")
self.sheet.cell(self.row, self.column + 7, "Radio Bearing")
self.sheet.cell(self.row, self.column + 8, "Compass Offset")
self.row += 1
def log_packet(self, kr_packet: KrPacketV2) -> None:
""" Log packet """
self.sheet.cell(self.row, self.column, kr_packet.station_id)
self.sheet.cell(self.row, self.column + 1, kr_packet.get_timestamp())
self.sheet.cell(self.row, self.column + 2, kr_packet.freq / 1000000)
self.sheet.cell(self.row, self.column + 3,
kr_packet.get_absolute_doa())
self.sheet.cell(self.row, self.column + 4, kr_packet.conf)
self.sheet.cell(self.row, self.column + 5, kr_packet.power)
self.sheet.cell(self.row, self.column + 6, kr_packet.serial)
self.sheet.cell(self.row, self.column + 7, kr_packet.radio_bearing)
self.sheet.cell(self.row, self.column + 8, kr_packet.compass_offset)
self.row += 1
def save(self, filename: str) -> None:
""" save workbook """
self.workbook.save(filename)
def format_columns(self) -> None:
""" set width """
for column_cells in self.sheet.columns:
new_column_letter = get_column_letter(column_cells[0].column)
self.sheet.column_dimensions[new_column_letter].width = 20
# noinspection PyShadowingNames
def try_to_log(kr_packet: KrPacketV2) -> None:
def try_to_log(helper: SpreadSheetHelper, kr_packet: KrPacketV2) -> None:
""" try to save log into the file """
if FLAGS.file is not None:
try:
with open(FLAGS.file, "a") as f:
f.write(f"{kr_packet}\r\n")
helper.log_packet(kr_packet)
helper.save(FLAGS.file)
except IOError:
logging.error("save to file error!", exc_info=sys.exc_info())
def handle_message(data: bytes) -> None:
def handle_message(helper: SpreadSheetHelper) -> None:
""" Handle message wrapper """
def wr(data: bytes) -> None:
""" Handle Message """
message = json_loads(data)
if message is None:
......@@ -68,10 +122,12 @@ def handle_message(data: bytes) -> None:
if station_id is None or \
station_id.lower() == kr_packet.station_id.lower():
logging.info(f"{kr_packet}")
try_to_log(kr_packet)
try_to_log(helper, kr_packet)
except Exception:
logging.error("handle_message: Error!", exc_info=sys.exc_info())
return wr
# noinspection PyShadowingNames
def main(_argv) -> None:
......@@ -81,12 +137,12 @@ def main(_argv) -> None:
logging.getLogger("asyncio").level = logging.INFO
logging_level = logging.INFO
init_logging(level=logging_level)
helper = SpreadSheetHelper()
io_loop = asyncio.get_event_loop()
ws_client = WSClient(io_loop=io_loop, scheme="https", host="cds.s1z.info",
path="/api/v1/ws-agg",
user="kraken", password="kraken", ca_file="./ca.pem",
on_data_handler=handle_message)
on_data_handler=handle_message(helper))
ws_client.start()
signal.signal(signal.SIGINT, stop_server(ws_client, io_loop))
signal.signal(signal.SIGTERM, stop_server(ws_client, io_loop))
......
......@@ -12,3 +12,6 @@ aiohttp==3.8.4
simplejson==3.19.1
marshmallow-dataclass==8.5.12
stringcase==1.2.0
# excel
openpyxl==3.1.2
......@@ -50,11 +50,15 @@ class KrPacketV2(BasicDataclass):
processing_time: int
compass_offset: float = 0
def __repr__(self):
dt = (
def get_timestamp(self):
""" get timestamp """
return (
datetime.fromtimestamp(self.t_stamp / 1000)
+ timedelta(hours=3) # this is a hack, fix it pls!
).strftime('%Y-%m-%d %H:%M:%S')
def get_absolute_doa(self):
""" get abolute doa """
absolute_bearing = self.gps_bearing + (360 - self.radio_bearing)
if absolute_bearing < 0:
absolute_bearing += 360
......@@ -63,9 +67,11 @@ class KrPacketV2(BasicDataclass):
if self.compass_offset != 0:
absolute_bearing += self.compass_offset
return absolute_bearing
return f"{dt}::{self.station_id}::" \
def __repr__(self):
return f"{self.get_timestamp()}::{self.station_id}::" \
f"frequency: {self.freq / 1000000}, " \
f"DoA: {absolute_bearing}, " \
f"DoA: {self.get_absolute_doa()}, " \
f"confidence: {self.conf}, " \
f"power: {self.power}"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment