graphql

package
v0.6.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 28, 2026 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package graphql exposes otelop's in-memory telemetry store to callers via a GraphQL schema. It is the integration surface for AI-driven investigation — field selection lets callers take exactly the data they want (and nothing more), and the Trace.logs field implements the standard trace↔log correlation join in one round-trip.

graph-gophers/graphql-go matches GraphQL field names to Go method names case-insensitively (ignoring underscores), so idiomatic Go identifiers like TraceID/SpanID resolve the `traceId`/`spanId` schema fields directly — no rename is needed on the Go side when the schema uses camelCase with a lowercase "d".

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func MustNewSchema

func MustNewSchema(s *store.Store, runtime RuntimeInfo) *gql.Schema

MustNewSchema parses the embedded schema and binds it to a resolver backed by the given store. It panics on schema errors so misconfigurations fail at startup, not at query time.

func Source

func Source() string

Source returns the raw GraphQL schema document. Useful for tests and for surfacing the schema to clients that cannot rely on introspection.

Types

type ConfigResolver

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

ConfigResolver holds a snapshot of capacity and live counts. Values are captured once at resolve time so the fields don't re-lock the store on every field access.

func (*ConfigResolver) LogCap

func (c *ConfigResolver) LogCap() int32

func (*ConfigResolver) LogCount

func (c *ConfigResolver) LogCount() int32

func (*ConfigResolver) MaxDataPoints

func (c *ConfigResolver) MaxDataPoints() int32

func (*ConfigResolver) MetricCap

func (c *ConfigResolver) MetricCap() int32

func (*ConfigResolver) MetricCount

func (c *ConfigResolver) MetricCount() int32

func (*ConfigResolver) TraceCap

func (c *ConfigResolver) TraceCap() int32

func (*ConfigResolver) TraceCount

func (c *ConfigResolver) TraceCount() int32

type ConnectionResolver added in v0.6.0

type ConnectionResolver[T any] struct {
	// contains filtered or unexported fields
}

ConnectionResolver is the generic paginated-list response shared by traces/metrics/logs. Instantiated per element type via newConnection.

func (*ConnectionResolver[T]) Items added in v0.6.0

func (c *ConnectionResolver[T]) Items() []T

func (*ConnectionResolver[T]) Limit added in v0.6.0

func (c *ConnectionResolver[T]) Limit() int32

func (*ConnectionResolver[T]) Offset added in v0.6.0

func (c *ConnectionResolver[T]) Offset() int32

func (*ConnectionResolver[T]) Total added in v0.6.0

func (c *ConnectionResolver[T]) Total() int32

type DataPointResolver

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

func (*DataPointResolver) Attributes

func (r *DataPointResolver) Attributes() JSONMap

func (*DataPointResolver) Count added in v0.3.0

func (r *DataPointResolver) Count() *float64

func (*DataPointResolver) Max added in v0.3.0

func (r *DataPointResolver) Max() *float64

func (*DataPointResolver) Min added in v0.3.0

func (r *DataPointResolver) Min() *float64

func (*DataPointResolver) Sum added in v0.3.0

func (r *DataPointResolver) Sum() *float64

func (*DataPointResolver) Timestamp

func (r *DataPointResolver) Timestamp() gql.Time

func (*DataPointResolver) Value

func (r *DataPointResolver) Value() float64

type JSONMap

type JSONMap map[string]any

JSONMap is the Go representation of the schema's `JSON` scalar. It carries arbitrary key/value data — used for span/log attributes and resource maps — and relies on encoding/json to marshal the underlying map as-is.

func (JSONMap) ImplementsGraphQLType

func (JSONMap) ImplementsGraphQLType(name string) bool

ImplementsGraphQLType satisfies the graph-gophers/graphql-go custom-scalar contract by claiming the `JSON` scalar name.

func (*JSONMap) UnmarshalGraphQL

