init
This commit is contained in:
59
cmd/latencysummary/main.go
Normal file
59
cmd/latencysummary/main.go
Normal file
@@ -0,0 +1,59 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"log"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"omnisocketgo/cmd/internal/latencylog"
|
||||
)
|
||||
|
||||
type stringListFlag []string
|
||||
|
||||
func (f *stringListFlag) String() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (f *stringListFlag) Set(value string) error {
|
||||
*f = append(*f, value)
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
var inputPaths stringListFlag
|
||||
outputPath := flag.String("output", "latency-summary.jsonl", "output JSONL file for summarized latency metrics")
|
||||
flag.Var(&inputPaths, "input", "raw latency JSONL file path; can be provided multiple times")
|
||||
flag.Parse()
|
||||
|
||||
if len(inputPaths) == 0 {
|
||||
log.Fatal("at least one -input raw latency log file is required")
|
||||
}
|
||||
|
||||
events, err := latencylog.LoadEventsFromFiles(inputPaths)
|
||||
if err != nil {
|
||||
log.Fatalf("load raw latency logs: %v", err)
|
||||
}
|
||||
|
||||
summaries := latencylog.SummarizeEvents(events)
|
||||
if err := latencylog.WriteSummariesJSONL(*outputPath, summaries); err != nil {
|
||||
log.Fatalf("write latency summary: %v", err)
|
||||
}
|
||||
|
||||
chartPath := replaceFileExt(*outputPath, ".html")
|
||||
if err := latencylog.WriteSummariesHTMLChart(chartPath, summaries); err != nil {
|
||||
log.Fatalf("write latency chart: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("wrote %d summarized message records to %s", len(summaries), *outputPath)
|
||||
log.Printf("wrote simple latency chart to %s", chartPath)
|
||||
}
|
||||
|
||||
func replaceFileExt(path, ext string) string {
|
||||
currentExt := filepath.Ext(path)
|
||||
if currentExt == "" {
|
||||
return path + ext
|
||||
}
|
||||
|
||||
return strings.TrimSuffix(path, currentExt) + ext
|
||||
}
|
||||
Reference in New Issue
Block a user