magneticow: fix 30-days period issue in stats
Previously magenticow calculated 30-days period as literally 30 days (30 * 24 * 60 * 60 seconds) from NOW, which was counter-intuitive for the user as it did not correspond to whole days. Now that is fixed.
This commit is contained in:
parent
e4c33ceb36
commit
273237bd39
@ -14,10 +14,10 @@
|
|||||||
# <http://www.gnu.org/licenses/>.
|
# <http://www.gnu.org/licenses/>.
|
||||||
import collections
|
import collections
|
||||||
import functools
|
import functools
|
||||||
|
import datetime as dt
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import logging
|
import logging
|
||||||
import sqlite3
|
import sqlite3
|
||||||
import time
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import appdirs
|
import appdirs
|
||||||
@ -211,8 +211,17 @@ def torrent(**kwargs):
|
|||||||
@app.route("/statistics")
|
@app.route("/statistics")
|
||||||
@requires_auth
|
@requires_auth
|
||||||
def statistics():
|
def statistics():
|
||||||
|
# Ahhh...
|
||||||
|
# Time is hard, really. magneticod used time.time() to save when a torrent is discovered, unaware that none of the
|
||||||
|
# specifications say anything about the timezones (or their irrelevance to the UNIX time) and about leap seconds in
|
||||||
|
# a year.
|
||||||
|
# Nevertheless, we still use it. In future, before v1.0.0, we may change it as we wish, offering a migration
|
||||||
|
# solution for the current users. But in the meanwhile, be aware that all your calculations will be a bit lousy,
|
||||||
|
# though within tolerable limits for a torrent search engine.
|
||||||
|
|
||||||
with magneticod_db:
|
with magneticod_db:
|
||||||
now = int(time.time())
|
# latest_today is the latest UNIX timestamp of today, the very last second.
|
||||||
|
latest_today = int((dt.date.today() + dt.timedelta(days=1) - dt.timedelta(seconds=1)).strftime("%s"))
|
||||||
# Retrieve all the torrents discovered in the past 30 days (30 days * 24 hours * 60 minutes * 60 seconds...)
|
# Retrieve all the torrents discovered in the past 30 days (30 days * 24 hours * 60 minutes * 60 seconds...)
|
||||||
# Also, see http://www.sqlite.org/lang_datefunc.html for details of `date()`.
|
# Also, see http://www.sqlite.org/lang_datefunc.html for details of `date()`.
|
||||||
# Function Equivalent strftime()
|
# Function Equivalent strftime()
|
||||||
@ -220,7 +229,7 @@ def statistics():
|
|||||||
cur = magneticod_db.execute(
|
cur = magneticod_db.execute(
|
||||||
"SELECT date(discovered_on, 'unixepoch') AS day, count() FROM torrents WHERE discovered_on >= ? "
|
"SELECT date(discovered_on, 'unixepoch') AS day, count() FROM torrents WHERE discovered_on >= ? "
|
||||||
"GROUP BY day;",
|
"GROUP BY day;",
|
||||||
(now - 30 * 24 * 60 * 60, )
|
(latest_today - 30 * 24 * 60 * 60, )
|
||||||
)
|
)
|
||||||
results = cur.fetchall() # for instance, [('2017-04-01', 17428), ('2017-04-02', 28342)]
|
results = cur.fetchall() # for instance, [('2017-04-01', 17428), ('2017-04-02', 28342)]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user