slok / sloth

🦥 Easy and simple Prometheus SLO (service level objectives) generator
https://sloth.dev
Apache License 2.0
2.1k stars 175 forks source link

validate/generate command fails when spec file is created with CRLF on windows #406

Open ishantanu opened 2 years ago

ishantanu commented 2 years ago

Hello,

I was testing adding new plugins to sloth and I saw that sloth validate command fails when the Sloth spec is created with CRLF.

The error message doesn't mention any of this. However, when I copied an existing spec and edited the plugin id, it worked. Similarly, when I created a test.yml file with LF, the validate as well as generate command worked.

Example:

File created using default CRLF:

$ sloth validate -p plugins/ -i test/integration/ --debug
DEBU[0000] Debug level is enabled                        version=v0.10.0
DEBU[0000] SLI plugin loaded                             plugin-id=sloth-common/kubernetes/kooper/availability plugin-path="plugins\\kubernetes\\kooper\\availability\\plugin.go" svc=storage.FileSLIPlugin version=v0.10.0 window=30d
DEBU[0000] SLI plugin loaded                             plugin-id=sloth-common/kubernetes/kooper/latency plugin-path="plugins\\kubernetes\\kooper\\latency\\plugin.go" svc=storage.FileSLIPlugin version=v0.10.0 window=30d
DEBU[0000] SLI plugin loaded                             plugin-id=sloth-common/test1 plugin-path="plugins\\test1\\plugin.go" svc=storage.FileSLIPlugin version=v0.10.0 window=30d
...
INFO[0000] SLI plugins loaded                            plugins=20 svc=storage.FileSLIPlugin version=v0.10.0 window=30d
INFO[0000] SLO period windows loaded                     svc=alert.WindowsRepo version=v0.10.0 window=30d windows=2
DEBU[0000] File validated                                file="test\\integration\\coredns-availability.yml" version=v0.10.0 window=30d
...
DEBU[0000] File validated                                file="test\\integration\\slok-go-http-metrics-availability.yml" version=v0.10.0 window=30d
DEBU[0000] File validated                                file="test\\integration\\slok-go-http-metrics-latency.yml" version=v0.10.0 window=30d
DEBU[0000] File validated                                file="test\\integration\\test.yml" version=v0.10.0 window=30d
ERRO[0000] Unknown spec type                             file="test\\integration\\test.yml" version=v0.10.0 window=30d
...
DEBU[0000] File validated                                file="test\\integration\\traefik-v2-availability.yml" version=v0.10.0 window=30d
DEBU[0000] File validated                                file="test\\integration\\traefik-v2-latency.yml" version=v0.10.0 window=30d

File created using LF:

$ sloth validate -p plugins/ -i test/integration/ --debug
DEBU[0000] Debug level is enabled                        version=v0.10.0
DEBU[0000] SLI plugin loaded                             plugin-id=sloth-common/slok-go-http-metrics/latency plugin-path="plugins\\slok-go-http-metrics\\latency\\plugin.go" svc=storage.FileSLIPlugin version=v0.10.0 window=30d
...
DEBU[0000] SLI plugin loaded                             plugin-id=sloth-common/test1 plugin-path="plugins\\test1\\plugin.go" svc=storage.FileSLIPlugin version=v0.10.0 window=30d
...
DEBU[0000] SLI plugin loaded                             plugin-id=sloth-common/prometheus/rules/eval-availability plugin-path="plugins\\prometheus\\rules\\evalavailability\\plugin.go" svc=storage.FileSLIPlugin version=v0.10.0 window=30d
INFO[0000] SLI plugins loaded                            plugins=20 svc=storage.FileSLIPlugin version=v0.10.0 window=30d
INFO[0000] SLO period windows loaded                     svc=alert.WindowsRepo version=v0.10.0 window=30d windows=2
DEBU[0000] File validated                                file="test\\integration\\coredns-availability.yml" version=v0.10.0 window=30d
...
DEBU[0000] File validated                                file="test\\integration\\slok-go-http-metrics-latency.yml" version=v0.10.0 window=30d
DEBU[0000] File validated                                file="test\\integration\\test.yml" version=v0.10.0 window=30d
DEBU[0000] File validated                                file="test\\integration\\test1.yml" version=v0.10.0 window=30d
...
DEBU[0000] File validated                                file="test\\integration\\traefik-v2-latency.yml" version=v0.10.0 window=30d
INFO[0000] Validation succeeded                          slo-specs=21 version=v0.10.0 window=30d
corentinaltepe commented 2 years ago

I confirm having the same issue when building on Windows with a Docker container running Sloth. Converting the .yml file to LF instead of the default CRLF fixed the error but it was definitely not obvious to find the right fix.