func (j *JSONMap) UnmarshalGraphQL(input any) error

UnmarshalGraphQL accepts JSON object literals passed as variables.

type LogResolver

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

func (*LogResolver) Attributes

func (r *LogResolver) Attributes() JSONMap

func (*LogResolver) Body

func (r *LogResolver) Body() string

func (*LogResolver) ObservedTimestamp

func (r *LogResolver) ObservedTimestamp() gql.Time

func (*LogResolver) Resource

func (r *LogResolver) Resource() JSONMap

func (*LogResolver) ServiceName

func (r *LogResolver) ServiceName() string

func (*LogResolver) SeverityNumber

func (r *LogResolver) SeverityNumber() int32

func (*LogResolver) SeverityText

func (r *LogResolver) SeverityText() string

func (*LogResolver) Span

func (r *LogResolver) Span() *SpanResolver

func (*LogResolver) SpanID

func (r *LogResolver) SpanID() string

func (*LogResolver) Timestamp

func (r *LogResolver) Timestamp() gql.Time

func (*LogResolver) Trace

func (r *LogResolver) Trace() *TraceResolver

func (*LogResolver) TraceID

func (r *LogResolver) TraceID() string

type LogsArgs

type LogsArgs struct {
	Limit   int32
	Offset  int32
	TraceID *string
}

type MetricResolver

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

func (*MetricResolver) DataPoints

func (r *MetricResolver) DataPoints() []*DataPointResolver

func (*MetricResolver) Description

func (r *MetricResolver) Description() string

func (*MetricResolver) Name

func (r *MetricResolver) Name() string

func (*MetricResolver) PointCount

func (r *MetricResolver) PointCount() int32

func (*MetricResolver) ReceivedAt

func (r *MetricResolver) ReceivedAt() gql.Time

func (*MetricResolver) Resource

func (r *MetricResolver) Resource() JSONMap

func (*MetricResolver) ServiceName

func (r *MetricResolver) ServiceName() string

func (*MetricResolver) Type

func (r *MetricResolver) Type() string

func (*MetricResolver) Unit

func (r *MetricResolver) Unit() string

type MetricsArgs

type MetricsArgs struct {
	Limit  int32
	Offset int32
}

type Resolver

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

Resolver is the root resolver for the GraphQL schema. It holds the store reference shared with every sub-resolver so nested fields (e.g. Trace.logs) can reach back for correlated data without threading extra state through.

func (*Resolver) ClearSignals

func (r *Resolver) ClearSignals() bool

func (*Resolver) Config

func (r *Resolver) Config() *ConfigResolver

func (*Resolver) Logs

func (*Resolver) Metrics

func (*Resolver) Status added in v0.4.0

func (r *Resolver) Status() *StatusResolver

func (*Resolver) Trace

func (r *Resolver) Trace(args TraceArgs) *TraceResolver

func (*Resolver) Traces

type RuntimeInfo added in v0.4.0

type RuntimeInfo struct {
	Version       string
	StartedAt     time.Time
	HTTPAddr      string
	OTLPGRPCAddr  string
	OTLPHTTPAddr  string
	ProxyURL      string
	ProxyProtocol string
	Debug         bool
}

RuntimeInfo is captured once at startup and passed to the resolver so the `status` query can report process-level state without reaching into package globals.

type SpanEventResolver

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

func (*SpanEventResolver) Attributes

func (r *SpanEventResolver) Attributes() JSONMap

func (*SpanEventResolver) Name

func (r *SpanEventResolver) Name() string

func (*SpanEventResolver) Timestamp

func (r *SpanEventResolver) Timestamp() gql.Time

type SpanResolver

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

SpanResolver carries a back-pointer to the owning TraceData so span.trace and span.parent resolve without re-querying the store.

func (*SpanResolver) Attributes

func (r *SpanResolver) Attributes() JSONMap

func (*SpanResolver) DurationMs

