Closed
Description
Component(s)
receiver/wavefront
Is your feature request related to a problem? Please describe.
wavefrontreceiver
references carbonreceiver
export function carbonreceiver.New(...), but when i use checkapi tool(go run cmd/checkapi/main.go .
), found error as shown below:
2023/09/28 01:03:33 receiver/carbonreceiver has more than one function: "New,NewFactory" exit status 1
That seems function carbonreceiver.New()
should not export.
We can make some adjustments to fix this error, refer to packages purefareceiver
, purefbreceiver
or simpleprometheusreceiver
, we can add metricsReceiver
struct, add Start
and Shutdown
methods, go do something similar, because similar implementation
Describe the solution you'd like
- Add
receiver.go
inreceiver/wavefrontreceiver
directory, definemetricsReceiver
struct, wrap metrics receiver withcarbonreceiver
package wavefrontreceiver
type metricsReceiver struct {
cfg *Config
set receiver.CreateSettings
nextConsumer consumer.Metrics
carbonReceiver receiver.Metrics
}
func newMetricsReceiver(cfg *Config, set receiver.CreateSettings, nextConsumer consumer.Metrics) *metricsReceiver {
return &metricsReceiver{
cfg: cfg,
set: set,
nextConsumer: nextConsumer,
}
}
func (r *metricsReceiver) Start(ctx context.Context, host component.Host) error {
fact := carbonreceiver.NewFactory()
// Wavefront is very similar to Carbon: it is TCP based in which each received
// text line represents a single metric data point. They differ on the format
// of their textual representation.
//
// The Wavefront receiver leverages the Carbon receiver code by implementing
// a dedicated parser for its format.
carbonCfg := &carbonreceiver.Config{
...
}
carbonReceiver, err := fact.CreateMetricsReceiver(ctx, r.set, carbonCfg, r.nextConsumer)
if err != nil {
return err
}
r.carbonReceiver = carbonReceiver
if err := r.carbonReceiver.Start(ctx, host); err != nil {
return err
}
return nil
}
func (r *metricsReceiver) Shutdown(ctx context.Context) error {
if r.carbonReceiver != nil {
return r.carbonReceiver.Shutdown(ctx)
}
return nil
}
- chore
factory.go
with unexport functionnewMetricsReceiver
:
func createMetricsReceiver(
_ context.Context,
params receiver.CreateSettings,
cfg component.Config,
consumer consumer.Metrics,
) (receiver.Metrics, error) {
rCfg, ok := cfg.(*Config)
if !ok {
return nil, fmt.Errorf("a wavefront receiver config was expected by the receiver factory, but got %T", rCfg)
}
return newMetricsReceiver(rCfg, params, consumer), nil
}
Describe alternatives you've considered
No response
Additional context
No response