go-srvc / mods / tracemod

github.com/go-srvc/mods/tracemod

pkg.go.dev source
go get github.com/go-srvc/mods/tracemod@v1.0.2

README

tracemod

tracemod exports spans to the otel endpoint and flushes buffers before the application exits. Once installed, any otel tracer in the process feeds into the same exporter.

package main

import (
	"fmt"
	"net/http"
	"os"

	"github.com/go-srvc/mods/httpmod"
	"github.com/go-srvc/mods/sigmod"
	"github.com/go-srvc/mods/tracemod"
	"github.com/go-srvc/srvc"
	"go.opentelemetry.io/otel"
)

func main() {
	srvc.RunAndExit(
		tracemod.New(),
		sigmod.New(os.Interrupt),
		httpmod.New(
			httpmod.WithAddr(":8080"),
			httpmod.WithHandler(http.HandlerFunc(hello)),
		),
	)
}

func hello(w http.ResponseWriter, r *http.Request) {
	_, span := otel.Tracer("hello").Start(r.Context(), "greet")
	defer span.End()
	fmt.Fprint(w, "hello, world")
}

Overview

Package tracemod provides OpenTelemetry trace provider as a module.

Constants

const (
	ErrMissingProvider = errStr("trace provider not set")
	ErrFlushFailed     = errStr("failed to flush remaining spans")
)
const ID = "tracemod"

Types

type Opt

type Opt func(*Provider) error

type Provider

type Provider struct {
	// contains filtered or unexported fields
}

func (*Provider) ID

func (p *Provider) ID() string

func (*Provider) Init

func (p *Provider) Init() error

func (*Provider) Run

func (p *Provider) Run() error

func (*Provider) Stop

func (p *Provider) Stop() error

Examples

ExampleNew

package main

import (
	"github.com/go-srvc/mods/tracemod"
	"github.com/go-srvc/srvc"
)

func main() {
	srvc.RunAndExit(
		tracemod.New(),
	)
}