observer/example/main.go

98 lines
1.7 KiB
Go
Raw Normal View History

2024-04-26 13:09:54 +00:00
package main
import (
2024-04-30 10:41:05 +00:00
"context"
2024-04-26 13:09:54 +00:00
"fmt"
"log"
2024-04-30 12:23:57 +00:00
"maal/observer/pkg/level"
"maal/observer/pkg/tracer"
2024-04-26 13:09:54 +00:00
"os"
"os/signal"
"time"
"github.com/gofiber/fiber/v2"
"go.opentelemetry.io/otel/trace"
)
2024-04-30 10:41:05 +00:00
type AttributesX struct {
}
2024-04-26 13:09:54 +00:00
func main() {
main := fiber.New(fiber.Config{
StreamRequestBody: true,
})
main.Use(tracer.NewTracer(tracer.Config{
AppName: "test",
JaegerUrl: "http://localhost:4318/v1/traces",
2024-04-30 10:41:05 +00:00
GelfUrl: "192.168.220.30:12201",
2024-04-26 13:09:54 +00:00
Version: "1",
}))
defer tracer.ShutdownTracer()
main.Get("/", func(c *fiber.Ctx) error {
2024-04-30 10:41:05 +00:00
ctx, span := tracer.Handler(c)
2024-04-26 13:09:54 +00:00
defer span.End()
2024-04-30 10:41:05 +00:00
span.AddEvent(
"smthing is happening",
trace.WithAttributes(
tracer.LongMessage("smthing is happening - long"),
tracer.JsonAttr("smth", map[string]interface{}{
"xd": 1,
}),
tracer.Level(level.ALERT),
),
)
2024-04-26 13:09:54 +00:00
2024-04-30 10:41:05 +00:00
err := Serv(ctx)
if err != nil {
return tracer.RecordError(span, err)
}
2024-04-26 13:09:54 +00:00
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...")
}
2024-04-30 10:41:05 +00:00
func Serv(ctx context.Context) *fiber.Error {
ctx, span := tracer.Service(ctx, "serv", "name of the 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, "serv", "name of the span")
defer span.End()
for range []int{1, 2, 3} {
time.Sleep(time.Millisecond * 100)
}
return nil
}