@@ -170,11 +170,17 @@ func cmdFilesystem(logger log.Logger, reg *prometheus.Registry, promClient api.C
170170 level .Debug (logger ).Log ("msg" , "reading" , "file" , f )
171171 reconcilesTotal .Inc ()
172172
173- objective , err := objectiveAsRuleFile (f , prometheusFolder )
173+ err := writeRuleFile (f , prometheusFolder )
174174 if err != nil {
175175 reconcilesErrors .Inc ()
176176 return fmt .Errorf ("failed to create rule file %q: %w" , f , err )
177177 }
178+
179+ objective , err := objectiveFromFile (f )
180+ if err != nil {
181+ reconcilesErrors .Inc ()
182+ return fmt .Errorf ("failed to get objective from file %q: %w" , f , err )
183+ }
178184 objectives .Set (objective )
179185
180186 reload <- struct {}{} // Trigger a Prometheus reload
@@ -312,47 +318,55 @@ func (f FilesystemObjectiveServer) GetREDErrors(ctx context.Context, expr, group
312318 return openapiserver.ImplResponse {}, errEndpointNotImplemented
313319}
314320
315- // objectiveAsRuleFile reads a ServiceLevelObjective YAML manifest and outputs the corresponding
321+ // writeRuleFile reads a ServiceLevelObjective YAML manifest and outputs the corresponding
316322// Prometheus rules as a file in the desired directory.
317- func objectiveAsRuleFile (file , prometheusFolder string ) (slo. Objective , error ) {
318- bytes , err := ioutil . ReadFile (file )
323+ func writeRuleFile (file , prometheusFolder string ) error {
324+ objective , err := objectiveFromFile (file )
319325 if err != nil {
320- return slo.Objective {}, fmt .Errorf ("failed to read file %q: %w" , file , err )
321- }
322-
323- var config v1alpha1.ServiceLevelObjective
324- if err := yaml .UnmarshalStrict (bytes , & config ); err != nil {
325- return slo.Objective {}, fmt .Errorf ("failed to unmarshal objective %q: %w" , file , err )
326+ return fmt .Errorf ("failed to get objective: %w" , err )
326327 }
327328
328- objective , err := config .Internal ()
329- if err != nil {
330- return slo.Objective {}, fmt .Errorf ("failed to get objective: %w" , err )
331- }
332329 increases , err := objective .IncreaseRules ()
333330 if err != nil {
334- return slo. Objective {}, fmt .Errorf ("failed to get increase rules: %w" , err )
331+ return fmt .Errorf ("failed to get increase rules: %w" , err )
335332 }
336333 burnrates , err := objective .Burnrates ()
337334 if err != nil {
338- return slo. Objective {}, fmt .Errorf ("failed to get burn rate rules: %w" , err )
335+ return fmt .Errorf ("failed to get burn rate rules: %w" , err )
339336 }
340337
341- rule := monitoringv1.PrometheusRuleSpec {
338+ rules := monitoringv1.PrometheusRuleSpec {
342339 Groups : []monitoringv1.RuleGroup {increases , burnrates },
343340 }
341+ if err != nil {
342+ return fmt .Errorf ("failed to get recording rules: %w" , err )
343+ }
344344
345- bytes , err = yaml .Marshal (rule )
345+ bytes , err : = yaml .Marshal (rules )
346346 if err != nil {
347- return slo. Objective {}, fmt .Errorf ("failed to marshal recording rules: %w" , err )
347+ return fmt .Errorf ("failed to marshal recording rules: %w" , err )
348348 }
349349
350350 _ , f := filepath .Split (file )
351351 path := filepath .Join (prometheusFolder , f )
352352
353353 if err := ioutil .WriteFile (path , bytes , 0o644 ); err != nil {
354- return slo.Objective {}, fmt .Errorf ("failed to write file %q: %w" , path , err )
354+ return fmt .Errorf ("failed to write file %q: %w" , path , err )
355+ }
356+
357+ return nil
358+ }
359+
360+ func objectiveFromFile (file string ) (slo.Objective , error ) {
361+ bytes , err := ioutil .ReadFile (file )
362+ if err != nil {
363+ return slo.Objective {}, fmt .Errorf ("failed to read file %q: %w" , file , err )
364+ }
365+
366+ var config v1alpha1.ServiceLevelObjective
367+ if err := yaml .UnmarshalStrict (bytes , & config ); err != nil {
368+ return slo.Objective {}, fmt .Errorf ("failed to unmarshal objective %q: %w" , file , err )
355369 }
356370
357- return objective , nil
371+ return config . Internal ()
358372}
0 commit comments