修改磁盘使用率判断,使用cli库来识别coredump-tool参数
This commit is contained in:
@@ -10,58 +10,77 @@ import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
|
||||
"github.com/containerd/containerd"
|
||||
"github.com/containerd/containerd/namespaces"
|
||||
"github.com/coreos/go-systemd/v22/journal"
|
||||
"github.com/shirou/gopsutil/disk"
|
||||
)
|
||||
|
||||
const chunkSize = 1024 * 1024 * 1024 // 1GB
|
||||
var coredump_config types.Coredump_config
|
||||
|
||||
func argsJudge() error {
|
||||
if coredump_config.Initial_ns_pid == "" || coredump_config.Process_ns_pid == "" || coredump_config.Corepipe_config_path == "" || coredump_config.Timestamp == 0 || coredump_config.Process_exe_path == "" || coredump_config.GID == "" || coredump_config.Hostname == "" || coredump_config.UID == "" || coredump_config.Signal == -1 {
|
||||
err := fmt.Sprintf("Failed to initialize command line parameters. -P=%s -p=%s -E=%s -configpath=%s -t=%d -g=%s -h=%s -s=%d -u=%s", coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Process_exe_path, coredump_config.Corepipe_config_path, coredump_config.Timestamp, coredump_config.GID, coredump_config.Hostname, coredump_config.Signal, coredump_config.UID)
|
||||
|
||||
if coredump_config.Initial_ns_pid == "" ||
|
||||
coredump_config.Process_ns_pid == "" ||
|
||||
coredump_config.Corepipe_config_path == "" ||
|
||||
coredump_config.Timestamp == 0 ||
|
||||
coredump_config.Process_exe_path == "" ||
|
||||
coredump_config.GID == "" ||
|
||||
coredump_config.Hostname == "" ||
|
||||
coredump_config.UID == "" ||
|
||||
coredump_config.Signal == -1 {
|
||||
err := fmt.Sprintf("Failed to initialize command line parameters. -P=%s -p=%s -E=%s -configpath=%s -t=%d -g=%s -h=%s -s=%d -u=%s",
|
||||
coredump_config.Initial_ns_pid,
|
||||
coredump_config.Process_ns_pid,
|
||||
coredump_config.Process_exe_path,
|
||||
coredump_config.Corepipe_config_path,
|
||||
coredump_config.Timestamp,
|
||||
coredump_config.GID,
|
||||
coredump_config.Hostname,
|
||||
coredump_config.Signal,
|
||||
coredump_config.UID)
|
||||
return errors.New(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func isDiskSufficient(pipe_config types.Pipeconfig) (bool, error) {
|
||||
percent, err := strconv.ParseFloat(pipe_config.Total_file_mem_limit[:len(pipe_config.Total_file_mem_limit)-1], 64)
|
||||
percent, err := strconv.ParseInt(pipe_config.Total_file_mem_limit[:len(pipe_config.Total_file_mem_limit)-1], 10, 32)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
percent = percent / 100.0
|
||||
var stat syscall.Statfs_t
|
||||
wd, err := syscall.Getwd()
|
||||
// var stat syscall.Statfs_t
|
||||
wd := pipe_config.Storage
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return false, err
|
||||
}
|
||||
syscall.Statfs(wd, &stat)
|
||||
// 剩余空间的大小为块的数量 * 每个块的大小
|
||||
// stat.Bfree表示可用的块的数量,stat.Bsize表示每个块的大小
|
||||
usedSpace := (int64(stat.Blocks) - int64(stat.Bfree))
|
||||
totalSpace := int64(stat.Blocks)
|
||||
usage := float64(usedSpace) / float64(totalSpace)
|
||||
diskinfo, err := disk.Usage(wd)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
data, err := json.MarshalIndent(diskinfo, "", " ")
|
||||
if err != nil {
|
||||
info := fmt.Sprintf("diskinfo:%s", string(data))
|
||||
journal.Print(journal.PriInfo, info)
|
||||
}
|
||||
usage := int64(math.Floor(diskinfo.UsedPercent + 0.5))
|
||||
info := fmt.Sprintf("usage:%d,limited:%d", usage, percent)
|
||||
journal.Print(journal.PriInfo, info)
|
||||
if usage >= percent {
|
||||
return false, nil
|
||||
}
|
||||
return true, nil
|
||||
}
|
||||
|
||||
func createCoreDumpDir(pipe_config *types.Pipeconfig, args types.Coredump_config) error {
|
||||
if _, err := os.Stat(pipe_config.Storage); os.IsNotExist(err) {
|
||||
// 目录不存在,创建目录
|
||||
if err := os.MkdirAll(pipe_config.Storage, os.ModePerm); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
pipe_config.Storage = fmt.Sprintf("%s/%s_%s_%d_coredump", pipe_config.Storage, args.Initial_ns_pid, args.Process_ns_pid, args.Timestamp)
|
||||
pipe_config.Storage = fmt.Sprintf("%s/coredump_%s_%s_%d", pipe_config.Storage, args.Initial_ns_pid, args.Process_ns_pid, args.Timestamp)
|
||||
dirName := pipe_config.Storage
|
||||
if _, err := os.Stat(dirName); os.IsNotExist(err) {
|
||||
// 目录不存在,创建目录
|
||||
@@ -114,7 +133,7 @@ func getImageName(container_id string, sock_path string) (string, error) {
|
||||
return imageRef.Name(), nil
|
||||
}
|
||||
func writeCoreConfig(config types.Coredump_config) error {
|
||||
filename := fmt.Sprintf("%s_%s_%d_coredump.config", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
filename := fmt.Sprintf("%s_%s_%d.info", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
file, err := os.Create(filename)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -127,7 +146,7 @@ func writeCoreConfig(config types.Coredump_config) error {
|
||||
return nil
|
||||
}
|
||||
func writeCoreDumpToFile(config types.Coredump_config) error {
|
||||
filename := fmt.Sprintf("%s_%s_%d_coredump.info", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
filename := fmt.Sprintf("%s_%s_%d.coredump", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
file, err := os.Create(filename)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -147,7 +166,7 @@ func writeCoreDumpToFile(config types.Coredump_config) error {
|
||||
return nil
|
||||
}
|
||||
func writeMiniDumpToFile(config types.Coredump_config) error {
|
||||
filename := fmt.Sprintf("%s_%s_%d_minidump.info", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
filename := fmt.Sprintf("%s_%s_%d.minidump", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
file, err := os.Create(filename)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -168,7 +187,7 @@ func writeMiniDumpToFile(config types.Coredump_config) error {
|
||||
}
|
||||
func compress(config types.Coredump_config) error {
|
||||
// Create a new zip archive.
|
||||
filename := fmt.Sprintf("%s_%s_%d_coredump.info", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
filename := fmt.Sprintf("%s_%s_%d.coredump", config.Initial_ns_pid, config.Process_ns_pid, config.Timestamp)
|
||||
zipfile, err := os.Create(filename + ".zip")
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -228,6 +247,14 @@ func main() {
|
||||
if pipe_config.Storage_type == 0 {
|
||||
return
|
||||
}
|
||||
//生成coredump存放文件夹
|
||||
if _, err := os.Stat(pipe_config.Storage); os.IsNotExist(err) {
|
||||
// 目录不存在,创建目录
|
||||
if err := os.MkdirAll(pipe_config.Storage, os.ModePerm); err != nil {
|
||||
journal.Print(journal.PriErr, err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
//判断硬盘使用率
|
||||
flag, err := isDiskSufficient(pipe_config)
|
||||
if err != nil {
|
||||
@@ -269,13 +296,13 @@ func main() {
|
||||
if err != nil {
|
||||
journal.Print(journal.PriErr, err.Error())
|
||||
}
|
||||
coredump_config.Storage = fmt.Sprintf("%s/%s_%s_%d_coredump.info", pipe_config.Storage, coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Timestamp)
|
||||
} else if pipe_config.Compress == true {
|
||||
coredump_config.Storage = fmt.Sprintf("%s/%s_%s_%d.coredump", pipe_config.Storage, coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Timestamp)
|
||||
} else {
|
||||
err = compress(coredump_config)
|
||||
if err != nil {
|
||||
journal.Print(journal.PriErr, err.Error())
|
||||
}
|
||||
coredump_config.Storage = fmt.Sprintf("%s/%s_%s_%d_coredump.info.zip", pipe_config.Storage, coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Timestamp)
|
||||
coredump_config.Storage = fmt.Sprintf("%s/%s_%s_%d.coredump.zip", pipe_config.Storage, coredump_config.Initial_ns_pid, coredump_config.Process_ns_pid, coredump_config.Timestamp)
|
||||
}
|
||||
//将image name写入coredump config
|
||||
err = writeCoreConfig(coredump_config)
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"coredump-tools/types"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
@@ -14,6 +13,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/urfave/cli/v2"
|
||||
"golang.org/x/term"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
@@ -115,6 +115,10 @@ func debugInpod(conf *rest.Config, clientset *kubernetes.Clientset, config types
|
||||
Name: "src-debuginfo-dir",
|
||||
MountPath: "/usr/src/debug",
|
||||
},
|
||||
{
|
||||
Name: "mrzcpd",
|
||||
MountPath: "/opt/tsg/mrzcpd",
|
||||
},
|
||||
},
|
||||
SecurityContext: &v1.SecurityContext{
|
||||
Privileged: &[]bool{true}[0],
|
||||
@@ -146,6 +150,14 @@ func debugInpod(conf *rest.Config, clientset *kubernetes.Clientset, config types
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "mrzcpd",
|
||||
VolumeSource: v1.VolumeSource{
|
||||
HostPath: &v1.HostPathVolumeSource{
|
||||
Path: "/opt/tsg/mrzcpd",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
RestartPolicy: v1.RestartPolicyNever,
|
||||
},
|
||||
@@ -230,7 +242,7 @@ func WalkDirectory(dir string) {
|
||||
}
|
||||
|
||||
if !info.IsDir() {
|
||||
if strings.HasSuffix(info.Name(), ".config") {
|
||||
if strings.HasSuffix(info.Name(), ".info") {
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -276,76 +288,111 @@ func list(pid string) {
|
||||
fmt.Println("Total", total, "coredumps")
|
||||
}
|
||||
|
||||
// Help 打印使用帮助
|
||||
func Help() {
|
||||
fmt.Println("Usage: coredump-ctl [list | debug | help] [options] ")
|
||||
fmt.Println("list options:")
|
||||
fmt.Println(" -dir string")
|
||||
fmt.Println(" Directory path")
|
||||
fmt.Println(" -p string")
|
||||
fmt.Println(" Pid to matching")
|
||||
fmt.Println("debug options:")
|
||||
fmt.Println(" -dir string")
|
||||
fmt.Println(" Directory path")
|
||||
fmt.Println(" -p string")
|
||||
fmt.Println(" Pid to matching")
|
||||
fmt.Println(" -command string")
|
||||
fmt.Println(" exe command when attach to pod")
|
||||
}
|
||||
// // Help 打印使用帮助
|
||||
// func Help() {
|
||||
// fmt.Println("Usage: coredump-ctl [list | debug | help] [options] ")
|
||||
// fmt.Println("list options:")
|
||||
// fmt.Println(" -dir string")
|
||||
// fmt.Println(" Directory path")
|
||||
// fmt.Println(" -p string")
|
||||
// fmt.Println(" Pid to matching")
|
||||
// fmt.Println("debug options:")
|
||||
// fmt.Println(" -dir string")
|
||||
// fmt.Println(" Directory path")
|
||||
// fmt.Println(" -p string")
|
||||
// fmt.Println(" Pid to matching")
|
||||
// fmt.Println(" -command string")
|
||||
// fmt.Println(" exe command when attach to pod")
|
||||
// }
|
||||
|
||||
func main() {
|
||||
listCmd := flag.NewFlagSet("list", flag.ExitOnError)
|
||||
debugCmd := flag.NewFlagSet("debug", flag.ExitOnError)
|
||||
helpCmd := flag.NewFlagSet("help", flag.ExitOnError)
|
||||
var dirPath, pid, command string
|
||||
listCmd.StringVar(&pid, "p", "", "Pid to matching")
|
||||
debugCmd.StringVar(&pid, "p", "", "Pid to matching")
|
||||
listCmd.StringVar(&dirPath, "dir", "", "Directory path")
|
||||
debugCmd.StringVar(&dirPath, "dir", "", "Directory path")
|
||||
debugCmd.StringVar(&command, "command", "", "")
|
||||
if len(os.Args) == 1 {
|
||||
Help()
|
||||
os.Exit(1)
|
||||
var (
|
||||
pid string
|
||||
dirPath string
|
||||
command string
|
||||
)
|
||||
app := &cli.App{
|
||||
Name: "coredump",
|
||||
Usage: "Manage coredump files in Kubernetes clusters",
|
||||
Commands: []*cli.Command{
|
||||
{
|
||||
Name: "list",
|
||||
Aliases: []string{"ls"},
|
||||
Usage: "List all coredump files",
|
||||
Flags: []cli.Flag{
|
||||
&cli.StringFlag{
|
||||
Name: "pid",
|
||||
Aliases: []string{"p"},
|
||||
Usage: "Pid to match",
|
||||
Value: "",
|
||||
Destination: &pid,
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "dir",
|
||||
Usage: "Directory path",
|
||||
Value: "/var/lib/coredump",
|
||||
Destination: &dirPath,
|
||||
},
|
||||
},
|
||||
Action: func(c *cli.Context) error {
|
||||
fmt.Println(dirPath)
|
||||
WalkDirectory(dirPath)
|
||||
list(pid)
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "debug",
|
||||
Usage: "Start a debugging session for a coredump",
|
||||
Flags: []cli.Flag{
|
||||
&cli.StringFlag{
|
||||
Name: "pid",
|
||||
Aliases: []string{"p"},
|
||||
Usage: "Pid to match",
|
||||
Value: "",
|
||||
Destination: &pid,
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "dir",
|
||||
Usage: "Directory path",
|
||||
Value: "/var/lib/coredump",
|
||||
Destination: &dirPath,
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "command",
|
||||
Usage: "Debugger command (default: gdb)",
|
||||
Value: "gdb",
|
||||
Destination: &command,
|
||||
},
|
||||
},
|
||||
Action: func(c *cli.Context) error {
|
||||
WalkDirectory(dirPath)
|
||||
for _, config := range configs {
|
||||
if strings.Compare(config.Initial_ns_pid, pid) == 0 || pid == "" {
|
||||
err := debug(config, command)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "help",
|
||||
Usage: "Show help message",
|
||||
Action: func(c *cli.Context) error {
|
||||
cli.ShowAppHelp(c)
|
||||
return nil
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
switch os.Args[1] {
|
||||
case "list":
|
||||
listCmd.Parse(os.Args[2:])
|
||||
case "debug":
|
||||
debugCmd.Parse(os.Args[2:])
|
||||
case "help":
|
||||
helpCmd.Parse(os.Args[2:])
|
||||
Help()
|
||||
default:
|
||||
fmt.Printf("%q is not a valid command.\n", os.Args[1])
|
||||
os.Exit(1)
|
||||
}
|
||||
if listCmd.Parsed() {
|
||||
if dirPath == "" {
|
||||
dirPath = "/var/lib/coredump"
|
||||
}
|
||||
WalkDirectory(dirPath)
|
||||
list(pid)
|
||||
return
|
||||
}
|
||||
if debugCmd.Parsed() {
|
||||
if dirPath == "" {
|
||||
dirPath = "/var/lib/coredump"
|
||||
}
|
||||
if command == "" {
|
||||
command = "gdb"
|
||||
}
|
||||
WalkDirectory(dirPath)
|
||||
for _, config := range configs {
|
||||
fmt.Println(config)
|
||||
if strings.Compare(config.Initial_ns_pid, pid) == 0 || pid == "" {
|
||||
err := debug(config, command)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
|
||||
err := app.Run(os.Args)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#Type Path Mode User Group Age Argument
|
||||
d /var/tmp/*_coredump 0755 - - 7d -
|
||||
d /var/lib/coredump/coredump_* 0755 - - 7d -
|
||||
|
||||
10
go.mod
10
go.mod
@@ -6,7 +6,9 @@ require (
|
||||
github.com/containerd/containerd v1.7.0
|
||||
github.com/coreos/go-systemd/v22 v22.5.0
|
||||
github.com/google/uuid v1.3.0
|
||||
golang.org/x/crypto v0.1.0
|
||||
github.com/shirou/gopsutil v2.21.11+incompatible
|
||||
github.com/urfave/cli/v2 v2.25.3
|
||||
golang.org/x/term v0.5.0
|
||||
k8s.io/api v0.26.2
|
||||
k8s.io/apimachinery v0.26.2
|
||||
k8s.io/client-go v0.26.2
|
||||
@@ -22,12 +24,14 @@ require (
|
||||
github.com/containerd/fifo v1.1.0 // indirect
|
||||
github.com/containerd/ttrpc v1.2.1 // indirect
|
||||
github.com/containerd/typeurl/v2 v2.1.0 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
|
||||
github.com/cyphar/filepath-securejoin v0.2.3 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect
|
||||
github.com/emicklei/go-restful/v3 v3.10.1 // indirect
|
||||
github.com/go-logr/logr v1.2.3 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||
github.com/go-openapi/jsonreference v0.20.0 // indirect
|
||||
github.com/go-openapi/swag v0.19.14 // indirect
|
||||
@@ -56,8 +60,11 @@ require (
|
||||
github.com/opencontainers/runtime-spec v1.1.0-rc.1 // indirect
|
||||
github.com/opencontainers/selinux v1.11.0 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/sirupsen/logrus v1.9.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
|
||||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
go.opentelemetry.io/otel v1.14.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.14.0 // indirect
|
||||
@@ -66,7 +73,6 @@ require (
|
||||
golang.org/x/oauth2 v0.4.0 // indirect
|
||||
golang.org/x/sync v0.1.0 // indirect
|
||||
golang.org/x/sys v0.6.0 // indirect
|
||||
golang.org/x/term v0.5.0 // indirect
|
||||
golang.org/x/text v0.7.0 // indirect
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||
golang.org/x/tools v0.5.0 // indirect
|
||||
|
||||
17
go.sum
17
go.sum
@@ -31,6 +31,8 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
|
||||
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI=
|
||||
github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4=
|
||||
@@ -55,6 +57,8 @@ github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
|
||||
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
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/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
|
||||
github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
|
||||
@@ -169,7 +173,11 @@ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
|
||||
github.com/shirou/gopsutil v2.21.11+incompatible h1:lOGOyCG67a5dv2hq5Z1BLDUqqKp3HkbjPcz5j6XMS0U=
|
||||
github.com/shirou/gopsutil v2.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.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||
@@ -191,10 +199,16 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
|
||||
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
|
||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli/v2 v2.25.3 h1:VJkt6wvEBOoSjPFQvOkv6iWIrsJyCrKGtCtxXWwmGeY=
|
||||
github.com/urfave/cli/v2 v2.25.3/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc=
|
||||
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
|
||||
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
|
||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
|
||||
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
|
||||
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.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||
go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
|
||||
@@ -204,8 +218,6 @@ go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+go
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
|
||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
@@ -242,6 +254,7 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
||||
Reference in New Issue
Block a user