Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backport of Add no-op CensusAgent into release/1.13.x #19629

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions changelog/19625.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
```release-note:feature
core (enterprise): Add background worker for automatic reporting of billing
information.
```
23 changes: 23 additions & 0 deletions vault/activity_log.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,14 @@ type ActivityLog struct {
partialMonthClientTracker map[string]*activity.EntityRecord

inprocessExport *atomic.Bool

// CensusReportDone is a channel used to signal tests upon successful calls
// to (CensusReporter).Write() in CensusReport.
CensusReportDone chan bool

// CensusReportInterval is the testing configuration for time between
// Write() calls initiated in CensusReport.
CensusReportInterval time.Duration
}

// These non-persistent configuration options allow us to disable
Expand All @@ -182,6 +190,9 @@ type ActivityLogCoreConfig struct {

// Do not start timers to send or persist fragments.
DisableTimers bool

// CensusReportInterval is the testing configuration for time
CensusReportInterval time.Duration
}

// NewActivityLog creates an activity log.
Expand All @@ -203,6 +214,7 @@ func NewActivityLog(core *Core, logger log.Logger, view *BarrierView, metrics me
writeCh: make(chan struct{}, 1), // same for full segment
doneCh: make(chan struct{}, 1),
partialMonthClientTracker: make(map[string]*activity.EntityRecord),
CensusReportInterval: time.Hour * 1,

currentSegment: segmentInfo{
startTimestamp: 0,
Expand Down Expand Up @@ -940,6 +952,10 @@ func (a *ActivityLog) SetConfigInit(config activityConfig) {

a.defaultReportMonths = config.DefaultReportMonths
a.retentionMonths = config.RetentionMonths

if a.configOverrides.CensusReportInterval > 0 {
a.CensusReportInterval = a.configOverrides.CensusReportInterval
}
}

// This version reacts to user changes
Expand Down Expand Up @@ -1076,6 +1092,9 @@ func (c *Core) setupActivityLog(ctx context.Context, wg *sync.WaitGroup) error {
manager.retentionWorker(ctx, time.Now(), months)
close(manager.retentionDone)
}(manager.retentionMonths)

manager.CensusReportDone = make(chan bool)
go c.activityLog.CensusReport(ctx, c.censusAgent)
}

return nil
Expand Down Expand Up @@ -1576,7 +1595,9 @@ func (a *ActivityLog) handleQuery(ctx context.Context, startTime, endTime time.T
if computePartial {
// Traverse through current month's activitylog data and group clients
// into months and namespaces
a.fragmentLock.RLock()
partialByMonth, partialByNamespace = a.populateNamespaceAndMonthlyBreakdowns()
a.fragmentLock.RUnlock()

// Convert the byNamespace breakdowns into structs that are
// consumable by the /activity endpoint, so as to reuse code between these two
Expand Down Expand Up @@ -1760,6 +1781,8 @@ type activityConfig struct {

// Enabled is one of enable, disable, default.
Enabled string `json:"enabled"`

CensusReportInterval time.Duration `json:"census_report_interval"`
}

func defaultActivityConfig() activityConfig {
Expand Down
3 changes: 3 additions & 0 deletions vault/activity_log_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@ import "context"
func (a *ActivityLog) sendCurrentFragment(ctx context.Context) error {
return nil
}

// CensusReport is a no-op on OSS
func (a *ActivityLog) CensusReport(_ctx context.Context, _ca *CensusAgent) {}
6 changes: 6 additions & 0 deletions vault/census.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
//go:build !enterprise

package vault

// CensusAgent is a stub for OSS
type CensusAgent struct{}
6 changes: 6 additions & 0 deletions vault/core.go
Original file line number Diff line number Diff line change
Expand Up @@ -638,6 +638,9 @@ type Core struct {

activityLogConfig ActivityLogCoreConfig

// censusAgent is the mechanism used for reporting Vault's billing data.
censusAgent *CensusAgent

// activeTime is set on active nodes indicating the time at which this node
// became active.
activeTime time.Time
Expand Down Expand Up @@ -801,6 +804,9 @@ type CoreConfig struct {
LicensePath string
LicensingConfig *LicensingConfig

// Configured Census Agent
censusAgent *CensusAgent

DisablePerformanceStandby bool
DisableIndexing bool
DisableKeyEncodingChecks bool
Expand Down
1 change: 1 addition & 0 deletions vault/testing.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ func TestCoreWithSealAndUINoCleanup(t testing.T, opts *CoreConfig) *Core {
conf.PluginDirectory = opts.PluginDirectory
conf.DetectDeadlocks = opts.DetectDeadlocks
conf.Experiments = []string{experiments.VaultExperimentEventsAlpha1}
conf.censusAgent = opts.censusAgent

if opts.Logger != nil {
conf.Logger = opts.Logger
Expand Down