Skip to content

costs: Return cache result instead panic #77

@jkroepke

Description

@jkroepke

Hi, sometimes,

azure-resourcegraph-exporter just panic, because of a HTTP 429 error:

{"level":"panic","caller":"azure-resourcemanager-exporter/metrics_azurerm_costs.go:407","msg":"unexpected status code: 429","query":"resource_id_monthly","timeframe":"Custom","subscriptionID":"81ae40e4-a73e-49ed-ae42-ad441988dd01","stacktrace":"main.(*MetricsCollectorAzureRmCosts).collectCostManagementMetrics\n\t/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:407\nmain.(*MetricsCollectorAzureRmCosts).collectRunCostQuery.func1\n\t/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:231\ngithub.com/webdevops/go-common/azuresdk/armclient.(*SubscriptionsIterator).ForEach\n\t/go/pkg/mod/github.com/webdevops/go-common@v0.0.0-20230607060003-ce477494de8d/azuresdk/armclient/iterator.subscriptions.go:65\nmain.(*MetricsCollectorAzureRmCosts).collectRunCostQuery\n\t/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:229\nmain.(*MetricsCollectorAzureRmCosts).Collect\n\t/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:189\ngithub.com/webdevops/go-common/prometheus/collector.(*Collector).collectRun.func1\n\t/go/pkg/mod/github.com/webdevops/go-common@v0.0.0-20230607060003-ce477494de8d/prometheus/collector/collector.go:380"}
panic: unexpected status code: 429

goroutine 8595 [running]:
go.uber.org/zap/zapcore.CheckWriteAction.OnWrite(0x0?, 0x0?, {0x0?, 0x0?, 0xc00056e160?})
	/go/pkg/mod/go.uber.org/zap@v1.24.0/zapcore/entry.go:198 +0x65
go.uber.org/zap/zapcore.(*CheckedEntry).Write(0xc00172c340, {0x0, 0x0, 0x0})
	/go/pkg/mod/go.uber.org/zap@v1.24.0/zapcore/entry.go:264 +0x3ec
go.uber.org/zap.(*SugaredLogger).log(0xc0001200a0, 0x4, {0x0?, 0x23?}, {0xc0018a9820?, 0xc00012a028?, 0xc0001200a0?}, {0x0, 0x0, 0x0})
	/go/pkg/mod/go.uber.org/zap@v1.24.0/sugar.go:295 +0xee
go.uber.org/zap.(*SugaredLogger).Panic(...)
	/go/pkg/mod/go.uber.org/zap@v1.24.0/sugar.go:153
main.(*MetricsCollectorAzureRmCosts).collectCostManagementMetrics(0xc0003997c0, 0x19?, 0xc0003806a0, {0xc0003a3c00, 0x33}, {0x2357915, 0xa}, 0xc0018a9ed8, {0xc00005ecaa, 0x6}, ...)
	/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:407 +0xc99
main.(*MetricsCollectorAzureRmCosts).collectRunCostQuery.func1(0xc000476660, 0xc00306bb18?)
	/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:231 +0x1db
github.com/webdevops/go-common/azuresdk/armclient.(*SubscriptionsIterator).ForEach(0xc000120050?, 0xc00306bcf0?, 0xc0018a9d00)
	/go/pkg/mod/github.com/webdevops/go-common@v0.0.0-20230607060003-ce477494de8d/azuresdk/armclient/iterator.subscriptions.go:65 +0x1e2
main.(*MetricsCollectorAzureRmCosts).collectRunCostQuery(0xc0003997c0, 0xc0018a9ed8, 0xc000077e08?)
	/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:229 +0x2ed
main.(*MetricsCollectorAzureRmCosts).Collect(0xc0003997c0, 0x26343e0?)
	/go/src/github.com/webdevops/azure-resourcemanager-exporter/metrics_azurerm_costs.go:189 +0xab
github.com/webdevops/go-common/prometheus/collector.(*Collector).collectRun.func1()
	/go/pkg/mod/github.com/webdevops/go-common@v0.0.0-20230607060003-ce477494de8d/prometheus/collector/collector.go:380 +0x98
created by github.com/webdevops/go-common/prometheus/collector.(*Collector).collectRun
	/go/pkg/mod/github.com/webdevops/go-common@v0.0.0-20230607060003-ce477494de8d/prometheus/collector/collector.go:351 +0x13b

instead return a panic, I would like to see the possibility to return a cached response instead a crash.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions