diff --git a/bot/api/telegram.py b/bot/api/telegram.py index 38e3425..6de279f 100644 --- a/bot/api/telegram.py +++ b/bot/api/telegram.py @@ -43,8 +43,13 @@ class TelegramIO(): def process_message(self): """Inspects the first message from self.message_queue and reacts accordingly.""" message_data = self.message_queue.pop(0) - - self.persistence["bot"]["messages_read"] += 1 + current_hour = int(datetime.datetime.now().timestamp() // 3600) + if len(self.persistence["bot"]["receive_activity"]["hour"]) == 0 or current_hour != self.persistence["bot"]["receive_activity"]["hour"][-1]: + self.persistence["bot"]["receive_activity"]["hour"].append(current_hour) + self.persistence["bot"]["receive_activity"]["count"].append(1) + else: + self.persistence["bot"]["receive_activity"]["count"][-1] += 1 + self.offset = message_data["update_id"] + 1 if "edited_message" in message_data: @@ -112,7 +117,13 @@ class TelegramIO(): r = requests.post(send_url, data=data) if (r.status_code != 200): raise Exception - self.persistence["bot"]["messages_sent"] + + current_hour = int(datetime.datetime.now().timestamp() // 3600) + if len(self.persistence["bot"]["send_activity"]["hour"]) == 0 or current_hour != self.persistence["bot"]["send_activity"]["hour"][-1]: + self.persistence["bot"]["send_activity"]["hour"].append(current_hour) + self.persistence["bot"]["send_activity"]["count"].append(1) + else: + self.persistence["bot"]["send_activity"]["count"][-1] += 1 except: out = datetime.datetime.now().strftime("%d.%m.%y - %H:%M") out += " @ " + "telegram.send_message" diff --git a/bot/framework.py b/bot/framework.py index 9c37b3d..c3ab617 100644 --- a/bot/framework.py +++ b/bot/framework.py @@ -87,6 +87,13 @@ class BotFramework(): # *params means the list is unpacked and handed over as separate arguments. self.telegram.send_message(result) + current_hour = int(datetime.datetime.now().timestamp() // 3600) + if len(self.persistence["bot"]["execute_activity"]["hour"]) == 0 or current_hour != self.persistence["bot"]["execute_activity"]["hour"][-1]: + self.persistence["bot"]["execute_activity"]["hour"].append(current_hour) + self.persistence["bot"]["execute_activity"]["count"].append(1) + else: + self.persistence["bot"]["execute_activity"]["count"][-1] += 1 + if self.is_command(cmd): # first word call_command(cmd, params) elif cmd in self.persistence["bot"]["aliases"]: diff --git a/bot/main.py b/bot/main.py index dc558e7..9d7de26 100644 --- a/bot/main.py +++ b/bot/main.py @@ -2,6 +2,7 @@ import datetime from bot.api import telegram, google, weather, reddit import requests +import numpy as np import time import json import datetime @@ -64,13 +65,20 @@ class ChatBot(FW.BotFramework): ip = requests.get('https://api.ipify.org').text except: ip = "not fetchable" + message += "
Status: Running :green_circle:\n"
         message += "Uptime: " + delta[:delta.rfind(".")] + "\n"
         message += "Reboots: " + str(self.persistence["global"]["reboots"]) + "\n"
         message += "IP-Adress: " + ip + "\n"
-        message += "Messages read: " + str(self.persistence["bot"]["messages_read"]) + "\n"
-        message += "Messages sent: " + str(self.persistence["bot"]["messages_sent"]) + "\n"
-        message += "Commands executed " + str(self.persistence["bot"]["commands_executed"]) + "
" + + tot_r = np.array(self.persistence["bot"]["receive_activity"]["count"]).sum() + message += "Total messages read: " + str(tot_r) + "\n" + + tot_s = np.array(self.persistence["bot"]["send_activity"]["count"]).sum() + message += "Total messages sent: " + str(tot_s) + "\n" + + tot_e = np.array(self.persistence["bot"]["execute_activity"]["count"]).sum() + message += "Commands executed " + str(tot_e) + "" return message diff --git a/dashboard/main.py b/dashboard/main.py index c8953d9..eee3ffa 100644 --- a/dashboard/main.py +++ b/dashboard/main.py @@ -2,6 +2,7 @@ import dash import dash_bootstrap_components as dbc import dash_html_components as html import dash_core_components as dcc +import plotly.graph_objects as go from dash.dependencies import Input, Output import locale @@ -15,6 +16,7 @@ import xmltodict import requests import emoji + class DashBoard(): """""" def __init__(self, host_ip, prst): @@ -32,7 +34,8 @@ class DashBoard(): interval=3600*1000, # in milliseconds n_intervals=0 ) - ]) + ]#,style={'background-image':'url("static/background.jpg")'} + ) @self.app.callback(Output('layout-update','children'), Input('interval-component','n_intervals')) def update_layout(n): @@ -40,16 +43,14 @@ class DashBoard(): kids = [ self.card_header(), dbc.CardColumns([ + self.card_weather(), *self.cards_lists(), + self.card_bot_stats(), self.card_news(), self.card_xkcd(), - self.card_weather() - - ]) ] return kids - #[card_header, dbc.CardColumns([card_shopping_list,card_placeholder,card_placeholder,card_placeholder,card_placeholder,card_placeholder])] def launch_dashboard(self): @@ -89,8 +90,31 @@ class DashBoard(): return ret - # def card_bot_stats(self): - # return card + def card_bot_stats(self): + xs = self.persistence["bot"]["send_activity"]["hour"] + ys = self.persistence["bot"]["send_activity"]["count"] + xr = self.persistence["bot"]["receive_activity"]["hour"] + yr = self.persistence["bot"]["receive_activity"]["count"] + xe = self.persistence["bot"]["execute_activity"]["hour"] + ye = self.persistence["bot"]["execute_activity"]["count"] + + fig = go.Figure() + fig.add_trace(go.Scatter(x=xs, y=ys, fill="tozeroy", mode="lines", text="Gesendet")) + fig.add_trace(go.Scatter(x=xr, y=yr, fill="tozeroy", mode="lines", text="Gelesen")) + fig.add_trace(go.Scatter(x=xe, y=ye, fill="tozeroy", mode="lines", text="Ausgeführt")) + fig.layout.update(showlegend=False,margin=dict(l=0, r=0, t=0, b=0),) + + card = dbc.Card( + [ + dbc.CardBody([ + html.H4("Statistiken", className="card-title"), + dcc.Graph(figure=fig,config={'displayModeBar': False}) + ]), + ], + color="dark", + inverse=True, + ) + return card def card_weather(self): try: @@ -186,9 +210,4 @@ class DashBoard(): color="dark", inverse=True, ) - return card - - - -if __name__ == "__main__": - test = DashBoard(host_ip="0.0.0.0") \ No newline at end of file + return card \ No newline at end of file diff --git a/dashboard/static/background.jpg b/dashboard/static/background.jpg new file mode 100644 index 0000000..4b02663 Binary files /dev/null and b/dashboard/static/background.jpg differ diff --git a/launcher.py b/launcher.py index cc33541..6459af0 100644 --- a/launcher.py +++ b/launcher.py @@ -45,9 +45,9 @@ class Launcher(): def init_persistence(self): print("New Persistence created") self.persistence["bot"] = { - "messages_read": 0, - "messages_sent": 0, - "commands_executed": 0, + "send_activity" : {"hour":[], "count":[]}, + "receive_activity" : {"hour":[], "count":[]}, + "execute_activity" : {"hour":[], "count":[]}, "photos_sent": 0, "log": [], "chat_members": {},