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:
parent
20eb5ccb9d
commit
f8f4547743
4 changed files with 83 additions and 10 deletions
8
db.py
8
db.py
|
@ -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
|
||||
|
|
|
@ -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;"""
|
|
@ -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>
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in a new issue