diff --git a/Makefile b/Makefile index aec96e6c..7d549c5a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: build clean -export BLADE_VERSION=1.7.3 +export BLADE_VERSION=1.7.4 ALLOWGITVERSION=1.8.5 GITVERSION:=$(shell git --version | grep ^git | sed 's/^.* //g') diff --git a/build/spec/spec.go b/build/spec/spec.go index b8726a6a..4c0cd9e0 100644 --- a/build/spec/spec.go +++ b/build/spec/spec.go @@ -29,7 +29,7 @@ import ( "github.com/chaosblade-io/chaosblade/cli/cmd" ) -var version = "1.7.3" +var version = "1.7.4" func main() { diff --git a/cli/cmd/prepare_jvm.go b/cli/cmd/prepare_jvm.go index 9b77da45..7df032ff 100644 --- a/cli/cmd/prepare_jvm.go +++ b/cli/cmd/prepare_jvm.go @@ -20,12 +20,13 @@ import ( "context" "encoding/json" "fmt" - "github.com/chaosblade-io/chaosblade-spec-go/log" "path" "strconv" "strings" "time" + "github.com/chaosblade-io/chaosblade-spec-go/log" + "github.com/chaosblade-io/chaosblade-spec-go/channel" "github.com/chaosblade-io/chaosblade-spec-go/spec" "github.com/chaosblade-io/chaosblade-spec-go/util" @@ -145,13 +146,13 @@ func (pc *PrepareJvmCommand) reportAttachedResult(ctx context.Context, response // attachAgent func (pc *PrepareJvmCommand) attachAgent(ctx context.Context) *spec.Response { - response, username := jvm.Attach(ctx, strconv.Itoa(pc.port), pc.javaHome, pc.processId) - if !response.Success && username != "" && strings.Contains(response.Err, "connection refused") { + response, username, userid := jvm.Attach(ctx, strconv.Itoa(pc.port), pc.javaHome, pc.processId) + if !response.Success && (username != "" || userid != "") && strings.Contains(response.Err, "connection refused") { // if attach failed, search port from ~/.sandbox.token port, err := jvm.CheckPortFromSandboxToken(ctx, username) if err == nil { log.Infof(ctx, "use %s port to retry", port) - response, username = jvm.Attach(ctx, port, pc.javaHome, pc.processId) + response, username, userid = jvm.Attach(ctx, port, pc.javaHome, pc.processId) if response.Success { // update port err := updatePreparationPort(pc.uid, port) @@ -228,21 +229,21 @@ func (pc *PrepareJvmCommand) invokeAttaching(ctx context.Context, port string, u } /* -{ - "data":{ #PreparestatusBean - "createTime":"", - "error":"", - "pid":"", - "port":"", - "process":"sss", - "running":false, - "status":"", - "type":"", - "uid":"", - "updateTime":"" - }, - "type":"JAVA_AGENT_PREPARE" -} + { + "data":{ #PreparestatusBean + "createTime":"", + "error":"", + "pid":"", + "port":"", + "process":"sss", + "running":false, + "status":"", + "type":"", + "uid":"", + "updateTime":"" + }, + "type":"JAVA_AGENT_PREPARE" + } */ func createPostBody(ctx context.Context) ([]byte, error) { preparationRecord, err := GetDS().QueryPreparationByUid(uid) diff --git a/exec/jvm/executor.go b/exec/jvm/executor.go index 70c94af3..ae4a1fc8 100644 --- a/exec/jvm/executor.go +++ b/exec/jvm/executor.go @@ -20,11 +20,12 @@ import ( "context" "encoding/json" "fmt" - "github.com/chaosblade-io/chaosblade-spec-go/log" "strconv" "strings" "time" + "github.com/chaosblade-io/chaosblade-spec-go/log" + "github.com/chaosblade-io/chaosblade-spec-go/channel" "github.com/chaosblade-io/chaosblade-spec-go/spec" "github.com/chaosblade-io/chaosblade-spec-go/util" @@ -378,15 +379,15 @@ func Prepare(ctx context.Context, processName, processId, javaHome string) (resp return spec.ResponseFailWithFlags(spec.DatabaseError, "insert", err), port } } - var username string + var username, userid string port = record.Port - response, username = Attach(ctx, port, javaHome, processId) - if !response.Success && username != "" && strings.Contains(response.Err, "connection refused") { + response, username, userid = Attach(ctx, port, javaHome, processId) + if !response.Success && (username != "" || userid != "") && strings.Contains(response.Err, "connection refused") { // if attach failed, search port from ~/.sandbox.token port, err = CheckPortFromSandboxToken(ctx, username) if err == nil { log.Infof(ctx, "use %s port to retry", port) - response, username = Attach(ctx, port, "", processId) + response, username, userid = Attach(ctx, port, "", processId) if response.Success { // update port err := db.UpdatePreparationPortByUid(record.Uid, port) diff --git a/exec/jvm/sandbox.go b/exec/jvm/sandbox.go index fe84ad42..de65d344 100644 --- a/exec/jvm/sandbox.go +++ b/exec/jvm/sandbox.go @@ -22,6 +22,7 @@ import ( "os" osuser "os/user" "path" + "regexp" "strconv" "strings" "time" @@ -38,20 +39,20 @@ var cl = channel.NewLocalChannel() const DefaultNamespace = "chaosblade" -func Attach(ctx context.Context, port, javaHome, pid string) (*spec.Response, string) { +func Attach(ctx context.Context, port, javaHome, pid string) (*spec.Response, string, string) { // refresh - response, username := attach(ctx, pid, port, javaHome) + response, username, userid := attach(ctx, pid, port, javaHome) if !response.Success { - return response, username + return response, username, userid } time.Sleep(5 * time.Second) // active response = active(ctx, port) if !response.Success { - return response, username + return response, username, userid } // check - return check(ctx, port), username + return check(ctx, port), username, userid } // curl -s http://localhost:$2/sandbox/default/module/http/chaosblade/status 2>&1 @@ -85,34 +86,54 @@ func active(ctx context.Context, port string) *spec.Response { } // attach java agent to application process -func attach(ctx context.Context, pid, port string, javaHome string) (*spec.Response, string) { +func attach(ctx context.Context, pid, port string, javaHome string) (*spec.Response, string, string) { username, err := getUsername(pid) + userid := "" if err != nil { - log.Errorf(ctx, spec.ProcessGetUsernameFailed.Sprintf(pid, err)) - return spec.ResponseFailWithFlags(spec.ProcessGetUsernameFailed, pid, err), "" + userid, err = getUserid(ctx, pid) + if err != nil { + log.Errorf(ctx, spec.ProcessGetUsernameFailed.Sprintf(pid, err)) + return spec.ResponseFailWithFlags(spec.ProcessGetUsernameFailed, pid, err), "", "" + } } javaBin, javaHome := getJavaBinAndJavaHome(ctx, javaHome, pid, getJavaCommandLine) toolsJar := getToolJar(ctx, javaHome) - log.Infof(ctx, "javaBin: %s, javaHome: %s, toolsJar: %s", javaBin, javaHome, toolsJar) + log.Infof(ctx, "javaBin: %s, javaHome: %s, toolsJar: %s, username: %s, userid: %s", javaBin, javaHome, toolsJar, username, userid) token, err := getSandboxToken(ctx) if err != nil { log.Errorf(ctx, spec.SandboxCreateTokenFailed.Sprintf(err)) - return spec.ResponseFailWithFlags(spec.SandboxCreateTokenFailed, err), username + return spec.ResponseFailWithFlags(spec.SandboxCreateTokenFailed, err), username, userid } javaArgs := getAttachJvmOpts(toolsJar, token, port, pid) currUser, err := osuser.Current() if err != nil { - log.Warnf(ctx, "get current user info failed, %v", err) + log.Warnf(ctx, "get current user info failed, curr user: %v, %v", currUser, err) + if strings.Contains(err.Error(), "unknown userid") { + reg, e := regexp.Compile(`\d+`) + if e == nil { + uid := reg.FindString(err.Error()) + currUser = &osuser.User{ + Uid: uid, + } + } + } + } + var command string - if currUser != nil && (currUser.Username == username) { + if currUser != nil && (currUser.Username == username || currUser.Uid == userid) { command = fmt.Sprintf("%s %s", javaBin, javaArgs) } else { if currUser != nil { - log.Infof(ctx, "current user name is %s, not equal %s, so use sudo command to execute", - currUser.Username, username) + log.Infof(ctx, "current user name is %s, not equal %s|%s, so use sudo command to execute", + currUser.Username, username, userid) + } + if username != "" { + command = fmt.Sprintf("sudo -u %s %s %s", username, javaBin, javaArgs) + } else if userid != "" { + command = fmt.Sprintf("su - #%s -c '%s %s'", userid, javaBin, javaArgs) } - command = fmt.Sprintf("sudo -u %s %s %s", username, javaBin, javaArgs) + } javaToolOptions := os.Getenv("JAVA_TOOL_OPTIONS") if javaToolOptions != "" { @@ -120,7 +141,7 @@ func attach(ctx context.Context, pid, port string, javaHome string) (*spec.Respo } response := cl.Run(ctx, "", command) if !response.Success { - return response, username + return response, username, userid } osCmd := fmt.Sprintf("grep %s", fmt.Sprintf(`%s %s | grep %s | tail -1 | awk -F ";" '{print $3";"$4}'`, token, getSandboxTokenFile(username), DefaultNamespace)) @@ -128,9 +149,9 @@ func attach(ctx context.Context, pid, port string, javaHome string) (*spec.Respo // if attach successfully, the sandbox-agent.jar will write token to local file if !response.Success { log.Errorf(ctx, spec.OsCmdExecFailed.Sprintf(osCmd, response.Err)) - return spec.ResponseFailWithFlags(spec.OsCmdExecFailed, osCmd, response.Err), username + return spec.ResponseFailWithFlags(spec.OsCmdExecFailed, osCmd, response.Err), username, userid } - return response, username + return response, username, userid } func getAttachJvmOpts(toolsJar string, token string, port string, pid string) string { @@ -177,6 +198,24 @@ func getUsername(pid string) (string, error) { return javaProcess.Username() } +func getUserid(ctx context.Context, pid string) (string, error) { + p, err := strconv.Atoi(pid) + if err != nil { + return "", err + } + javaProcess, err := process.NewProcess(int32(p)) + if err != nil { + return "", err + } + + userIds, err := javaProcess.Uids() + if err == nil && cap(userIds) > 0 { + userid := strconv.Itoa(int(userIds[0])) + return userid, err + } + return "", err +} + func getJavaBinAndJavaHome(ctx context.Context, javaHome string, pid string, getJavaCommandLineFunc func(ctx context.Context, pid string) (commandSlice []string, err error)) (string, string) { javaBin := "java" diff --git a/go.mod b/go.mod index de764cff..993cad93 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,15 @@ module github.com/chaosblade-io/chaosblade go 1.20 require ( - github.com/chaosblade-io/chaosblade-exec-cloud v1.7.3 - github.com/chaosblade-io/chaosblade-exec-cri v1.7.3 - github.com/chaosblade-io/chaosblade-exec-middleware v1.7.3 - github.com/chaosblade-io/chaosblade-exec-os v1.7.3 - github.com/chaosblade-io/chaosblade-operator v1.7.3 - github.com/chaosblade-io/chaosblade-spec-go v1.7.3 + github.com/chaosblade-io/chaosblade-exec-cloud v1.7.4 + github.com/chaosblade-io/chaosblade-exec-cri v1.7.4 + github.com/chaosblade-io/chaosblade-exec-middleware v1.7.4 + github.com/chaosblade-io/chaosblade-exec-os v1.7.4 + github.com/chaosblade-io/chaosblade-operator v1.7.4 + github.com/chaosblade-io/chaosblade-spec-go v1.7.4 github.com/mattn/go-sqlite3 v1.10.1-0.20190217174029-ad30583d8387 github.com/olekukonko/tablewriter v0.0.5-0.20201029120751-42e21c7531a3 - github.com/shirou/gopsutil v3.21.8-0.20210816101416-f86a04298073+incompatible + github.com/shirou/gopsutil v3.21.11+incompatible github.com/spf13/cobra v1.0.0 github.com/spf13/pflag v1.0.5 golang.org/x/crypto v0.1.0 @@ -25,7 +25,6 @@ require ( github.com/Microsoft/hcsshim v0.8.21 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/StackExchange/wmi v1.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect @@ -46,7 +45,7 @@ require ( github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/evanphx/json-patch v4.9.0+incompatible // indirect github.com/go-logr/logr v0.2.1 // indirect - github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/jsonpointer v0.19.3 // indirect github.com/go-openapi/jsonreference v0.19.3 // indirect github.com/go-openapi/spec v0.19.4 // indirect @@ -85,8 +84,9 @@ require ( github.com/prometheus/common v0.10.0 // indirect github.com/prometheus/procfs v0.6.0 // indirect github.com/sirupsen/logrus v1.8.1 // indirect - github.com/tklauser/go-sysconf v0.3.7 // indirect - github.com/tklauser/numcpus v0.2.3 // indirect + github.com/tklauser/go-sysconf v0.3.9 // indirect + github.com/tklauser/numcpus v0.3.0 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect go.opencensus.io v0.22.3 // indirect go.uber.org/automaxprocs v1.3.0 // indirect golang.org/x/net v0.1.0 // indirect diff --git a/go.sum b/go.sum index cdd6135d..1226616a 100644 --- a/go.sum +++ b/go.sum @@ -68,8 +68,6 @@ github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdko github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -105,18 +103,18 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chaosblade-io/chaosblade-exec-cloud v1.7.3 h1:6oVKdUY+7ayOVAo6Ja6LrCp4LBSkWlwGvR5SSnoqYC0= -github.com/chaosblade-io/chaosblade-exec-cloud v1.7.3/go.mod h1:RBUmiMCUU8KN9gNx5Gh1Ioyp4MbLUFIz/s4HJTtIFNw= -github.com/chaosblade-io/chaosblade-exec-cri v1.7.3 h1:GeoScHdkfftS8lwCZJFaukC8B4GWlbp3z142hRJicMQ= -github.com/chaosblade-io/chaosblade-exec-cri v1.7.3/go.mod h1:o32YBjLwn9w83KSKVuMvVA2v4wA9+FQw6SxmHDX6KDE= -github.com/chaosblade-io/chaosblade-exec-middleware v1.7.3 h1:rlSX+5G/saju0JhwMbRYYD2ghNfFTMaCMMdB4995RVY= -github.com/chaosblade-io/chaosblade-exec-middleware v1.7.3/go.mod h1:Mky3BNR3QcqJB4nQdTxpU1rVz3IK1b2EsPcS2hz93CY= -github.com/chaosblade-io/chaosblade-exec-os v1.7.3 h1:UForEOq5Hd6rgFEaRuLqchrUVTe8glgxByuOkiGhQ6c= -github.com/chaosblade-io/chaosblade-exec-os v1.7.3/go.mod h1:1pYkjSIsSwzcgUy5a2E0foLP3SoXrY45gLKl0oTBs74= -github.com/chaosblade-io/chaosblade-operator v1.7.3 h1:Wu2TlRjPb9+T1KZk72pRy29LmFOJVkYutrrZ6fm1wcQ= -github.com/chaosblade-io/chaosblade-operator v1.7.3/go.mod h1:IZZmVXnKpIaK/zRrBk+FqiosHKZB+No5sNMJ6NQOFx8= -github.com/chaosblade-io/chaosblade-spec-go v1.7.3 h1:OhFFBCV4iNwOdKA7BPjtdSM5cJZrtZry7JBUyWEc83g= -github.com/chaosblade-io/chaosblade-spec-go v1.7.3/go.mod h1:khF37h4B8tKfBlgqKGE/+2sWimvm+Mc1l3V8rY5rbOQ= +github.com/chaosblade-io/chaosblade-exec-cloud v1.7.4 h1:TTB7XfXK4XWpBYm8hembkVpF/pGNeUnN1Q7e59q6WRM= +github.com/chaosblade-io/chaosblade-exec-cloud v1.7.4/go.mod h1:XjnydGKczljWwvUZqSZk78gzQBvScOi86MXWWIG4EqU= +github.com/chaosblade-io/chaosblade-exec-cri v1.7.4 h1:PauMhZn5gTs6tdoy0jLKPE4v/k0mqHvHNEgVLLAWaUo= +github.com/chaosblade-io/chaosblade-exec-cri v1.7.4/go.mod h1:C7PIJL56BytrugMlr3Oz0WPMV1XsADhs+WPUntPLbtg= +github.com/chaosblade-io/chaosblade-exec-middleware v1.7.4 h1:JLTqvWoNJpRFWG/G5HJL7sH1F6eM5sTBq9CqiYyGVes= +github.com/chaosblade-io/chaosblade-exec-middleware v1.7.4/go.mod h1:F/L+nb5qaNWvUodyg5aMetIoSQXunO9z0/8nT+VIT48= +github.com/chaosblade-io/chaosblade-exec-os v1.7.4 h1:31oPl7sAxUVyZ50bKYMiC9aSLeeSB1p6Qr2m8Qhu7U4= +github.com/chaosblade-io/chaosblade-exec-os v1.7.4/go.mod h1:4VQnlFJSlUkFYV70JGn+FNwdFlsjqIJtooAutFLDG3A= +github.com/chaosblade-io/chaosblade-operator v1.7.4 h1:eh0mUxUox+ZPIz8MIZbA1s0kVWwrFw5Qp1yQ8zi7wiA= +github.com/chaosblade-io/chaosblade-operator v1.7.4/go.mod h1:IZZmVXnKpIaK/zRrBk+FqiosHKZB+No5sNMJ6NQOFx8= +github.com/chaosblade-io/chaosblade-spec-go v1.7.4 h1:KCzYHJtyst6Y3SHz0HcPmrV50eIBu9C+Co4atEFAE6s= +github.com/chaosblade-io/chaosblade-spec-go v1.7.4/go.mod h1:QrsUvbhnSmI7SjsKKdNM+F8MnkEE9iIZg2xV425nKsY= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= @@ -320,8 +318,8 @@ github.com/go-logr/logr v0.2.1 h1:fV3MLmabKIZ383XifUjFSwcoGee0v9qgPp8wy5svibE= github.com/go-logr/logr v0.2.1/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v0.2.0 h1:v6Ji8yBW77pva6NkJKQdHLAJKrIJKRHz0RXwPqCHSR4= -github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -670,8 +668,8 @@ github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiB github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shirou/gopsutil v3.21.8-0.20210816101416-f86a04298073+incompatible h1:49xg7cLKANuBpN0mpGrSlQubRk5cwnHZyZzy+4QX1ak= -github.com/shirou/gopsutil v3.21.8-0.20210816101416-f86a04298073+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= @@ -720,10 +718,10 @@ github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tklauser/go-sysconf v0.3.7 h1:HT7h4+536gjqeq1ZIJPgOl1rg1XFatQGVZWp7Py53eg= -github.com/tklauser/go-sysconf v0.3.7/go.mod h1:JZIdXh4RmBvZDBZ41ld2bGxRV3n4daiiqA3skYhAoQ4= -github.com/tklauser/numcpus v0.2.3 h1:nQ0QYpiritP6ViFhrKYsiv6VVxOpum2Gks5GhnJbS/8= -github.com/tklauser/numcpus v0.2.3/go.mod h1:vpEPS/JC+oZGGQ/My/vJnNsvMDQL6PwOqt8dsCw5j+E= +github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= +github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= +github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= +github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -748,6 +746,8 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= @@ -944,7 +944,7 @@ golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=