opentelemetry-collector/service/host.go

75 lines
2.7 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package service // import "go.opentelemetry.io/collector/service"
import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/extension"
"go.opentelemetry.io/collector/processor"
"go.opentelemetry.io/collector/receiver"
"go.opentelemetry.io/collector/service/extensions"
"go.opentelemetry.io/collector/service/internal/graph"
)
// TODO: remove as part of https://github.com/open-telemetry/opentelemetry-collector/issues/7370 for service 1.0
type getExporters interface {
GetExporters() map[component.DataType]map[component.ID]component.Component
}
var _ getExporters = (*serviceHost)(nil)
var _ component.Host = (*serviceHost)(nil)
type serviceHost struct {
asyncErrorChannel chan error
receivers *receiver.Builder
processors *processor.Builder
exporters *exporter.Builder
connectors *connector.Builder
extensions *extension.Builder
buildInfo component.BuildInfo
pipelines *graph.Graph
serviceExtensions *extensions.Extensions
}
func (host *serviceHost) GetFactory(kind component.Kind, componentType component.Type) component.Factory {
switch kind {
case component.KindReceiver:
return host.receivers.Factory(componentType)
case component.KindProcessor:
return host.processors.Factory(componentType)
case component.KindExporter:
return host.exporters.Factory(componentType)
case component.KindConnector:
return host.connectors.Factory(componentType)
case component.KindExtension:
return host.extensions.Factory(componentType)
}
return nil
}
func (host *serviceHost) GetExtensions() map[component.ID]component.Component {
return host.serviceExtensions.GetExtensions()
}
// Deprecated: [0.79.0] This function will be removed in the future.
// Several components in the contrib repository use this function so it cannot be removed
// before those cases are removed. In most cases, use of this function can be replaced by a
// connector. See https://github.com/open-telemetry/opentelemetry-collector/issues/7370 and
// https://github.com/open-telemetry/opentelemetry-collector/pull/7390#issuecomment-1483710184
// for additional information.
func (host *serviceHost) GetExporters() map[component.DataType]map[component.ID]component.Component {
return host.pipelines.GetExporters()
}
func (host *serviceHost) notifyComponentStatusChange(source *component.InstanceID, event *component.StatusEvent) {
host.serviceExtensions.NotifyComponentStatusChange(source, event)
if event.Status() == component.StatusFatalError {
host.asyncErrorChannel <- event.Err()
}
}