// ForwarderLoader1 is a more strictly typed version of ForwarderLoader func ForwarderLoader1(ctx context.Context, forwardTo *config.ForwardTo) (protocol.Forwarder, *Forwarder, error) { proxyVersion, ok := ctx.Value("version").(string) if !ok || proxyVersion == "" { proxyVersion = "UNKNOWN_VERSION" } if forwardTo.FormatVersion == nil { forwardTo.FormatVersion = workarounds.GolangDoesnotAllowPointerToUintLiteral(3) } if *forwardTo.FormatVersion == 1 { log.WithField("forwardTo", forwardTo).Warn("Old formats not supported in signalfxforwarder. Using newer format. Please update config to use format version 2 or 3") } structdefaults.FillDefaultFrom(forwardTo, defaultConfigV2) log.WithField("forwardTo", forwardTo).Info("Creating signalfx forwarder using final config") fwd := NewSignalfxJSONForwarder(*forwardTo.URL, *forwardTo.TimeoutDuration, *forwardTo.DefaultAuthToken, *forwardTo.DrainingThreads, *forwardTo.DefaultSource, *forwardTo.SourceDimensions, proxyVersion) fwd.eventURL = *forwardTo.EventURL counter := &dpsink.Counter{} dims := protocol.ForwarderDims(*forwardTo.Name, "sfx_protobuf_v2") buffer := dpbuffered.NewBufferedForwarder(ctx, *(&dpbuffered.Config{}).FromConfig(forwardTo), fwd) return &protocol.CompositeForwarder{ Sink: dpsink.FromChain(buffer, dpsink.NextWrap(counter)), Keeper: stats.ToKeeperMany(dims, counter, buffer), Closer: protocol.CompositeCloser(protocol.OkCloser(buffer.Close)), }, fwd, nil }
func TestForwarderLoaderOldVersion(t *testing.T) { forwardTo := config.ForwardTo{ FormatVersion: workarounds.GolangDoesnotAllowPointerToUintLiteral(1), DefaultAuthToken: workarounds.GolangDoesnotAllowPointerToStringLiteral("AUTH_TOKEN"), } ctx := context.Background() _, err := ForwarderLoader(ctx, &forwardTo) assert.NoError(t, err) }
func TestForwarderLoaderDefaults(t *testing.T) { forwardTo := config.ForwardTo{ FormatVersion: workarounds.GolangDoesnotAllowPointerToUintLiteral(2), DefaultAuthToken: workarounds.GolangDoesnotAllowPointerToStringLiteral("AUTH_TOKEN"), } ctx := context.Background() forwarder, err := ForwarderLoader(ctx, &forwardTo) assert.Nil(t, err) defer forwarder.Close() }
userAgent string defaultSource string dimensionSources []string emptyMetricNameFilter dpsink.EmptyMetricFilter protoMarshal func(pb proto.Message) ([]byte, error) jsonMarshal func(v interface{}) ([]byte, error) } var defaultConfigV2 = &config.ForwardTo{ URL: workarounds.GolangDoesnotAllowPointerToStringLiteral("https://ingest.signalfx.com/v2/datapoint"), EventURL: workarounds.GolangDoesnotAllowPointerToStringLiteral("https://api.signalfx.com/v1/event"), DefaultSource: workarounds.GolangDoesnotAllowPointerToStringLiteral(""), MetricCreationURL: workarounds.GolangDoesnotAllowPointerToStringLiteral(""), // Not used TimeoutDuration: workarounds.GolangDoesnotAllowPointerToTimeLiteral(time.Second * 60), BufferSize: workarounds.GolangDoesnotAllowPointerToUintLiteral(uint32(1000000)), DrainingThreads: workarounds.GolangDoesnotAllowPointerToUintLiteral(uint32(10)), Name: workarounds.GolangDoesnotAllowPointerToStringLiteral("signalfx-forwarder"), MaxDrainSize: workarounds.GolangDoesnotAllowPointerToUintLiteral(uint32(3000)), SourceDimensions: workarounds.GolangDoesnotAllowPointerToStringLiteral(""), FormatVersion: workarounds.GolangDoesnotAllowPointerToUintLiteral(uint32(3)), } // ForwarderLoader loads a json forwarder forwarding points from proxy to SignalFx func ForwarderLoader(ctx context.Context, forwardTo *config.ForwardTo) (protocol.Forwarder, error) { f, _, err := ForwarderLoader1(ctx, forwardTo) return f, err } // ForwarderLoader1 is a more strictly typed version of ForwarderLoader func ForwarderLoader1(ctx context.Context, forwardTo *config.ForwardTo) (protocol.Forwarder, *Forwarder, error) {
ret := &Forwarder{ dimensionComparor: dpdimsort.NewOrdering(dimensionOrder), connectionTimeout: timeout, connectionAddress: connectionAddress, dialer: net.DialTimeout, pool: connPool{ conns: make([]net.Conn, 0, drainingThreads), }, } ret.pool.Return(conn) return ret, nil } var defaultForwarderConfig = &config.ForwardTo{ TimeoutDuration: workarounds.GolangDoesnotAllowPointerToTimeLiteral(time.Second * 30), BufferSize: workarounds.GolangDoesnotAllowPointerToUintLiteral(uint32(10000)), Port: workarounds.GolangDoesnotAllowPointerToUint16Literal(2003), DrainingThreads: workarounds.GolangDoesnotAllowPointerToUintLiteral(uint32(5)), Name: workarounds.GolangDoesnotAllowPointerToStringLiteral("carbonforwarder"), MaxDrainSize: workarounds.GolangDoesnotAllowPointerToUintLiteral(uint32(1000)), DimensionsOrder: []string{}, } var errRequiredHost = errors.New("carbon forwarder requires host config") // ForwarderLoader loads a carbon forwarder that is buffered func ForwarderLoader(ctx context.Context, forwardTo *config.ForwardTo) (protocol.Forwarder, error) { structdefaults.FillDefaultFrom(forwardTo, defaultForwarderConfig) if forwardTo.Host == nil { return nil, errRequiredHost }