Skip to content

Commit c119dc0

Browse files
committed
feat: add tests + handle TTL
1 parent 03db3ce commit c119dc0

File tree

14 files changed

+3804
-1270
lines changed

14 files changed

+3804
-1270
lines changed

cmd/serve/command.go

Lines changed: 123 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -1,141 +1,148 @@
11
package serve
22

33
import (
4-
"github.com/ettle/strcase"
5-
"github.com/traefik/plugin-service/cmd/internal"
6-
"github.com/traefik/plugin-service/pkg/tracer"
7-
"github.com/urfave/cli/v2"
4+
"github.com/ettle/strcase"
5+
"github.com/traefik/plugin-service/cmd/internal"
6+
"github.com/traefik/plugin-service/pkg/tracer"
7+
"github.com/urfave/cli/v2"
88
)
99

1010
const (
11-
flagAddr = "addr"
12-
flagGHToken = "github-token"
11+
flagAddr = "addr"
12+
flagTTL = "ttl"
13+
flagGHToken = "github-token"
1314

14-
flagTraceServiceURL = "trace-service-url"
15+
flagTraceServiceURL = "trace-service-url"
1516

16-
flagGoProxyURL = "go-proxy-url"
17-
flagGoProxyUsername = "go-proxy-username"
18-
flagGoProxyPassword = "go-proxy-password"
17+
flagGoProxyURL = "go-proxy-url"
18+
flagGoProxyUsername = "go-proxy-username"
19+
flagGoProxyPassword = "go-proxy-password"
1920

20-
flagTracingAddress = "tracing-address"
21-
flagTracingInsecure = "tracing-insecure"
22-
flagTracingUsername = "tracing-username"
23-
flagTracingPassword = "tracing-password"
24-
flagTracingProbability = "tracing-probability"
21+
flagTracingAddress = "tracing-address"
22+
flagTracingInsecure = "tracing-insecure"
23+
flagTracingUsername = "tracing-username"
24+
flagTracingPassword = "tracing-password"
25+
flagTracingProbability = "tracing-probability"
2526
)
2627

2728
// Command creates the command for serving the plugin service.
2829
func Command() *cli.Command {
29-
cmd := &cli.Command{
30-
Name: "serve",
31-
Usage: "Serve HTTP",
32-
Description: "Launch plugin service application",
33-
Flags: []cli.Flag{
34-
&cli.StringFlag{
35-
Name: flagAddr,
36-
Usage: "Addr to listen on.",
37-
EnvVars: []string{strcase.ToSNAKE(flagAddr)},
38-
},
39-
&cli.StringFlag{
40-
Name: flagGHToken,
41-
Usage: "GitHub Token",
42-
EnvVars: []string{strcase.ToSNAKE(flagGHToken)},
43-
Required: true,
44-
},
45-
&cli.StringFlag{
46-
Name: flagTraceServiceURL,
47-
Usage: "URL of the trace service",
48-
EnvVars: []string{strcase.ToSNAKE(flagTraceServiceURL)},
49-
},
50-
},
51-
Action: func(cliCtx *cli.Context) error {
52-
return run(cliCtx.Context, buildConfig(cliCtx))
53-
},
54-
}
30+
cmd := &cli.Command{
31+
Name: "serve",
32+
Usage: "Serve HTTP",
33+
Description: "Launch plugin service application",
34+
Flags: []cli.Flag{
35+
&cli.StringFlag{
36+
Name: flagAddr,
37+
Usage: "Addr to listen on.",
38+
EnvVars: []string{strcase.ToSNAKE(flagAddr)},
39+
},
40+
&cli.StringFlag{
41+
Name: flagTTL,
42+
Usage: "Control TTL of download responses.",
43+
EnvVars: []string{strcase.ToSNAKE(flagTTL)},
44+
},
45+
&cli.StringFlag{
46+
Name: flagGHToken,
47+
Usage: "GitHub Token",
48+
EnvVars: []string{strcase.ToSNAKE(flagGHToken)},
49+
Required: true,
50+
},
51+
&cli.StringFlag{
52+
Name: flagTraceServiceURL,
53+
Usage: "URL of the trace service",
54+
EnvVars: []string{strcase.ToSNAKE(flagTraceServiceURL)},
55+
},
56+
},
57+
Action: func(cliCtx *cli.Context) error {
58+
return run(cliCtx.Context, buildConfig(cliCtx))
59+
},
60+
}
5561

56-
cmd.Flags = append(cmd.Flags, goProxyFlags()...)
57-
cmd.Flags = append(cmd.Flags, tracingFlags()...)
58-
cmd.Flags = append(cmd.Flags, internal.MongoFlags()...)
62+
cmd.Flags = append(cmd.Flags, goProxyFlags()...)
63+
cmd.Flags = append(cmd.Flags, tracingFlags()...)
64+
cmd.Flags = append(cmd.Flags, internal.MongoFlags()...)
5965

60-
return cmd
66+
return cmd
6167
}
6268

6369
func buildConfig(cliCtx *cli.Context) Config {
64-
return Config{
65-
MongoDB: internal.BuildMongoConfig(cliCtx),
66-
Tracing: tracer.Config{
67-
Address: cliCtx.String(flagTracingAddress),
68-
Insecure: cliCtx.Bool(flagTracingInsecure),
69-
Username: cliCtx.String(flagTracingUsername),
70-
Password: cliCtx.String(flagTracingPassword),
71-
Probability: cliCtx.Float64(flagTracingProbability),
72-
ServiceName: "plugin-service",
73-
},
74-
TraceURL: cliCtx.String(flagTraceServiceURL),
75-
Addr: cliCtx.String(flagAddr),
76-
GitHubToken: cliCtx.String(flagGHToken),
77-
GoProxy: GoProxy{
78-
URL: cliCtx.String(flagGoProxyURL),
79-
Username: cliCtx.String(flagGoProxyUsername),
80-
Password: cliCtx.String(flagGoProxyPassword),
81-
},
82-
}
70+
return Config{
71+
MongoDB: internal.BuildMongoConfig(cliCtx),
72+
Tracing: tracer.Config{
73+
Address: cliCtx.String(flagTracingAddress),
74+
Insecure: cliCtx.Bool(flagTracingInsecure),
75+
Username: cliCtx.String(flagTracingUsername),
76+
Password: cliCtx.String(flagTracingPassword),
77+
Probability: cliCtx.Float64(flagTracingProbability),
78+
ServiceName: "plugin-service",
79+
},
80+
TraceURL: cliCtx.String(flagTraceServiceURL),
81+
Addr: cliCtx.String(flagAddr),
82+
GitHubToken: cliCtx.String(flagGHToken),
83+
GoProxy: GoProxy{
84+
URL: cliCtx.String(flagGoProxyURL),
85+
Username: cliCtx.String(flagGoProxyUsername),
86+
Password: cliCtx.String(flagGoProxyPassword),
87+
},
88+
TTL: cliCtx.Duration(flagTTL),
89+
}
8390
}
8491

8592
func goProxyFlags() []cli.Flag {
86-
return []cli.Flag{
87-
&cli.StringFlag{
88-
Name: flagGoProxyURL,
89-
Usage: "Go Proxy URL",
90-
EnvVars: []string{strcase.ToSNAKE(flagGoProxyURL)},
91-
Required: true,
92-
},
93-
&cli.StringFlag{
94-
Name: flagGoProxyUsername,
95-
Usage: "Go Proxy Username",
96-
EnvVars: []string{strcase.ToSNAKE(flagGoProxyUsername)},
97-
Required: true,
98-
},
99-
&cli.StringFlag{
100-
Name: flagGoProxyPassword,
101-
Usage: "Go Proxy Password",
102-
EnvVars: []string{strcase.ToSNAKE(flagGoProxyPassword)},
103-
Required: true,
104-
},
105-
}
93+
return []cli.Flag{
94+
&cli.StringFlag{
95+
Name: flagGoProxyURL,
96+
Usage: "Go Proxy URL",
97+
EnvVars: []string{strcase.ToSNAKE(flagGoProxyURL)},
98+
Required: true,
99+
},
100+
&cli.StringFlag{
101+
Name: flagGoProxyUsername,
102+
Usage: "Go Proxy Username",
103+
EnvVars: []string{strcase.ToSNAKE(flagGoProxyUsername)},
104+
Required: true,
105+
},
106+
&cli.StringFlag{
107+
Name: flagGoProxyPassword,
108+
Usage: "Go Proxy Password",
109+
EnvVars: []string{strcase.ToSNAKE(flagGoProxyPassword)},
110+
Required: true,
111+
},
112+
}
106113
}
107114

108115
func tracingFlags() []cli.Flag {
109-
return []cli.Flag{
110-
&cli.StringFlag{
111-
Name: flagTracingAddress,
112-
Usage: "Address to send traces",
113-
EnvVars: []string{strcase.ToSNAKE(flagTracingAddress)},
114-
Value: "jaeger.jaeger.svc.cluster.local:4318",
115-
},
116-
&cli.BoolFlag{
117-
Name: flagTracingInsecure,
118-
Usage: "use HTTP instead of HTTPS",
119-
EnvVars: []string{strcase.ToSNAKE(flagTracingInsecure)},
120-
Value: true,
121-
},
122-
&cli.StringFlag{
123-
Name: flagTracingUsername,
124-
Usage: "Username to connect to Jaeger",
125-
EnvVars: []string{strcase.ToSNAKE(flagTracingUsername)},
126-
Value: "jaeger",
127-
},
128-
&cli.StringFlag{
129-
Name: flagTracingPassword,
130-
Usage: "Password to connect to Jaeger",
131-
EnvVars: []string{strcase.ToSNAKE(flagTracingPassword)},
132-
Value: "jaeger",
133-
},
134-
&cli.Float64Flag{
135-
Name: flagTracingProbability,
136-
Usage: "Probability to send traces",
137-
EnvVars: []string{strcase.ToSNAKE(flagTracingProbability)},
138-
Value: 0,
139-
},
140-
}
116+
return []cli.Flag{
117+
&cli.StringFlag{
118+
Name: flagTracingAddress,
119+
Usage: "Address to send traces",
120+
EnvVars: []string{strcase.ToSNAKE(flagTracingAddress)},
121+
Value: "jaeger.jaeger.svc.cluster.local:4318",
122+
},
123+
&cli.BoolFlag{
124+
Name: flagTracingInsecure,
125+
Usage: "use HTTP instead of HTTPS",
126+
EnvVars: []string{strcase.ToSNAKE(flagTracingInsecure)},
127+
Value: true,
128+
},
129+
&cli.StringFlag{
130+
Name: flagTracingUsername,
131+
Usage: "Username to connect to Jaeger",
132+
EnvVars: []string{strcase.ToSNAKE(flagTracingUsername)},
133+
Value: "jaeger",
134+
},
135+
&cli.StringFlag{
136+
Name: flagTracingPassword,
137+
Usage: "Password to connect to Jaeger",
138+
EnvVars: []string{strcase.ToSNAKE(flagTracingPassword)},
139+
Value: "jaeger",
140+
},
141+
&cli.Float64Flag{
142+
Name: flagTracingProbability,
143+
Usage: "Probability to send traces",
144+
EnvVars: []string{strcase.ToSNAKE(flagTracingProbability)},
145+
Value: 0,
146+
},
147+
}
141148
}

cmd/serve/config.go

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,29 @@
11
package serve
22

33
import (
4-
"github.com/traefik/plugin-service/pkg/db/mongodb"
5-
"github.com/traefik/plugin-service/pkg/tracer"
4+
"time"
5+
6+
"github.com/traefik/plugin-service/pkg/db/mongodb"
7+
"github.com/traefik/plugin-service/pkg/tracer"
68
)
79

810
// Config holds the serve configuration.
911
type Config struct {
10-
Addr string
11-
GitHubToken string
12+
Addr string
13+
GitHubToken string
14+
15+
TraceURL string
1216

13-
TraceURL string
17+
MongoDB mongodb.Config
18+
Tracing tracer.Config
19+
GoProxy GoProxy
1420

15-
MongoDB mongodb.Config
16-
Tracing tracer.Config
17-
GoProxy GoProxy
21+
TTL time.Duration
1822
}
1923

2024
// GoProxy holds the go-proxy configuration.
2125
type GoProxy struct {
22-
URL string
23-
Username string
24-
Password string
26+
URL string
27+
Username string
28+
Password string
2529
}

0 commit comments

Comments
 (0)