mirror of
https://github.com/hanzoai/traces.git
synced 2026-11-03 04:05:45 +00:00
1e795f1146
Bumps the opentelemetry-collector group with 12 updates in the / directory: | Package | From | To | | --- | --- | --- | | [go.opentelemetry.io/collector/component](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/confmap](https://github.com/open-telemetry/opentelemetry-collector) | `1.22.0` | `1.24.0` | | [go.opentelemetry.io/collector/consumer](https://github.com/open-telemetry/opentelemetry-collector) | `1.22.0` | `1.24.0` | | [go.opentelemetry.io/collector/client](https://github.com/open-telemetry/opentelemetry-collector) | `1.22.0` | `1.24.0` | | [go.opentelemetry.io/collector/component/componenttest](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/config/configgrpc](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/config/confighttp](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/exporter](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/exporter/otlpexporter](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/exporter/otlphttpexporter](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/otelcol](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | | [go.opentelemetry.io/collector/receiver/otlpreceiver](https://github.com/open-telemetry/opentelemetry-collector) | `0.116.0` | `0.118.0` | Updates `go.opentelemetry.io/collector/component` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/confmap` from 1.22.0 to 1.24.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.22.0...pdata/v1.24.0) Updates `go.opentelemetry.io/collector/consumer` from 1.22.0 to 1.24.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.22.0...pdata/v1.24.0) Updates `go.opentelemetry.io/collector/pdata` from 1.22.0 to 1.24.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.22.0...pdata/v1.24.0) Updates `go.opentelemetry.io/collector/client` from 1.22.0 to 1.24.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.22.0...pdata/v1.24.0) Updates `go.opentelemetry.io/collector/component/componenttest` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/config/configgrpc` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/config/confighttp` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/config/configtls` from 1.22.0 to 1.24.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/pdata/v1.22.0...pdata/v1.24.0) Updates `go.opentelemetry.io/collector/exporter` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/exporter/exportertest` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/exporter/otlpexporter` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/exporter/otlphttpexporter` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/extension` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/otelcol` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/pdata/testdata` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/processor` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/receiver` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) Updates `go.opentelemetry.io/collector/receiver/otlpreceiver` from 0.116.0 to 0.118.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector/compare/v0.116.0...v0.118.0) --- updated-dependencies: - dependency-name: go.opentelemetry.io/collector/component dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/confmap dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/consumer dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/pdata dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/client dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/component/componenttest dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/config/configgrpc dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/config/confighttp dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/config/configtls dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/exporter dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/exporter/exportertest dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/exporter/otlpexporter dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/exporter/otlphttpexporter dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/extension dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/otelcol dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/pdata/testdata dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/processor dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/receiver dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector - dependency-name: go.opentelemetry.io/collector/receiver/otlpreceiver dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-collector ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
166 lines
5.4 KiB
Go
166 lines
5.4 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package status // import "go.opentelemetry.io/collector/service/internal/status"
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"sync"
|
|
|
|
"go.opentelemetry.io/collector/component/componentstatus"
|
|
)
|
|
|
|
// onTransitionFunc receives a componentstatus.Event on a successful state transition
|
|
type onTransitionFunc func(*componentstatus.Event)
|
|
|
|
// errInvalidStateTransition is returned for invalid state transitions
|
|
var errInvalidStateTransition = errors.New("invalid state transition")
|
|
|
|
// fsm is a finite state machine that models transitions for component status
|
|
type fsm struct {
|
|
current *componentstatus.Event
|
|
transitions map[componentstatus.Status]map[componentstatus.Status]struct{}
|
|
onTransition onTransitionFunc
|
|
}
|
|
|
|
// transition will attempt to execute a state transition. If it's successful, it calls the
|
|
// onTransitionFunc with a Event representing the new state. Returns an error if the arguments
|
|
// result in an invalid status, or if the state transition is not valid.
|
|
func (m *fsm) transition(ev *componentstatus.Event) error {
|
|
if _, ok := m.transitions[m.current.Status()][ev.Status()]; !ok {
|
|
return fmt.Errorf(
|
|
"cannot transition from %s to %s: %w",
|
|
m.current.Status(),
|
|
ev.Status(),
|
|
errInvalidStateTransition,
|
|
)
|
|
}
|
|
m.current = ev
|
|
m.onTransition(ev)
|
|
return nil
|
|
}
|
|
|
|
// newFSM creates a state machine with all valid transitions for componentstatus.Status.
|
|
// The initial state is set to componentstatus.StatusNone.
|
|
func newFSM(onTransition onTransitionFunc) *fsm {
|
|
return &fsm{
|
|
current: componentstatus.NewEvent(componentstatus.StatusNone),
|
|
onTransition: onTransition,
|
|
transitions: map[componentstatus.Status]map[componentstatus.Status]struct{}{
|
|
componentstatus.StatusNone: {
|
|
componentstatus.StatusStarting: {},
|
|
},
|
|
componentstatus.StatusStarting: {
|
|
componentstatus.StatusOK: {},
|
|
componentstatus.StatusRecoverableError: {},
|
|
componentstatus.StatusPermanentError: {},
|
|
componentstatus.StatusFatalError: {},
|
|
componentstatus.StatusStopping: {},
|
|
},
|
|
componentstatus.StatusOK: {
|
|
componentstatus.StatusRecoverableError: {},
|
|
componentstatus.StatusPermanentError: {},
|
|
componentstatus.StatusFatalError: {},
|
|
componentstatus.StatusStopping: {},
|
|
},
|
|
componentstatus.StatusRecoverableError: {
|
|
componentstatus.StatusOK: {},
|
|
componentstatus.StatusPermanentError: {},
|
|
componentstatus.StatusFatalError: {},
|
|
componentstatus.StatusStopping: {},
|
|
},
|
|
componentstatus.StatusPermanentError: {
|
|
componentstatus.StatusStopping: {},
|
|
},
|
|
componentstatus.StatusFatalError: {},
|
|
componentstatus.StatusStopping: {
|
|
componentstatus.StatusRecoverableError: {},
|
|
componentstatus.StatusPermanentError: {},
|
|
componentstatus.StatusFatalError: {},
|
|
componentstatus.StatusStopped: {},
|
|
},
|
|
componentstatus.StatusStopped: {},
|
|
},
|
|
}
|
|
}
|
|
|
|
// NotifyStatusFunc is the receiver of status events after successful state transitions
|
|
type NotifyStatusFunc func(*componentstatus.InstanceID, *componentstatus.Event)
|
|
|
|
// InvalidTransitionFunc is the receiver of invalid transition errors
|
|
type InvalidTransitionFunc func(error)
|
|
|
|
// ServiceStatusFunc is the expected type of ReportStatus
|
|
type ServiceStatusFunc func(*componentstatus.InstanceID, *componentstatus.Event)
|
|
|
|
// ErrStatusNotReady is returned when trying to report status before service start
|
|
var ErrStatusNotReady = errors.New("report component status is not ready until service start")
|
|
|
|
// Reporter handles component status reporting
|
|
type Reporter interface {
|
|
ReportStatus(id *componentstatus.InstanceID, ev *componentstatus.Event)
|
|
ReportOKIfStarting(id *componentstatus.InstanceID)
|
|
}
|
|
|
|
type reporter struct {
|
|
mu sync.Mutex
|
|
fsmMap map[*componentstatus.InstanceID]*fsm
|
|
onStatusChange NotifyStatusFunc
|
|
onInvalidTransition InvalidTransitionFunc
|
|
}
|
|
|
|
// NewReporter returns a reporter that will invoke the NotifyStatusFunc when a component's status
|
|
// has changed.
|
|
func NewReporter(onStatusChange NotifyStatusFunc, onInvalidTransition InvalidTransitionFunc) Reporter {
|
|
return &reporter{
|
|
fsmMap: make(map[*componentstatus.InstanceID]*fsm),
|
|
onStatusChange: onStatusChange,
|
|
onInvalidTransition: onInvalidTransition,
|
|
}
|
|
}
|
|
|
|
// ReportStatus reports status for the given InstanceID
|
|
func (r *reporter) ReportStatus(
|
|
id *componentstatus.InstanceID,
|
|
ev *componentstatus.Event,
|
|
) {
|
|
r.mu.Lock()
|
|
defer r.mu.Unlock()
|
|
|
|
if err := r.componentFSM(id).transition(ev); err != nil {
|
|
r.onInvalidTransition(err)
|
|
}
|
|
}
|
|
|
|
func (r *reporter) ReportOKIfStarting(id *componentstatus.InstanceID) {
|
|
r.mu.Lock()
|
|
defer r.mu.Unlock()
|
|
fsm := r.componentFSM(id)
|
|
if fsm.current.Status() == componentstatus.StatusStarting {
|
|
if err := fsm.transition(componentstatus.NewEvent(componentstatus.StatusOK)); err != nil {
|
|
r.onInvalidTransition(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Note: a lock must be acquired before calling this method.
|
|
func (r *reporter) componentFSM(id *componentstatus.InstanceID) *fsm {
|
|
fsm, ok := r.fsmMap[id]
|
|
if !ok {
|
|
fsm = newFSM(func(ev *componentstatus.Event) { r.onStatusChange(id, ev) })
|
|
r.fsmMap[id] = fsm
|
|
}
|
|
return fsm
|
|
}
|
|
|
|
// NewReportStatusFunc returns a function to be used as ReportStatus for componentstatus.TelemetrySettings
|
|
func NewReportStatusFunc(
|
|
id *componentstatus.InstanceID,
|
|
srvStatus ServiceStatusFunc,
|
|
) func(*componentstatus.Event) {
|
|
return func(ev *componentstatus.Event) {
|
|
srvStatus(id, ev)
|
|
}
|
|
}
|