@@ -11,13 +11,15 @@ import (
1111 "syscall"
1212
1313 "github.com/alecthomas/kingpin/v2"
14+
1415 "github.com/sustainable-computing-io/kepler/config"
1516 "github.com/sustainable-computing-io/kepler/internal/device"
1617 "github.com/sustainable-computing-io/kepler/internal/exporter/prometheus"
1718 "github.com/sustainable-computing-io/kepler/internal/exporter/stdout"
1819 "github.com/sustainable-computing-io/kepler/internal/k8s/pod"
1920 "github.com/sustainable-computing-io/kepler/internal/logger"
2021 "github.com/sustainable-computing-io/kepler/internal/monitor"
22+ "github.com/sustainable-computing-io/kepler/internal/platform/redfish"
2123 "github.com/sustainable-computing-io/kepler/internal/resource"
2224 "github.com/sustainable-computing-io/kepler/internal/server"
2325 "github.com/sustainable-computing-io/kepler/internal/service"
@@ -157,6 +159,8 @@ func createServices(logger *slog.Logger, cfg *config.Config) ([]service.Service,
157159 monitor .WithMinTerminatedEnergyThreshold (monitor .Energy (cfg .Monitor .MinTerminatedEnergyThreshold )* monitor .Joule ),
158160 )
159161
162+ // Create Redfish service if enabled (experimental feature)
163+
160164 apiServer := server .NewAPIServer (
161165 server .WithLogger (logger ),
162166 server .WithListenAddress (cfg .Web .ListenAddresses ),
@@ -170,43 +174,69 @@ func createServices(logger *slog.Logger, cfg *config.Config) ([]service.Service,
170174 pm ,
171175 )
172176
177+ // Add Redfish service if enabled
178+ var redfishService * redfish.Service
179+ if cfg .IsFeatureEnabled (config .ExperimentalRedfishFeature ) {
180+ rs , err := createRedfishService (logger , cfg )
181+ if err != nil {
182+ return nil , fmt .Errorf ("failed to create Redfish service: %w" , err )
183+ }
184+ services = append (services , rs )
185+ redfishService = rs
186+ }
187+
173188 // Add Prometheus exporter if enabled
174- if * cfg .Exporter . Prometheus . Enabled {
175- promExporter , err := createPrometheusExporter (logger , cfg , apiServer , pm )
189+ if cfg .IsFeatureEnabled ( config . PrometheusFeature ) {
190+ promExporter , err := createPrometheusExporter (logger , cfg , apiServer , pm , redfishService )
176191 if err != nil {
177192 return nil , fmt .Errorf ("failed to create Prometheus exporter: %w" , err )
178193 }
179194 services = append (services , promExporter )
180195 }
181196
182197 // Add pprof if enabled
183- if * cfg .Debug . Pprof . Enabled {
198+ if cfg .IsFeatureEnabled ( config . PprofFeature ) {
184199 pprof := server .NewPprof (apiServer )
185200 services = append (services , pprof )
186201 }
187202
188203 // Add stdout exporter if enabled
189- if * cfg .Exporter . Stdout . Enabled {
204+ if cfg .IsFeatureEnabled ( config . StdoutFeature ) {
190205 stdoutExporter := stdout .NewExporter (pm , stdout .WithLogger (logger ))
191206 services = append (services , stdoutExporter )
192207 }
193208
194209 return services , nil
195210}
196211
197- func createPrometheusExporter (logger * slog.Logger , cfg * config.Config , apiServer * server.APIServer , pm * monitor.PowerMonitor ) (* prometheus.Exporter , error ) {
212+ func createRedfishService (logger * slog.Logger , cfg * config.Config ) (* redfish.Service , error ) {
213+ return redfish .NewService (cfg .Experimental .Platform .Redfish , logger , redfish .WithStaleness (cfg .Monitor .Staleness ))
214+ }
215+
216+ func createPrometheusExporter (
217+ logger * slog.Logger , cfg * config.Config ,
218+ apiServer * server.APIServer , pm * monitor.PowerMonitor ,
219+ rs * redfish.Service ,
220+ ) (* prometheus.Exporter , error ) {
198221 logger .Debug ("Creating Prometheus exporter" )
199222
200223 // Use metrics level from configuration (already parsed)
201224 metricsLevel := cfg .Exporter .Prometheus .MetricsLevel
202225
203- collectors , err := prometheus .CreateCollectors (
204- pm ,
226+ var collectorOpts [] prometheus.OptionFn
227+ collectorOpts = append ( collectorOpts ,
205228 prometheus .WithLogger (logger ),
206229 prometheus .WithProcFSPath (cfg .Host .ProcFS ),
207230 prometheus .WithNodeName (cfg .Kube .Node ),
208231 prometheus .WithMetricsLevel (metricsLevel ),
209232 )
233+
234+ // Add platform data provider if Redfish service is available
235+ if rs != nil {
236+ collectorOpts = append (collectorOpts , prometheus .WithPlatformDataProvider (rs ))
237+ }
238+
239+ collectors , err := prometheus .CreateCollectors (pm , collectorOpts ... )
210240 if err != nil {
211241 return nil , fmt .Errorf ("failed to create Prometheus collectors: %w" , err )
212242 }
0 commit comments