...
1 package agent
2
3 import (
4 "context"
5 "flag"
6 "fmt"
7 "net"
8 "os"
9
10 "github.com/spf13/cobra"
11 "k8s.io/klog/v2"
12
13 "github.com/datawire/ambassador/v2/cmd/entrypoint"
14 "github.com/datawire/ambassador/v2/pkg/agent"
15 "github.com/datawire/ambassador/v2/pkg/busy"
16 "github.com/datawire/ambassador/v2/pkg/logutil"
17 "github.com/datawire/dlib/dgroup"
18 "github.com/datawire/dlib/dlog"
19 )
20
21
22 const DefaultSnapshotURLFmt = "http://ambassador-admin:%d/snapshot-external"
23
24 func run(cmd *cobra.Command, args []string) error {
25 ctx := cmd.Context()
26 ambAgent := agent.NewAgent(nil, agent.NewArgoRolloutsGetter)
27
28
29
30
31 logLevel := os.Getenv("AES_LOG_LEVEL")
32
33
34
35 klogLevel := 3
36 if logLevel != "" {
37 logrusLevel, err := logutil.ParseLogLevel(logLevel)
38 if err != nil {
39 dlog.Errorf(ctx, "error parsing log level, running with default level: %+v", err)
40 } else {
41 busy.SetLogLevel(logrusLevel)
42 }
43 klogLevel = logutil.LogrusToKLogLevel(logrusLevel)
44 }
45 klogFlags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
46 klog.InitFlags(klogFlags)
47 if err := klogFlags.Parse([]string{fmt.Sprintf("-stderrthreshold=%d", klogLevel), "-v=2", "-logtostderr=false"}); err != nil {
48 return err
49 }
50 snapshotURL := os.Getenv("AES_SNAPSHOT_URL")
51 if snapshotURL == "" {
52 snapshotURL = fmt.Sprintf(DefaultSnapshotURLFmt, entrypoint.ExternalSnapshotPort)
53 }
54
55 metricsListener, err := net.Listen("tcp", ":8080")
56 if err != nil {
57 return err
58 }
59 dlog.Info(ctx, "metrics service listening on :8080")
60
61 grp := dgroup.NewGroup(ctx, dgroup.GroupConfig{})
62
63 grp.Go("metrics-server", func(ctx context.Context) error {
64 metricsServer := agent.NewMetricsServer(ambAgent.MetricsRelayHandler)
65 return metricsServer.Serve(ctx, metricsListener)
66 })
67
68 grp.Go("watch", func(ctx context.Context) error {
69 return ambAgent.Watch(ctx, snapshotURL)
70 })
71
72 return grp.Wait()
73 }
74
75 func Main(ctx context.Context, version string, args ...string) error {
76 argparser := &cobra.Command{
77 Use: os.Args[0],
78 Version: version,
79 RunE: run,
80 SilenceErrors: true,
81 SilenceUsage: true,
82 }
83 argparser.SetFlagErrorFunc(func(cmd *cobra.Command, err error) error {
84 if err == nil {
85 return nil
86 }
87 dlog.Errorf(ctx, "%s\nSee '%s --help'.\n", err, cmd.CommandPath())
88 return nil
89 })
90 argparser.SetArgs(args)
91 return argparser.ExecuteContext(ctx)
92 }
93
View as plain text