1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00

Add hourly graph

This commit is contained in:
Steffo 2019-01-25 20:35:14 +01:00
parent 20eb5ccb9d
commit f8f4547743
4 changed files with 83 additions and 10 deletions

8
db.py
View file

@ -21,7 +21,7 @@ from discord import User as DiscordUser
from telegram import User as TelegramUser
import loldata
from dirty import Dirty, DirtyDelta
import query_discord_music
import sql_queries
from flask import escape
import libgravatar
import configparser
@ -716,11 +716,11 @@ class Discord(Base, Mini):
@classmethod
def mini_get_all(cls, session: Session):
return [dict(row) for row in session.execute(query_discord_music.all_query)]
return [dict(row) for row in session.execute(sql_queries.all_query)]
@classmethod
def mini_get_single(cls, session: Session, **kwargs):
return session.execute(query_discord_music.one_query, {"royal": kwargs["royal"].id}).fetchone()
return session.execute(sql_queries.one_query, {"royal": kwargs["royal"].id}).fetchone()
@classmethod
def mini_get_single_from_royal(cls, session: Session, royal: "Royal"):
@ -927,7 +927,7 @@ class VoteQuestion(Base):
text = f"<b>{self.question}</b>\n\n"
none, yes, no, abstain = 0, 0, 0, 0
if self.message_id is not None:
query = session.execute(query_discord_music.vote_answers, {"message_id": self.message_id})
query = session.execute(sql_queries.vote_answers, {"message_id": self.message_id})
for record in query:
if record["username"] == "royalgamesbot":
continue

View file

@ -1,4 +1,4 @@
all_query = """SELECT
all_music_query = """SELECT
discord.royal_id,
discord.discord_id,
discord.name,
@ -59,7 +59,7 @@ LEFT JOIN
# TODO: can and should be optimized, but I'm too lazy for that
one_query = """SELECT
one_music_query = """SELECT
discord.royal_id,
discord.discord_id,
discord.name,
@ -141,3 +141,13 @@ LEFT JOIN
WHERE votequestion.message_id = :message_id
) answer ON telegram.telegram_id = answer.user_id
ORDER BY answer.choice;"""
activity_by_hour = """SELECT AVG(discord_members_online) online_members_avg,
AVG(discord_members_ingame) ingame_members_avg,
AVG(discord_members_cv) cv_members_avg,
AVG(discord_channels_used) channels_used_avg,
AVG(discord_cv) cv_avg,
extract(hour from timestamp) h
FROM activityreports
GROUP BY h
ORDER BY h;"""

View file

@ -151,6 +151,68 @@
},
"options":{
}
});
</script>
<h1>
Media dell'attività per ogni ora
</h1>
<canvas class="graph members-graph-hour-bucket" id="discord-members-hour-bucket" height="60px"></canvas>
<script>
new Chart("discord-members-hour-bucket",
{
"type": "line",
"data": {
"labels": [
{% for point in hourly_avg %}
"{{ point.h|int }}:00",
{% endfor %}
],
"datasets": [
{
"label": "In cv",
"borderColor": "#fe7f00",
"backgroundColor": "#fe7f0022",
"borderWidth": 4,
"cubicInterpolationMode": "monotone",
"fill": "origin",
"data": [
{% for point in hourly_avg %}
{{ point.cv_members_avg }},
{% endfor %}
]
},
{
"label": "In game",
"borderColor": "#9ae915",
"backgroundColor": "#9ae91511",
"borderWidth": 1,
"borderDash": [2],
"cubicInterpolationMode": "monotone",
"fill": "disabled",
"data": [
{% for point in hourly_avg %}
{{ point.ingame_members_avg }},
{% endfor %}
]
},
{
"label": "Online",
"borderColor": "#6dcff6",
"backgroundColor": "#6dcff611",
"borderWidth": 1,
"cubicInterpolationMode": "monotone",
"fill": 0,
"data": [
{% for point in hourly_avg %}
{{ point.online_members_avg }},
{% endfor %}
]
}
]
},
"options":{
}
});
</script>

View file

@ -9,7 +9,7 @@ import datetime
# noinspection PyPackageRequirements
import telegram
import errors
import query_discord_music
import sql_queries
import random
import re
import functools
@ -310,7 +310,7 @@ def page_diario():
@app.route("/music")
def page_music():
songs = fl_g.session.execute(query_discord_music.top_songs)
songs = fl_g.session.execute(sql_queries.top_songs)
return render_template("topsongs.html", songs=songs)
@ -320,14 +320,15 @@ def page_music_individual(discord_id: str):
if discord is None:
abort(404)
return
songs = fl_g.session.execute(query_discord_music.single_top_songs, {"discordid": discord.discord_id})
songs = fl_g.session.execute(sql_queries.single_top_songs, {"discordid": discord.discord_id})
return render_template("topsongs.html", songs=songs, discord=discord)
@app.route("/activity")
def page_activity():
reports = list(fl_g.session.query(db.ActivityReport).order_by(db.ActivityReport.timestamp.desc()).limit(192).all())
return render_template("activity.html", activityreports=list(reversed(reports)))
hourly_avg = list(fl_g.session.execute(sql_queries.activity_by_hour))
return render_template("activity.html", activityreports=list(reversed(reports)), hourly_avg=hourly_avg)
@app.route("/ses/identify")