Skip to content

Commit e9f4329

Browse files
authored
feat: geoip collector and refactor (#6)
1 parent a1ef906 commit e9f4329

File tree

12 files changed

+242
-29
lines changed

12 files changed

+242
-29
lines changed

cmd/serve.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import (
1111
"time"
1212

1313
"github.com/liftedinit/manifest-node-exporter/pkg"
14-
"github.com/liftedinit/manifest-node-exporter/pkg/autodetect"
15-
_ "github.com/liftedinit/manifest-node-exporter/pkg/autodetect/manifestd" // RegisterMonitor the manifestd monitor (side-effect)
14+
"github.com/liftedinit/manifest-node-exporter/pkg/collectors"
15+
"github.com/liftedinit/manifest-node-exporter/pkg/collectors/autodetect"
16+
_ "github.com/liftedinit/manifest-node-exporter/pkg/collectors/autodetect/manifestd" // RegisterMonitor the manifestd monitor (side-effect)
1617
"github.com/prometheus/client_golang/prometheus"
1718
"github.com/spf13/cobra"
1819
"github.com/spf13/viper"
@@ -36,11 +37,14 @@ var serveCmd = &cobra.Command{
3637
defer rootCancel()
3738
handleInterrupt(rootCancel)
3839

40+
geoIpCollector := collectors.NewGeoIPCollector()
41+
3942
// Setup process monitors and fetch all registered collectors
40-
allCollectors, err := setupMonitors(rootCtx)
43+
monitorCollectors, err := setupMonitors(rootCtx)
4144
if err != nil {
4245
return fmt.Errorf("failed to setup monitors: %w", err)
4346
}
47+
allCollectors := append(monitorCollectors, geoIpCollector)
4448

4549
// Register all collectors with Prometheus
4650
registerCollectors(allCollectors)

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,5 @@ require (
5050
google.golang.org/genproto/googleapis/rpc v0.0.0-20250422160041-2d3770c4ea7f // indirect
5151
google.golang.org/protobuf v1.36.6 // indirect
5252
gopkg.in/yaml.v3 v3.0.1 // indirect
53+
resty.dev/v3 v3.0.0-beta.2 // indirect
5354
)

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,5 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
134134
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
135135
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
136136
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
137+
resty.dev/v3 v3.0.0-beta.2 h1:xu4mGAdbCLuc3kbk7eddWfWm4JfhwDtdapwss5nCjnQ=
138+
resty.dev/v3 v3.0.0-beta.2/go.mod h1:OgkqiPvTDtOuV4MGZuUDhwOpkY8enjOsjjMzeOHefy4=
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# Autodetect Module
2+
3+
## Overview
4+
5+
The `autodetect` module provides automatic detection functionality for the Manifest Node Exporter. It helps in
6+
automatically discovering and configuring monitoring settings based on the environment.
7+
8+
## Purpose
9+
10+
This module is responsible for:
11+
12+
- Detecting available services and endpoints
13+
- Configuring appropriate monitoring parameters
14+
- Providing sensible defaults for the exporter configuration

pkg/autodetect/manifestd/collectors/denom_info.go renamed to pkg/collectors/autodetect/manifestd/denom_info.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package collectors
1+
package manifestd
22

33
import (
44
"log/slog"
55
"strconv"
66

77
bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1"
88
"github.com/liftedinit/manifest-node-exporter/pkg/client"
9+
"github.com/liftedinit/manifest-node-exporter/pkg/collectors"
910
"github.com/prometheus/client_golang/prometheus"
1011
"google.golang.org/grpc/codes"
1112
"google.golang.org/grpc/status"
@@ -71,10 +72,10 @@ func (c *DenomInfoCollector) Describe(ch chan<- *prometheus.Desc) {
7172
// Collect implements the prometheus.Collector interface.
7273
func (c *DenomInfoCollector) Collect(ch chan<- prometheus.Metric) {
7374
// Check for initialization or connection errors first.
74-
if err := validateClient(c.grpcClient, c.initialError); err != nil {
75-
reportUpMetric(ch, c.upDesc, 0) // Report gRPC down
76-
reportInvalidMetric(ch, c.totalSupplyDesc, err)
77-
reportInvalidMetric(ch, c.denomInfoDesc, err)
75+
if err := collectors.ValidateClient(c.grpcClient, c.initialError); err != nil {
76+
collectors.ReportUpMetric(ch, c.upDesc, 0) // Report gRPC down
77+
collectors.ReportInvalidMetric(ch, c.totalSupplyDesc, err)
78+
collectors.ReportInvalidMetric(ch, c.denomInfoDesc, err)
7879
return
7980
}
8081

@@ -94,15 +95,15 @@ func (c *DenomInfoCollector) Collect(ch chan<- prometheus.Metric) {
9495
if denomMetaErr == nil && totalSupplyErr == nil {
9596
upValue = 1.0
9697
}
97-
reportUpMetric(ch, c.upDesc, upValue)
98+
collectors.ReportUpMetric(ch, c.upDesc, upValue)
9899

99100
c.collectDenomMetadata(ch, denomMetaResp, denomMetaErr)
100101
c.collectTotalSupply(ch, totalSupplyResp, totalSupplyErr)
101102
}
102103

103104
func (c *DenomInfoCollector) collectDenomMetadata(ch chan<- prometheus.Metric, resp *bankv1beta1.QueryDenomMetadataResponse, queryErr error) {
104105
if queryErr != nil {
105-
reportInvalidMetric(ch, c.denomInfoDesc, queryErr)
106+
collectors.ReportInvalidMetric(ch, c.denomInfoDesc, queryErr)
106107
return
107108
}
108109
if resp == nil {
@@ -131,7 +132,7 @@ func (c *DenomInfoCollector) collectDenomMetadata(ch chan<- prometheus.Metric, r
131132

132133
func (c *DenomInfoCollector) collectTotalSupply(ch chan<- prometheus.Metric, resp *bankv1beta1.QuerySupplyOfResponse, queryErr error) {
133134
if queryErr != nil {
134-
reportInvalidMetric(ch, c.totalSupplyDesc, queryErr)
135+
collectors.ReportInvalidMetric(ch, c.totalSupplyDesc, queryErr)
135136
return
136137
}
137138
if resp == nil {
@@ -140,15 +141,15 @@ func (c *DenomInfoCollector) collectTotalSupply(ch chan<- prometheus.Metric, res
140141
coin := resp.Amount
141142
if coin == nil {
142143
slog.Warn("Total supply response is nil")
143-
reportInvalidMetric(ch, c.totalSupplyDesc, status.Error(codes.Internal, "total supply response is nil"))
144+
collectors.ReportInvalidMetric(ch, c.totalSupplyDesc, status.Error(codes.Internal, "total supply response is nil"))
144145
return
145146
}
146147

147148
amount, err := strconv.ParseFloat(coin.Amount, 64)
148149
if err != nil {
149150
parseErr := status.Errorf(codes.Internal, "failed to parse amount '%s' for denom '%s': %v", coin.Amount, coin.Denom, err)
150151
slog.Warn("Failed to parse total supply amount", "denom", coin.Denom, "amount", coin.Amount, "error", err)
151-
reportInvalidMetric(ch, c.totalSupplyDesc, parseErr)
152+
collectors.ReportInvalidMetric(ch, c.totalSupplyDesc, parseErr)
152153
return
153154
}
154155

pkg/autodetect/manifestd/manifestd.go renamed to pkg/collectors/autodetect/manifestd/manifestd.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ import (
88
"slices"
99
"strconv"
1010

11-
"github.com/liftedinit/manifest-node-exporter/pkg/autodetect"
12-
"github.com/liftedinit/manifest-node-exporter/pkg/autodetect/manifestd/collectors"
1311
"github.com/liftedinit/manifest-node-exporter/pkg/client"
12+
"github.com/liftedinit/manifest-node-exporter/pkg/collectors/autodetect"
1413
"github.com/liftedinit/manifest-node-exporter/pkg/utils"
1514
"github.com/prometheus/client_golang/prometheus"
1615
)
@@ -108,7 +107,7 @@ func (m *manifestdMonitor) CollectCollectors(ctx context.Context, processInfo *a
108107
}
109108

110109
var resultCollectors []prometheus.Collector
111-
for _, collector := range collectors.GetAllCollectorFactories() {
110+
for _, collector := range GetAllCollectorFactories() {
112111
resultCollectors = append(resultCollectors, collector(grpcClient))
113112
}
114113

pkg/autodetect/manifestd/collectors/registry.go renamed to pkg/collectors/autodetect/manifestd/registry.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package collectors
1+
package manifestd
22

33
import (
44
"maps"

pkg/autodetect/manifestd/collectors/token_count.go renamed to pkg/collectors/autodetect/manifestd/token_count.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package collectors
1+
package manifestd
22

33
import (
44
"log/slog"
55

66
bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1"
77
queryv1beta1 "cosmossdk.io/api/cosmos/base/query/v1beta1"
88
"github.com/liftedinit/manifest-node-exporter/pkg/client"
9+
"github.com/liftedinit/manifest-node-exporter/pkg/collectors"
910
"github.com/prometheus/client_golang/prometheus"
1011
"google.golang.org/grpc/codes"
1112
"google.golang.org/grpc/status"
@@ -57,9 +58,9 @@ func (c *TokenCountCollector) Describe(ch chan<- *prometheus.Desc) {
5758
// Collect implements the prometheus.Collector interface.
5859
func (c *TokenCountCollector) Collect(ch chan<- prometheus.Metric) {
5960
// Check for initialization or connection errors first.
60-
if err := validateClient(c.grpcClient, c.initialError); err != nil {
61-
reportUpMetric(ch, c.upDesc, 0) // Report gRPC down
62-
reportInvalidMetric(ch, c.tokenCountDesc, err)
61+
if err := collectors.ValidateClient(c.grpcClient, c.initialError); err != nil {
62+
collectors.ReportUpMetric(ch, c.upDesc, 0) // Report gRPC down
63+
collectors.ReportInvalidMetric(ch, c.tokenCountDesc, err)
6364
return
6465
}
6566

@@ -74,15 +75,15 @@ func (c *TokenCountCollector) Collect(ch chan<- prometheus.Metric) {
7475
if denomsMetaErr == nil {
7576
upValue = 1.0
7677
}
77-
reportUpMetric(ch, c.upDesc, upValue)
78+
collectors.ReportUpMetric(ch, c.upDesc, upValue)
7879

7980
if denomsMetaResp == nil {
80-
reportInvalidMetric(ch, c.tokenCountDesc, status.Error(codes.Internal, "DenomsMetadata response is nil"))
81+
collectors.ReportInvalidMetric(ch, c.tokenCountDesc, status.Error(codes.Internal, "DenomsMetadata response is nil"))
8182
return
8283
}
8384

8485
if denomsMetaResp.Pagination == nil {
85-
reportInvalidMetric(ch, c.tokenCountDesc, status.Error(codes.Internal, "Pagination response is nil"))
86+
collectors.ReportInvalidMetric(ch, c.tokenCountDesc, status.Error(codes.Internal, "Pagination response is nil"))
8687
return
8788
}
8889

File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)