@@ -170,53 +170,11 @@ func cmdFilesystem(logger log.Logger, reg *prometheus.Registry, promClient api.C
170
170
level .Debug (logger ).Log ("msg" , "reading" , "file" , f )
171
171
reconcilesTotal .Inc ()
172
172
173
- bytes , err := ioutil . ReadFile ( f )
173
+ objective , err := objectiveAsRuleFile ( f , prometheusFolder )
174
174
if err != nil {
175
175
reconcilesErrors .Inc ()
176
- return fmt .Errorf ("failed to read file %q: %w" , f , err )
176
+ return fmt .Errorf ("failed to create rule file %q: %w" , f , err )
177
177
}
178
-
179
- var config v1alpha1.ServiceLevelObjective
180
- if err := yaml .UnmarshalStrict (bytes , & config ); err != nil {
181
- reconcilesErrors .Inc ()
182
- return fmt .Errorf ("failed to unmarshal objective %q: %w" , f , err )
183
- }
184
-
185
- objective , err := config .Internal ()
186
- if err != nil {
187
- reconcilesErrors .Inc ()
188
- return fmt .Errorf ("failed to get objective: %w" , err )
189
- }
190
-
191
- increases , err := objective .IncreaseRules ()
192
- if err != nil {
193
- reconcilesErrors .Inc ()
194
- return fmt .Errorf ("failed to get increase rules: %w" , err )
195
- }
196
- burnrates , err := objective .Burnrates ()
197
- if err != nil {
198
- reconcilesErrors .Inc ()
199
- return fmt .Errorf ("failed to get burn rate rules: %w" , err )
200
- }
201
-
202
- rule := monitoringv1.PrometheusRuleSpec {
203
- Groups : []monitoringv1.RuleGroup {increases , burnrates },
204
- }
205
-
206
- bytes , err = yaml .Marshal (rule )
207
- if err != nil {
208
- reconcilesErrors .Inc ()
209
- return fmt .Errorf ("failed to marshal recording rules: %w" , err )
210
- }
211
-
212
- _ , file := filepath .Split (f )
213
- path := filepath .Join (prometheusFolder , file )
214
-
215
- if err := ioutil .WriteFile (path , bytes , 0o644 ); err != nil {
216
- reconcilesErrors .Inc ()
217
- return fmt .Errorf ("failed to write file %q: %w" , path , err )
218
- }
219
-
220
178
objectives .Set (objective )
221
179
222
180
reload <- struct {}{} // Trigger a Prometheus reload
@@ -353,3 +311,49 @@ func (f FilesystemObjectiveServer) GetREDRequests(ctx context.Context, expr, gro
353
311
func (f FilesystemObjectiveServer ) GetREDErrors (ctx context.Context , expr , grouping string , i , i2 int32 ) (openapiserver.ImplResponse , error ) {
354
312
return openapiserver.ImplResponse {}, errEndpointNotImplemented
355
313
}
314
+
315
+ // objectiveAsRuleFile reads a ServiceLevelObjective YAML manifest and outputs the corresponding
316
+ // Prometheus rules as a file in the desired directory.
317
+ func objectiveAsRuleFile (file , prometheusFolder string ) (slo.Objective , error ) {
318
+ bytes , err := ioutil .ReadFile (file )
319
+ 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
+ }
327
+
328
+ if err != nil {
329
+ return slo.Objective {}, fmt .Errorf ("failed to get objective: %w" , err )
330
+ }
331
+
332
+ objective , err := config .Internal ()
333
+ increases , err := objective .IncreaseRules ()
334
+ if err != nil {
335
+ return slo.Objective {}, fmt .Errorf ("failed to get increase rules: %w" , err )
336
+ }
337
+ burnrates , err := objective .Burnrates ()
338
+ if err != nil {
339
+ return slo.Objective {}, fmt .Errorf ("failed to get burn rate rules: %w" , err )
340
+ }
341
+
342
+ rule := monitoringv1.PrometheusRuleSpec {
343
+ Groups : []monitoringv1.RuleGroup {increases , burnrates },
344
+ }
345
+
346
+ bytes , err = yaml .Marshal (rule )
347
+ if err != nil {
348
+ return slo.Objective {}, fmt .Errorf ("failed to marshal recording rules: %w" , err )
349
+ }
350
+
351
+ _ , f := filepath .Split (file )
352
+ path := filepath .Join (prometheusFolder , f )
353
+
354
+ if err := ioutil .WriteFile (path , bytes , 0o644 ); err != nil {
355
+ return slo.Objective {}, fmt .Errorf ("failed to write file %q: %w" , path , err )
356
+ }
357
+
358
+ return objective , nil
359
+ }
0 commit comments