Skip to content

Commit 9dcee2c

Browse files
committed
tracegen: add capability to marshal spans to file
Signed-off-by: Samriddha9619 <sumitkumartripathi0@gmail.com>
1 parent b7f13fa commit 9dcee2c

2 files changed

Lines changed: 30 additions & 8 deletions

File tree

cmd/tracegen/main.go

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"errors"
99
"flag"
1010
"fmt"
11+
"os"
1112
"time"
1213

1314
"github.com/go-logr/zapr"
@@ -71,13 +72,23 @@ func createTracers(cfg *tracegen.Config, logger *zap.Logger) ([]trace.Tracer, fu
7172
}
7273
var shutdown []func(context.Context) error
7374
var tracers []trace.Tracer
75+
76+
var file *os.File
77+
if cfg.MarshalToFile != "" {
78+
var err error
79+
file, err = os.Create(cfg.MarshalToFile)
80+
if err != nil {
81+
logger.Sugar().Fatalf("cannot create output file %s: %s", cfg.MarshalToFile, err)
82+
}
83+
}
84+
7485
for s := 0; s < cfg.Services; s++ {
7586
svc := cfg.Service
7687
if cfg.Services > 1 {
7788
svc = fmt.Sprintf("%s-%02d", svc, s)
7889
}
7990

80-
exp, err := createOtelExporter(cfg.TraceExporter)
91+
exp, err := createOtelExporter(cfg.TraceExporter, file)
8192
if err != nil {
8293
logger.Sugar().Fatalf("cannot create trace exporter %s: %s", cfg.TraceExporter, err)
8394
}
@@ -113,6 +124,12 @@ func createTracers(cfg *tracegen.Config, logger *zap.Logger) ([]trace.Tracer, fu
113124
tracers = append(tracers, tp.Tracer(cfg.Service))
114125
shutdown = append(shutdown, tp.Shutdown)
115126
}
127+
if file != nil {
128+
shutdown = append(shutdown, func(_ context.Context) error {
129+
return file.Close()
130+
})
131+
}
132+
116133
return tracers, func(ctx context.Context) error {
117134
var errs []error
118135
for _, f := range shutdown {
@@ -122,21 +139,24 @@ func createTracers(cfg *tracegen.Config, logger *zap.Logger) ([]trace.Tracer, fu
122139
}
123140
}
124141

125-
func createOtelExporter(exporterType string) (sdktrace.SpanExporter, error) {
142+
func createOtelExporter(exporterType string, fileWriter *os.File) (sdktrace.SpanExporter, error) {
143+
if fileWriter != nil {
144+
return stdouttrace.New(
145+
stdouttrace.WithWriter(fileWriter),
146+
stdouttrace.WithPrettyPrint(),
147+
)
148+
}
149+
126150
var exporter sdktrace.SpanExporter
127151
var err error
128152
switch exporterType {
129153
case "jaeger":
130154
return nil, errors.New("jaeger exporter is no longer supported, please use otlp")
131155
case "otlp", "otlp-http":
132-
client := otlptracehttp.NewClient(
133-
otlptracehttp.WithInsecure(),
134-
)
156+
client := otlptracehttp.NewClient(otlptracehttp.WithInsecure())
135157
exporter, err = otlptrace.New(context.Background(), client)
136158
case "otlp-grpc":
137-
client := otlptracegrpc.NewClient(
138-
otlptracegrpc.WithInsecure(),
139-
)
159+
client := otlptracegrpc.NewClient(otlptracegrpc.WithInsecure())
140160
exporter, err = otlptrace.New(context.Background(), client)
141161
case "stdout":
142162
exporter, err = stdouttrace.New()

internal/tracegen/config.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type Config struct {
3030
Duration time.Duration
3131
Service string
3232
TraceExporter string
33+
MarshalToFile string
3334
}
3435

3536
// Flags registers config flags.
@@ -47,6 +48,7 @@ func (c *Config) Flags(fs *flag.FlagSet) {
4748
fs.StringVar(&c.Service, "service", "tracegen", "Service name prefix to use")
4849
fs.IntVar(&c.Services, "services", 1, "Number of unique suffixes to add to service name when generating traces, e.g. tracegen-01 (but only one service per trace)")
4950
fs.StringVar(&c.TraceExporter, "trace-exporter", "otlp-http", "Trace exporter (otlp/otlp-http|otlp-grpc|stdout). Exporters can be additionally configured via environment variables, see https://github.com/jaegertracing/jaeger/blob/main/cmd/tracegen/README.md")
51+
fs.StringVar(&c.MarshalToFile, "marshal-to-file", "", "Filename to write generated spans to (in JSON format) instead of sending to a collector")
5052
}
5153

5254
// Run executes the test scenario.

0 commit comments

Comments
 (0)