Remove TestApplicationStartInfo, add a DefaultApplicationStartInfo (#2595)
Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
This commit is contained in:
parent
006d7b5988
commit
2f38767f72
|
|
@ -0,0 +1,41 @@
|
|||
// Copyright The OpenTelemetry Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package component
|
||||
|
||||
// ApplicationStartInfo is the information that is logged at the application start and
|
||||
// passed into each component. This information can be overridden in custom builds.
|
||||
type ApplicationStartInfo struct {
|
||||
// Executable file name, e.g. "otelcol".
|
||||
ExeName string
|
||||
|
||||
// Long name, used e.g. in the logs.
|
||||
LongName string
|
||||
|
||||
// Version string.
|
||||
Version string
|
||||
|
||||
// Git hash of the source code.
|
||||
GitHash string
|
||||
}
|
||||
|
||||
// DefaultApplicationStartInfo returns the default ApplicationStartInfo.
|
||||
func DefaultApplicationStartInfo() ApplicationStartInfo {
|
||||
return ApplicationStartInfo{
|
||||
ExeName: "otelcol",
|
||||
LongName: "OpenTelemetry Collector",
|
||||
Version: "latest",
|
||||
GitHash: "<NOT PROPERLY GENERATED>",
|
||||
}
|
||||
}
|
||||
|
|
@ -119,19 +119,3 @@ type ConfigUnmarshaler interface {
|
|||
// intoCfg interface{}
|
||||
// An empty interface wrapping a pointer to the config struct to unmarshal into.
|
||||
type CustomUnmarshaler func(componentViperSection *viper.Viper, intoCfg interface{}) error
|
||||
|
||||
// ApplicationStartInfo is the information that is logged at the application start and
|
||||
// passed into each component. This information can be overridden in custom builds.
|
||||
type ApplicationStartInfo struct {
|
||||
// Executable file name, e.g. "otelcol".
|
||||
ExeName string
|
||||
|
||||
// Long name, used e.g. in the logs.
|
||||
LongName string
|
||||
|
||||
// Version string.
|
||||
Version string
|
||||
|
||||
// Git hash of the source code.
|
||||
GitHash string
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
// Copyright The OpenTelemetry Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package componenttest
|
||||
|
||||
import (
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/internal/version"
|
||||
)
|
||||
|
||||
func TestApplicationStartInfo() component.ApplicationStartInfo {
|
||||
return component.ApplicationStartInfo{
|
||||
ExeName: "otelcol",
|
||||
LongName: "InProcess Collector",
|
||||
Version: version.Version,
|
||||
GitHash: version.GitHash,
|
||||
}
|
||||
}
|
||||
|
|
@ -61,7 +61,7 @@ func TestExportersBuilder_Build(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
exporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
exporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
|
||||
assert.NoError(t, err)
|
||||
require.NotNil(t, exporters)
|
||||
|
|
@ -90,7 +90,7 @@ func TestExportersBuilder_Build(t *testing.T) {
|
|||
// This should result in creating an exporter that has none of consumption
|
||||
// functions set.
|
||||
delete(cfg.Service.Pipelines, "trace")
|
||||
exporters, err = NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
exporters, err = NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NotNil(t, exporters)
|
||||
assert.NoError(t, err)
|
||||
|
||||
|
|
@ -131,7 +131,7 @@ func TestExportersBuilder_BuildLogs(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
exporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
exporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
|
||||
assert.NoError(t, err)
|
||||
require.NotNil(t, exporters)
|
||||
|
|
@ -156,7 +156,7 @@ func TestExportersBuilder_BuildLogs(t *testing.T) {
|
|||
// This should result in creating an exporter that has none of consumption
|
||||
// functions set.
|
||||
delete(cfg.Service.Pipelines, "logs")
|
||||
exporters, err = NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
exporters, err = NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NotNil(t, exporters)
|
||||
assert.Nil(t, err)
|
||||
|
||||
|
|
@ -260,7 +260,7 @@ func TestExportersBuilder_ErrorOnNilExporter(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
exporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, fm).Build()
|
||||
exporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, fm).Build()
|
||||
assert.Error(t, err)
|
||||
assert.Zero(t, len(exporters))
|
||||
})
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ func TestPipelinesBuilder_BuildVarious(t *testing.T) {
|
|||
cfg := createExampleConfig(dataType)
|
||||
|
||||
// BuildProcessors the pipeline
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
if test.shouldFail {
|
||||
assert.Error(t, err)
|
||||
return
|
||||
|
|
@ -141,7 +141,7 @@ func TestPipelinesBuilder_BuildVarious(t *testing.T) {
|
|||
|
||||
require.NoError(t, err)
|
||||
require.EqualValues(t, 1, len(allExporters))
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
|
||||
assert.NoError(t, err)
|
||||
require.NotNil(t, pipelineProcessors)
|
||||
|
|
@ -205,9 +205,9 @@ func testPipeline(t *testing.T, pipelineName string, exporterNames []string) {
|
|||
require.Nil(t, err)
|
||||
|
||||
// BuildProcessors the pipeline
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NoError(t, err)
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
|
||||
assert.NoError(t, err)
|
||||
require.NotNil(t, pipelineProcessors)
|
||||
|
|
@ -266,7 +266,7 @@ func TestProcessorsBuilder_ErrorOnUnsupportedProcessor(t *testing.T) {
|
|||
cfg, err := configtest.LoadConfigFile(t, "testdata/bad_processor_factory.yaml", factories)
|
||||
require.Nil(t, err)
|
||||
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// First test only trace receivers by removing the metrics pipeline.
|
||||
|
|
@ -276,7 +276,7 @@ func TestProcessorsBuilder_ErrorOnUnsupportedProcessor(t *testing.T) {
|
|||
delete(cfg.Service.Pipelines, "logs")
|
||||
require.Equal(t, 1, len(cfg.Service.Pipelines))
|
||||
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.Error(t, err)
|
||||
assert.Zero(t, len(pipelineProcessors))
|
||||
|
||||
|
|
@ -285,7 +285,7 @@ func TestProcessorsBuilder_ErrorOnUnsupportedProcessor(t *testing.T) {
|
|||
cfg.Service.Pipelines["metrics"] = metricsPipeline
|
||||
require.Equal(t, 1, len(cfg.Service.Pipelines))
|
||||
|
||||
pipelineProcessors, err = NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err = NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.Error(t, err)
|
||||
assert.Zero(t, len(pipelineProcessors))
|
||||
|
||||
|
|
@ -294,7 +294,7 @@ func TestProcessorsBuilder_ErrorOnUnsupportedProcessor(t *testing.T) {
|
|||
cfg.Service.Pipelines["logs"] = logsPipeline
|
||||
require.Equal(t, 1, len(cfg.Service.Pipelines))
|
||||
|
||||
pipelineProcessors, err = NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err = NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.Error(t, err)
|
||||
assert.Zero(t, len(pipelineProcessors))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -99,11 +99,11 @@ func testReceivers(
|
|||
require.Nil(t, err)
|
||||
|
||||
// Build the pipeline
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NoError(t, err)
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.NoError(t, err)
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
|
||||
assert.NoError(t, err)
|
||||
require.NotNil(t, receivers)
|
||||
|
|
@ -199,16 +199,16 @@ func TestReceiversBuilder_BuildCustom(t *testing.T) {
|
|||
cfg := createExampleConfig(dataType)
|
||||
|
||||
// Build the pipeline
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
if test.shouldFail {
|
||||
assert.Error(t, err)
|
||||
return
|
||||
}
|
||||
|
||||
assert.NoError(t, err)
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.NoError(t, err)
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
|
||||
assert.NoError(t, err)
|
||||
require.NotNil(t, receivers)
|
||||
|
|
@ -271,11 +271,11 @@ func TestReceiversBuilder_DataTypeError(t *testing.T) {
|
|||
receiver.(*componenttest.ExampleReceiver).FailTraceCreation = true
|
||||
|
||||
// Build the pipeline
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NoError(t, err)
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.NoError(t, err)
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
|
||||
// This should fail because "examplereceiver" is attached to "traces" pipeline
|
||||
// which is a configuration error.
|
||||
|
|
@ -331,9 +331,9 @@ func TestReceiversBuilder_ErrorOnNilReceiver(t *testing.T) {
|
|||
require.Nil(t, err)
|
||||
|
||||
// Build the pipeline
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NoError(t, err)
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// First test only trace receivers by removing the metrics pipeline.
|
||||
|
|
@ -343,7 +343,7 @@ func TestReceiversBuilder_ErrorOnNilReceiver(t *testing.T) {
|
|||
delete(cfg.Service.Pipelines, "logs")
|
||||
require.Equal(t, 1, len(cfg.Service.Pipelines))
|
||||
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
assert.Error(t, err)
|
||||
assert.Zero(t, len(receivers))
|
||||
|
||||
|
|
@ -352,7 +352,7 @@ func TestReceiversBuilder_ErrorOnNilReceiver(t *testing.T) {
|
|||
cfg.Service.Pipelines["metrics"] = metricsPipeline
|
||||
require.Equal(t, 1, len(cfg.Service.Pipelines))
|
||||
|
||||
receivers, err = NewReceiversBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
receivers, err = NewReceiversBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
assert.Error(t, err)
|
||||
assert.Zero(t, len(receivers))
|
||||
|
||||
|
|
@ -361,7 +361,7 @@ func TestReceiversBuilder_ErrorOnNilReceiver(t *testing.T) {
|
|||
cfg.Service.Pipelines["logs"] = logsPipeline
|
||||
require.Equal(t, 1, len(cfg.Service.Pipelines))
|
||||
|
||||
receivers, err = NewReceiversBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
receivers, err = NewReceiversBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
assert.Error(t, err)
|
||||
assert.Zero(t, len(receivers))
|
||||
}
|
||||
|
|
@ -374,11 +374,11 @@ func TestReceiversBuilder_Unused(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
|
||||
// Build the pipeline
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
allExporters, err := NewExportersBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, factories.Exporters).Build()
|
||||
assert.NoError(t, err)
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
pipelineProcessors, err := NewPipelinesBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, allExporters, factories.Processors).Build()
|
||||
assert.NoError(t, err)
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), componenttest.TestApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
receivers, err := NewReceiversBuilder(zap.NewNop(), component.DefaultApplicationStartInfo(), cfg, pipelineProcessors, factories.Receivers).Build()
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, receivers)
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ func TestApplication_Start(t *testing.T) {
|
|||
return nil
|
||||
}
|
||||
|
||||
app, err := New(Parameters{Factories: factories, ApplicationStartInfo: componenttest.TestApplicationStartInfo(), LoggingOptions: []zap.Option{zap.Hooks(hook)}})
|
||||
app, err := New(Parameters{Factories: factories, ApplicationStartInfo: component.DefaultApplicationStartInfo(), LoggingOptions: []zap.Option{zap.Hooks(hook)}})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, app.rootCmd, app.Command())
|
||||
|
||||
|
|
@ -119,7 +119,7 @@ func TestApplication_ReportError(t *testing.T) {
|
|||
factories, err := defaultcomponents.Components()
|
||||
require.NoError(t, err)
|
||||
|
||||
app, err := New(Parameters{Factories: factories, ApplicationStartInfo: componenttest.TestApplicationStartInfo()})
|
||||
app, err := New(Parameters{Factories: factories, ApplicationStartInfo: component.DefaultApplicationStartInfo()})
|
||||
require.NoError(t, err)
|
||||
|
||||
app.rootCmd.SetArgs([]string{"--config=testdata/otelcol-config-minimal.yaml"})
|
||||
|
|
@ -143,7 +143,7 @@ func TestApplication_StartAsGoRoutine(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
|
||||
params := Parameters{
|
||||
ApplicationStartInfo: componenttest.TestApplicationStartInfo(),
|
||||
ApplicationStartInfo: component.DefaultApplicationStartInfo(),
|
||||
ConfigFactory: func(_ *viper.Viper, _ *cobra.Command, factories component.Factories) (*configmodels.Config, error) {
|
||||
return constructMimumalOpConfig(t, factories), nil
|
||||
},
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/sys/windows/svc"
|
||||
|
||||
"go.opentelemetry.io/collector/component/componenttest"
|
||||
"go.opentelemetry.io/collector/component"
|
||||
"go.opentelemetry.io/collector/service/defaultcomponents"
|
||||
)
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ func TestWindowsService_Execute(t *testing.T) {
|
|||
factories, err := defaultcomponents.Components()
|
||||
require.NoError(t, err)
|
||||
|
||||
s := NewWindowsService(Parameters{Factories: factories, ApplicationStartInfo: componenttest.TestApplicationStartInfo()})
|
||||
s := NewWindowsService(Parameters{Factories: factories, ApplicationStartInfo: component.DefaultApplicationStartInfo()})
|
||||
|
||||
appDone := make(chan struct{})
|
||||
requests := make(chan svc.ChangeRequest)
|
||||
|
|
|
|||
Loading…
Reference in New Issue