@@ -52,6 +52,7 @@ import (
5252
5353var (
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
518551func (mm * ModuleManager ) SetModuleMaintenanceState (moduleName string , state utils.Maintenance ) {
0 commit comments