@@ -11,45 +11,75 @@ import (
1111 "github.com/hashicorp/consul/agent/structs"
1212 "github.com/hashicorp/go-hclog"
1313 "github.com/hashicorp/go-memdb"
14+ "github.com/hashicorp/go-retryablehttp"
1415)
1516
1617type ReportingManager struct {
17- logger hclog.Logger
18- server ServerDelegate
19- stateProvider StateDelegate
20- tickerInterval time.Duration
18+ logger hclog.Logger
19+ clusterId string
20+ autoReporting bool
21+ server ServerDelegate
22+ stateProvider StateDelegate
23+ tickerInterval time.Duration
24+ manualSnapshotInterval time.Duration
25+ snapshotRetention time.Duration
26+ customerID string
2127 EntDeps
2228 sync.RWMutex
29+ manualHTTPClient * retryablehttp.Client
30+ manualServiceAddress string
2331}
2432
2533const (
2634 SystemMetadataReportingProcessID = "reporting-process-id"
2735 ReportingInterval = 1 * time .Hour
2836)
2937
38+ const (
39+ // ManualSnapshotInterval controls how often we persist manual census snapshots.
40+ ManualSnapshotInterval = 24 * time .Hour
41+ // DefaultSnapshotRetention is the default retention period for manual census snapshots.
42+ DefaultSnapshotRetention = 9600 * time .Hour // 400 days
43+ )
44+
3045//go:generate mockery --name ServerDelegate --inpackage
3146type ServerDelegate interface {
3247 GetSystemMetadata (key string ) (string , error )
3348 SetSystemMetadataKey (key , val string ) error
3449 IsLeader () bool
50+ ApplyCensusRequest (req * structs.CensusRequest ) error
3551}
3652
3753type StateDelegate interface {
54+ // Metrics methods
3855 NodeUsage () (uint64 , state.NodeUsage , error )
3956 ServiceUsage (ws memdb.WatchSet , tenantUsage bool ) (uint64 , structs.ServiceUsage , error )
57+ // Census methods
58+ CensusPut (idx uint64 , req * structs.CensusRequest ) error
59+ CensusPrune (idx uint64 , cutoff time.Time ) (int , error )
60+ CensusListAll () (uint64 , []* state.CensusSnapshot , error )
4061}
4162
42- func NewReportingManager (logger hclog.Logger , deps EntDeps , server ServerDelegate , stateProvider StateDelegate ) * ReportingManager {
63+ func NewReportingManager (logger hclog.Logger , clusterId string , autoReporting bool , deps EntDeps , server ServerDelegate , stateProvider StateDelegate , snapshotRetention time.Duration ) * ReportingManager {
64+ if snapshotRetention <= 0 {
65+ snapshotRetention = DefaultSnapshotRetention
66+ }
67+
4368 rm := & ReportingManager {
44- logger : logger .Named ("reporting" ),
45- server : server ,
46- stateProvider : stateProvider ,
47- tickerInterval : ReportingInterval ,
69+ logger : logger .Named ("reporting" ),
70+ clusterId : clusterId ,
71+ autoReporting : autoReporting ,
72+ server : server ,
73+ stateProvider : stateProvider ,
74+ tickerInterval : ReportingInterval ,
75+ manualSnapshotInterval : ManualSnapshotInterval ,
76+ snapshotRetention : snapshotRetention ,
4877 }
4978 err := rm .initEnterpriseReporting (deps )
5079 if err != nil {
5180 rm .logger .Error ("Error initializing reporting manager" , "error" , err )
5281 return nil
5382 }
83+ rm .logger .Debug ("Created reporting manager" )
5484 return rm
55- }
85+ }
0 commit comments