-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
84 lines (63 loc) · 1.9 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import logging
import os
from apscheduler.schedulers.background import BackgroundScheduler
from datetime import datetime, timedelta
from flask import jsonify
from sqlalchemy import and_, text
from random import randint
from config import app, db
port_number = int(os.environ.get("APP_PORT", 5153))
@app.route("/health_check")
def health_check():
return "ok"
@app.route("/readiness_check")
def readiness_check():
try:
count = db.session.execute(text("SELECT COUNT(*) FROM tokens")).scalar()
except Exception as e:
app.logger.error(e)
return "failed", 500
else:
return "ok"
def get_daily_visits():
with app.app_context():
result = db.session.execute(text("""
SELECT Date(created_at) AS date,
Count(*) AS visits
FROM tokens
WHERE used_at IS NOT NULL
GROUP BY Date(created_at)
"""))
response = {}
for row in result:
response[str(row[0])] = row[1]
app.logger.info(response)
return response
@app.route("/api/reports/daily_usage", methods=["GET"])
def daily_visits():
return jsonify(get_daily_visits())
@app.route("/api/reports/user_visits", methods=["GET"])
def all_user_visits():
result = db.session.execute(text("""
SELECT t.user_id,
t.visits,
users.joined_at
FROM (SELECT tokens.user_id,
Count(*) AS visits
FROM tokens
GROUP BY user_id) AS t
LEFT JOIN users
ON t.user_id = users.id;
"""))
response = {}
for row in result:
response[row[0]] = {
"visits": row[1],
"joined_at": str(row[2])
}
return jsonify(response)
scheduler = BackgroundScheduler()
job = scheduler.add_job(get_daily_visits, 'interval', seconds=30)
scheduler.start()
if __name__ == "__main__":
app.run(host="0.0.0.0", port=port_number)