From c98eca59f2a434a40c93bd46ec042e8788287974 Mon Sep 17 00:00:00 2001 From: eaglexiang Date: Thu, 12 Dec 2024 14:32:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=20JSON=20=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E7=9A=84=E8=BE=93=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + cmd/main.go | 45 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index adf8f72..e0bfe9a 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ # Go workspace file go.work +.vscode diff --git a/cmd/main.go b/cmd/main.go index 59f06ea..68244d2 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,9 +1,13 @@ package main import ( + "encoding/json" "flag" "fmt" + "os" "os/exec" + "path/filepath" + "strings" ) func main() { @@ -14,10 +18,47 @@ func main() { fmt.Println("source file cannot be empty") return } + filename := *src - cmd := fmt.Sprintf("cat %s | flamegraph.pl > flamegraph.svg", *src) - err := exec.Command("bash", "-c", cmd).Run() + ext := filepath.Ext(filename) + + var err error + switch ext { + case ".json": + err = jsonDraw(filename) + default: + err = defaultDraw(filename) + } if err != nil { fmt.Println(err) } } + +func defaultDraw(filename string) (err error) { + cmd := fmt.Sprintf("cat %s | flamegraph.pl > flamegraph.svg", filename) + err = exec.Command("bash", "-c", cmd).Run() + return +} + +func jsonDraw(filename string) (err error) { + buf, err := os.ReadFile(filename) + if err != nil { + return + } + lines := []string{} + err = json.Unmarshal(buf, &lines) + if err != nil { + return + } + + text := strings.Join(lines, "\n") + err = os.WriteFile("tmp.log", []byte(text), os.ModePerm) + if err != nil { + return + } + defer os.Remove("tmp.log") + + err = defaultDraw("tmp.log") + + return +}