You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by hu...@apache.org on 2021/09/18 22:35:00 UTC

[incubator-ponymail-foal] branch humbedooh/monthly_stats created (now f16ead4)

This is an automated email from the ASF dual-hosted git repository.

humbedooh pushed a change to branch humbedooh/monthly_stats
in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git.


      at f16ead4  refactor get_years, add activity stats and rename

This branch includes the following new commits:

     new f16ead4  refactor get_years, add activity stats and rename

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[incubator-ponymail-foal] 01/01: refactor get_years, add activity stats and rename

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

humbedooh pushed a commit to branch humbedooh/monthly_stats
in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git

commit f16ead4003fcb4417e4e8cd01252c76832feb0f3
Author: Daniel Gruno <hu...@apache.org>
AuthorDate: Sat Sep 18 17:34:54 2021 -0500

    refactor get_years, add activity stats and rename
---
 server/plugins/messages.py | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/server/plugins/messages.py b/server/plugins/messages.py
index cd3ed7b..e1077ba 100644
--- a/server/plugins/messages.py
+++ b/server/plugins/messages.py
@@ -411,8 +411,8 @@ async def get_list_stats(session, maxage="90d", admin=False):
     return lists
 
 
-async def get_years(session, query_defuzzed):
-    """ Fetches the oldest and youngest email, returns the years between them """
+async def get_activity_span(session, query_defuzzed):
+    """ Fetches the activity span of a search as well as active months within that span """
 
     # Fetch any private lists included in search results
     fuzz_private_only = dict(query_defuzzed)
@@ -445,7 +445,7 @@ async def get_years(session, query_defuzzed):
             {"bool": {"should": [{"term": {"private": False}}, {"terms": {"list_raw": private_lists_accessible}}]}}
         ]
 
-    # Get oldest and youngest doc in single scan
+    # Get oldest and youngest doc in single scan, as well as a monthly histogram
     res = await session.database.search(
         index=session.database.dbs.mbox,
         size=0,
@@ -453,18 +453,28 @@ async def get_years(session, query_defuzzed):
             "aggs": {
                 "first": {"min": {"field": "epoch"}},
                 "last": {"max": {"field": "epoch"}},
+                "active_months": {
+                    "date_histogram": {
+                        "field": "date",
+                        "calendar_interval": "month",
+                        "format": "yyyy-MM"
+                    }
+                }
             },
         }
     )
 
     oldest = datetime.datetime.fromtimestamp(0)
     youngest = datetime.datetime.fromtimestamp(0)
+    monthly_activity = {}
     if res["aggregations"]:
         aggs = res["aggregations"]
         oldest = datetime.datetime.fromtimestamp(aggs["first"]["value"] or 0)
         youngest = datetime.datetime.fromtimestamp(aggs["last"]["value"] or 0)
+        for bucket in aggs["active_months"].get("buckets", []):
+            monthly_activity[bucket["key_as_string"]] = bucket["doc_count"]
 
-    return oldest.year, youngest.year, oldest.month, youngest.month
+    return oldest, youngest, monthly_activity
 
 
 class ThreadConstructor: