From de4b1f61c7bc2fcf59b6d4c652868babcef1b1df Mon Sep 17 00:00:00 2001 From: taoky Date: Thu, 28 Mar 2024 16:45:39 +0800 Subject: [PATCH] Make getting (last)monthtraffic blazing fast --- app/models.py | 21 ++++++++++++--------- scripts/create_views.py | 10 ++++++---- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/app/models.py b/app/models.py index 8814efd..65a00a0 100644 --- a/app/models.py +++ b/app/models.py @@ -257,9 +257,10 @@ def month_traffic(self): from radius.radacct where - ((month(radius.radacct.acctstarttime) = month(now())) and - (year(radius.radacct.acctstarttime) = year(now()))) and - radius.radacct.username = %s; + radius.radacct.acctstarttime BETWEEN + DATE_FORMAT(NOW() ,'%Y-%m-01') AND + LAST_DAY(NOW()) + and radius.radacct.username = %s; """, self.email).first() return sizeof_fmt(float(r[0]) if r and r[0] else 0) @@ -270,9 +271,10 @@ def last_month_traffic(self): from radius.radacct where - ((month(radius.radacct.acctstarttime) = month(now() - interval 1 month)) and - (year(radius.radacct.acctstarttime) = year(now() - interval 1 month))) and - radius.radacct.username = %s; + radius.radacct.acctstarttime BETWEEN + DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') AND + LAST_DAY(NOW() - INTERVAL 1 MONTH) + and radius.radacct.username = %s; """, self.email).first() return sizeof_fmt(float(r[0]) if r and r[0] else 0) @@ -295,9 +297,10 @@ def last_month_traffic_by_day(self): from radius.radacct where - month(radius.radacct.acctstarttime) = month(date_sub(now(), interval 1 month)) and - year(radius.radacct.acctstarttime) = year(date_sub(now(), interval 1 month)) and - radius.radacct.username = %s + radius.radacct.acctstarttime BETWEEN + DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') AND + LAST_DAY(NOW() - INTERVAL 1 MONTH) + and radius.radacct.username = %s group by day(radius.radacct.acctstarttime); """, self.email) diff --git a/scripts/create_views.py b/scripts/create_views.py index 869d856..18a3514 100755 --- a/scripts/create_views.py +++ b/scripts/create_views.py @@ -20,8 +20,9 @@ from radius.radacct where - ((month(radius.radacct.acctstarttime) = month(date_sub(now(),interval 1 month))) and - (year(radius.radacct.acctstarttime) = year(date_sub(now(),interval 1 month)))) + radius.radacct.acctstarttime BETWEEN + DATE_FORMAT(NOW() - INTERVAL 1 MONTH, '%Y-%m-01') AND + LAST_DAY(NOW() - INTERVAL 1 MONTH) group by radius.radacct.username; """) @@ -33,8 +34,9 @@ from radius.radacct where - ((month(radius.radacct.acctstarttime) = month(now())) and - (year(radius.radacct.acctstarttime) = year(now()))) + radius.radacct.acctstarttime BETWEEN + DATE_FORMAT(NOW() ,'%Y-%m-01') AND + LAST_DAY(NOW()) group by radius.radacct.username; """)