Skip to content

Commit 3531fc0

Browse files
authored
refactor: remove cobra (#199)
1 parent 6ecd4f2 commit 3531fc0

File tree

8 files changed

+55
-73
lines changed

8 files changed

+55
-73
lines changed

.github/workflows/main.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- name: Setup Go
2222
uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0
2323
with:
24-
go-version: 1.20.x
24+
go-version: 1.20.5
2525
- name: Restore Go cache
2626
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
2727
with:

.github/workflows/pr-build.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- name: Setup Go
2424
uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0
2525
with:
26-
go-version: 1.20.x
26+
go-version: 1.20.5
2727
- name: Restore Go cache
2828
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
2929
with:

.github/workflows/pr-nancy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
- name: Setup Go
2727
uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0
2828
with:
29-
go-version: 1.20.x
29+
go-version: 1.20.5
3030
- name: Restore Go cache
3131
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
3232
with:

.github/workflows/release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
fetch-depth: 0
2727
- uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9 # v4.0.0
2828
with:
29-
go-version: '1.20'
29+
go-version: 1.20.5
3030
- name: Docker Login
3131
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0
3232
with:

cmd/integration_test.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"bytes"
54
"context"
65
"fmt"
76
"net/http"
@@ -94,16 +93,13 @@ func executeIntegrationTest(t *testing.T, test integrationTest) {
9493
setupTestData(t, client)
9594

9695
os.Setenv("MDBEXPORTER_SERVER_0_MONGODB_URI", container.URI)
97-
args := []string{
98-
"-f", test.configPath,
96+
os.Args = []string{
97+
"mongodb_query_exporter",
98+
fmt.Sprintf("--file=%s", test.configPath),
9999
}
100100

101-
b := bytes.NewBufferString("")
102-
rootCmd.SetOut(b)
103-
rootCmd.SetArgs(args)
104-
105101
go func() {
106-
assert.NoError(t, rootCmd.Execute())
102+
main()
107103
}()
108104

109105
//binding is blocking, do this async but wait 200ms for tcp port to be open

cmd/main.go

Lines changed: 46 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616

1717
"github.com/prometheus/client_golang/prometheus"
1818
"github.com/prometheus/client_golang/prometheus/promhttp"
19-
"github.com/spf13/cobra"
19+
flag "github.com/spf13/pflag"
2020
"github.com/spf13/viper"
2121
)
2222

@@ -30,32 +30,53 @@ var (
3030
queryTimeout time.Duration
3131
srv *http.Server
3232
promCollector *collector.Collector
33+
)
3334

34-
rootCmd = &cobra.Command{
35-
Use: "mongodb-query-exporter",
36-
Short: "MongoDB aggregation exporter for prometheus",
37-
Long: `Export aggregations from MongoDB as prometheus metrics.`,
38-
Run: func(cmd *cobra.Command, args []string) {
39-
c, conf, err := buildCollector()
40-
if err != nil {
41-
panic(err)
42-
}
43-
44-
prometheus.MustRegister(c)
45-
promCollector = c
46-
_ = c.StartCacheInvalidator()
47-
srv = buildHTTPServer(prometheus.DefaultGatherer, conf)
48-
err = srv.ListenAndServe()
49-
50-
// Only panic if we have a net error
51-
if _, ok := err.(*net.OpError); ok {
52-
panic(err)
53-
} else {
54-
os.Stderr.WriteString(err.Error() + "\n")
55-
}
56-
},
35+
func init() {
36+
flag.StringVarP(&uri, "uri", "u", config.DefaultMongoDBURI, "MongoDB URI (default is mongodb://localhost:27017). Use MDBEXPORTER_SERVER_%d_MONGODB_URI envs if you target multiple server")
37+
flag.StringVarP(&configPath, "file", "f", "", "config file (default is $HOME/.mongodb_query_exporter/config.yaml)")
38+
flag.StringVarP(&logLevel, "log-level", "l", config.DefaultLogLevel, "Define the log level (default is warning) [debug,info,warn,error]")
39+
flag.StringVarP(&logEncoding, "log-encoding", "e", config.DefaultLogEncoder, "Define the log format (default is json) [json,console]")
40+
flag.StringVarP(&bind, "bind", "b", config.DefaultBindAddr, "Address to bind http server (default is :9412)")
41+
flag.StringVarP(&metricsPath, "path", "p", config.DefaultMetricsPath, "Metric path (default is /metrics)")
42+
flag.DurationVarP(&queryTimeout, "query-timeout", "t", config.DefaultQueryTimeout, "Timeout for MongoDB queries")
43+
44+
_ = viper.BindPFlag("log.level", flag.Lookup("log-level"))
45+
_ = viper.BindPFlag("log.encoding", flag.Lookup("log-encoding"))
46+
_ = viper.BindPFlag("bind", flag.Lookup("bind"))
47+
_ = viper.BindPFlag("metricsPath", flag.Lookup("path"))
48+
_ = viper.BindPFlag("mongodb.uri", flag.Lookup("uri"))
49+
_ = viper.BindPFlag("mongodb.queryTimeout", flag.Lookup("query-timeout"))
50+
_ = viper.BindEnv("mongodb.uri", "MDBEXPORTER_MONGODB_URI")
51+
_ = viper.BindEnv("global.queryTimeout", "MDBEXPORTER_MONGODB_QUERY_TIMEOUT")
52+
_ = viper.BindEnv("log.level", "MDBEXPORTER_LOG_LEVEL")
53+
_ = viper.BindEnv("log.encoding", "MDBEXPORTER_LOG_ENCODING")
54+
_ = viper.BindEnv("bind", "MDBEXPORTER_BIND")
55+
_ = viper.BindEnv("metricsPath", "MDBEXPORTER_METRICSPATH")
56+
}
57+
58+
func main() {
59+
flag.Parse()
60+
initConfig()
61+
62+
c, conf, err := buildCollector()
63+
if err != nil {
64+
panic(err)
5765
}
58-
)
66+
67+
prometheus.MustRegister(c)
68+
promCollector = c
69+
_ = c.StartCacheInvalidator()
70+
srv = buildHTTPServer(prometheus.DefaultGatherer, conf)
71+
err = srv.ListenAndServe()
72+
73+
// Only panic if we have a net error
74+
if _, ok := err.(*net.OpError); ok {
75+
panic(err)
76+
} else {
77+
os.Stderr.WriteString(err.Error() + "\n")
78+
}
79+
}
5980

6081
func buildCollector() (*collector.Collector, config.Config, error) {
6182
var configVersion float32
@@ -112,33 +133,6 @@ func buildHTTPServer(reg prometheus.Gatherer, conf config.Config) *http.Server {
112133
return &srv
113134
}
114135

115-
func main() {
116-
_ = rootCmd.Execute()
117-
}
118-
119-
func init() {
120-
cobra.OnInitialize(initConfig)
121-
rootCmd.PersistentFlags().StringVarP(&uri, "uri", "u", config.DefaultMongoDBURI, "MongoDB URI (default is mongodb://localhost:27017). Use MDBEXPORTER_SERVER_%d_MONGODB_URI envs if you target multiple server")
122-
rootCmd.PersistentFlags().StringVarP(&configPath, "file", "f", "", "config file (default is $HOME/.mongodb_query_exporter/config.yaml)")
123-
rootCmd.PersistentFlags().StringVarP(&logLevel, "log-level", "l", config.DefaultLogLevel, "Define the log level (default is warning) [debug,info,warn,error]")
124-
rootCmd.PersistentFlags().StringVarP(&logEncoding, "log-encoding", "e", config.DefaultLogEncoder, "Define the log format (default is json) [json,console]")
125-
rootCmd.PersistentFlags().StringVarP(&bind, "bind", "b", config.DefaultBindAddr, "Address to bind http server (default is :9412)")
126-
rootCmd.PersistentFlags().StringVarP(&metricsPath, "path", "p", config.DefaultMetricsPath, "Metric path (default is /metrics)")
127-
rootCmd.PersistentFlags().DurationVarP(&queryTimeout, "query-timeout", "t", config.DefaultQueryTimeout, "Timeout for MongoDB queries")
128-
_ = viper.BindPFlag("log.level", rootCmd.PersistentFlags().Lookup("log-level"))
129-
_ = viper.BindPFlag("log.encoding", rootCmd.PersistentFlags().Lookup("log-encoding"))
130-
_ = viper.BindPFlag("bind", rootCmd.PersistentFlags().Lookup("bind"))
131-
_ = viper.BindPFlag("metricsPath", rootCmd.PersistentFlags().Lookup("path"))
132-
_ = viper.BindPFlag("mongodb.uri", rootCmd.PersistentFlags().Lookup("uri"))
133-
_ = viper.BindPFlag("mongodb.queryTimeout", rootCmd.PersistentFlags().Lookup("query-timeout"))
134-
_ = viper.BindEnv("mongodb.uri", "MDBEXPORTER_MONGODB_URI")
135-
_ = viper.BindEnv("global.queryTimeout", "MDBEXPORTER_MONGODB_QUERY_TIMEOUT")
136-
_ = viper.BindEnv("log.level", "MDBEXPORTER_LOG_LEVEL")
137-
_ = viper.BindEnv("log.encoding", "MDBEXPORTER_LOG_ENCODING")
138-
_ = viper.BindEnv("bind", "MDBEXPORTER_BIND")
139-
_ = viper.BindEnv("metricsPath", "MDBEXPORTER_METRICSPATH")
140-
}
141-
142136
func initConfig() {
143137
envPath := os.Getenv("MDBEXPORTER_CONFIG")
144138

go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ require (
88
github.com/prometheus/client_golang v1.16.0
99
github.com/prometheus/client_model v0.3.0
1010
github.com/prometheus/common v0.42.0
11-
github.com/spf13/cobra v1.7.0
11+
github.com/spf13/pflag v1.0.5
1212
github.com/spf13/viper v1.16.0
1313
github.com/testcontainers/testcontainers-go v0.21.0
1414
github.com/tj/assert v0.0.3
@@ -37,7 +37,6 @@ require (
3737
github.com/hashicorp/errwrap v1.1.0 // indirect
3838
github.com/hashicorp/hcl v1.0.0 // indirect
3939
github.com/imdario/mergo v0.3.15 // indirect
40-
github.com/inconshreveable/mousetrap v1.1.0 // indirect
4140
github.com/klauspost/compress v1.16.0 // indirect
4241
github.com/magiconair/properties v1.8.7 // indirect
4342
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
@@ -57,7 +56,6 @@ require (
5756
github.com/spf13/afero v1.9.5 // indirect
5857
github.com/spf13/cast v1.5.1 // indirect
5958
github.com/spf13/jwalterweatherman v1.1.0 // indirect
60-
github.com/spf13/pflag v1.0.5 // indirect
6159
github.com/stretchr/testify v1.8.4 // indirect
6260
github.com/subosito/gotenv v1.4.2 // indirect
6361
github.com/xdg-go/pbkdf2 v1.0.0 // indirect

go.sum

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
6868
github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=
6969
github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
7070
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
71-
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
7271
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
7372
github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
7473
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -177,8 +176,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
177176
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
178177
github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
179178
github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
180-
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
181-
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
182179
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
183180
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
184181
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -239,7 +236,6 @@ github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPH
239236
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
240237
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
241238
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
242-
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
243239
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
244240
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
245241
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
@@ -249,8 +245,6 @@ github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
249245
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
250246
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
251247
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
252-
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
253-
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
254248
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
255249
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
256250
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=

0 commit comments

Comments
 (0)