Skip to content
Open
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
1 change: 1 addition & 0 deletions pkg/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@ const (
MetricKeyOperation = "operation"
MetricKeyQueue = "queue"
MetricKeyResource = "resource"
MetricKeyVersion = "version"
)
3 changes: 3 additions & 0 deletions pkg/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ var (
ModulesAbsentResourcesTotal = "{PREFIX}modules_absent_resources_total"
// ModuleInfoMetricName tracks module information
ModuleInfoMetricName = "{PREFIX}mm_module_info"
// ModuleVersionEnabledMetricName tracks enabled modules with their deployed version
ModuleVersionEnabledMetricName = "{PREFIX}mm_module_enabled"
// ModuleMaintenanceMetricName tracks module maintenance state
ModuleMaintenanceMetricName = "{PREFIX}mm_module_maintenance"

Expand Down Expand Up @@ -152,6 +154,7 @@ func InitMetrics(prefix string) {
ModulesHelmReleaseRedeployedTotal = ReplacePrefix(ModulesHelmReleaseRedeployedTotal, prefix)
ModulesAbsentResourcesTotal = ReplacePrefix(ModulesAbsentResourcesTotal, prefix)
ModuleInfoMetricName = ReplacePrefix(ModuleInfoMetricName, prefix)
ModuleVersionEnabledMetricName = ReplacePrefix(ModuleVersionEnabledMetricName, prefix)
ModuleMaintenanceMetricName = ReplacePrefix(ModuleMaintenanceMetricName, prefix)

// ============================================================================
Expand Down
10 changes: 10 additions & 0 deletions pkg/module_manager/models/modules/basic.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ type BasicModule struct {
// required
Path string

version string

critical bool

crdsExist bool
Expand Down Expand Up @@ -121,6 +123,14 @@ func (bm *BasicModule) SetCritical(value bool) {
bm.critical = value
}

func (bm *BasicModule) SetVersion(v string) {
bm.version = v
}

func (bm *BasicModule) GetVersion() string {
return bm.version
}

// getCRDsFromPath scan path/crds directory and store yaml file in slice
// if file name do not start with `_` or `doc-` prefix
func getCRDsFromPath(path string, crdsFilters string) []string {
Expand Down
23 changes: 23 additions & 0 deletions pkg/module_manager/module_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ var (
moduleInfoMetricGroup = "mm_module_info"
moduleInfoMetricName = metrics.ModuleInfoMetricName

moduleVersionEnabledMetricGroup = "mm_module_enabled"

moduleMaintenanceMetricGroup = "mm_module_maintenance"
moduleMaintenanceMetricName = metrics.ModuleMaintenanceMetricName

Expand Down Expand Up @@ -205,6 +207,26 @@ func (mm *ModuleManager) SetModuleLoader(ld loader.ModuleLoader) {
mm.moduleLoader = ld
}

// RefreshModuleTelemetry expires and re-populates the mm_module_enabled
// metric group. For each enabled module with a known version, a gauge of 1
// is emitted with module name and version labels.
func (mm *ModuleManager) RefreshModuleTelemetry() {
mm.dependencies.MetricStorage.Grouped().ExpireGroupMetrics(moduleVersionEnabledMetricGroup)
for _, name := range mm.GetModuleNames() {
if !mm.IsModuleEnabled(name) {
continue
}
mod := mm.GetModule(name)
if mod == nil || mod.GetVersion() == "" {
continue
}
mm.dependencies.MetricStorage.Grouped().GaugeSet(moduleVersionEnabledMetricGroup, metrics.ModuleVersionEnabledMetricName, 1, map[string]string{
pkg.MetricKeyModule: name,
pkg.MetricKeyVersion: mod.GetVersion(),
})
}
}

// GetDependencies fetch dependencies struct from ModuleManager
// note: not the best way but it's required in some hooks
func (mm *ModuleManager) GetDependencies() *ModuleManagerDependencies {
Expand Down Expand Up @@ -506,6 +528,7 @@ func (mm *ModuleManager) UpdateModulesMetrics() {
}
mm.dependencies.MetricStorage.Grouped().GaugeSet(moduleInfoMetricGroup, moduleInfoMetricName, 1, map[string]string{pkg.MetricKeyModule: module, "enabled": enabled})
}
mm.RefreshModuleTelemetry()
}

func (mm *ModuleManager) SetModuleMaintenanceState(moduleName string, state utils.Maintenance) {
Expand Down
Loading