mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-07-25 10:21:47 +00:00
94 lines
2.0 KiB
Go
94 lines
2.0 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
)
|
|
|
|
func runTracesList(opts traceListOptions) error {
|
|
if err := validateTraceOutputFormat(); err != nil {
|
|
return err
|
|
}
|
|
resp, err := gatewayHTTPGetTyped[traceListResponse](buildTraceListPath(opts))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return printTraceList(resp)
|
|
}
|
|
|
|
func runTracesGet(traceID string) error {
|
|
if err := validateTraceOutputFormat(); err != nil {
|
|
return err
|
|
}
|
|
resp, err := gatewayHTTPGetTyped[traceDetailResponse](traceDetailPath(traceID))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return printTraceDetail(resp)
|
|
}
|
|
|
|
func runTracesExport(traceID, filePath string) error {
|
|
if err := validateTraceOutputFormat(); err != nil {
|
|
return err
|
|
}
|
|
raw, status, err := gatewayHTTPDoRawWithLimit(http.MethodGet, traceExportPath(traceID), nil, traceExportResponseLimit)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if status >= 400 {
|
|
return parseHTTPError(raw, status)
|
|
}
|
|
if outputFormatIsJSON() {
|
|
return printGzipJSON(raw)
|
|
}
|
|
if filePath == "-" {
|
|
_, err = os.Stdout.Write(raw)
|
|
return err
|
|
}
|
|
if filePath == "" {
|
|
filePath = defaultTraceExportPath(traceID)
|
|
}
|
|
if err := os.WriteFile(filePath, raw, 0o600); err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Exported trace to %s\n", filePath)
|
|
return nil
|
|
}
|
|
|
|
func runTracesFollow(opts traceFollowOptions) error {
|
|
if err := validateTraceOutputFormat(); err != nil {
|
|
return err
|
|
}
|
|
path, err := buildTraceFollowPath(opts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
resp, err := gatewayHTTPGetTyped[traceFollowResponse](path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return printTraceFollow(resp)
|
|
}
|
|
|
|
func runTracesTimeline(traceID string, opts traceTimelineOptions) error {
|
|
if err := validateTraceOutputFormat(); err != nil {
|
|
return err
|
|
}
|
|
detail, err := gatewayHTTPGetTyped[traceDetailResponse](traceDetailPath(traceID))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
runID, err := traceRunIDFromDetail(detail)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
resp, err := gatewayHTTPGetTyped[traceTimelineResponse](
|
|
buildTraceTimelinePath(runID, detail.Trace.SessionKey, opts),
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return printTraceTimeline(resp)
|
|
}
|