func (r *SpanResolver) DurationMs() float64

func (*SpanResolver) EndTime

func (r *SpanResolver) EndTime() gql.Time

func (*SpanResolver) Events

func (r *SpanResolver) Events() []*SpanEventResolver

func (*SpanResolver) Kind

func (r *SpanResolver) Kind() string

func (*SpanResolver) Name

func (r *SpanResolver) Name() string

func (*SpanResolver) Parent

func (r *SpanResolver) Parent() *SpanResolver

Parent is the edge to the parent span within the same trace. Returns nil for root spans (ParentSpanID empty) or when the parent has not been buffered under the same trace.

func (*SpanResolver) ParentSpanID

func (r *SpanResolver) ParentSpanID() string

func (*SpanResolver) Resource

func (r *SpanResolver) Resource() JSONMap

func (*SpanResolver) ServiceName

func (r *SpanResolver) ServiceName() string

func (*SpanResolver) SpanID

func (r *SpanResolver) SpanID() gql.ID

func (*SpanResolver) StartTime

func (r *SpanResolver) StartTime() gql.Time

func (*SpanResolver) StatusCode

func (r *SpanResolver) StatusCode() string

func (*SpanResolver) StatusMessage

func (r *SpanResolver) StatusMessage() string

func (*SpanResolver) Trace

func (r *SpanResolver) Trace() *TraceResolver

Trace is the edge back to the owning trace — always present because spans are only ever returned via a Trace in the schema.

func (*SpanResolver) TraceID

func (r *SpanResolver) TraceID() gql.ID

type StatusResolver added in v0.4.0

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

func (*StatusResolver) Config added in v0.4.0

func (s *StatusResolver) Config() *ConfigResolver

func (*StatusResolver) Debug added in v0.4.0

func (s *StatusResolver) Debug() bool

func (*StatusResolver) HTTPAddr added in v0.4.0

func (s *StatusResolver) HTTPAddr() string

func (*StatusResolver) OTLPGrpcAddr added in v0.4.0

func (s *StatusResolver) OTLPGrpcAddr() string

func (*StatusResolver) OTLPHTTPAddr added in v0.4.0

func (s *StatusResolver) OTLPHTTPAddr() string

func (*StatusResolver) ProxyProtocol added in v0.5.0

func (s *StatusResolver) ProxyProtocol() string

func (*StatusResolver) ProxyURL added in v0.5.0

func (s *StatusResolver) ProxyURL() string

func (*StatusResolver) StartedAt added in v0.4.0

func (s *StatusResolver) StartedAt() gql.Time

func (*StatusResolver) UptimeMs added in v0.4.0

func (s *StatusResolver) UptimeMs() float64

func (*StatusResolver) Version added in v0.4.0

func (s *StatusResolver) Version() string

type TraceArgs

type TraceArgs struct {
	TraceID gql.ID
}

type TraceResolver

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

TraceResolver carries a store handle so Trace.logs can issue the correlation query without plumbing extra state through.

func (*TraceResolver) DurationMs

func (r *TraceResolver) DurationMs() float64

func (*TraceResolver) HasError

func (r *TraceResolver) HasError() bool

func (*TraceResolver) Logs

func (r *TraceResolver) Logs() []*LogResolver

func (*TraceResolver) RootSpan

func (r *TraceResolver) RootSpan() *SpanResolver

func (*TraceResolver) ServiceName

func (r *TraceResolver) ServiceName() string

func (*TraceResolver) SpanCount

func (r *TraceResolver) SpanCount() int32

func (*TraceResolver) Spans

func (r *TraceResolver) Spans() []*SpanResolver

func (*TraceResolver) StartTime

func (r *TraceResolver) StartTime() gql.Time

func (*TraceResolver) TraceID

func (r *TraceResolver) TraceID() gql.ID

type TracesArgs

type TracesArgs struct {
	Limit  int32
	Offset int32
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL