Commit b0b757a5 by Oleksandr Barabash

xlsx file added to the logging

parent de94346c
...@@ -9,6 +9,8 @@ from typing import Optional ...@@ -9,6 +9,8 @@ from typing import Optional
from absl import app, flags from absl import app, flags
from absl.flags import FLAGS from absl.flags import FLAGS
from marshmallow import EXCLUDE 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.entities.data.kr_packet import KrPacketV2
from utils.ether_service.utils.json_func import json_loads from utils.ether_service.utils.json_func import json_loads
...@@ -18,7 +20,7 @@ from utils.ws_client import WSClient ...@@ -18,7 +20,7 @@ from utils.ws_client import WSClient
logger = logging.getLogger(__name__) 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") flags.DEFINE_string('file', None, "File where to save the history")
...@@ -43,18 +45,70 @@ def stop_server(server: WSClient, io_loop: AbstractEventLoop): ...@@ -43,18 +45,70 @@ def stop_server(server: WSClient, io_loop: AbstractEventLoop):
return wr 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 # 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 """ """ try to save log into the file """
if FLAGS.file is not None: if FLAGS.file is not None:
try: try:
with open(FLAGS.file, "a") as f: helper.log_packet(kr_packet)
f.write(f"{kr_packet}\r\n") helper.save(FLAGS.file)
except IOError: except IOError:
logging.error("save to file error!", exc_info=sys.exc_info()) 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 """ """ Handle Message """
message = json_loads(data) message = json_loads(data)
if message is None: if message is None:
...@@ -68,10 +122,12 @@ def handle_message(data: bytes) -> None: ...@@ -68,10 +122,12 @@ def handle_message(data: bytes) -> None:
if station_id is None or \ if station_id is None or \
station_id.lower() == kr_packet.station_id.lower(): station_id.lower() == kr_packet.station_id.lower():
logging.info(f"{kr_packet}") logging.info(f"{kr_packet}")
try_to_log(kr_packet) try_to_log(helper, kr_packet)
except Exception: except Exception:
logging.error("handle_message: Error!", exc_info=sys.exc_info()) logging.error("handle_message: Error!", exc_info=sys.exc_info())
return wr
# noinspection PyShadowingNames # noinspection PyShadowingNames
def main(_argv) -> None: def main(_argv) -> None:
...@@ -81,12 +137,12 @@ def main(_argv) -> None: ...@@ -81,12 +137,12 @@ def main(_argv) -> None:
logging.getLogger("asyncio").level = logging.INFO logging.getLogger("asyncio").level = logging.INFO
logging_level = logging.INFO logging_level = logging.INFO
init_logging(level=logging_level) init_logging(level=logging_level)
helper = SpreadSheetHelper()
io_loop = asyncio.get_event_loop() io_loop = asyncio.get_event_loop()
ws_client = WSClient(io_loop=io_loop, scheme="https", host="cds.s1z.info", ws_client = WSClient(io_loop=io_loop, scheme="https", host="cds.s1z.info",
path="/api/v1/ws-agg", path="/api/v1/ws-agg",
user="kraken", password="kraken", ca_file="./ca.pem", user="kraken", password="kraken", ca_file="./ca.pem",
on_data_handler=handle_message) on_data_handler=handle_message(helper))
ws_client.start() ws_client.start()
signal.signal(signal.SIGINT, stop_server(ws_client, io_loop)) signal.signal(signal.SIGINT, stop_server(ws_client, io_loop))
signal.signal(signal.SIGTERM, stop_server(ws_client, io_loop)) signal.signal(signal.SIGTERM, stop_server(ws_client, io_loop))
......
...@@ -12,3 +12,6 @@ aiohttp==3.8.4 ...@@ -12,3 +12,6 @@ aiohttp==3.8.4
simplejson==3.19.1 simplejson==3.19.1
marshmallow-dataclass==8.5.12 marshmallow-dataclass==8.5.12
stringcase==1.2.0 stringcase==1.2.0
# excel
openpyxl==3.1.2
...@@ -50,11 +50,15 @@ class KrPacketV2(BasicDataclass): ...@@ -50,11 +50,15 @@ class KrPacketV2(BasicDataclass):
processing_time: int processing_time: int
compass_offset: float = 0 compass_offset: float = 0
def __repr__(self): def get_timestamp(self):
dt = ( """ get timestamp """
return (
datetime.fromtimestamp(self.t_stamp / 1000) datetime.fromtimestamp(self.t_stamp / 1000)
+ timedelta(hours=3) # this is a hack, fix it pls! + timedelta(hours=3) # this is a hack, fix it pls!
).strftime('%Y-%m-%d %H:%M:%S') ).strftime('%Y-%m-%d %H:%M:%S')
def get_absolute_doa(self):
""" get abolute doa """
absolute_bearing = self.gps_bearing + (360 - self.radio_bearing) absolute_bearing = self.gps_bearing + (360 - self.radio_bearing)
if absolute_bearing < 0: if absolute_bearing < 0:
absolute_bearing += 360 absolute_bearing += 360
...@@ -63,9 +67,11 @@ class KrPacketV2(BasicDataclass): ...@@ -63,9 +67,11 @@ class KrPacketV2(BasicDataclass):
if self.compass_offset != 0: if self.compass_offset != 0:
absolute_bearing += self.compass_offset 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"frequency: {self.freq / 1000000}, " \
f"DoA: {absolute_bearing}, " \ f"DoA: {self.get_absolute_doa()}, " \
f"confidence: {self.conf}, " \ f"confidence: {self.conf}, " \
f"power: {self.power}" 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