From adebdf3cb717f45de7a706424b15bdfbca44dbfe Mon Sep 17 00:00:00 2001 From: Josh Black Date: Mon, 14 Nov 2022 17:08:13 -0800 Subject: [PATCH 1/2] don't return a 204 if there's no historical data --- vault/activity_log.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/vault/activity_log.go b/vault/activity_log.go index d9ef3fcc5518..970cef996a9c 100644 --- a/vault/activity_log.go +++ b/vault/activity_log.go @@ -1546,10 +1546,19 @@ func (a *ActivityLog) handleQuery(ctx context.Context, startTime, endTime time.T return nil, err } if storedQuery == nil { - return nil, nil + // If the storedQuery is nil, that means there's no historical data to process. But, it's possible there's + // still current month data to process, so rather than returning a 204, let's proceed along like we're + // just querying the current month. + storedQuery = &activity.PrecomputedQuery{ + StartTime: startTime, + EndTime: endTime, + Namespaces: make([]*activity.NamespaceRecord, 0), + Months: make([]*activity.MonthRecord, 0), + } } pq = storedQuery } + // Calculate the namespace response breakdowns and totals for entities and tokens from the initial // namespace data. totalEntities, totalTokens, byNamespaceResponse, err := a.calculateByNamespaceResponseForQuery(ctx, pq.Namespaces) @@ -1584,6 +1593,7 @@ func (a *ActivityLog) handleQuery(ctx context.Context, startTime, endTime time.T // Add the current month's namespace data the precomputed query namespaces byNamespaceResponse = append(byNamespaceResponse, byNamespaceResponseCurrent...) } + // Sort clients within each namespace a.sortALResponseNamespaces(byNamespaceResponse) @@ -1597,11 +1607,13 @@ func (a *ActivityLog) handleQuery(ctx context.Context, startTime, endTime time.T if err != nil { return nil, err } + // Add the namespace attribution for the current month to the newly computed current month value. Note // that transformMonthBreakdowns calculates a superstruct of the required namespace struct due to its // primary use-case being for precomputedQueryWorker, but we will reuse this code for brevity and extract // the namespaces from it. currentMonthNamespaceAttribution := a.transformMonthBreakdowns(partialByMonth) + // Ensure that there is only one element in this list -- if not, warn. if len(currentMonthNamespaceAttribution) > 1 { a.logger.Warn("more than one month worth of namespace and mount attribution calculated for "+ From 37ffc5de8157595b0967522ff655396c08c4d7ea Mon Sep 17 00:00:00 2001 From: Josh Black Date: Mon, 14 Nov 2022 17:15:57 -0800 Subject: [PATCH 2/2] add changelog --- changelog/17935.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 changelog/17935.txt diff --git a/changelog/17935.txt b/changelog/17935.txt new file mode 100644 index 000000000000..c16ffdfe332e --- /dev/null +++ b/changelog/17935.txt @@ -0,0 +1,3 @@ +```release-note:bug +core/activity: return partial month counts when querying a historical date range and no historical data exists. +```