hcloud-pricing-exporter/fetcher/primaryip.go

46 lines
1 KiB
Go
Raw Permalink Normal View History

2022-12-14 14:35:07 +00:00
package fetcher
import (
"github.com/hetznercloud/hcloud-go/v2/hcloud"
2022-12-14 14:35:07 +00:00
)
var _ Fetcher = &floatingIP{}
// NewPrimaryIP creates a new fetcher that will collect pricing information on primary IPs.
func NewPrimaryIP(pricing *PriceProvider, additionalLabels ...string) Fetcher {
return &primaryIP{newBase(pricing, "primaryip", []string{"datacenter", "type"}, additionalLabels...)}
2022-12-14 14:35:07 +00:00
}
type primaryIP struct {
*baseFetcher
}
func (primaryIP primaryIP) Run(client *hcloud.Client) error {
2024-01-17 19:19:21 +00:00
primaryIPs, err := client.PrimaryIP.All(ctx)
2022-12-14 14:35:07 +00:00
if err != nil {
return err
}
for _, p := range primaryIPs {
datacenter := p.Datacenter
hourlyPrice, monthlyPrice, err := primaryIP.pricing.PrimaryIP(p.Type, datacenter.Location.Name)
2022-12-14 14:35:07 +00:00
if err != nil {
return err
}
labels := append([]string{
p.Name,
datacenter.Name,
string(p.Type),
},
parseAdditionalLabels(primaryIP.additionalLabels, p.Labels)...,
)
primaryIP.hourly.WithLabelValues(labels...).Set(hourlyPrice)
primaryIP.monthly.WithLabelValues(labels...).Set(monthlyPrice)
2022-12-14 14:35:07 +00:00
}
return nil
}