mirror of
https://github.com/hanzoai/tasks.git
synced 2026-11-03 03:56:04 +00:00
Full module path rebrand from Temporal to Hanzo Tasks: - go.mod module: github.com/hanzoai/tasks - All internal Go imports updated (1906 files) - cmd/server renamed to cmd/tasksd - Binary name: tasksd (was temporal-server) - Docker images: hanzoai/tasks (was temporalio/server) - README rewritten with Hanzo Tasks branding - LLM.md created with integration notes - Makefile, goreleaser, CI workflows updated - go.temporal.io/sdk and go.temporal.io/api imports preserved (separate repos) Fork of Temporal.io (MIT license).
73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package testtelemetry
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net"
|
|
"sync"
|
|
"testing"
|
|
|
|
ctrace "go.opentelemetry.io/proto/otlp/collector/trace/v1"
|
|
trace "go.opentelemetry.io/proto/otlp/trace/v1"
|
|
"github.com/hanzoai/tasks/common/testing/freeport"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
var _ ctrace.TraceServiceServer = (*MemoryCollector)(nil)
|
|
|
|
// MemoryCollector is a gRPC-based OTEL collector that collects spans in memory.
|
|
type MemoryCollector struct {
|
|
ctrace.UnimplementedTraceServiceServer
|
|
addr string
|
|
spansLock sync.RWMutex
|
|
spans []*trace.ResourceSpans
|
|
}
|
|
|
|
func StartMemoryCollector(tb testing.TB) (*MemoryCollector, error) {
|
|
grpcServer := grpc.NewServer()
|
|
l := &MemoryCollector{
|
|
addr: fmt.Sprintf("localhost:%d", freeport.MustGetFreePort()),
|
|
}
|
|
ctrace.RegisterTraceServiceServer(grpcServer, l)
|
|
|
|
listener, err := net.Listen("tcp", l.addr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
go func() {
|
|
if err := grpcServer.Serve(listener); err != nil {
|
|
tb.Errorf("OTEL logger failed to start: %v", err)
|
|
}
|
|
}()
|
|
|
|
go func() {
|
|
<-tb.Context().Done()
|
|
grpcServer.Stop()
|
|
}()
|
|
|
|
return l, nil
|
|
}
|
|
|
|
func (l *MemoryCollector) Addr() string {
|
|
return "http://" + l.addr
|
|
}
|
|
|
|
func (l *MemoryCollector) Spans() []*trace.ResourceSpans {
|
|
l.spansLock.RLock()
|
|
defer l.spansLock.RUnlock()
|
|
|
|
return l.spans
|
|
}
|
|
|
|
func (l *MemoryCollector) Export(
|
|
ctx context.Context,
|
|
request *ctrace.ExportTraceServiceRequest,
|
|
) (*ctrace.ExportTraceServiceResponse, error) {
|
|
l.spansLock.Lock()
|
|
defer l.spansLock.Unlock()
|
|
|
|
l.spans = append(l.spans, request.ResourceSpans...)
|
|
return &ctrace.ExportTraceServiceResponse{}, nil
|
|
}
|