Skip to content

Commit bb0c4e6

Browse files
committed
Split objective and rules file creation
Signed-off-by: ArthurSens <arthursens2005@gmail.com>
1 parent 47d903b commit bb0c4e6

File tree

2 files changed

+36
-22
lines changed

2 files changed

+36
-22
lines changed

filesystem.go

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

generate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func cmdGenerate(logger log.Logger, configFiles, prometheusFolder string) int {
3131
}
3232

3333
for _, file := range filenames {
34-
_, err := objectiveAsRuleFile(file, prometheusFolder)
34+
err := writeRuleFile(file, prometheusFolder)
3535
if err != nil {
3636
level.Error(logger).Log("msg", "generating rule files", "err", err)
3737
return 1

0 commit comments

Comments
 (0)