-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
api.go
133 lines (123 loc) · 3.89 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2016-present Datadog, Inc.
// Package daemon provides the installer daemon commands.
package daemon
import (
"fmt"
"github.com/DataDog/datadog-agent/cmd/installer/command"
"github.com/DataDog/datadog-agent/comp/core"
"github.com/DataDog/datadog-agent/comp/core/config"
"github.com/DataDog/datadog-agent/comp/core/log/logimpl"
"github.com/DataDog/datadog-agent/comp/core/secrets"
"github.com/DataDog/datadog-agent/comp/core/sysprobeconfig/sysprobeconfigimpl"
"github.com/DataDog/datadog-agent/comp/updater/localapiclient"
"github.com/DataDog/datadog-agent/comp/updater/localapiclient/localapiclientimpl"
"github.com/DataDog/datadog-agent/pkg/util/fxutil"
"github.com/spf13/cobra"
"go.uber.org/fx"
)
type cliParams struct {
command.GlobalParams
pkg string
version string
}
func apiCommands(global *command.GlobalParams) []*cobra.Command {
installCmd := &cobra.Command{
Use: "install package version",
Aliases: []string{"install"},
Short: "Installs a package to the expected version",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
return experimentFxWrapper(install, &cliParams{
GlobalParams: *global,
pkg: args[0],
version: args[1],
})
},
}
startExperimentCmd := &cobra.Command{
Use: "start-experiment package version",
Aliases: []string{"start"},
Short: "Starts an experiment",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
return experimentFxWrapper(start, &cliParams{
GlobalParams: *global,
pkg: args[0],
version: args[1],
})
},
}
stopExperimentCmd := &cobra.Command{
Use: "stop-experiment package",
Aliases: []string{"stop"},
Short: "Stops an experiment",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return experimentFxWrapper(stop, &cliParams{
GlobalParams: *global,
pkg: args[0],
})
},
}
promoteExperimentCmd := &cobra.Command{
Use: "promote-experiment package",
Aliases: []string{"promote"},
Short: "Promotes an experiment",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
return experimentFxWrapper(promote, &cliParams{
GlobalParams: *global,
pkg: args[0],
})
},
}
return []*cobra.Command{startExperimentCmd, stopExperimentCmd, promoteExperimentCmd, installCmd}
}
func experimentFxWrapper(f interface{}, params *cliParams) error {
return fxutil.OneShot(f,
fx.Supply(core.BundleParams{
ConfigParams: config.NewAgentParams(params.ConfFilePath),
SecretParams: secrets.NewEnabledParams(),
SysprobeConfigParams: sysprobeconfigimpl.NewParams(),
LogParams: logimpl.ForOneShot("INSTALLER", "off", true),
}),
core.Bundle(),
fx.Supply(params),
localapiclientimpl.Module(),
)
}
func start(params *cliParams, client localapiclient.Component) error {
err := client.StartExperiment(params.pkg, params.version)
if err != nil {
fmt.Println("Error starting experiment:", err)
return err
}
return nil
}
func stop(params *cliParams, client localapiclient.Component) error {
err := client.StopExperiment(params.pkg)
if err != nil {
fmt.Println("Error stopping experiment:", err)
return err
}
return nil
}
func promote(params *cliParams, client localapiclient.Component) error {
err := client.PromoteExperiment(params.pkg)
if err != nil {
fmt.Println("Error promoting experiment:", err)
return err
}
return nil
}
func install(params *cliParams, client localapiclient.Component) error {
err := client.Install(params.pkg, params.version)
if err != nil {
fmt.Println("Error bootstrapping package:", err)
return err
}
return nil
}