From 998f1cbf58369b3f00c7bfab63e73c29bccd4132 Mon Sep 17 00:00:00 2001 From: Julien Pinsonneau Date: Fri, 17 Nov 2023 11:40:20 +0100 Subject: [PATCH 1/9] first release --- .gitignore | 2 + Makefile | 28 +++ README.md | 68 +++++- cmd/flow-capture.go | 192 +++++++++++++++ cmd/packet-capture.go | 134 ++++++++++ cmd/root.go | 85 +++++++ go.mod | 40 +++ go.sum | 523 ++++++++++++++++++++++++++++++++++++++++ img/flow-table.png | Bin 0 -> 220015 bytes img/packet-table.png | Bin 0 -> 37387 bytes main.go | 7 + oc/oc-netobserv-flows | 18 ++ oc/oc-netobserv-packets | 19 ++ res/flow-capture.yml | 43 ++++ res/functions.sh | 64 +++++ res/namespace.yml | 7 + res/packet-capture.yml | 33 +++ res/service-account.yml | 34 +++ 18 files changed, 1293 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 cmd/flow-capture.go create mode 100644 cmd/packet-capture.go create mode 100644 cmd/root.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 img/flow-table.png create mode 100644 img/packet-table.png create mode 100644 main.go create mode 100755 oc/oc-netobserv-flows create mode 100755 oc/oc-netobserv-packets create mode 100644 res/flow-capture.yml create mode 100644 res/functions.sh create mode 100644 res/namespace.yml create mode 100644 res/packet-capture.yml create mode 100644 res/service-account.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..bdb82ab4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build +output \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..1744188b --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +NAME := network-observability-cli +DIST_DIR ?= build +OUTPUT := $(DIST_DIR)/$(NAME) +DOCKER := $(shell which podman) +ifeq ($(DOCKER),) + DOCKER := $(shell which docker) +endif + +.PHONY: all +all: build + +.PHONY: prepare +prepare: + @mkdir -p $(DIST_DIR) + +.PHONY: build +build: prepare + @go build -o $(OUTPUT) + cp -a ./oc/. ./$(DIST_DIR) + cp -a ./res/. ./$(DIST_DIR)/network-observability-cli-resources + +.PHONY: image +image: + $(DOCKER) build -t network-observability-cli . + +.PHONY: clean +clean: + @rm -rf $(DIST_DIR) \ No newline at end of file diff --git a/README.md b/README.md index 6ab21a09..1e748e30 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,78 @@ network-observability-cli is a lightweight Flow and Packet visualisation tool. It deploy [netobserv eBPF agent](https://github.com/netobserv/netobserv-ebpf-agent) on your k8s cluster to collect flows or packets from nodes network interfaces and streams data to a local collector for analysis and visualisation. -Output files are generated under output/flow and output/pcap directories per host name +Output files are generated under `output/flow` and `output/pcap` directories per host name ## Work In Progress This project is still a WIP. The following list gives an overview of the current progression: -- [ ] Capture flows -- [ ] Capture packets -- [ ] Basic filter capabilities +- [x] Capture flows +- [x] Capture packets +- [x] Basic filter capabilities - [ ] Advanced filter capabilities - [ ] Testing - [ ] Linting - [ ] Dockerfile Feel free to contribute ! + +## Build + +To build the project locally: +``` +make build +``` + +This will also copy resources and oc commands to the `build` directoy. + +## Features + +### Flow Capture + +Simply run the following command to start capturing flows: +``` +./bin/oc-netobserv-flows +``` + +![flows](./img/flow-table.png) + +It will display a table view with latest flows collected and write data under output/flow directory. +To stop capturing press Ctrl-C. + +### Packet Capture + +PCAP generated files are compatible with Wireshark + +``` +./bin/oc-netobserv-packets +``` + +![packets](./img/packet-table.png) + +It will display a table view with latest packets collected and write data under output/pcap directory. +To stop capturing press Ctrl-C. + +## Extending Openshift CLI with plugin + +You can add this plugin to your favorite oc commands using the following steps: +``` +make build +sudo cp -a ./build/. /usr/bin/ +``` + +This will add `oc netobserv flows` and `oc netobserv packets` commands to your cli. +You can verify the commands are available using: +``` +oc plugin list +``` + +It will display as result: +``` +The following compatible plugins are available: +... +/usr/bin/oc-netobserv-flows +/usr/bin/oc-netobserv-packets +``` + +More info [on official Openshift documentation](https://docs.openshift.com/container-platform/4.14/cli_reference/openshift_cli/extending-cli-plugins.html). \ No newline at end of file diff --git a/cmd/flow-capture.go b/cmd/flow-capture.go new file mode 100644 index 00000000..6ebdb1cb --- /dev/null +++ b/cmd/flow-capture.go @@ -0,0 +1,192 @@ +package cmd + +import ( + "bufio" + "encoding/json" + "net" + "net/textproto" + "os" + "os/exec" + "sort" + "time" + + "github.com/jpillora/sizestr" + "github.com/netobserv/flowlogs-pipeline/pkg/config" + "github.com/spf13/cobra" + + "github.com/fatih/color" + "github.com/rodaine/table" +) + +const ( + flowsToShow = 40 +) + +var flowCmd = &cobra.Command{ + Use: "get-flows", + Short: "", + Long: "", + Run: runFlowCapture, +} + +var lastFlows = []config.GenericMap{} + +func runFlowCapture(cmd *cobra.Command, args []string) { + wg.Add(len(addresses)) + for i, _ := range addresses { + go runFlowCaptureOnAddr(addresses[i], nodes[i]) + } + wg.Wait() +} + +func runFlowCaptureOnAddr(addr string, filename string) { + log.Infof("Starting Flow Capture for %s...", filename) + + tcpServer, err := net.ResolveTCPAddr("tcp", addr) + + if err != nil { + log.Error("ResolveTCPAddr failed:", err.Error()) + log.Fatal(err) + } + conn, err := net.DialTCP("tcp", nil, tcpServer) + if err != nil { + log.Error("Dial failed:", err.Error()) + log.Fatal(err) + } + reader := bufio.NewReader(conn) + tp := textproto.NewReader(reader) + var f *os.File + err = os.MkdirAll("./output/flow/", 0700) + if err != nil { + log.Errorf("Create directory failed: %v", err.Error()) + log.Fatal(err) + } + f, err = os.Create("./output/flow/" + filename) + if err != nil { + log.Errorf("Create file %s failed: %v", filename, err.Error()) + log.Fatal(err) + } + defer CleanupCapture(conn, f) + for { + // read one line (ended with \n or \r\n) + line, err := tp.ReadLineBytes() + if err != nil { + log.Error("Read line failed:", err.Error()) + } else { + // append new line between each record to read file easilly + _, err = f.Write(append(line, []byte("\n")...)) + if err != nil { + log.Fatal(err) + } + go manageFlowTable(line) + } + } +} + +func manageFlowTable(line []byte) { + genericMap := config.GenericMap{} + err := json.Unmarshal(line, &genericMap) + if err != nil { + log.Error("Error while parsing json", err) + return + } + + // lock since we are updating lastFlows concurrently + mutex.Lock() + + lastFlows = append(lastFlows, genericMap) + sort.Slice(lastFlows, func(i, j int) bool { + return lastFlows[i]["TimeFlowEndMs"].(float64) < lastFlows[j]["TimeFlowEndMs"].(float64) + }) + if len(lastFlows) > flowsToShow { + lastFlows = lastFlows[len(lastFlows)-flowsToShow:] + } + + // don't refresh terminal too often to avoid blinking + now := time.Now() + if int(now.Sub(lastRefresh)) > int(maxRefreshRate) { + lastRefresh = now + + // clear terminal to render table properly + c := exec.Command("clear") + c.Stdout = os.Stdout + c.Run() + + log.Infof("Running network-observability-cli as Flow Capture\nLog level: %s\nFilters: %s\n", logLevel, filter) + + // recreate table from scratch + headerFmt := color.New(color.BgHiBlue, color.Bold).SprintfFunc() + columnFmt := color.New(color.FgHiYellow).SprintfFunc() + tbl := table.New( + "Time", + "SrcAddr", + "SrcPort", + "DstAddr", + "DstPort", + "Dir", + "Interface", + "Proto", + "Dscp", + "Bytes", + "DropBytes", + "Packets", + "DropPackets", + "DropState", + "DropCause", + "DnsId", + "DnsLatencyMs", + "DnsRCode", + "DnsErrno", + "RTT", + ) + tbl.WithHeaderFormatter(headerFmt).WithFirstColumnFormatter(columnFmt) + + // append most recent rows + for _, flow := range lastFlows { + tbl.AddRow( + time.UnixMilli(int64(flow["TimeFlowEndMs"].(float64))).Format("15:04:05.000000"), + flow["SrcAddr"], + flow["SrcPort"], + flow["DstAddr"], + flow["DstPort"], + flow["FlowDirection"], + flow["Interface"], + flow["Proto"], + flow["Dscp"], + ToPacketCount(flow, "Bytes"), + ToPacketCount(flow, "PktDropBytes"), + flow["Packets"], + flow["PktDropPackets"], + flow["PktDropLatestState"], + flow["PktDropLatestDropCause"], + flow["DnsId"], + ToDuration(flow, "DnsLatencyMs", time.Millisecond), + flow["DnsRCode"], + flow["DnsErrno"], + ToDuration(flow, "TimeFlowRttNs", time.Nanosecond), + ) + } + + // print table + tbl.Print() + } + + // unlock + mutex.Unlock() +} + +func ToPacketCount(genericMap config.GenericMap, fieldName string) interface{} { + v, ok := genericMap[fieldName] + if ok { + return sizestr.ToString(int64(v.(float64))) + } + return nil +} + +func ToDuration(genericMap config.GenericMap, fieldName string, factor time.Duration) interface{} { + v, ok := genericMap[fieldName] + if ok { + return (time.Duration(int64(v.(float64))) * factor).String() + } + return nil +} diff --git a/cmd/packet-capture.go b/cmd/packet-capture.go new file mode 100644 index 00000000..bc74764a --- /dev/null +++ b/cmd/packet-capture.go @@ -0,0 +1,134 @@ +package cmd + +import ( + "net" + "os" + "os/exec" + "time" + + "github.com/fatih/color" + "github.com/jpillora/sizestr" + "github.com/rodaine/table" + "github.com/spf13/cobra" +) + +var pktCmd = &cobra.Command{ + Use: "get-packets", + Short: "", + Long: "", + Run: runPacketCapture, +} + +type PcapResult struct { + NodeName string + PacketCount int64 + ByteCount int64 +} + +var results = []PcapResult{} + +func runPacketCapture(cmd *cobra.Command, args []string) { + wg.Add(len(addresses)) + for i, _ := range addresses { + go runPacketCaptureOnAddr(addresses[i], nodes[i]) + } + wg.Wait() +} + +func runPacketCaptureOnAddr(addr string, filename string) { + log.Infof("Starting Packet Capture for %s...", filename) + + tcpServer, err := net.ResolveTCPAddr("tcp", addr) + + if err != nil { + log.Error("ResolveTCPAddr failed:", err.Error()) + log.Fatal(err) + } + conn, err := net.DialTCP("tcp", nil, tcpServer) + if err != nil { + log.Error("Dial failed:", err.Error()) + log.Fatal(err) + } + var f *os.File + err = os.MkdirAll("./output/pcap/", 0700) + if err != nil { + log.Errorf("Create directory failed: %v", err.Error()) + log.Fatal(err) + } + f, err = os.Create("./output/pcap/" + filename) + if err != nil { + log.Errorf("Create file %s failed: %v", filename, err.Error()) + log.Fatal(err) + } + defer CleanupCapture(conn, f) + for { + received := make([]byte, 65535) + n, err := conn.Read(received) + if err != nil { + log.Error("Read data failed:", err.Error()) + log.Fatal(err) + } + _, err = f.Write(received[:n]) + if err != nil { + log.Fatal(err) + } + go managePcapTable(PcapResult{NodeName: filename, PacketCount: 1, ByteCount: int64(n)}) + } +} + +func managePcapTable(result PcapResult) { + // lock since we are updating results concurrently + mutex.Lock() + + // find result in array + found := false + for i, r := range results { + if r.NodeName == result.NodeName { + found = true + // update existing result + results[i].PacketCount += result.PacketCount + results[i].ByteCount += result.ByteCount + break + } + } + if !found { + results = append(results, result) + } + + // don't refresh terminal too often to avoid blinking + now := time.Now() + if int(now.Sub(lastRefresh)) > int(maxRefreshRate) { + lastRefresh = now + + // clear terminal to render table properly + c := exec.Command("clear") + c.Stdout = os.Stdout + c.Run() + + log.Infof("Running network-observability-cli as Packet Capture\nLog level: %s\nFilters: %s\n", logLevel, filter) + + // recreate table from scratch + headerFmt := color.New(color.BgHiBlue, color.Bold).SprintfFunc() + columnFmt := color.New(color.FgHiYellow).SprintfFunc() + tbl := table.New( + "Node Name", + "Packets", + "Bytes", + ) + tbl.WithHeaderFormatter(headerFmt).WithFirstColumnFormatter(columnFmt).WithPadding(10) + + for _, result := range results { + tbl.AddRow( + result.NodeName, + result.PacketCount, + sizestr.ToString(result.ByteCount), + ) + } + + // print table + tbl.Print() + } + + // unlock + mutex.Unlock() +} diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 00000000..9b9fbf09 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,85 @@ +package cmd + +import ( + "fmt" + "net" + "os" + "strings" + "sync" + "time" + + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +const ( + maxRefreshRate = 100 * time.Millisecond +) + +var ( + log = logrus.New() + logLevel string + host string + nodes []string + ports []int + addresses []string + filter string + + lastRefresh = time.Now() + wg = sync.WaitGroup{} + mutex = sync.Mutex{} + + rootCmd = &cobra.Command{ + Use: "network-observability-cli", + Short: "network-observability-cli is an interactive Flow and Packet visualizer", + Long: `An interactive Flow / PCAP collector and visualization tool`, + Run: func(cmd *cobra.Command, args []string) { + }, + } +) + +// Execute executes the root command. +func Execute() error { + return rootCmd.Execute() +} + +// func main() { +func init() { + cobra.OnInitialize(initConfig) + rootCmd.PersistentFlags().StringVarP(&logLevel, "loglevel", "l", "info", "Log level") + rootCmd.PersistentFlags().StringVarP(&host, "host", "", "localhost", "Agent IP") + rootCmd.PersistentFlags().StringSliceVarP(&nodes, "nodes", "", []string{"node"}, "node names to monitor") + rootCmd.PersistentFlags().IntSliceVarP(&ports, "ports", "", []int{9999}, "TCP ports to listen") + rootCmd.PersistentFlags().StringVarP(&filter, "filter", "", "", "Filter") + + // IPFIX flow + rootCmd.AddCommand(flowCmd) + + // packet + rootCmd.AddCommand(pktCmd) +} + +func initConfig() { + lvl, _ := logrus.ParseLevel(logLevel) + log.SetLevel(lvl) + + if len(nodes) != len(ports) { + log.Fatalf("specified nodes names doesn't match ports length") + } + + for _, port := range ports { + addresses = append(addresses, host+":"+fmt.Sprintf("%v", port)) + } + log.Infof("Running network-observability-cli\nLog level: %s\nAddresses:\n%s\nFilter: %s", logLevel, strings.Join(addresses, "\n"), filter) +} + +func CleanupCapture(c *net.TCPConn, f *os.File) { + log.Printf("Stopping Capture") + + if c != nil { + c.Close() + } + if f != nil { + f.Close() + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 00000000..5e25a29e --- /dev/null +++ b/go.mod @@ -0,0 +1,40 @@ +module github.com/netobserv/network-observability-cli + +go 1.21.4 + +require ( + github.com/fatih/color v1.16.0 + github.com/jpillora/sizestr v1.0.0 + github.com/rodaine/table v1.1.0 + github.com/sirupsen/logrus v1.9.0 + github.com/spf13/cobra v1.6.1 +) + +require ( + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/jpillora/backoff v1.0.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect + github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/oauth2 v0.4.0 // indirect + golang.org/x/text v0.7.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect +) + +require ( + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/netobserv/flowlogs-pipeline v0.1.10 + github.com/spf13/pflag v1.0.5 // indirect + golang.org/x/sys v0.14.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 00000000..0c823a1c --- /dev/null +++ b/go.sum @@ -0,0 +1,523 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +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= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jpillora/sizestr v1.0.0 h1:4tr0FLxs1Mtq3TnsLDV+GYUWG7Q26a6s+tV5Zfw2ygw= +github.com/jpillora/sizestr v1.0.0/go.mod h1:bUhLv4ctkknatr6gR42qPxirmd5+ds1u7mzD+MZ33f0= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/netobserv/flowlogs-pipeline v0.1.10 h1:y4RQbreYlMClG6s7/rberI70gELwWexJneOE12AaBs0= +github.com/netobserv/flowlogs-pipeline v0.1.10/go.mod h1:Ez/fKBEMJc8uHSHN1u4hu6p1Y9Crdq2741FgvQcH7Hs= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/rodaine/table v1.1.0 h1:/fUlCSdjamMY8VifdQRIu3VWZXYLY7QHFkVorS8NTr4= +github.com/rodaine/table v1.1.0/go.mod h1:Qu3q5wi1jTQD6B6HsP6szie/S4w1QUQ8pq22pz9iL8g= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= +github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +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/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +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= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.4.0 h1:NF0gk8LVPg1Ml7SSbGyySuoxdsXitj7TvgvuRxIMc/M= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/img/flow-table.png b/img/flow-table.png new file mode 100644 index 0000000000000000000000000000000000000000..c6a79d7a9bec16b1b752ca96d590138267f3faa8 GIT binary patch literal 220015 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�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 literal 0 HcmV?d00001 diff --git a/main.go b/main.go new file mode 100644 index 00000000..731f836b --- /dev/null +++ b/main.go @@ -0,0 +1,7 @@ +package main + +import "github.com/netobserv/network-observability-cli/cmd" + +func main() { + cmd.Execute() +} diff --git a/oc/oc-netobserv-flows b/oc/oc-netobserv-flows new file mode 100755 index 00000000..7e0e0ce8 --- /dev/null +++ b/oc/oc-netobserv-flows @@ -0,0 +1,18 @@ +#!/bin/bash +source "${BASH_SOURCE%/*}/network-observability-cli-resources/functions.sh" + +# interface filter such as 'br-ex' +filter=$1 + +if [ -z "$filter" ] +then + filter="" +fi + +trap cleanup EXIT + +setup flows $filter + +echo "\nRunning network-observability-cli get-flows... " +${BASH_SOURCE%/*}/network-observability-cli --nodes $nodes --ports $ports ${filter:+"--filter" "$filter"} get-flows + diff --git a/oc/oc-netobserv-packets b/oc/oc-netobserv-packets new file mode 100755 index 00000000..a586a348 --- /dev/null +++ b/oc/oc-netobserv-packets @@ -0,0 +1,19 @@ +#!/bin/bash +source "${BASH_SOURCE%/*}/network-observability-cli-resources/functions.sh" + +# pcap filter such as 'tcp,80' +filter=$1 + +if [ -z "$filter" ] +then + echo "Specify a valid filter as first argument such as 'oc get-packets tcp,80'" + exit 1 +fi + +trap cleanup EXIT + +setup packets $filter + +echo "\nRunning network-observability-cli get-packets... " +${BASH_SOURCE%/*}/network-observability-cli --nodes $nodes --ports $ports --filter $filter get-packets + diff --git a/res/flow-capture.yml b/res/flow-capture.yml new file mode 100644 index 00000000..084b04c0 --- /dev/null +++ b/res/flow-capture.yml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: netobserv-cli + namespace: netobserv-cli + labels: + app: netobserv-cli +spec: + selector: + matchLabels: + app: netobserv-cli + template: + metadata: + labels: + app: netobserv-cli + spec: + serviceAccountName: netobserv-cli + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet + containers: + - name: netobserv-cli + # image: quay.io/netobserv/netobserv-ebpf-agent:main + image: quay.io/jpinsonn/netobserv-ebpf-agent:flow-stream-1 + imagePullPolicy: Always + securityContext: + privileged: true + runAsUser: 0 + env: + - name: INTERFACES + value: "{{FLOW_FILTER_VALUE}}" + - name: SAMPLING + value: "1" + - name: ENABLE_RTT + value: "true" + # TODO: find why this breaks collection: EOF + #- name: ENABLE_PKT_DROPS + # value: "true" + - name: ENABLE_DNS_TRACKING + value: "true" + - name: EXPORT + value: "tcp" + - name: FLOWS_TARGET_PORT + value: "9999" \ No newline at end of file diff --git a/res/functions.sh b/res/functions.sh new file mode 100644 index 00000000..24b51a9d --- /dev/null +++ b/res/functions.sh @@ -0,0 +1,64 @@ +function setup { + echo "Setting up... " + + if ! output=$(oc whoami 2>&1); then + printf 'You must be connected using oc login command first\n' >&2 + exit 1 + fi + + filename="" + mkdir -p ${BASH_SOURCE%/*}/current + + if [ $1 = "flows" ]; then + filename="flow-capture" + sed "s/{{FLOW_FILTER_VALUE}}/$2/gi" ${BASH_SOURCE%/*}/flow-capture.yml > ${BASH_SOURCE%/*}/current/agent.yml + elif [ $1 = "packets" ]; then + filename="packet-capture" + sed "s/{{PCA_FILTER_VALUE}}/$2/gi" ${BASH_SOURCE%/*}/packet-capture.yml > ${BASH_SOURCE%/*}/current/agent.yml + else + echo "invalid setup argument" + return + fi + + echo "creating netobserv-cli namespace" + oc apply -f ${BASH_SOURCE%/*}/namespace.yml + + echo "creating service account" + oc apply -f ${BASH_SOURCE%/*}/service-account.yml + + echo "creating $filename agents" + oc apply -f ${BASH_SOURCE%/*}/current/agent.yml + oc rollout status daemonset netobserv-cli -n netobserv-cli --timeout 60s + + echo "forwarding agents ports" + pods=$(oc get pods -n netobserv-cli -l app=netobserv-cli -o name) + port=9900 + nodes="" + ports="" + for pod in $pods + do + echo "forwarding $pod:9999 to local port $port" + pkill --oldest --full "$port:9999" + oc port-forward $pod $port:9999 -n netobserv-cli & # run in background + node=$(oc get $pod -n netobserv-cli -o jsonpath='{.spec.nodeName}') + if [ -z "$ports" ] + then + nodes="$node" + ports="$port" + else + nodes="$nodes,$node" + ports="$ports,$port" + fi + port=$((port+1)) + done + + # TODO: find a better way to ensure port forward are running + sleep 2 +} + +function cleanup { + if output=$(oc whoami 2>&1); then + printf "\nCleaning up... " + oc delete namespace netobserv-cli + fi +} \ No newline at end of file diff --git a/res/namespace.yml b/res/namespace.yml new file mode 100644 index 00000000..79df512c --- /dev/null +++ b/res/namespace.yml @@ -0,0 +1,7 @@ +kind: Namespace +apiVersion: v1 +metadata: + name: netobserv-cli + app: netobserv-cli + pod-security.kubernetes.io/enforce: privileged + pod-security.kubernetes.io/audit: privileged \ No newline at end of file diff --git a/res/packet-capture.yml b/res/packet-capture.yml new file mode 100644 index 00000000..25774d8c --- /dev/null +++ b/res/packet-capture.yml @@ -0,0 +1,33 @@ +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: netobserv-cli + namespace: netobserv-cli + labels: + app: netobserv-cli +spec: + selector: + matchLabels: + app: netobserv-cli + template: + metadata: + labels: + app: netobserv-cli + spec: + serviceAccountName: netobserv-cli + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet + containers: + - name: netobserv-cli + image: quay.io/netobserv/netobserv-ebpf-agent:main + imagePullPolicy: Always + securityContext: + privileged: true + runAsUser: 0 + env: + - name: ENABLE_PCA + value: "true" + - name: PCA_FILTER + value: "{{PCA_FILTER_VALUE}}" + - name: PCA_SERVER_PORT + value: "9999" \ No newline at end of file diff --git a/res/service-account.yml b/res/service-account.yml new file mode 100644 index 00000000..2049e066 --- /dev/null +++ b/res/service-account.yml @@ -0,0 +1,34 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: netobserv-cli + namespace: netobserv-cli +--- +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: netobserv-cli + namespace: netobserv-cli +rules: + - apiGroups: + - security.openshift.io + resourceNames: + - privileged + resources: + - securitycontextconstraints + verbs: + - use +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: netobserv-cli + namespace: netobserv-cli +subjects: + - kind: ServiceAccount + name: netobserv-cli +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: netobserv-cli \ No newline at end of file From 318c6426c4a22275268c23523f30387844d21a8b Mon Sep 17 00:00:00 2001 From: Julien Pinsonneau Date: Fri, 17 Nov 2023 14:50:59 +0100 Subject: [PATCH 2/9] pkt drop volume mounts --- res/flow-capture.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/res/flow-capture.yml b/res/flow-capture.yml index 084b04c0..e54f607c 100644 --- a/res/flow-capture.yml +++ b/res/flow-capture.yml @@ -40,4 +40,13 @@ spec: - name: EXPORT value: "tcp" - name: FLOWS_TARGET_PORT - value: "9999" \ No newline at end of file + value: "9999" + volumeMounts: + - name: bpf-kernel-debug + mountPath: /sys/kernel/debug + mountPropagation: Bidirectional + volumes: + - name: bpf-kernel-debug + hostPath: + path: /sys/kernel/debug + type: Directory \ No newline at end of file From 1de4c88ae9374b9f395c69e24543db7adcf4a222 Mon Sep 17 00:00:00 2001 From: Julien Pinsonneau Date: Fri, 17 Nov 2023 15:01:06 +0100 Subject: [PATCH 3/9] enable pkt drop --- res/flow-capture.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/res/flow-capture.yml b/res/flow-capture.yml index e54f607c..3515ea51 100644 --- a/res/flow-capture.yml +++ b/res/flow-capture.yml @@ -32,9 +32,8 @@ spec: value: "1" - name: ENABLE_RTT value: "true" - # TODO: find why this breaks collection: EOF - #- name: ENABLE_PKT_DROPS - # value: "true" + - name: ENABLE_PKT_DROPS + value: "true" - name: ENABLE_DNS_TRACKING value: "true" - name: EXPORT From b0e429c5c8f97e7842e4d91a0f1876e120983f7c Mon Sep 17 00:00:00 2001 From: Julien Pinsonneau Date: Mon, 20 Nov 2023 09:16:36 +0100 Subject: [PATCH 4/9] flow table display / filter --- cmd/flow-capture.go | 311 +++++++++++++++++++++++++++------- cmd/map-format.go | 392 +++++++++++++++++++++++++++++++++++++++++++ cmd/root.go | 3 +- go.mod | 1 + go.sum | 2 + res/flow-capture.yml | 2 + res/functions.sh | 7 + 7 files changed, 654 insertions(+), 64 deletions(-) create mode 100644 cmd/map-format.go diff --git a/cmd/flow-capture.go b/cmd/flow-capture.go index 6ebdb1cb..cf02eae1 100644 --- a/cmd/flow-capture.go +++ b/cmd/flow-capture.go @@ -3,23 +3,23 @@ package cmd import ( "bufio" "encoding/json" + "fmt" "net" "net/textproto" "os" "os/exec" + "regexp" + "slices" "sort" + "strings" "time" - "github.com/jpillora/sizestr" + "github.com/eiannone/keyboard" "github.com/netobserv/flowlogs-pipeline/pkg/config" + "github.com/rodaine/table" "github.com/spf13/cobra" "github.com/fatih/color" - "github.com/rodaine/table" -) - -const ( - flowsToShow = 40 ) var flowCmd = &cobra.Command{ @@ -29,9 +29,21 @@ var flowCmd = &cobra.Command{ Run: runFlowCapture, } -var lastFlows = []config.GenericMap{} +var ( + regexes = []string{} + flowsToShow = 40 + raw = "Raw" + standard = "Standard" + pktDrop = "PktDrop" + dns = "DNS" + rtt = "RTT" + display = []string{pktDrop, dns, rtt} + lastFlows = []config.GenericMap{} +) func runFlowCapture(cmd *cobra.Command, args []string) { + go scanner() + wg.Add(len(addresses)) for i, _ := range addresses { go runFlowCaptureOnAddr(addresses[i], nodes[i]) @@ -78,12 +90,12 @@ func runFlowCaptureOnAddr(addr string, filename string) { if err != nil { log.Fatal(err) } - go manageFlowTable(line) + go manageFlowsDisplay(line) } } } -func manageFlowTable(line []byte) { +func manageFlowsDisplay(line []byte) { genericMap := config.GenericMap{} err := json.Unmarshal(line, &genericMap) if err != nil { @@ -98,10 +110,33 @@ func manageFlowTable(line []byte) { sort.Slice(lastFlows, func(i, j int) bool { return lastFlows[i]["TimeFlowEndMs"].(float64) < lastFlows[j]["TimeFlowEndMs"].(float64) }) + if len(regexes) > 0 { + filtered := []config.GenericMap{} + for _, flow := range lastFlows { + match := true + for i := range regexes { + ok, _ := regexp.MatchString(regexes[i], fmt.Sprintf("%v", flow)) + match = match && ok + if !match { + break + } + } + if match { + filtered = append(filtered, flow) + } + } + lastFlows = filtered + } if len(lastFlows) > flowsToShow { lastFlows = lastFlows[len(lastFlows)-flowsToShow:] } + updateTable() + // unlock + mutex.Unlock() +} + +func updateTable() { // don't refresh terminal too often to avoid blinking now := time.Now() if int(now.Sub(lastRefresh)) > int(maxRefreshRate) { @@ -112,12 +147,16 @@ func manageFlowTable(line []byte) { c.Stdout = os.Stdout c.Run() - log.Infof("Running network-observability-cli as Flow Capture\nLog level: %s\nFilters: %s\n", logLevel, filter) + fmt.Print("Running network-observability-cli as Flow Capture\n") + fmt.Printf("Log level: %s\n", logLevel) + fmt.Printf("Collection filters: %s\n", filter) + fmt.Printf("Showing last: %d Use Up / Down keyboard arrows to increase / decrease limit\n", flowsToShow) + fmt.Printf("Display: %s Use Left / Right keyboard arrows to cycle views\n", strings.Join(display, ",")) // recreate table from scratch headerFmt := color.New(color.BgHiBlue, color.Bold).SprintfFunc() columnFmt := color.New(color.FgHiYellow).SprintfFunc() - tbl := table.New( + cols := []interface{}{ "Time", "SrcAddr", "SrcPort", @@ -128,65 +167,211 @@ func manageFlowTable(line []byte) { "Proto", "Dscp", "Bytes", - "DropBytes", "Packets", - "DropPackets", - "DropState", - "DropCause", - "DnsId", - "DnsLatencyMs", - "DnsRCode", - "DnsErrno", - "RTT", - ) - tbl.WithHeaderFormatter(headerFmt).WithFirstColumnFormatter(columnFmt) - - // append most recent rows - for _, flow := range lastFlows { - tbl.AddRow( - time.UnixMilli(int64(flow["TimeFlowEndMs"].(float64))).Format("15:04:05.000000"), - flow["SrcAddr"], - flow["SrcPort"], - flow["DstAddr"], - flow["DstPort"], - flow["FlowDirection"], - flow["Interface"], - flow["Proto"], - flow["Dscp"], - ToPacketCount(flow, "Bytes"), - ToPacketCount(flow, "PktDropBytes"), - flow["Packets"], - flow["PktDropPackets"], - flow["PktDropLatestState"], - flow["PktDropLatestDropCause"], - flow["DnsId"], - ToDuration(flow, "DnsLatencyMs", time.Millisecond), - flow["DnsRCode"], - flow["DnsErrno"], - ToDuration(flow, "TimeFlowRttNs", time.Nanosecond), - ) } - // print table - tbl.Print() - } + if slices.Contains(display, pktDrop) { + cols = append(cols, []interface{}{ + "DropBytes", + "DropPackets", + "DropState", + "DropCause", + }...) + } - // unlock - mutex.Unlock() -} + if slices.Contains(display, dns) { + cols = append(cols, []interface{}{ + "DnsId", + "DnsLatencyMs", + "DnsRCode", + "DnsErrno", + }...) + } + + if slices.Contains(display, rtt) { + cols = append(cols, []interface{}{ + "RTT", + }...) + } + + if slices.Contains(display, raw) { + fmt.Print("Raw flow logs:\n") + for _, flow := range lastFlows { + fmt.Printf("%v\n", flow) + } + fmt.Printf("%s\n", strings.Repeat("-", 500)) + } else { + tbl := table.New(cols...) + tbl.WithHeaderFormatter(headerFmt).WithFirstColumnFormatter(columnFmt) + + // append most recent rows + for _, flow := range lastFlows { + row := []interface{}{ + time.UnixMilli(int64(flow["TimeFlowEndMs"].(float64))).Format("15:04:05.000000"), + ToText(flow, "SrcAddr"), + ToText(flow, "SrcPort"), + ToText(flow, "DstAddr"), + ToText(flow, "DstPort"), + ToDirection(flow, "FlowDirection"), + ToText(flow, "Interface"), + ToProto(flow, "Proto"), + ToDSCP(flow, "Dscp"), + ToPacketCount(flow, "Bytes"), + ToText(flow, "Packets"), + } + + if slices.Contains(display, pktDrop) { + row = append(row, []interface{}{ + ToPacketCount(flow, "PktDropBytes"), + ToText(flow, "PktDropPackets"), + ToText(flow, "PktDropLatestState"), + ToText(flow, "PktDropLatestDropCause"), + }...) + } -func ToPacketCount(genericMap config.GenericMap, fieldName string) interface{} { - v, ok := genericMap[fieldName] - if ok { - return sizestr.ToString(int64(v.(float64))) + if slices.Contains(display, dns) { + row = append(row, []interface{}{ + ToText(flow, "DnsId"), + ToDuration(flow, "DnsLatencyMs", time.Millisecond), + ToText(flow, "DnsRCode"), + ToText(flow, "DnsErrno"), + }...) + } + + if slices.Contains(display, rtt) { + row = append(row, []interface{}{ + ToDuration(flow, "TimeFlowRttNs", time.Nanosecond), + }...) + } + + tbl.AddRow(row...) + } + + // inserting empty row ensure minimum column sizes + emptyRow := []interface{}{ + strings.Repeat("-", 16), // TimeFlowEndMs + strings.Repeat("-", 16), // SrcAddr + strings.Repeat("-", 6), // SrcPort + strings.Repeat("-", 16), // DstAddr + strings.Repeat("-", 6), // DstPort + strings.Repeat("-", 10), // FlowDirection + strings.Repeat("-", 16), // Interface + strings.Repeat("-", 6), // Proto + strings.Repeat("-", 8), // Dscp + strings.Repeat("-", 6), // Bytes + strings.Repeat("-", 6), // Packets + } + + if slices.Contains(display, pktDrop) { + emptyRow = append(emptyRow, []interface{}{ + strings.Repeat("-", 12), // PktDropBytes + strings.Repeat("-", 12), // PktDropPackets + strings.Repeat("-", 20), // PktDropLatestState + strings.Repeat("-", 40), // PktDropLatestDropCause + }...) + } + + if slices.Contains(display, dns) { + emptyRow = append(emptyRow, []interface{}{ + strings.Repeat("-", 6), // DnsId + strings.Repeat("-", 6), // DnsLatencyMs + strings.Repeat("-", 6), // DnsRCode + strings.Repeat("-", 6), // DnsErrno + }...) + } + + if slices.Contains(display, rtt) { + emptyRow = append(emptyRow, []interface{}{ + strings.Repeat("-", 6), // TimeFlowRttNs + }...) + } + + tbl.AddRow(emptyRow...) + + // print table + tbl.Print() + } + + if len(regexes) > 0 { + fmt.Printf("Live table filter: %s Press enter to match multiple regexes at once\n", regexes) + } else { + fmt.Printf("Type anything to filter incoming flows in view\n") + } } - return nil } -func ToDuration(genericMap config.GenericMap, fieldName string, factor time.Duration) interface{} { - v, ok := genericMap[fieldName] - if ok { - return (time.Duration(int64(v.(float64))) * factor).String() +func scanner() { + if err := keyboard.Open(); err != nil { + panic(err) + } + defer func() { + _ = keyboard.Close() + }() + + for { + char, key, err := keyboard.GetKey() + if err != nil { + panic(err) + } + if key == keyboard.KeyCtrlC { + log.Info("Ctrl-C pressed, exiting program.") + + // exit program + os.Exit(0) + } else if key == keyboard.KeyArrowUp { + flowsToShow = flowsToShow + 1 + } else if key == keyboard.KeyArrowDown { + if flowsToShow > 10 { + flowsToShow = flowsToShow - 1 + } + } else if key == keyboard.KeyArrowRight { + if slices.Contains(display, pktDrop) && slices.Contains(display, dns) && slices.Contains(display, rtt) { + display = []string{raw} + } else if slices.Contains(display, raw) { + display = []string{standard} + } else if slices.Contains(display, standard) { + display = []string{pktDrop} + } else if slices.Contains(display, pktDrop) { + display = []string{dns} + } else if slices.Contains(display, dns) { + display = []string{rtt} + } else { + display = []string{pktDrop, dns, rtt} + } + } else if key == keyboard.KeyArrowLeft { + if slices.Contains(display, pktDrop) && slices.Contains(display, dns) && slices.Contains(display, rtt) { + display = []string{rtt} + } else if slices.Contains(display, rtt) { + display = []string{dns} + } else if slices.Contains(display, dns) { + display = []string{pktDrop} + } else if slices.Contains(display, pktDrop) { + display = []string{standard} + } else if slices.Contains(display, standard) { + display = []string{raw} + } else { + display = []string{pktDrop, dns, rtt} + } + } else if key == keyboard.KeyBackspace || key == keyboard.KeyBackspace2 { + if len(regexes) > 0 { + lastIndex := len(regexes) - 1 + if len(regexes[lastIndex]) > 0 { + regexes[lastIndex] = regexes[lastIndex][:len(regexes[lastIndex])-1] + } else { + regexes = regexes[:lastIndex] + } + } + } else if key == keyboard.KeyEnter { + regexes = append(regexes, "") + } else { + if len(regexes) == 0 { + regexes = []string{string(char)} + } else { + lastIndex := len(regexes) - 1 + regexes[lastIndex] = regexes[lastIndex] + string(char) + } + } + lastRefresh = startupTime + updateTable() } - return nil } diff --git a/cmd/map-format.go b/cmd/map-format.go new file mode 100644 index 00000000..9511b3b6 --- /dev/null +++ b/cmd/map-format.go @@ -0,0 +1,392 @@ +package cmd + +import ( + "fmt" + "time" + + "github.com/jpillora/sizestr" + "github.com/netobserv/flowlogs-pipeline/pkg/config" +) + +const ( + emptyText = "n/a" +) + +func ToPacketCount(genericMap config.GenericMap, fieldName string) interface{} { + v, ok := genericMap[fieldName] + if ok { + return sizestr.ToString(int64(v.(float64))) + } + return emptyText +} + +func ToDuration(genericMap config.GenericMap, fieldName string, factor time.Duration) interface{} { + v, ok := genericMap[fieldName] + if ok { + return (time.Duration(int64(v.(float64))) * factor).String() + } + return emptyText +} + +func ToDirection(genericMap config.GenericMap, fieldName string) string { + v, ok := genericMap[fieldName] + if ok { + switch v.(float64) { + case 0: + return "Ingress" + case 1: + return "Egress" + case 2: + return "Inner" + default: + return fmt.Sprintf("%v", v) + } + } + return emptyText +} + +func ToProto(genericMap config.GenericMap, fieldName string) string { + v, ok := genericMap[fieldName] + if ok { + switch v.(float64) { + case 0: + return "HOPOPT" + case 1: + return "ICMP" + case 2: + return "IGMP" + case 3: + return "GGP" + case 4: + return "IPv4" + case 5: + return "ST" + case 6: + return "TCP" + case 7: + return "CBT" + case 8: + return "EGP" + case 9: + return "IGP" + case 10: + return "BBN-RCC-MON" + case 11: + return "NVP-II" + case 12: + return "PUP" + case 13: + return "ARGUS (deprecated)" + case 14: + return "EMCON" + case 15: + return "XNET" + case 16: + return "CHAOS" + case 17: + return "UDP" + case 18: + return "MUX" + case 19: + return "DCN-MEAS" + case 20: + return "HMP" + case 21: + return "PRM" + case 22: + return "XNS-IDP" + case 23: + return "TRUNK-1" + case 24: + return "TRUNK-2" + case 25: + return "LEAF-1" + case 26: + return "LEAF-2" + case 27: + return "RDP" + case 28: + return "IRTP" + case 29: + return "ISO-TP4" + case 30: + return "NETBLT" + case 31: + return "MFE-NSP" + case 32: + return "MERIT-INP" + case 33: + return "DCCP" + case 34: + return "3PC" + case 35: + return "IDPR" + case 36: + return "XTP" + case 37: + return "DDP" + case 38: + return "IDPR-CMTP" + case 39: + return "TP++" + case 40: + return "IL" + case 41: + return "IPv6" + case 42: + return "SDRP" + case 43: + return "IPv6-Route" + case 44: + return "IPv6-Frag" + case 45: + return "IDRP" + case 46: + return "RSVP" + case 47: + return "GRE" + case 48: + return "DSR" + case 49: + return "BNA" + case 50: + return "ESP" + case 51: + return "AH" + case 52: + return "I-NLSP" + case 53: + return "SWIPE (deprecated)" + case 54: + return "NARP" + case 55: + return "MOBILE" + case 56: + return "TLSP" + case 57: + return "SKIP" + case 58: + return "IPv6-ICMP" + case 59: + return "IPv6-NoNxt" + case 60: + return "IPv6-Opts" + case 61: + return "HOST-NETWORK" + case 62: + return "CFTP" + case 63: + return "LOCAL-NETWORK" + case 64: + return "SAT-EXPAK" + case 65: + return "KRYPTOLAN" + case 66: + return "RVD" + case 67: + return "IPPC" + case 68: + return "DISTRIBUTED-FS" + case 69: + return "SAT-MON" + case 70: + return "VISA" + case 71: + return "IPCV" + case 72: + return "CPNX" + case 73: + return "CPHB" + case 74: + return "WSN" + case 75: + return "PVP" + case 76: + return "BR-SAT-MON" + case 77: + return "SUN-ND" + case 78: + return "WB-MON" + case 79: + return "WB-EXPAK" + case 80: + return "ISO-IP" + case 81: + return "VMTP" + case 82: + return "SECURE-VMTP" + case 83: + return "VINES" + case 84: + return "IPTM" + case 85: + return "NSFNET-IGP" + case 86: + return "DGP" + case 87: + return "TCF" + case 88: + return "EIGRP" + case 89: + return "OSPFIGP" + case 90: + return "Sprite-RPC" + case 91: + return "LARP" + case 92: + return "MTP" + case 93: + return "AX.25" + case 94: + return "IPIP" + case 95: + return "MICP (deprecated)" + case 96: + return "SCC-SP" + case 97: + return "ETHERIP" + case 98: + return "ENCAP" + case 99: + return "PRIVATE-ENCTYPTION" + case 100: + return "GMTP" + case 101: + return "IFMP" + case 102: + return "PNNI" + case 103: + return "PIM" + case 104: + return "ARIS" + case 105: + return "SCPS" + case 106: + return "QNX" + case 107: + return "A/N" + case 108: + return "IPComp" + case 109: + return "SNP" + case 110: + return "Compaq-Peer" + case 111: + return "IPX-in-IP" + case 112: + return "VRRP" + case 113: + return "PGM" + case 114: + return "ZEROHOP" + case 115: + return "L2TP" + case 116: + return "DDX" + case 117: + return "IATP" + case 118: + return "STP" + case 119: + return "SRP" + case 120: + return "UTI" + case 121: + return "SMP" + case 122: + return "SM (deprecated)" + case 123: + return "PTP" + case 124: + return "ISIS over IPv4" + case 125: + return "FIRE" + case 126: + return "CRTP" + case 127: + return "CRUDP" + case 128: + return "SSCOPMCE" + case 129: + return "IPLT" + case 130: + return "SPS" + case 131: + return "PIPE" + case 132: + return "SCTP" + case 133: + return "FC" + case 134: + return "RSVP-E2E-IGNORE" + case 135: + return "Mobility Header" + case 136: + return "UDPLite" + case 137: + return "MPLS-in-IP" + case 138: + return "manet" + case 139: + return "HIP" + case 140: + return "Shim6" + case 141: + return "WESP" + case 142: + return "ROHC" + case 253: + return "EXPERIMENTAL-253" + case 254: + return "EXPERIMENTAL-254" + case 255: + return "Reserved" + default: + return fmt.Sprintf("%v", v) + } + } + return emptyText +} + +func ToDSCP(genericMap config.GenericMap, fieldName string) interface{} { + v, ok := genericMap[fieldName] + if ok { + switch v.(float64) { + case 8: + return "Low-Priority Data" + case 0: + return "Standard" + case 10: + return "High-Throughput Data" + case 16: + return "OAM" + case 18: + return "Low-Latency Data" + case 24: + return "Broadcast Video" + case 26: + return "Multimedia Streaming" + case 32: + return "Real-Time Interactive" + case 34: + return "Multimedia Conferencing" + case 40: + return "Signaling" + case 46: + return "Telephony" + case 48: + return "Network Control" + default: + return fmt.Sprintf("%v", v) + } + } + return emptyText +} + +func ToText(genericMap config.GenericMap, fieldName string) interface{} { + v, ok := genericMap[fieldName] + if ok { + return v + } + return emptyText +} diff --git a/cmd/root.go b/cmd/root.go index 9b9fbf09..85e71c82 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -25,7 +25,8 @@ var ( addresses []string filter string - lastRefresh = time.Now() + startupTime = time.Now() + lastRefresh = startupTime wg = sync.WaitGroup{} mutex = sync.Mutex{} diff --git a/go.mod b/go.mod index 5e25a29e..f0ccafdf 100644 --- a/go.mod +++ b/go.mod @@ -33,6 +33,7 @@ require ( ) require ( + github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203 github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/netobserv/flowlogs-pipeline v0.1.10 github.com/spf13/pflag v1.0.5 // indirect diff --git a/go.sum b/go.sum index 0c823a1c..de6e4ade 100644 --- a/go.sum +++ b/go.sum @@ -56,6 +56,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203 h1:XBBHcIb256gUJtLmY22n99HaZTz+r2Z51xUPi01m3wg= +github.com/eiannone/keyboard v0.0.0-20220611211555-0d226195f203/go.mod h1:E1jcSv8FaEny+OP/5k9UxZVw9YFWGj7eI4KR/iOBqCg= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= diff --git a/res/flow-capture.yml b/res/flow-capture.yml index 3515ea51..76eed726 100644 --- a/res/flow-capture.yml +++ b/res/flow-capture.yml @@ -28,6 +28,8 @@ spec: env: - name: INTERFACES value: "{{FLOW_FILTER_VALUE}}" + - name: EXCLUDE_INTERFACES + value: "lo" - name: SAMPLING value: "1" - name: ENABLE_RTT diff --git a/res/functions.sh b/res/functions.sh index 24b51a9d..730b2387 100644 --- a/res/functions.sh +++ b/res/functions.sh @@ -1,6 +1,10 @@ function setup { echo "Setting up... " + stty -F /dev/tty cbreak min 1 + stty -F /dev/tty -echo + setterm -linewrap off + if ! output=$(oc whoami 2>&1); then printf 'You must be connected using oc login command first\n' >&2 exit 1 @@ -57,6 +61,9 @@ function setup { } function cleanup { + stty -F /dev/tty echo + setterm -linewrap on + if output=$(oc whoami 2>&1); then printf "\nCleaning up... " oc delete namespace netobserv-cli From efafe6268303ca9528b812e2c16a5b6069781a45 Mon Sep 17 00:00:00 2001 From: Julien Pinsonneau Date: Mon, 20 Nov 2023 11:21:26 +0100 Subject: [PATCH 5/9] feedback + lint --- .gitignore | 2 +- Makefile | 26 +++++++++++++++++++------- README.md | 26 ++++++++++++++++++++++---- cmd/flow-capture.go | 7 +++++-- cmd/packet-capture.go | 7 +++++-- main.go | 11 +++++++++-- oc/oc-netobserv-cleanup | 4 ++++ oc/oc-netobserv-flows | 1 - oc/oc-netobserv-packets | 1 - res/flow-capture.yml | 2 +- res/functions.sh | 5 ++++- res/namespace.yml | 2 +- res/packet-capture.yml | 2 +- res/service-account.yml | 2 +- 14 files changed, 73 insertions(+), 25 deletions(-) create mode 100755 oc/oc-netobserv-cleanup diff --git a/.gitignore b/.gitignore index bdb82ab4..76f46288 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ build -output \ No newline at end of file +output diff --git a/Makefile b/Makefile index 1744188b..62ee73cf 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ NAME := network-observability-cli DIST_DIR ?= build OUTPUT := $(DIST_DIR)/$(NAME) -DOCKER := $(shell which podman) -ifeq ($(DOCKER),) - DOCKER := $(shell which docker) -endif + +# Image building tool (docker / podman) - docker is preferred in CI +OCI_BIN_PATH = $(shell which docker 2>/dev/null || which podman) +OCI_BIN ?= $(shell basename ${OCI_BIN_PATH}) + +GOLANGCI_LINT_VERSION = v1.53.3 .PHONY: all all: build @@ -13,16 +15,26 @@ all: build prepare: @mkdir -p $(DIST_DIR) +.PHONY: prereqs +prereqs: ## Test if prerequisites are met, and installing missing dependencies + @echo "### Test if prerequisites are met, and installing missing dependencies" + GOFLAGS="" go install github.com/golangci/golangci-lint/cmd/golangci-lint@${GOLANGCI_LINT_VERSION} + .PHONY: build -build: prepare +build: prepare lint @go build -o $(OUTPUT) cp -a ./oc/. ./$(DIST_DIR) cp -a ./res/. ./$(DIST_DIR)/network-observability-cli-resources .PHONY: image image: - $(DOCKER) build -t network-observability-cli . + $(OCI_BIN) build -t network-observability-cli . + +.PHONY: lint +lint: prereqs ## Lint code + @echo "### Linting code" + golangci-lint run ./... .PHONY: clean clean: - @rm -rf $(DIST_DIR) \ No newline at end of file + @rm -rf $(DIST_DIR) diff --git a/README.md b/README.md index 1e748e30..bee71466 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Network Observability CLI network-observability-cli is a lightweight Flow and Packet visualisation tool. -It deploy [netobserv eBPF agent](https://github.com/netobserv/netobserv-ebpf-agent) on your k8s cluster to collect flows or packets from nodes network interfaces +It deploys [netobserv eBPF agent](https://github.com/netobserv/netobserv-ebpf-agent) on your k8s cluster to collect flows or packets from nodes network interfaces and streams data to a local collector for analysis and visualisation. Output files are generated under `output/flow` and `output/pcap` directories per host name @@ -16,9 +16,17 @@ This project is still a WIP. The following list gives an overview of the current - [ ] Testing - [ ] Linting - [ ] Dockerfile +- [ ] Allow switching between `kubectl` / `oc` commands Feel free to contribute ! +## Prerequisites + +To run this CLI, you will need: +- A running kubernetes / OpenShift cluster +- `oc` command installed and connected +- Admin rights + ## Build To build the project locally: @@ -28,11 +36,12 @@ make build This will also copy resources and oc commands to the `build` directoy. -## Features +## Run ### Flow Capture Simply run the following command to start capturing flows: + ``` ./bin/oc-netobserv-flows ``` @@ -55,7 +64,15 @@ PCAP generated files are compatible with Wireshark It will display a table view with latest packets collected and write data under output/pcap directory. To stop capturing press Ctrl-C. -## Extending Openshift CLI with plugin +### Cleanup + +The `cleanup` function will automatically remove the eBPF programs when the CLI exits. However you may need to run it manually if an error occurs. + +``` +./bin/oc-netobserv-cleanup +``` + +## Extending OpenShift CLI with plugin You can add this plugin to your favorite oc commands using the following steps: ``` @@ -73,8 +90,9 @@ It will display as result: ``` The following compatible plugins are available: ... +/usr/bin/oc-netobserv-cleanup /usr/bin/oc-netobserv-flows /usr/bin/oc-netobserv-packets ``` -More info [on official Openshift documentation](https://docs.openshift.com/container-platform/4.14/cli_reference/openshift_cli/extending-cli-plugins.html). \ No newline at end of file +More info [on official Openshift documentation](https://docs.openshift.com/container-platform/4.14/cli_reference/openshift_cli/extending-cli-plugins.html). diff --git a/cmd/flow-capture.go b/cmd/flow-capture.go index cf02eae1..e1aae849 100644 --- a/cmd/flow-capture.go +++ b/cmd/flow-capture.go @@ -45,7 +45,7 @@ func runFlowCapture(cmd *cobra.Command, args []string) { go scanner() wg.Add(len(addresses)) - for i, _ := range addresses { + for i := range addresses { go runFlowCaptureOnAddr(addresses[i], nodes[i]) } wg.Wait() @@ -145,7 +145,10 @@ func updateTable() { // clear terminal to render table properly c := exec.Command("clear") c.Stdout = os.Stdout - c.Run() + err := c.Run() + if err != nil { + log.Fatal(err) + } fmt.Print("Running network-observability-cli as Flow Capture\n") fmt.Printf("Log level: %s\n", logLevel) diff --git a/cmd/packet-capture.go b/cmd/packet-capture.go index bc74764a..e49d0676 100644 --- a/cmd/packet-capture.go +++ b/cmd/packet-capture.go @@ -29,7 +29,7 @@ var results = []PcapResult{} func runPacketCapture(cmd *cobra.Command, args []string) { wg.Add(len(addresses)) - for i, _ := range addresses { + for i := range addresses { go runPacketCaptureOnAddr(addresses[i], nodes[i]) } wg.Wait() @@ -103,7 +103,10 @@ func managePcapTable(result PcapResult) { // clear terminal to render table properly c := exec.Command("clear") c.Stdout = os.Stdout - c.Run() + err := c.Run() + if err != nil { + log.Fatal(err) + } log.Infof("Running network-observability-cli as Packet Capture\nLog level: %s\nFilters: %s\n", logLevel, filter) diff --git a/main.go b/main.go index 731f836b..7c05cc67 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,14 @@ package main -import "github.com/netobserv/network-observability-cli/cmd" +import ( + "log" + + "github.com/netobserv/network-observability-cli/cmd" +) func main() { - cmd.Execute() + err := cmd.Execute() + if err != nil { + log.Fatal(err) + } } diff --git a/oc/oc-netobserv-cleanup b/oc/oc-netobserv-cleanup new file mode 100755 index 00000000..1934724f --- /dev/null +++ b/oc/oc-netobserv-cleanup @@ -0,0 +1,4 @@ +#!/bin/bash +source "${BASH_SOURCE%/*}/network-observability-cli-resources/functions.sh" + +cleanup diff --git a/oc/oc-netobserv-flows b/oc/oc-netobserv-flows index 7e0e0ce8..8dda7ff3 100755 --- a/oc/oc-netobserv-flows +++ b/oc/oc-netobserv-flows @@ -15,4 +15,3 @@ setup flows $filter echo "\nRunning network-observability-cli get-flows... " ${BASH_SOURCE%/*}/network-observability-cli --nodes $nodes --ports $ports ${filter:+"--filter" "$filter"} get-flows - diff --git a/oc/oc-netobserv-packets b/oc/oc-netobserv-packets index a586a348..db08d1fd 100755 --- a/oc/oc-netobserv-packets +++ b/oc/oc-netobserv-packets @@ -16,4 +16,3 @@ setup packets $filter echo "\nRunning network-observability-cli get-packets... " ${BASH_SOURCE%/*}/network-observability-cli --nodes $nodes --ports $ports --filter $filter get-packets - diff --git a/res/flow-capture.yml b/res/flow-capture.yml index 76eed726..948e9e5e 100644 --- a/res/flow-capture.yml +++ b/res/flow-capture.yml @@ -50,4 +50,4 @@ spec: - name: bpf-kernel-debug hostPath: path: /sys/kernel/debug - type: Directory \ No newline at end of file + type: Directory diff --git a/res/functions.sh b/res/functions.sh index 730b2387..0b671dd9 100644 --- a/res/functions.sh +++ b/res/functions.sh @@ -67,5 +67,8 @@ function cleanup { if output=$(oc whoami 2>&1); then printf "\nCleaning up... " oc delete namespace netobserv-cli + else + echo "Cleanup namespace skipped" + return fi -} \ No newline at end of file +} diff --git a/res/namespace.yml b/res/namespace.yml index 79df512c..60c091d0 100644 --- a/res/namespace.yml +++ b/res/namespace.yml @@ -4,4 +4,4 @@ metadata: name: netobserv-cli app: netobserv-cli pod-security.kubernetes.io/enforce: privileged - pod-security.kubernetes.io/audit: privileged \ No newline at end of file + pod-security.kubernetes.io/audit: privileged diff --git a/res/packet-capture.yml b/res/packet-capture.yml index 25774d8c..f4f46155 100644 --- a/res/packet-capture.yml +++ b/res/packet-capture.yml @@ -30,4 +30,4 @@ spec: - name: PCA_FILTER value: "{{PCA_FILTER_VALUE}}" - name: PCA_SERVER_PORT - value: "9999" \ No newline at end of file + value: "9999" diff --git a/res/service-account.yml b/res/service-account.yml index 2049e066..900f6c5c 100644 --- a/res/service-account.yml +++ b/res/service-account.yml @@ -31,4 +31,4 @@ subjects: roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: netobserv-cli \ No newline at end of file + name: netobserv-cli From cc39db6d0d3548d6fd8ae1bb5bb12b790fb5e4d0 Mon Sep 17 00:00:00 2001 From: Joel Takvorian Date: Wed, 7 Feb 2024 11:01:22 +0100 Subject: [PATCH 6/9] Readme / typo fixes --- README.md | 40 +++++++++++++++++++++++++--------------- go.mod | 2 +- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index bee71466..6bd7d618 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Network Observability CLI -network-observability-cli is a lightweight Flow and Packet visualisation tool. -It deploys [netobserv eBPF agent](https://github.com/netobserv/netobserv-ebpf-agent) on your k8s cluster to collect flows or packets from nodes network interfaces -and streams data to a local collector for analysis and visualisation. +network-observability-cli is a lightweight Flow and Packet visualization tool. +It deploys [NetObserv eBPF agent](https://github.com/netobserv/netobserv-ebpf-agent) on your k8s cluster to collect flows or packets from nodes network interfaces +and streams data to a local collector for analysis and visualization. Output files are generated under `output/flow` and `output/pcap` directories per host name ## Work In Progress @@ -25,16 +25,17 @@ Feel free to contribute ! To run this CLI, you will need: - A running kubernetes / OpenShift cluster - `oc` command installed and connected -- Admin rights +- Cluster admin rights ## Build To build the project locally: -``` + +```bash make build ``` -This will also copy resources and oc commands to the `build` directoy. +This will also copy resources and oc commands to the `build` directory. ## Run @@ -42,8 +43,8 @@ This will also copy resources and oc commands to the `build` directoy. Simply run the following command to start capturing flows: -``` -./bin/oc-netobserv-flows +```bash +./build/oc-netobserv-flows ``` ![flows](./img/flow-table.png) @@ -55,8 +56,14 @@ To stop capturing press Ctrl-C. PCAP generated files are compatible with Wireshark +```bash +./build/oc-netobserv-packets ``` -./bin/oc-netobserv-packets + +For example: + +```bash +./build/oc-netobserv-packets "tcp,8080" ``` ![packets](./img/packet-table.png) @@ -68,25 +75,28 @@ To stop capturing press Ctrl-C. The `cleanup` function will automatically remove the eBPF programs when the CLI exits. However you may need to run it manually if an error occurs. -``` -./bin/oc-netobserv-cleanup +```bash +./build/oc-netobserv-cleanup ``` ## Extending OpenShift CLI with plugin You can add this plugin to your favorite oc commands using the following steps: -``` + +```bash make build sudo cp -a ./build/. /usr/bin/ ``` -This will add `oc netobserv flows` and `oc netobserv packets` commands to your cli. +This will add `oc netobserv flows` and `oc netobserv packets` commands to your CLI. You can verify the commands are available using: -``` + +```bash oc plugin list ``` It will display as result: + ``` The following compatible plugins are available: ... @@ -95,4 +105,4 @@ The following compatible plugins are available: /usr/bin/oc-netobserv-packets ``` -More info [on official Openshift documentation](https://docs.openshift.com/container-platform/4.14/cli_reference/openshift_cli/extending-cli-plugins.html). +More info [on official OpenShift documentation](https://docs.openshift.com/container-platform/4.14/cli_reference/openshift_cli/extending-cli-plugins.html). diff --git a/go.mod b/go.mod index f0ccafdf..2244f7cb 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/netobserv/network-observability-cli -go 1.21.4 +go 1.21 require ( github.com/fatih/color v1.16.0 From 72491e2de0d2511915bc7ba3f2283100ad399a02 Mon Sep 17 00:00:00 2001 From: Joel Takvorian Date: Wed, 7 Feb 2024 11:03:22 +0100 Subject: [PATCH 7/9] Fix WaitGroup use (async, defer Done, capture 'i') --- cmd/flow-capture.go | 7 ++++++- cmd/packet-capture.go | 7 ++++++- cmd/root.go | 1 - 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/cmd/flow-capture.go b/cmd/flow-capture.go index e1aae849..9778e4de 100644 --- a/cmd/flow-capture.go +++ b/cmd/flow-capture.go @@ -12,6 +12,7 @@ import ( "slices" "sort" "strings" + "sync" "time" "github.com/eiannone/keyboard" @@ -44,9 +45,13 @@ var ( func runFlowCapture(cmd *cobra.Command, args []string) { go scanner() + wg := sync.WaitGroup{} wg.Add(len(addresses)) for i := range addresses { - go runFlowCaptureOnAddr(addresses[i], nodes[i]) + go func(idx int) { + defer wg.Done() + runFlowCaptureOnAddr(addresses[idx], nodes[idx]) + }(i) } wg.Wait() } diff --git a/cmd/packet-capture.go b/cmd/packet-capture.go index e49d0676..4dd9f4f6 100644 --- a/cmd/packet-capture.go +++ b/cmd/packet-capture.go @@ -4,6 +4,7 @@ import ( "net" "os" "os/exec" + "sync" "time" "github.com/fatih/color" @@ -28,9 +29,13 @@ type PcapResult struct { var results = []PcapResult{} func runPacketCapture(cmd *cobra.Command, args []string) { + wg := sync.WaitGroup{} wg.Add(len(addresses)) for i := range addresses { - go runPacketCaptureOnAddr(addresses[i], nodes[i]) + go func(idx int) { + defer wg.Done() + runPacketCaptureOnAddr(addresses[idx], nodes[idx]) + }(i) } wg.Wait() } diff --git a/cmd/root.go b/cmd/root.go index 85e71c82..6fe24486 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -27,7 +27,6 @@ var ( startupTime = time.Now() lastRefresh = startupTime - wg = sync.WaitGroup{} mutex = sync.Mutex{} rootCmd = &cobra.Command{ From 5237a182e5545b9abfd1c12219b1c3882d90dd9e Mon Sep 17 00:00:00 2001 From: Julien Pinsonneau Date: Wed, 7 Feb 2024 11:48:29 +0100 Subject: [PATCH 8/9] fix packet exit --- cmd/packet-capture.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/cmd/packet-capture.go b/cmd/packet-capture.go index 4dd9f4f6..e375ca7e 100644 --- a/cmd/packet-capture.go +++ b/cmd/packet-capture.go @@ -7,6 +7,7 @@ import ( "sync" "time" + "github.com/eiannone/keyboard" "github.com/fatih/color" "github.com/jpillora/sizestr" "github.com/rodaine/table" @@ -30,6 +31,8 @@ var results = []PcapResult{} func runPacketCapture(cmd *cobra.Command, args []string) { wg := sync.WaitGroup{} + go packetCaptureScanner() + wg.Add(len(addresses)) for i := range addresses { go func(idx int) { @@ -140,3 +143,25 @@ func managePcapTable(result PcapResult) { // unlock mutex.Unlock() } + +func packetCaptureScanner() { + if err := keyboard.Open(); err != nil { + panic(err) + } + defer func() { + _ = keyboard.Close() + }() + + for { + _, key, err := keyboard.GetKey() + if err != nil { + panic(err) + } + if key == keyboard.KeyCtrlC { + log.Info("Ctrl-C pressed, exiting program.") + + // exit program + os.Exit(0) + } + } +} From 6779632110f345edd1ebeb65491d92294dc295d6 Mon Sep 17 00:00:00 2001 From: Julien Pinsonneau Date: Wed, 7 Feb 2024 11:48:42 +0100 Subject: [PATCH 9/9] make oc-commands --- Makefile | 4 ++++ README.md | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 62ee73cf..59915dfd 100644 --- a/Makefile +++ b/Makefile @@ -38,3 +38,7 @@ lint: prereqs ## Lint code .PHONY: clean clean: @rm -rf $(DIST_DIR) + +.PHONY: oc-commands +oc-commands: build + sudo cp -a ./build/. /usr/bin/ diff --git a/README.md b/README.md index 6bd7d618..f4d9e5a4 100644 --- a/README.md +++ b/README.md @@ -84,8 +84,7 @@ The `cleanup` function will automatically remove the eBPF programs when the CLI You can add this plugin to your favorite oc commands using the following steps: ```bash -make build -sudo cp -a ./build/. /usr/bin/ +make oc-commands ``` This will add `oc netobserv flows` and `oc netobserv packets` commands to your CLI.