Skip to content

Commit 033f4e2

Browse files
authored
[feature] export module versions to DOP via mm_module_enabled metric (#752)
Signed-off-by: Artem Kuleshov <artem.kuleshov@flant.com>
1 parent 4454a76 commit 033f4e2

4 files changed

Lines changed: 51 additions & 0 deletions

File tree

pkg/labels.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,5 @@ const (
126126
MetricKeyOperation = "operation"
127127
MetricKeyQueue = "queue"
128128
MetricKeyResource = "resource"
129+
MetricKeyVersion = "version"
129130
)

pkg/metrics/metrics.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ var (
4545
ModulesAbsentResourcesTotal = "{PREFIX}modules_absent_resources_total"
4646
// ModuleInfoMetricName tracks module information
4747
ModuleInfoMetricName = "{PREFIX}mm_module_info"
48+
// ModuleEnabledMetricName tracks enabled modules with their deployed version
49+
ModuleEnabledMetricName = "{PREFIX}mm_module_enabled"
50+
// ModuleEnabledTelemetryMetricName mirrors ModuleEnabledMetricName under the
51+
// d8_telemetry_ prefix so flant-integration ships the metric to DOP.
52+
// The prefix is literal here (no {PREFIX} placeholder) and must stay that way.
53+
ModuleEnabledTelemetryMetricName = "d8_telemetry_module_enabled"
4854
// ModuleMaintenanceMetricName tracks module maintenance state
4955
ModuleMaintenanceMetricName = "{PREFIX}mm_module_maintenance"
5056

@@ -154,6 +160,7 @@ func InitMetrics(prefix string) {
154160
ModulesHelmReleaseRedeployedTotal = ReplacePrefix(ModulesHelmReleaseRedeployedTotal, prefix)
155161
ModulesAbsentResourcesTotal = ReplacePrefix(ModulesAbsentResourcesTotal, prefix)
156162
ModuleInfoMetricName = ReplacePrefix(ModuleInfoMetricName, prefix)
163+
ModuleEnabledMetricName = ReplacePrefix(ModuleEnabledMetricName, prefix)
157164
ModuleMaintenanceMetricName = ReplacePrefix(ModuleMaintenanceMetricName, prefix)
158165

159166
// ============================================================================

pkg/module_manager/models/modules/basic.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ type BasicModule struct {
5454
// required
5555
Path string
5656

57+
version string
58+
5759
critical bool
5860

5961
crdsExist bool
@@ -120,6 +122,14 @@ func (bm *BasicModule) SetCritical(value bool) {
120122
bm.critical = value
121123
}
122124

125+
func (bm *BasicModule) SetVersion(v string) {
126+
bm.version = v
127+
}
128+
129+
func (bm *BasicModule) GetVersion() string {
130+
return bm.version
131+
}
132+
123133
// getCRDsFromPath scan path/crds directory and store yaml file in slice
124134
// if file name do not start with `_` or `doc-` prefix
125135
func getCRDsFromPath(path string, crdsFilters string) []string {

pkg/module_manager/module_manager.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import (
5252

5353
var (
5454
moduleInfoMetricGroup = "mm_module_info"
55+
moduleEnabledMetricGroup = "mm_module_enabled"
5556
moduleMaintenanceMetricGroup = "mm_module_maintenance"
5657
moduleManagerServiceName = "module-manager"
5758
)
@@ -513,6 +514,38 @@ func (mm *ModuleManager) UpdateModulesMetrics() {
513514

514515
mm.dependencies.MetricStorage.Grouped().GaugeSet(moduleInfoMetricGroup, metrics.ModuleInfoMetricName, 1, map[string]string{pkg.MetricKeyModule: module, "enabled": enabled})
515516
}
517+
518+
mm.refreshModuleEnabledMetric()
519+
}
520+
521+
func (mm *ModuleManager) refreshModuleEnabledMetric() {
522+
mm.dependencies.MetricStorage.Grouped().ExpireGroupMetrics(moduleEnabledMetricGroup)
523+
524+
for _, name := range mm.GetModuleNames() {
525+
if !mm.IsModuleEnabled(name) {
526+
continue
527+
}
528+
529+
mod := mm.GetModule(name)
530+
if mod == nil {
531+
continue
532+
}
533+
534+
version := mod.GetVersion()
535+
if version == "" {
536+
continue
537+
}
538+
539+
labels := map[string]string{
540+
pkg.MetricKeyModule: name,
541+
pkg.MetricKeyVersion: version,
542+
}
543+
mm.dependencies.MetricStorage.Grouped().GaugeSet(moduleEnabledMetricGroup, metrics.ModuleEnabledMetricName, 1, labels)
544+
// Telemetry twin: same gauge under the d8_telemetry_ prefix so
545+
// flant-integration ships it to DOP. Kept in the same group so
546+
// ExpireGroupMetrics above wipes both copies in lockstep.
547+
mm.dependencies.MetricStorage.Grouped().GaugeSet(moduleEnabledMetricGroup, metrics.ModuleEnabledTelemetryMetricName, 1, labels)
548+
}
516549
}
517550

518551
func (mm *ModuleManager) SetModuleMaintenanceState(moduleName string, state utils.Maintenance) {

0 commit comments

Comments
 (0)