Skip to content

Commit

Permalink
De-duplicate namespaces when historical and current month data are mi…
Browse files Browse the repository at this point in the history
…xed (#18452)

* De-duplicate namespaces when historical and current month data are mixed

* add changelog
  • Loading branch information
raskchanky authored and AnPucel committed Jan 14, 2023
1 parent 9531e57 commit 05dec23
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 2 deletions.
3 changes: 3 additions & 0 deletions changelog/18452.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
core/activity: de-duplicate namespaces when historical and current month data are mixed
```
23 changes: 21 additions & 2 deletions vault/activity_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -1590,8 +1590,27 @@ func (a *ActivityLog) handleQuery(ctx context.Context, startTime, endTime time.T
return nil, err
}

// Add the current month's namespace data the precomputed query namespaces
byNamespaceResponse = append(byNamespaceResponse, byNamespaceResponseCurrent...)
// Create a mapping of namespace id to slice index, so that we can efficiently update our results without
// having to traverse the entire namespace response slice every time.
nsrMap := make(map[string]int)
for i, nr := range byNamespaceResponse {
nsrMap[nr.NamespaceID] = i
}

// Rather than blindly appending, which will create duplicates, check our existing counts against the current
// month counts, and append or update as necessary.
for _, nrc := range byNamespaceResponseCurrent {
if ndx, ok := nsrMap[nrc.NamespaceID]; ok {
existingRecord := byNamespaceResponse[ndx]
existingRecord.Counts.EntityClients += nrc.Counts.EntityClients
existingRecord.Counts.Clients += nrc.Counts.Clients
existingRecord.Counts.DistinctEntities += nrc.Counts.DistinctEntities
existingRecord.Counts.NonEntityClients += nrc.Counts.NonEntityClients
existingRecord.Counts.NonEntityTokens += nrc.Counts.NonEntityTokens
} else {
byNamespaceResponse = append(byNamespaceResponse, nrc)
}
}
}

// Sort clients within each namespace
Expand Down
1 change: 1 addition & 0 deletions vault/logical_system_activity.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ func parseStartEndTimes(a *ActivityLog, d *framework.FieldData) (time.Time, time
return startTime, endTime, nil
}

// This endpoint is not used by the UI. The UI's "export" feature is entirely client-side.
func (b *SystemBackend) handleClientExport(ctx context.Context, req *logical.Request, d *framework.FieldData) (*logical.Response, error) {
a := b.Core.activityLog
if a == nil {
Expand Down

0 comments on commit 05dec23

Please sign in to comment.