Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
William Perron | aea9ae7ce4 | 10 months ago |
@ -1,3 +0,0 @@
|
|||||||
# Otelq
|
|
||||||
|
|
||||||
Like `jq` or `yq`, but for OpenTelemetry data.
|
|
@ -1,48 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
tracev1 "go.opentelemetry.io/proto/otlp/trace/v1"
|
|
||||||
"google.golang.org/protobuf/encoding/protojson"
|
|
||||||
"google.golang.org/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
file = flag.String("file", "", "OpenTelemetry proto file. if set, will not use stdin.")
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
if *file != "" {
|
|
||||||
fmt.Fprintf(os.Stderr, "reading file %s\n", *file)
|
|
||||||
h := must(os.Open(*file))
|
|
||||||
bs := must(io.ReadAll(h))
|
|
||||||
|
|
||||||
var td tracev1.TracesData
|
|
||||||
if err := proto.Unmarshal(bs, &td); err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
jsonbs, err := protojson.Marshal(&td)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Fprint(os.Stdout, string(jsonbs))
|
|
||||||
} else {
|
|
||||||
fmt.Println("using stdin")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func must[T any](v T, err error) T {
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalln(err)
|
|
||||||
}
|
|
||||||
return v
|
|
||||||
}
|
|
@ -0,0 +1,59 @@
|
|||||||
|
package gziputil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/binary"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Gzip struct {
|
||||||
|
magic []byte
|
||||||
|
cm byte
|
||||||
|
flg byte
|
||||||
|
mtime uint32
|
||||||
|
xfl byte
|
||||||
|
os byte
|
||||||
|
xlen uint16
|
||||||
|
xflds []byte
|
||||||
|
crc32 uint32
|
||||||
|
isize uint32
|
||||||
|
|
||||||
|
rest []byte
|
||||||
|
trailer []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func explainGzip(bs []byte) Gzip {
|
||||||
|
g := Gzip{
|
||||||
|
magic: bs[0:2],
|
||||||
|
cm: bs[2],
|
||||||
|
flg: bs[3],
|
||||||
|
mtime: binary.BigEndian.Uint32(bs[4:8]),
|
||||||
|
xfl: bs[8],
|
||||||
|
os: bs[9],
|
||||||
|
}
|
||||||
|
|
||||||
|
offset := 10
|
||||||
|
if g.xfl&2 == 1 {
|
||||||
|
g.xlen = binary.BigEndian.Uint16(bs[offset : offset+2])
|
||||||
|
offset += 2
|
||||||
|
|
||||||
|
g.xflds = bs[offset : offset+int(g.xlen)]
|
||||||
|
offset += int(g.xlen)
|
||||||
|
}
|
||||||
|
|
||||||
|
g.crc32 = binary.BigEndian.Uint32(bs[offset : offset+4])
|
||||||
|
offset += 4
|
||||||
|
|
||||||
|
g.isize = binary.BigEndian.Uint32(bs[offset : offset+4])
|
||||||
|
offset += 4
|
||||||
|
|
||||||
|
g.rest = bs[offset : len(bs)-8]
|
||||||
|
offset = len(bs) - 8
|
||||||
|
|
||||||
|
g.trailer = bs[offset:]
|
||||||
|
|
||||||
|
return g
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g Gzip) String() string {
|
||||||
|
return fmt.Sprintf("magic=%04x cm=%02x flg=%02x mtime=%d xfl=%02x os=%02x xlen=%d crc32=%d isize=%d rest=%x trailer=%08x", g.magic, g.cm, g.flg, g.mtime, g.xfl, g.os, g.xlen, g.crc32, g.isize, g.rest, g.trailer)
|
||||||
|
}
|
Loading…
Reference in new issue