Skip to content

Commit 1b98b54

Browse files
committed
Extend store_counts to gather recent login counts
1 parent 9f0cc79 commit 1b98b54

File tree

1 file changed

+84
-7
lines changed

1 file changed

+84
-7
lines changed

scripts/store_counts.py

Lines changed: 84 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,93 @@
11
#!/usr/bin/env python
22

3+
import argparse
4+
import datetime
35
import sys
46

7+
from psycopg2 import DatabaseError
8+
59
import _init_path # noqa: F401 Imported for its side effect of setting PYTHONPATH
610

11+
import infogami
712
from openlibrary.admin import stats
13+
from openlibrary.config import load_config
14+
from openlibrary.core import db, stats
15+
16+
def setup(ol_config_path: str):
17+
print('setup')
18+
load_config(ol_config_path)
19+
infogami._setup()
20+
21+
22+
def gather_login_stats(since_days=30):
23+
print('gather_login_stats')
24+
since_date = datetime.datetime.now() - datetime.timedelta(days=since_days)
25+
date_str = since_date.strftime("%Y-%m-%d")
26+
27+
# make queries for login stats
28+
tmp_table_query = """
29+
CREATE TEMPORARY TABLE recent_logins AS
30+
SELECT store_id
31+
FROM store_index
32+
WHERE type = 'account'
33+
AND name = 'last_login'
34+
AND value > $date
35+
"""
36+
37+
recent_logins_query = """
38+
SELECT COUNT(*) AS total_logins_since_date FROM recent_logins
39+
"""
40+
41+
returning_logins_query = """
42+
SELECT COUNT(si.store_id) AS logins_created_before_date
43+
FROM recent_logins rl
44+
INNER JOIN store_index si
45+
ON rl.store_id = si.store_id
46+
WHERE si.name = 'created_on'
47+
AND si.value < $date
48+
"""
49+
oldb = db.get_db()
50+
t = oldb.transaction()
51+
try:
52+
oldb.query(tmp_table_query, vars={'date': date_str})
53+
recent_logins = list(oldb.query(recent_logins_query))
54+
returning_logins = list(oldb.query(returning_logins_query, vars={'date': date_str}))
55+
56+
# write login stats to statsd
57+
stats.increment('ol.logins.recent', n=recent_logins[0].get('total_logins_since_date'))
58+
stats.increment('ol.tags.bulk_update.book_page.remove', n=returning_logins[0].get('logins_created_before_date'))
59+
60+
except DatabaseError as e:
61+
print(f"An error occurred while fetching login statistics: {e}")
62+
finally:
63+
t.rollback()
64+
65+
66+
def main(args):
67+
print('main')
68+
if args.login_stats:
69+
setup(args.openlibrary_config)
70+
gather_login_stats()
71+
sys.exit(stats.main(args.infobase_config, args.openlibrary_config, args.coverstore_config, args.number_of_days))
72+
73+
74+
def _parse_args():
75+
p = argparse.ArgumentParser(description=__doc__)
76+
p.add_argument('infobase_config')
77+
p.add_argument('openlibrary_config')
78+
p.add_argument('coverstore_config')
79+
p.add_argument('number_of_days')
80+
p.add_argument(
81+
"--login-stats",
82+
action="store_true",
83+
help="Gather and persist login stats",
84+
)
85+
86+
p.set_defaults(func=main)
87+
return p.parse_args()
88+
889

990
if __name__ == "__main__":
10-
if len(sys.argv) != 5:
11-
print(
12-
"Usage : %s infobase_config openlibrary_config coverstore_config number_of_days",
13-
file=sys.stderr,
14-
)
15-
sys.exit(-1)
16-
sys.exit(stats.main(*sys.argv[1:]))
91+
args = _parse_args()
92+
args.func(args)
93+

0 commit comments

Comments
 (0)