42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
package cmd
|
||
|
||
import (
|
||
"context"
|
||
"flag"
|
||
"io"
|
||
"time"
|
||
|
||
reg "reg/internal/reg"
|
||
)
|
||
|
||
// RunPing реализует команду `reg ping [-v]`.
|
||
// Проверяет доступность реестра (GET /v2/) и выводит API-версию.
|
||
// С -v добавляет время ответа.
|
||
func RunPing(ctx context.Context, client *reg.RegistryClient, args []string) int {
|
||
cmdFlags := flag.NewFlagSet("ping", flag.ContinueOnError)
|
||
cmdFlags.SetOutput(io.Discard)
|
||
verboseFlag := cmdFlags.Bool("v", false, "print response time")
|
||
cmdFlags.Usage = func() {}
|
||
if code, ok := parseFlags(cmdFlags, args); !ok {
|
||
return code
|
||
}
|
||
|
||
start := time.Now()
|
||
apiVersion, err := client.Ping(ctx)
|
||
elapsed := time.Since(start)
|
||
if err != nil {
|
||
reg.PrintError(err.Error())
|
||
return 1
|
||
}
|
||
|
||
out := map[string]interface{}{
|
||
"ok": true,
|
||
"apiVersion": apiVersion,
|
||
}
|
||
if *verboseFlag {
|
||
out["duration_ms"] = float64(elapsed.Microseconds()) / 1000.0
|
||
}
|
||
reg.PrintJSON(out)
|
||
return 0
|
||
}
|