Skip to content

Commit ecf61db

Browse files
committed
[-] apply non-recursive yaml dir reading, fixes #1368
replace `WalkDir` with `filepath.Glob`, those functions never intended to be recursive in the first place
1 parent cf27d73 commit ecf61db

4 files changed

Lines changed: 42 additions & 29 deletions

File tree

internal/metrics/yaml.go

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ package metrics
33
import (
44
"context"
55
_ "embed"
6-
"io/fs"
76
"maps"
87
"os"
98
"path/filepath"
10-
"strings"
119
"sync"
1210

1311
"gopkg.in/yaml.v3"
@@ -66,21 +64,18 @@ func (fmr *fileMetricReader) getMetrics() (metrics *Metrics, err error) {
6664
}
6765
switch mode := fi.Mode(); {
6866
case mode.IsDir():
69-
err = filepath.WalkDir(fmr.path, func(path string, d fs.DirEntry, err error) error {
70-
if err != nil {
71-
return err
72-
}
73-
ext := strings.ToLower(filepath.Ext(d.Name()))
74-
if d.IsDir() || ext != ".yaml" && ext != ".yml" {
75-
return nil
76-
}
67+
var matches []string
68+
if matches, err = filepath.Glob(filepath.Join(fmr.path, "*.y*ml")); err != nil {
69+
return nil, err
70+
}
71+
for _, path := range matches {
7772
var m *Metrics
78-
if m, err = fmr.loadMetricsFromFile(path); err == nil {
79-
maps.Copy(metrics.PresetDefs, m.PresetDefs)
80-
maps.Copy(metrics.MetricDefs, m.MetricDefs)
73+
if m, err = fmr.loadMetricsFromFile(path); err != nil {
74+
return nil, err
8175
}
82-
return err
83-
})
76+
maps.Copy(metrics.PresetDefs, m.PresetDefs)
77+
maps.Copy(metrics.MetricDefs, m.MetricDefs)
78+
}
8479
case mode.IsRegular():
8580
metrics, err = fmr.loadMetricsFromFile(fmr.path)
8681
}

internal/metrics/yaml_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,11 +375,11 @@ func TestMetricsDir(t *testing.T) {
375375
metrics2File, err := yaml.Marshal(metrics2)
376376
a.NoError(err)
377377

378-
// write data to different files in a folder
378+
// write data to different files in a folder: one .yaml and one .yml
379379
tempDir := t.TempDir()
380380
err = os.WriteFile(filepath.Join(tempDir, "metrics1.yaml"), metrics1File, 0644)
381381
a.NoError(err)
382-
err = os.WriteFile(filepath.Join(tempDir, "metrics2.yaml"), metrics2File, 0644)
382+
err = os.WriteFile(filepath.Join(tempDir, "metrics2.yml"), metrics2File, 0644)
383383
a.NoError(err)
384384

385385
// use folder of yaml files for metrics configs

internal/sources/yaml.go

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,17 @@ func (fcr *fileSourcesReaderWriter) getSources() (dbs Sources, err error) {
103103
}
104104
switch mode := fi.Mode(); {
105105
case mode.IsDir():
106-
err = filepath.WalkDir(fcr.path, func(path string, d fs.DirEntry, err error) error {
107-
if err != nil {
108-
return err
109-
}
110-
ext := strings.ToLower(filepath.Ext(d.Name()))
111-
if d.IsDir() || ext != ".yaml" && ext != ".yml" {
112-
return nil
113-
}
106+
var matches []string
107+
if matches, err = filepath.Glob(filepath.Join(fcr.path, "*.y*ml")); err != nil {
108+
return
109+
}
110+
for _, path := range matches {
114111
var mdbs Sources
115-
if mdbs, err = fcr.loadSourcesFromFile(path); err == nil {
116-
dbs = append(dbs, mdbs...)
112+
if mdbs, err = fcr.loadSourcesFromFile(path); err != nil {
113+
return
117114
}
118-
return err
119-
})
115+
dbs = append(dbs, mdbs...)
116+
}
120117
case mode.IsRegular():
121118
dbs, err = fcr.loadSourcesFromFile(fcr.path)
122119
}

internal/sources/yaml_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,27 @@ func TestYAMLGetMonitoredDatabases(t *testing.T) {
9999
a.Error(err)
100100
a.Nil(dbs)
101101
})
102+
103+
t.Run("directory with yaml and yml files", func(t *testing.T) {
104+
tmpDir := t.TempDir()
105+
yamlContent1 := `
106+
- name: dir_test1
107+
conn_str: postgresql://localhost/test1
108+
`
109+
yamlContent2 := `
110+
- name: dir_test2
111+
conn_str: postgresql://localhost/test2
112+
`
113+
err := os.WriteFile(filepath.Join(tmpDir, "sources.yaml"), []byte(yamlContent1), 0644)
114+
a.NoError(err)
115+
err = os.WriteFile(filepath.Join(tmpDir, "sources.yml"), []byte(yamlContent2), 0644)
116+
a.NoError(err)
117+
yamlrw, err := sources.NewYAMLSourcesReaderWriter(ctx, tmpDir)
118+
a.NoError(err)
119+
dbs, err := yamlrw.GetSources()
120+
a.NoError(err)
121+
a.Len(dbs, 2)
122+
})
102123
}
103124

104125
func TestYAMLDeleteDatabase(t *testing.T) {

0 commit comments

Comments
 (0)