mirror of
https://github.com/Luzifer/mercedes-byocar-exporter.git
synced 2024-12-20 09:51:20 +00:00
Fix: Gracefully handle data not being available for query type
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
50c40ed68a
commit
d1761c5975
2 changed files with 30 additions and 26 deletions
50
fetcher.go
50
fetcher.go
|
@ -1,6 +1,8 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/sirupsen/logrus"
|
||||
|
||||
"github.com/Luzifer/mercedes-byocar-exporter/internal/mercedes"
|
||||
|
@ -19,39 +21,35 @@ func runFetcher(mc mercedes.Client, vehicleID string) {
|
|||
logger.Info("fetching data")
|
||||
|
||||
s1, err := mc.GetPayAsYouDriveInsurance(cfg.VehicleID[0])
|
||||
if err != nil {
|
||||
logger.WithError(err).Error("fetching pay-as-you-go data")
|
||||
return
|
||||
}
|
||||
enabledExporters.SetPayAsYouGo(vehicleID, s1)
|
||||
handleMetricsEntries(logger, "pay-as-you-go", err, func() { enabledExporters.SetPayAsYouGo(vehicleID, s1) })
|
||||
|
||||
s2, err := mc.GetFuelStatus(cfg.VehicleID[0])
|
||||
if err != nil {
|
||||
logger.WithError(err).Error("fetching fuel-status data")
|
||||
return
|
||||
}
|
||||
enabledExporters.SetFuelStatus(vehicleID, s2)
|
||||
handleMetricsEntries(logger, "fuel-status", err, func() { enabledExporters.SetFuelStatus(vehicleID, s2) })
|
||||
|
||||
s3, err := mc.GetVehicleStatus(cfg.VehicleID[0])
|
||||
if err != nil {
|
||||
logger.WithError(err).Error("fetching vehicle-status data")
|
||||
return
|
||||
}
|
||||
enabledExporters.SetVehicleStatus(vehicleID, s3)
|
||||
handleMetricsEntries(logger, "vehicle-status", err, func() { enabledExporters.SetVehicleStatus(vehicleID, s3) })
|
||||
|
||||
s4, err := mc.GetLockStatus(cfg.VehicleID[0])
|
||||
if err != nil {
|
||||
logger.WithError(err).Error("fetching lock-status data")
|
||||
return
|
||||
}
|
||||
enabledExporters.SetLockStatus(vehicleID, s4)
|
||||
handleMetricsEntries(logger, "lock-status", err, func() { enabledExporters.SetLockStatus(vehicleID, s4) })
|
||||
|
||||
s5, err := mc.GetElectricStatus(cfg.VehicleID[0])
|
||||
if err != nil {
|
||||
logger.WithError(err).Error("fetching electric-status data")
|
||||
return
|
||||
}
|
||||
enabledExporters.SetElectricStatus(vehicleID, s5)
|
||||
handleMetricsEntries(logger, "electric-status", err, func() { enabledExporters.SetElectricStatus(vehicleID, s5) })
|
||||
|
||||
logger.Info("data updated successfully")
|
||||
logger.Info("data updated")
|
||||
}
|
||||
|
||||
func handleMetricsEntries(logger *logrus.Entry, dataType string, err error, submit func()) {
|
||||
switch {
|
||||
case err == nil:
|
||||
submit()
|
||||
|
||||
case errors.Is(err, mercedes.ErrNoDataAvailable):
|
||||
logger.Warnf("%s data is not available", dataType)
|
||||
return
|
||||
|
||||
default:
|
||||
logger.WithError(err).Errorf("fetching %s data", dataType)
|
||||
return
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,6 +34,8 @@ type (
|
|||
}
|
||||
)
|
||||
|
||||
var ErrNoDataAvailable = errors.New("no data available for this endpoint")
|
||||
|
||||
var _ Client = (*APIClient)(nil)
|
||||
|
||||
func New(clientID, clientSecret string, creds credential.Store) *APIClient {
|
||||
|
@ -202,6 +204,10 @@ func (a APIClient) request(path string, output any) error {
|
|||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode == http.StatusNoContent {
|
||||
return ErrNoDataAvailable
|
||||
}
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in a new issue