From 2cf59c2d4acbe0decd808053b3c3e9d313f9acc6 Mon Sep 17 00:00:00 2001 From: Alex Bledea Date: Sun, 7 Apr 2024 00:55:06 +0300 Subject: [PATCH] plot like graph --- outbox/main.py | 49 +++++++++++++++++++++++++++++++++++++---- outbox/producer/main.go | 2 +- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/outbox/main.py b/outbox/main.py index ece5f35..137c093 100644 --- a/outbox/main.py +++ b/outbox/main.py @@ -1,8 +1,7 @@ import datetime import json import socket -from time import sleep -from typing import Counter +from collections import Counter from matplotlib import pyplot as plt import numpy as np import pandas as pd @@ -20,7 +19,7 @@ HOST = "127.0.0.1" -PORT = 13311 +PORT = 13312 @dataclass class ArticleLikedEvent: @@ -37,6 +36,38 @@ class Message: class Ack: id: int +def generate_like_graph(events: list[ArticleLikedEvent]): + + totals = [] + for e in events: + totals.append(str(datetime.datetime( + e.timestamp.year, + e.timestamp.month, + e.timestamp.day, + e.timestamp.hour, + e.timestamp.minute, + e.timestamp.second))) + + totalsDict = dict(Counter(totals)) + xaxis, yaxis = [], [] + for k in sorted(totalsDict.keys()): + xaxis.append(k) + yaxis.append(totalsDict[k]) + + #define data + df = pd.DataFrame({ + 'time':xaxis, + 'seconds': yaxis}) + + #plot time series + plt.plot(df.time, df.seconds, linewidth=3) + #add title and axis labels + plt.title('Likes by second') + plt.xlabel('Second') + plt.ylabel('Likes') + + plt.savefig('data.png') + receivedEvents: list[ArticleLikedEvent] = [] @@ -44,21 +75,31 @@ class Ack: s.bind((HOST, PORT)) s.listen() conn, addr = s.accept() + c = 0 with conn: print(f"Connected by {addr}") while True: try: + c += 1 data = conn.recv(1024 * 1024 * 10).decode('UTF-8') print("received data", data) message = Message(**json.loads(str(data))) + message.events = [ArticleLikedEvent(**e) for e in message.events] + receivedEvents.extend(message.events) ack = json.dumps(asdict(Ack(id=message.id))) conn.sendall(bytes(ack,encoding="utf-8")) - all = [e['event_id'] for e in receivedEvents] + all = [e.event_id for e in receivedEvents] print("allevents", all, len(all)) + if c == 10: + + break + except KeyboardInterrupt: + generate_like_graph(receivedEvents) + except Exception as e: print("exception", e) break diff --git a/outbox/producer/main.go b/outbox/producer/main.go index a559144..4663b0f 100644 --- a/outbox/producer/main.go +++ b/outbox/producer/main.go @@ -72,7 +72,7 @@ func main() { } // Initialize poller - poller, err := articles.NewLikedArticlesPoller(storage, 5*time.Second, "localhost:13311") + poller, err := articles.NewLikedArticlesPoller(storage, 5*time.Second, "localhost:13312") if err != nil { fmt.Printf("could not start poller: %s\n", err.Error()) os.Exit(1)