Skip to content

Commit

Permalink
backport of commit e3c5977 (hashicorp#19629)
Browse files Browse the repository at this point in the history
Co-authored-by: Mike Palmiotto <mike.palmiotto@hashicorp.com>
  • Loading branch information
hc-github-team-secure-vault-core and mpalmi authored Mar 20, 2023
1 parent e257377 commit acb9d7c
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 0 deletions.
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

0 comments on commit acb9d7c

Please sign in to comment.