package main import ( "context" "fmt" "log" "os" "os/signal" "time" "git.ma-al.com/gora_filip/observer/pkg/tracer" "git.ma-al.com/gora_filip/pkg/attr" "git.ma-al.com/gora_filip/pkg/combined_exporter" "git.ma-al.com/gora_filip/pkg/console_exporter" "git.ma-al.com/gora_filip/pkg/fiber_tracing" "git.ma-al.com/gora_filip/pkg/level" "github.com/gofiber/fiber/v2" ) type AttributesX struct { } func main() { main := fiber.New(fiber.Config{ StreamRequestBody: true, }) lvl := level.DEBUG exporter := combined_exporter.NewExporter( console_exporter.NewExporter( console_exporter.ExporterOptions{ FilterOnLevel: &lvl, //EmitOnlyOnError: true, }, )) main.Use(fiber_tracing.NewMiddleware(fiber_tracing.Config{ AppName: "example", Version: "0.0.0", ServiceProvider: "maal", Exporter: exporter, })) defer fiber_tracing.ShutdownTracer() main.Get("/", func(c *fiber.Ctx) error { ctx, span := tracer.Handler(c) defer span.End() span.AddEvent( "smthing is happening", attr.WithAttributes(attr.SeverityLevel(level.INFO), attr.SourceCodeLocation(1)), ) err := Serv(ctx) if err != nil { return tracer.RecordError(span, err) } return c.SendString("xd") }) // handle interrupts (shutdown) c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt) go func() { oscall := <-c log.Printf("system call: %+v", oscall) main.Shutdown() }() if err := main.Listen(fmt.Sprintf(":%d", 3344)); err != nil { log.Panic(err) } fmt.Println("Shutting down...") } func Serv(ctx context.Context) *fiber.Error { ctx, span := tracer.Service(ctx, "service", "service span") defer span.End() for range []int{1, 2, 3} { time.Sleep(time.Millisecond * 100) } err := Repo(ctx) if err != nil { return fiber.NewError(500, "xd") } return fiber.NewError(500, "x") } func Repo(ctx context.Context) error { ctx, span := tracer.Repository(ctx, "repo", "repo span") defer span.End() for range []int{1, 2, 3} { time.Sleep(time.Millisecond * 100) } return nil }