Added LocalMount field to Export API (#29145)

* OSS Changes Patch

* Added changelog
This commit is contained in:
divyaac
2024-12-11 08:58:12 -08:00
committed by GitHub
parent 6a3f828e16
commit af6d983404
3 changed files with 14 additions and 4 deletions

4
changelog/29145.txt Normal file
View File

@@ -0,0 +1,4 @@
```release-note:improvement
activity: Add a "local_mount" field to the Export API response. This field is true if the client is a token or created on a
local mount.
```

View File

@@ -336,6 +336,9 @@ type ActivityLogExportRecord struct {
// MountPath is the path of the auth mount associated with the token used
MountPath string `json:"mount_path" mapstructure:"mount_path"`
// LocalMount indicates if the mount only belongs to the current cluster
LocalMount bool `json:"local_mount" mapstructure:"local_mount"`
// Timestamp denotes the time at which the activity occurred formatted using RFC3339
Timestamp string `json:"timestamp" mapstructure:"timestamp"`
@@ -916,7 +919,7 @@ func (a *ActivityLog) getLastSegmentNumberByEntityPath(ctx context.Context, enti
}
// WalkEntitySegments loads each of the entity segments for a particular start time
func (a *ActivityLog) WalkEntitySegments(ctx context.Context, startTime time.Time, hll *hyperloglog.Sketch, walkFn func(*activity.EntityActivityLog, time.Time, *hyperloglog.Sketch) error) error {
func (a *ActivityLog) WalkEntitySegments(ctx context.Context, startTime time.Time, hll *hyperloglog.Sketch, walkFn func(*activity.EntityActivityLog, time.Time, bool) error) error {
baseGlobalPath := activityGlobalPathPrefix + activityEntityBasePath + fmt.Sprint(startTime.Unix()) + "/"
baseLocalPath := activityLocalPathPrefix + activityEntityBasePath + fmt.Sprint(startTime.Unix()) + "/"
@@ -940,7 +943,7 @@ func (a *ActivityLog) WalkEntitySegments(ctx context.Context, startTime time.Tim
if err != nil {
return fmt.Errorf("unable to parse segment %v%v: %w", basePath, path, err)
}
err = walkFn(out, startTime, hll)
err = walkFn(out, startTime, basePath == baseLocalPath)
if err != nil {
return fmt.Errorf("unable to walk entities: %w", err)
}
@@ -3834,7 +3837,7 @@ func (a *ActivityLog) writeExport(ctx context.Context, rw http.ResponseWriter, f
return err
}
walkEntities := func(l *activity.EntityActivityLog, startTime time.Time, hll *hyperloglog.Sketch) error {
walkEntities := func(l *activity.EntityActivityLog, startTime time.Time, isLocal bool) error {
for _, e := range l.Clients {
if _, ok := dedupIDs[e.ClientID]; ok {
continue
@@ -3866,6 +3869,7 @@ func (a *ActivityLog) writeExport(ctx context.Context, rw http.ResponseWriter, f
NamespacePath: nsDisplayPath,
Timestamp: ts.UTC().Format(time.RFC3339),
MountAccessor: e.MountAccessor,
LocalMount: isLocal,
// Default following to empty versus nil, will be overwritten if necessary
Policies: []string{},
@@ -4261,6 +4265,7 @@ func baseActivityExportCSVHeader() []string {
"client_id",
"client_type",
"local_entity_alias",
"local_mount",
"namespace_id",
"namespace_path",
"mount_accessor",

View File

@@ -1,7 +1,7 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
////go:build testonly
//go:build testonly
package activity_testonly
@@ -549,6 +549,7 @@ func getCSVExport(t *testing.T, client *api.Client, monthsPreviousTo int, now ti
boolFields := map[string]struct{}{
"local_entity_alias": {},
"local_mount": {},
}
mapFields := map[string]struct{}{