Files
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1e795f1146 Bump the opentelemetry-collector group across 1 directory with 19 updates (#4602)
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>
2025-01-23 15:07:21 -06:00

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)
}
}