Skip to content

Commit

Permalink
Merge pull request #16 from Anthony-Dong/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Anthony-Dong authored Dec 31, 2024
2 parents 3b510ac + a2ba12f commit af95da7
Show file tree
Hide file tree
Showing 85 changed files with 2,946 additions and 285 deletions.
31 changes: 28 additions & 3 deletions cli/tcpdump_tools/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,49 @@ require (
require (
github.com/andybalholm/brotli v1.1.0 // indirect
github.com/apache/thrift v0.13.0 // indirect
github.com/bytedance/gopkg v0.1.1 // indirect
github.com/bytedance/sonic v1.12.2 // indirect
github.com/bytedance/sonic/loader v0.2.0 // indirect
github.com/cloudwego/base64x v0.1.4 // indirect
github.com/cloudwego/dynamicgo v0.4.0 // indirect
github.com/cloudwego/gopkg v0.1.2 // indirect
github.com/cloudwego/iasm v0.2.0 // indirect
github.com/cloudwego/kitex v0.11.3 // indirect
github.com/cloudwego/runtimex v0.1.0 // indirect
github.com/cloudwego/thriftgo v0.3.17 // indirect
github.com/creack/pty v1.1.21 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/fatih/structtag v1.2.0 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/gosimple/slug v1.12.0 // indirect
github.com/gosimple/unidecode v1.0.1 // indirect
github.com/iancoleman/orderedmap v0.3.0 // indirect
github.com/iancoleman/strcase v0.2.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jhump/protoreflect v1.8.2 // indirect
github.com/klauspost/compress v1.17.6 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/tidwall/gjson v1.17.3 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.52.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/term v0.17.0 // indirect
golang.org/x/arch v0.2.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/term v0.19.0 // indirect
google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

//replace github.com/anthony-dong/golang => ../..
replace github.com/anthony-dong/golang => ../..
210 changes: 202 additions & 8 deletions cli/tcpdump_tools/go.sum

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion cli/tcpdump_tools/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
)

func main() {
command, err := tcpdump.NewCommand()
command, err := tcpdump.NewCommand(tcpdump.DefaultDecoders)
if err != nil {
exitError(err)
}
Expand Down
16 changes: 11 additions & 5 deletions cli/tcpdump_tools/tcpdump/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
"github.com/anthony-dong/golang/pkg/utils"
)

func NewCommand() (*cobra.Command, error) {
func NewCommand(decoders map[string]tcpdump.Decoder) (*cobra.Command, error) {
var (
cfg = tcpdump.NewDefaultConfig()
filename string
Expand All @@ -26,7 +26,7 @@ func NewCommand() (*cobra.Command, error) {
Long: `decode tcpdump file, help doc: https://github.com/anthony-dong/golang/tree/master/cli/tcpdump_tools`,
Example: ` tcpdump 'port 8080' -X -l -n | tcpdump_tools`,
RunE: func(cmd *cobra.Command, args []string) error {
return run(cmd.Context(), filename, cfg)
return Run(cmd.Context(), filename, cfg, decoders)
},
}
cmd.Flags().StringVarP(&filename, "file", "r", "", "The packets file, eg: tcpdump_xxx_file.pcap.")
Expand All @@ -36,11 +36,17 @@ func NewCommand() (*cobra.Command, error) {
return cmd, nil
}

func run(ctx context.Context, filename string, cfg tcpdump.ContextConfig) error {
var DefaultDecoders = map[string]tcpdump.Decoder{
"Thrift": tcpdump.NewThriftDecoder(tcpdump.NewThriftMessageParser()),
"HTTP1.X": tcpdump.NewHTTP1Decoder(),
}

func Run(ctx context.Context, filename string, cfg tcpdump.ContextConfig, decoders map[string]tcpdump.Decoder) error {
decoder := tcpdump.NewCtx(ctx, cfg)
options := NewDecodeOptions()
decoder.AddDecoder("HTTP1.X", tcpdump.NewHTTP1Decoder())
decoder.AddDecoder("Thrift", tcpdump.NewThriftDecoder())
for k, v := range decoders {
decoder.AddDecoder(k, v)
}
var source PacketSource
if utils.CheckStdInFromPiped() {
source = NewConsulSource(os.Stdin, options)
Expand Down
12 changes: 6 additions & 6 deletions cli/tcpdump_tools/tcpdump/command_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,34 +18,34 @@ func Test_DecodeTCPDump(t *testing.T) {
ctx := context.Background()
cfg := tcpdump.NewDefaultConfig()
t.Run("thrift", func(t *testing.T) {
if err := run(ctx, readFile("thrift.pcap"), cfg); err != nil {
if err := Run(ctx, readFile("thrift.pcap"), cfg, DefaultDecoders); err != nil {
t.Fatal(err)
}
})
t.Run("http", func(t *testing.T) {
if err := run(context.Background(), readFile("http1.1.pcap"), cfg); err != nil {
if err := Run(context.Background(), readFile("http1.1.pcap"), cfg, DefaultDecoders); err != nil {
t.Fatal(err)
}
})
t.Run("http chunked", func(t *testing.T) {
if err := run(context.Background(), readFile("http1.1_chunked.pcap"), cfg); err != nil {
if err := Run(context.Background(), readFile("http1.1_chunked.pcap"), cfg, DefaultDecoders); err != nil {
t.Fatal(err)
}
})
t.Run("stick http", func(t *testing.T) {
if err := run(context.Background(), readFile("stick_http1.1.pcap"), cfg); err != nil {
if err := Run(context.Background(), readFile("stick_http1.1.pcap"), cfg, DefaultDecoders); err != nil {
t.Fatal(err)
}
})
t.Run("thrift_ttheader", func(t *testing.T) {
// thrift_ttheader
if err := run(context.Background(), readFile("thrift_ttheader.pcap"), cfg); err != nil {
if err := Run(context.Background(), readFile("thrift_ttheader.pcap"), cfg, DefaultDecoders); err != nil {
t.Fatal(err)
}
})
t.Run("stick_thrift_ttheader", func(t *testing.T) {
// thrift_ttheader
if err := run(ctx, readFile("stick_thrift_ttheader.pcap"), cfg); err != nil {
if err := Run(ctx, readFile("stick_thrift_ttheader.pcap"), cfg, DefaultDecoders); err != nil {
t.Fatal(err)
}
})
Expand Down
14 changes: 14 additions & 0 deletions command/cli/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ package cli
import (
"context"

_goto "github.com/anthony-dong/golang/command/goto"

"github.com/anthony-dong/golang/command/diff"
"github.com/anthony-dong/golang/command/strace"

"github.com/anthony-dong/golang/command/_init"
"github.com/anthony-dong/golang/command/install"
"github.com/anthony-dong/golang/command/mock"
Expand Down Expand Up @@ -122,5 +127,14 @@ func NewCommand(config *command.AppConfig) (*cobra.Command, error) {
if err := command.AddCommand(cmd, install.NewCommand); err != nil {
return nil, err
}
if err := command.AddCommand(cmd, strace.NewCommand); err != nil {
return nil, err
}
if err := command.AddCommand(cmd, diff.NewCommand); err != nil {
return nil, err
}
if err := command.AddCommand(cmd, _goto.NewCommand); err != nil {
return nil, err
}
return cmd, nil
}
3 changes: 2 additions & 1 deletion command/codec/json_yaml.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@ import (
"io"
"os"

"github.com/anthony-dong/golang/pkg/utils"
"github.com/spf13/cobra"

"github.com/anthony-dong/golang/pkg/utils"
)

func NewJson2YamlCmd() (*cobra.Command, error) {
Expand Down
8 changes: 2 additions & 6 deletions command/cpp/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,7 @@ import (
)

func NewCommand() (*cobra.Command, error) {
tools := Tools{
Pwd: utils.GetPwd(),
CC: CC(),
CXX: CXX(),
}
tools := Tools{Pwd: utils.GetPwd()}
configFile := ""
isRun := false
linkType := "binary"
Expand All @@ -26,7 +22,7 @@ func NewCommand() (*cobra.Command, error) {
RunE: func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
if configFile != "" {
if err := utils.UnmarshalFromFile(configFile, &tools); err != nil {
if err := ReadToolConfigFromFile(configFile, &tools); err != nil {
return err
}
}
Expand Down
41 changes: 41 additions & 0 deletions command/cpp/env.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package cpp

import (
"encoding/json"
"runtime"
"strings"

"github.com/anthony-dong/golang/pkg/utils"
)

func ReadToolConfigFromFile(fileName string, tool *Tools) error {
kv := make(map[string]interface{})
if err := utils.UnmarshalFromFile(fileName, kv); err != nil {
return err
}
return ReadToolConfigFromKV(kv, runtime.GOOS, tool)
}

func ReadToolConfigFromKV(kv map[string]interface{}, os string, tool *Tools) error {
osKv := make(map[string]interface{}, len(kv))
for key, value := range kv {
keys := strings.SplitN(key, "@", 2)
if len(keys) != 2 {
continue
}
if keys[1] == os {
osKv[keys[0]] = value
}
}
for k, v := range osKv {
kv[k] = v
}
marshal, err := json.Marshal(kv)
if err != nil {
return err
}
if err := json.Unmarshal(marshal, tool); err != nil {
return err
}
return nil
}
22 changes: 22 additions & 0 deletions command/cpp/env_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package cpp

import (
"testing"

"github.com/stretchr/testify/assert"
)

func TestReadToolConfigFromFile(t *testing.T) {
tools := &Tools{}
err := ReadToolConfigFromKV(map[string]interface{}{
"CXX": "/opt/homebrew/opt/llvm@14/bin/clang++",
"CC": "/opt/homebrew/opt/llvm@14/bin/clang++",
"CXX@linux": "/usr/lib/llvm-14/bin/clang++",
"CC@linux": "/usr/lib/llvm-14/bin/clang",
}, "linux", tools)
if err != nil {
t.Fatal(err)
}
assert.Equal(t, tools.CXX, "/usr/lib/llvm-14/bin/clang++")
assert.Equal(t, tools.CC, "/usr/lib/llvm-14/bin/clang")
}
46 changes: 46 additions & 0 deletions command/cpp/read_file.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package cpp

import (
"io"
"os"
"regexp"
"strings"

"github.com/anthony-dong/golang/pkg/utils"
)

type buildAndLink struct {
buildArgs []string
linkArgs []string
}

var buildArgsRegexp = regexp.MustCompile(`^//\s*(build|cxxopt)\s*:\s*`)
var linkArgsRegexp = regexp.MustCompile(`^//\s*(link|linkopt)\s*:\s*`)

func readFileArgs(file string) (*buildAndLink, error) {
open, err := os.Open(file)
if err != nil {
return nil, err
}
defer open.Close()
return readBuildAndLinkArgs(open)
}

func readBuildAndLinkArgs(reader io.Reader) (*buildAndLink, error) {
result := &buildAndLink{}
utils.ReadSomeLines(reader, func(index int, line string) bool {
if strings.HasPrefix(line, "#include") {
return false
}
if prefix := linkArgsRegexp.FindString(line); prefix != "" {
args := strings.TrimPrefix(line, prefix)
result.linkArgs = append(result.linkArgs, utils.SplitArgs(args)...)
}
if prefix := buildArgsRegexp.FindString(line); prefix != "" {
args := strings.TrimPrefix(line, prefix)
result.buildArgs = append(result.buildArgs, utils.SplitArgs(args)...)
}
return true
})
return result, nil
}
23 changes: 23 additions & 0 deletions command/cpp/read_file_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cpp

import (
"bytes"
"testing"

"github.com/stretchr/testify/assert"
)

func Test_readFileArgs(t *testing.T) {
args, err := readBuildAndLinkArgs(bytes.NewBufferString(`
// link: -lspdlog
// build: -O2
// cxxopt: -g
// link: -L/usr/local/lib
// linkopt: -lgtest
`))
if err != nil {
t.Fatal(err)
}
t.Logf("%#v\n", args)
assert.Equal(t, args, &buildAndLink{buildArgs: []string{"-O2", "-g"}, linkArgs: []string{"-lspdlog", "-L/usr/local/lib", "-lgtest"}})
}
Loading

0 comments on commit af95da7

Please sign in to comment.