Skip to content

Commit 8f90a1d

Browse files
ubombarUfuk Bombar
and
Ufuk Bombar
authored
Add flags for Iris API Server URL, Iris API Server Params, ClickHouse proxy URL, and measurement UUID (#6)
* Add clickhouse command flags for url and params * WIP: Add Iris API URL flag to main command * Add measurement uuid as a flag to main command * Change measurement-uuid flag name to meas-uuid * Add warning comment to the hard-coded measurement uuid in main.go --------- Co-authored-by: Ufuk Bombar <{ID}+{username}@users.noreply.github.com>
1 parent ad41d0a commit 8f90a1d

File tree

10 files changed

+50
-41
lines changed

10 files changed

+50
-41
lines changed

cmd/irisctl/main.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ var (
3737
fRootStdout bool
3838
fRootVerbose bool
3939
fRootJqFilter string
40+
fIrisAPIUrl string
41+
fMeasurementUUID string
4042

4143
allCmds = []*cobra.Command{}
4244

@@ -63,6 +65,9 @@ func main() {
6365
irisctlCmd.PersistentFlags().BoolVarP(&fRootStdout, "stdout", "o", false, "print results to stdout instead of saving to a file")
6466
irisctlCmd.PersistentFlags().BoolVarP(&fRootVerbose, "verbose", "v", false, "enable verbose mode (more output)")
6567
irisctlCmd.PersistentFlags().StringVarP(&fRootJqFilter, "jq-filter", "j", ".", "jq filter")
68+
irisctlCmd.PersistentFlags().StringVarP(&fIrisAPIUrl, "iris-api-url", "u", "https://api.iris.dioptra.io", "specify the iris api url")
69+
// XXX Instead of hard-coding a default value, we should find a measurement UUID of the user.
70+
irisctlCmd.PersistentFlags().StringVarP(&fMeasurementUUID, "meas-uuid", "m", "a75482d1-8c5c-4d56-845e-fc3861047992", "specify the measurement uuid for the gusethosue credentials")
6671
irisctlCmd.SetUsageFunc(common.Usage)
6772
irisctlCmd.SetHelpFunc(common.Help)
6873

@@ -90,6 +95,8 @@ func main() {
9095
_ = viper.BindPFlag("stdout", irisctlCmd.PersistentFlags().Lookup("stdout"))
9196
_ = viper.BindPFlag("verbose", irisctlCmd.PersistentFlags().Lookup("verbose"))
9297
_ = viper.BindPFlag("jq-filter", irisctlCmd.PersistentFlags().Lookup("jq-filter"))
98+
_ = viper.BindPFlag("iris-api-url", irisctlCmd.PersistentFlags().Lookup("iris-api-url"))
99+
_ = viper.BindPFlag("meas-uuid", irisctlCmd.PersistentFlags().Lookup("meas-uuid"))
93100
// Iris API commands.
94101
allCmds = append(allCmds, auth.AuthCmd())
95102
allCmds = append(allCmds, users.UsersCmd())

internal/agents/agents.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ func GetAgentName(uuid string) string {
5757
func GetAgents(hostname string, printOut bool) ([]byte, error) {
5858
var url string
5959
if fAgentsTag != "" {
60-
url = fmt.Sprintf("%s/?tag=%v&offset=0&limit=200", common.AgentsAPI, fAgentsTag)
60+
url = fmt.Sprintf("%s/?tag=%v&offset=0&limit=200", common.APIEndpoint(common.AgentsAPISuffix), fAgentsTag)
6161
} else {
62-
url = fmt.Sprintf("%s/?&offset=0&limit=200", common.AgentsAPI)
62+
url = fmt.Sprintf("%s/?&offset=0&limit=200", common.APIEndpoint(common.AgentsAPISuffix))
6363
}
6464
return getResults(url, hostname, printOut)
6565
}
@@ -102,7 +102,7 @@ func agents(cmd *cobra.Command, args []string) {
102102
}
103103

104104
func getAgentByUUID(uuid string) error {
105-
url := fmt.Sprintf("%s/%s", common.AgentsAPI, uuid)
105+
url := fmt.Sprintf("%s/%s", common.APIEndpoint(common.AgentsAPISuffix), uuid)
106106
_, err := getResults(url, "", true)
107107
return err
108108
}

internal/auth/auth.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ func createAccessToken(credentialsFile, accessTokenFile string) error {
242242
fmt.Fprintf(os.Stderr, "using IRIS_PASSWORD environment variable\n")
243243
}
244244

245-
url := fmt.Sprintf("%s/jwt/login", common.AuthAPI)
245+
url := fmt.Sprintf("%s/jwt/login", common.APIEndpoint(common.AuthAPISuffix))
246246
data := fmt.Sprintf("grant_type=&username=%s&password=%s&scope=&client_id=&client_secret=", username, password)
247247
jsonData, err := common.Curl("", false, "POST", url,
248248
"-H", "Content-Type: application/x-www-form-urlencoded",

internal/clickhouse/clickhouse.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,15 @@ import (
1111
"github.com/spf13/cobra"
1212
)
1313

14-
const (
15-
CHPROXYURL = "https://chproxy.iris.dioptra.io"
16-
CHPARAMS = "enable_http_compression=false&default_format=JSONEachRow&output_format_json_quote_64bit_integer"
17-
)
18-
1914
var (
2015
// Command, its flags, subcommands, and their flags.
2116
// clickhouse --query <query-string>
2217
// clickhouse <query-file>
23-
cmdName = "clickhouse"
24-
subcmdNames = []string{}
25-
fClickHouseQuery string
18+
cmdName = "clickhouse"
19+
subcmdNames = []string{}
20+
fClickHouseQuery string
21+
fClickhouseURL string
22+
fClickhouseParams string
2623

2724
// Test code changes Fatal to Panic so a fatal error won't exit
2825
// the process and can be recovered.
@@ -42,6 +39,8 @@ func ClickHouseCmd() *cobra.Command {
4239
Run: clickhouse,
4340
}
4441
clickhouseCmd.Flags().StringVar(&fClickHouseQuery, "query", "", "clickhouse query string")
42+
clickhouseCmd.Flags().StringVar(&fClickhouseURL, "clickhouse-proxy-url", "https://chproxy.iris.dioptra.io", "proxy url of the clickhouse server")
43+
clickhouseCmd.Flags().StringVar(&fClickhouseParams, "clickhouse-params", "enable_http_compression=false&default_format=JSONEachRow&output_format_json_quote_64bit_integer", "raw string of clickhouse parameters")
4544
clickhouseCmd.SetUsageFunc(common.Usage)
4645
clickhouseCmd.SetHelpFunc(common.Help)
4746

@@ -59,7 +58,7 @@ func RunQueryString(query string) (string, string, error) {
5958
return "", "", err
6059
}
6160
defer tmpFile.Close()
62-
url := fmt.Sprintf("%v/?%v&database=iris&query=%v", CHPROXYURL, CHPARAMS, url.QueryEscape(query))
61+
url := fmt.Sprintf("%v/?%v&database=iris&query=%v", fClickhouseURL, fClickhouseParams, url.QueryEscape(query))
6362
output, err := common.Curl(userpass, true, "POST", url, "--http1.1", "--output", tmpFile.Name())
6463
return tmpFile.Name(), string(output), err
6564
}
@@ -84,6 +83,7 @@ func clickhouseArgs(cmd *cobra.Command, args []string) error {
8483
func clickhouse(cmd *cobra.Command, args []string) {
8584
var tmpFile, output string
8685
var err error
86+
8787
if len(args) > 0 {
8888
tmpFile, output, err = runQueryFromFile(args[0])
8989
} else {

internal/common/common.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,13 @@ import (
2121
)
2222

2323
const (
24-
IrisAPI = "https://api.iris.dioptra.io"
25-
AuthAPI = IrisAPI + "/auth"
26-
UsersAPI = IrisAPI + "/users"
27-
AgentsAPI = IrisAPI + "/agents"
28-
TargetsAPI = IrisAPI + "/targets"
29-
MeasurementsAPI = IrisAPI + "/measurements"
30-
StatusAPI = IrisAPI + "/status"
31-
MaintenanceAPI = IrisAPI + "/maintenance"
24+
AuthAPISuffix = "/auth"
25+
UsersAPISuffix = "/users"
26+
AgentsAPISuffix = "/agents"
27+
TargetsAPISuffix = "/targets"
28+
MeasurementsAPISuffix = "/measurements"
29+
StatusAPISuffix = "/status"
30+
MaintenanceAPISuffix = "/maintenance"
3231

3332
UserID = "user ID"
3433
MeasurementUUID = "measurement UUID"
@@ -340,6 +339,10 @@ func RootFlagString(flag string) string {
340339
return viper.GetString(flag)
341340
}
342341

342+
func APIEndpoint(endpoint string) string {
343+
return RootFlagString("iris-api-url") + endpoint
344+
}
345+
343346
func CliFatal(args ...interface{}) {
344347
log.SetFlags(0)
345348
log.SetPrefix("")

internal/maint/maint.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func deleteMaintenanceMeas(measUUID string) error {
173173
defer f.Close()
174174
fmt.Fprintf(os.Stderr, "saving in %s\n", f.Name())
175175

176-
url := fmt.Sprintf("%s/measurements/%s", common.MaintenanceAPI, measUUID)
176+
url := fmt.Sprintf("%s/measurements/%s", common.APIEndpoint((common.MaintenanceAPISuffix)), measUUID)
177177
jsonData, err := common.Curl(auth.GetAccessToken(), false, "DELETE", url)
178178
if err != nil {
179179
return err

internal/meas/meas.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func GetMeasMdFile(allUsers bool) (string, error) {
9797
func GetMeasurementAllDetails(uuid string) (common.Measurement, error) {
9898
var measurement common.Measurement
9999

100-
url := fmt.Sprintf("%s/%s", common.MeasurementsAPI, uuid)
100+
url := fmt.Sprintf("%s/%s", common.APIEndpoint(common.MeasurementsAPISuffix), uuid)
101101
jsonData, err := common.Curl(auth.GetAccessToken(), false, "GET", url)
102102
if err != nil {
103103
return measurement, err
@@ -239,7 +239,7 @@ func measEdit(cmd *cobra.Command, args []string) {
239239
}
240240

241241
func getTargetList(measUUID, agentUUID string) error {
242-
url := fmt.Sprintf("%s/%s/%s/target", common.MeasurementsAPI, measUUID, agentUUID)
242+
url := fmt.Sprintf("%s/%s/%s/target", common.APIEndpoint(common.MeasurementsAPISuffix), measUUID, agentUUID)
243243
jsonData, err := common.Curl(auth.GetAccessToken(), false, "GET", url)
244244
if err != nil {
245245
return err
@@ -248,7 +248,7 @@ func getTargetList(measUUID, agentUUID string) error {
248248
}
249249

250250
func getMeasurementByUUID(uuid string) error {
251-
url := fmt.Sprintf("%s/%s", common.MeasurementsAPI, uuid)
251+
url := fmt.Sprintf("%s/%s", common.APIEndpoint(common.MeasurementsAPISuffix), uuid)
252252
jsonData, err := common.Curl(auth.GetAccessToken(), false, "GET", url)
253253
if err != nil {
254254
return err
@@ -276,7 +276,7 @@ func getMeasMdFile() (string, error) {
276276
defer fmt.Println()
277277
for offset := 0; offset < 10000; offset += limit {
278278
verbose("getting from offset %d to %d\r", offset, offset+limit)
279-
url := common.MeasurementsAPI
279+
url := common.APIEndpoint(common.MeasurementsAPISuffix)
280280
if fMeasPublic {
281281
url = fmt.Sprintf("%s/public?", url)
282282
} else {
@@ -313,7 +313,7 @@ func postMeasurementRequst(measFile string) error {
313313
}
314314

315315
func deleteMeasurement(measUUID string) error {
316-
url := fmt.Sprintf("%s/%s", common.MeasurementsAPI, measUUID)
316+
url := fmt.Sprintf("%s/%s", common.APIEndpoint(common.MeasurementsAPISuffix), measUUID)
317317
jsonData, err := common.Curl(auth.GetAccessToken(), false, "DELETE", url)
318318
if err != nil {
319319
return err

internal/status/status.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func statusArgs(cmd *cobra.Command, args []string) error {
5151
}
5252

5353
func status(cmd *cobra.Command, args []string) {
54-
if _, err := getResults(common.StatusAPI, true); err != nil {
54+
if _, err := getResults(common.APIEndpoint(common.StatusAPISuffix), true); err != nil {
5555
fatal(err)
5656
}
5757
}

internal/targets/targets.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,17 +184,17 @@ func targetsDelete(cmd *cobra.Command, args []string) {
184184
}
185185

186186
func getAll() ([]byte, error) {
187-
url := fmt.Sprintf("%s/?&offset=0&limit=200", common.TargetsAPI)
187+
url := fmt.Sprintf("%s/?&offset=0&limit=200", common.APIEndpoint(common.TargetsAPISuffix))
188188
return getResults(url, true)
189189
}
190190

191191
func getByKey(key string) ([]byte, error) {
192-
url := fmt.Sprintf("%s/%s?with_content=%v", common.TargetsAPI, key, fKeyWithContent)
192+
url := fmt.Sprintf("%s/%s?with_content=%v", common.APIEndpoint(common.TargetsAPISuffix), key, fKeyWithContent)
193193
return getResults(url, true)
194194
}
195195

196196
func postList(file string) error {
197-
url := fmt.Sprintf("%v/", common.TargetsAPI)
197+
url := fmt.Sprintf("%v/", common.APIEndpoint(common.TargetsAPISuffix))
198198
if fUploadProbe {
199199
url = url + "/probes/"
200200
}

internal/users/users.go

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,20 +108,19 @@ func UsersCmd() *cobra.Command {
108108
// GetUserPass returns username and password obtained from
109109
// users/me/services of Iris API.
110110
//
111-
// XXX For now, this function uses a hard-coded measurement UUID
111+
// XXX For now, this function receives the measurement UUID from flags
112112
//
113-
// but going forward it should either accept a measurement UUID
114-
// or find a measurement UUID of the user running this instance
115-
// of irisctl.
113+
// but going forward it might use find a measurement UUID of the user
114+
// running this instance of irisctl.
116115
//
117116
// XXX We wait one second before returning because we have noticed that
118117
//
119118
// sometimes Iris hasn't fully read the user file that includes the
120119
// newly created username and password.
121120
func GetUserPass() (string, error) {
122121
if meServices.ClickHouse.Username == "" {
123-
uuid := "a75482d1-8c5c-4d56-845e-fc3861047992" // zeph-gcp-daily.json
124-
url := fmt.Sprintf("%s/me/services?measurement_uuid=%v", common.UsersAPI, uuid)
122+
uuid := common.RootFlagString("meas-uuid") // it is slightly better than hardcoding the measurement but for now it's adequate
123+
url := fmt.Sprintf("%s/me/services?measurement_uuid=%v", common.APIEndpoint(common.UsersAPISuffix), uuid)
125124
jsonData, err := common.Curl(auth.GetAccessToken(), false, "GET", url)
126125
if err != nil {
127126
return "", err
@@ -243,24 +242,24 @@ func usersServicesArgs(cmd *cobra.Command, args []string) error {
243242

244243
func usersMeServices(cmd *cobra.Command, args []string) {
245244
uuid := args[0]
246-
url := fmt.Sprintf("%s/me/services?measurement_uuid=%v", common.UsersAPI, uuid)
245+
url := fmt.Sprintf("%s/me/services?measurement_uuid=%v", common.APIEndpoint(common.UsersAPISuffix), uuid)
247246
if _, err := common.Curl(auth.GetAccessToken(), false, "GET", url); err != nil {
248247
fatal(err)
249248
}
250249
}
251250

252251
func getUsersMe(printOut bool) ([]byte, error) {
253-
url := fmt.Sprintf("%s/me", common.UsersAPI)
252+
url := fmt.Sprintf("%s/me", common.APIEndpoint(common.UsersAPISuffix))
254253
return getUsers(url, printOut)
255254
}
256255

257256
func getUsersAll(printOut bool) ([]byte, error) {
258-
url := fmt.Sprintf("%s?filter_verified=%v&offset=0&limit=200", common.UsersAPI, fAllVerified)
257+
url := fmt.Sprintf("%s?filter_verified=%v&offset=0&limit=200", common.APIEndpoint(common.UsersAPISuffix), fAllVerified)
259258
return getUsers(url, printOut)
260259
}
261260

262261
func deleteUsersById(userId string) error {
263-
url := fmt.Sprintf("%s/%v", common.UsersAPI, userId)
262+
url := fmt.Sprintf("%s/%v", common.APIEndpoint(common.UsersAPISuffix), userId)
264263
jsonData, err := common.Curl(auth.GetAccessToken(), false, "DELETE", url)
265264
if err != nil {
266265
fmt.Println(string(jsonData))

0 commit comments

Comments
 (0)