Merge branch 'dev' into test

pull/181/head
Matheus Lima 2019-06-05 20:29:09 -03:00
commit 830ce5a4d6
3 changed files with 30 additions and 21 deletions

View File

@ -1,4 +1,5 @@
import os
from datetime import datetime
from os import environ
import schedule
@ -20,7 +21,7 @@ mycroft_db = DatabaseConnectionConfig(
def build_report():
with connect_to_db(mycroft_db) as db:
user_metrics = AccountRepository(db).daily_report()
user_metrics = AccountRepository(db).daily_report(datetime.now())
email = EmailMessage(
sender='reports@mycroft.ai',

View File

@ -1,3 +1,4 @@
from datetime import datetime, timedelta
from logging import getLogger
from os import environ
@ -193,20 +194,25 @@ class AccountRepository(RepositoryBase):
)
self.cursor.delete(db_request)
def daily_report(self):
def daily_report(self, date: datetime):
base = date - timedelta(days=1)
end_date = base.strftime('%Y-%m-%d')
start_date_1_day = (base - timedelta(days=1)).strftime('%Y-%m-%d')
start_date_15_days = (base - timedelta(days=15)).strftime('%Y-%m-%d')
start_date_30_days = (base - timedelta(days=30)).strftime('%Y-%m-%d')
db_request = self._build_db_request(
sql_file_name='daily_report.sql',
args=dict(start='1 DAY')
args=dict(start_date=start_date_1_day, end_date=end_date)
)
report_1_day = self.cursor.select_one(db_request)
db_request = self._build_db_request(
sql_file_name='daily_report.sql',
args=dict(start='15 DAY')
args=dict(start_date=start_date_15_days, end_date=end_date)
)
report_15_days = self.cursor.select_one(db_request)
db_request = self._build_db_request(
sql_file_name='daily_report.sql',
args=dict(start='30 DAY')
args=dict(start_date=start_date_30_days, end_date=end_date)
)
report_30_days = self.cursor.select_one(db_request)
@ -224,14 +230,17 @@ class AccountRepository(RepositoryBase):
'thirtyDaysMinus': 0
}, {
'type': 'Free Account',
'current': report_1_day['free_total'],
'oneDay': report_1_day['free_total'] - report_1_day['total_new'] + report_1_day['paid_new'],
'current': report_1_day['total'] - report_1_day['paid_total'],
'oneDay': report_1_day['total'] - report_1_day['paid_total'] - report_1_day['total_new'] + report_1_day[
'paid_new'],
'oneDayDelta': report_1_day['total_new'] - report_1_day['paid_new'],
'oneDayMinus': 0,
'fifteenDays': report_15_days['free_total'] - report_15_days['total_new'] + report_15_days['paid_new'],
'fifteenDays': report_15_days['total'] - report_15_days['paid_total'] - report_15_days['total_new'] +
report_15_days['paid_new'],
'fifteenDaysDelta': report_15_days['total_new'] - report_15_days['paid_new'],
'fifteenDaysMinus': 0,
'thirtyDays': report_30_days['free_total'] - report_30_days['total_new'] + report_30_days['paid_new'],
'thirtyDays': report_30_days['total'] - report_30_days['paid_total'] - report_30_days['total_new'] +
report_30_days['paid_new'],
'thirtyDaysDelta': report_30_days['total_new'] - report_30_days['paid_new'],
'thirtyDaysMinus': 0
}, {

View File

@ -1,16 +1,15 @@
SELECT
COUNT(acc) AS total,
COUNT(acc) FILTER(WHERE acc.insert_ts::DATE >= (CURRENT_DATE - INTERVAL %(start)s)) AS total_new,
COUNT(acc) FILTER(WHERE acc_mem.account_id IS NULL) as free_total,
COUNT(mem) FILTER(WHERE mem.rate_period = 'month' AND UPPER(acc_mem.membership_ts_range) IS NULL) AS monthly_total,
COUNT(mem) FILTER(WHERE mem.rate_period = 'month' AND UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) >= (CURRENT_DATE - INTERVAL %(start)s)) AS monthly_new,
COUNT(mem) FILTER(WHERE mem.rate_period = 'month' AND UPPER(acc_mem.membership_ts_range) IS NOT NULL AND UPPER(acc_mem.membership_ts_range) >= (CURRENT_DATE - INTERVAL %(start)s)) AS monthly_minus,
COUNT(mem) FILTER(WHERE mem.rate_period = 'year' AND UPPER(acc_mem.membership_ts_range) IS NULL) AS yearly_total,
COUNT(mem) FILTER(WHERE mem.rate_period = 'year' AND UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) >= (CURRENT_DATE - INTERVAL %(start)s)) AS yearly_new,
COUNT(mem) FILTER(WHERE mem.rate_period = 'year' AND UPPER(acc_mem.membership_ts_range) IS NOT NULL AND UPPER(acc_mem.membership_ts_range) >= (CURRENT_DATE - INTERVAL %(start)s)) as yearly_minus,
COUNT(acc_mem) FILTER(WHERE UPPER(acc_mem.membership_ts_range) IS NULL) AS paid_total,
COUNT(acc_mem) FILTER(WHERE UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) >= (CURRENT_DATE - INTERVAL %(start)s)) AS paid_new,
COUNT(acc_mem) FILTER(WHERE UPPER(acc_mem.membership_ts_range) IS NOT NULL AND UPPER(acc_mem.membership_ts_range) >= (CURRENT_DATE - INTERVAL %(start)s)) AS paid_minus
COUNT(acc) FILTER(WHERE acc.insert_ts::DATE <= %(end_date)s) AS total,
COUNT(acc) FILTER(WHERE acc.insert_ts > %(start_date)s AND acc.insert_ts <= %(end_date)s) AS total_new,
COUNT(mem) FILTER(WHERE mem.rate_period = 'month' AND UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) <= %(end_date)s) AS monthly_total,
COUNT(mem) FILTER(WHERE mem.rate_period = 'month' AND UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) > %(start_date)s AND LOWER(acc_mem.membership_ts_range) <= %(end_date)s) AS monthly_new,
COUNT(mem) FILTER(WHERE mem.rate_period = 'month' AND UPPER(acc_mem.membership_ts_range) IS NOT NULL AND UPPER(acc_mem.membership_ts_range) > %(start_date)s AND UPPER(acc_mem.membership_ts_range) <= %(end_date)s) AS monthly_minus,
COUNT(mem) FILTER(WHERE mem.rate_period = 'year' AND UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) <= %(end_date)s) AS yearly_total,
COUNT(mem) FILTER(WHERE mem.rate_period = 'year' AND UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) > %(start_date)s AND LOWER(acc_mem.membership_ts_range) <= %(end_date)s) AS yearly_new,
COUNT(mem) FILTER(WHERE mem.rate_period = 'year' AND UPPER(acc_mem.membership_ts_range) IS NOT NULL AND UPPER(acc_mem.membership_ts_range) > %(start_date)s AND UPPER(acc_mem.membership_ts_range) <= %(end_date)s) as yearly_minus,
COUNT(acc_mem) FILTER(WHERE UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) <= %(end_date)s) AS paid_total,
COUNT(acc_mem) FILTER(WHERE UPPER(acc_mem.membership_ts_range) IS NULL AND LOWER(acc_mem.membership_ts_range) > %(start_date)s AND LOWER(acc_mem.membership_ts_range) <= %(end_date)s) AS paid_new,
COUNT(acc_mem) FILTER(WHERE UPPER(acc_mem.membership_ts_range) IS NOT NULL AND UPPER(acc_mem.membership_ts_range) > %(start_date)s AND UPPER(acc_mem.membership_ts_range) <= %(end_date)s) AS paid_minus
FROM
account.account acc
LEFT JOIN