Skip to content

Commit

Permalink
Add a no-op WavefrontSender implementation (#65)
Browse files Browse the repository at this point in the history
* Add a no-op WavefrontSender implementation
* Added unit tests for noop_sender
Co-authored-by: mssrinivas <>
  • Loading branch information
mssrinivas authored Jun 23, 2021
1 parent 6f7ebd6 commit f0f4078
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 0 deletions.
56 changes: 56 additions & 0 deletions senders/client_noop.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package senders

import (
"github.com/wavefronthq/wavefront-sdk-go/event"
"github.com/wavefronthq/wavefront-sdk-go/histogram"
)

type wavefrontNoOpSender struct {
}

var (
defaultNoopClient Sender = &wavefrontNoOpSender{}
)

// NewWavefrontNoOpClient returns a Wavefront Client instance for which all operations are no-ops.
func NewWavefrontNoOpClient() (Sender, error) {
return defaultNoopClient, nil
}

func (sender *wavefrontNoOpSender) Start() {
// no-op
}

func (sender *wavefrontNoOpSender) SendMetric(name string, value float64, ts int64, source string, tags map[string]string) error {
return nil
}

func (sender *wavefrontNoOpSender) SendDeltaCounter(name string, value float64, source string, tags map[string]string) error {
return nil
}

func (sender *wavefrontNoOpSender) SendDistribution(name string, centroids []histogram.Centroid,
hgs map[histogram.Granularity]bool, ts int64, source string, tags map[string]string) error {
return nil
}

func (sender *wavefrontNoOpSender) SendSpan(name string, startMillis, durationMillis int64, source, traceId, spanId string,
parents, followsFrom []string, tags []SpanTag, spanLogs []SpanLog) error {
return nil
}

func (sender *wavefrontNoOpSender) SendEvent(name string, startMillis, endMillis int64, source string, tags map[string]string, setters ...event.Option) error {
return nil
}

func (sender *wavefrontNoOpSender) Close() {
// no-op
}

func (sender *wavefrontNoOpSender) Flush() error {
return nil
}

func (sender *wavefrontNoOpSender) GetFailureCount() int64 {
return 0
}
59 changes: 59 additions & 0 deletions senders/client_noop_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package senders_test

import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/wavefronthq/wavefront-sdk-go/histogram"
"github.com/wavefronthq/wavefront-sdk-go/senders"
)

func TestNoOpSender(t *testing.T) {
wf, err := senders.NewSender("http://DUMMY_TOKEN@localhost:8080")
assert.Nil(t, err)
if wf == nil {
t.Error("Failed Initialize NewSender", err)
}

if err := wf.SendMetric("new-york.power.usage", 42422.0, 0, "go_test", map[string]string{"env": "test"}); err != nil {
t.Error("Failed SendMetric", err)
}

centroids := []histogram.Centroid{
{Value: 30.0, Count: 20},
{Value: 5.1, Count: 10},
}

hgs := map[histogram.Granularity]bool{
histogram.MINUTE: true,
histogram.HOUR: true,
histogram.DAY: true,
}

if err := wf.SendDistribution("request.latency", centroids, hgs, 0, "appServer1", map[string]string{"region": "us-west"}); err != nil {
t.Error("Failed SendDistribution", err)
}

if err := wf.SendDeltaCounter("invocation.count", 0, "appServer2", map[string]string{"region": "us-west"}); err != nil {
t.Error("Failed SendDeltaCounter", err)
}

if err := wf.SendSpan("getAllUsers", 0, 343500, "localhost",
"7b3bf470-9456-11e8-9eb6-529269fb1459", "0313bafe-9457-11e8-9eb6-529269fb1459",
[]string{"2f64e538-9457-11e8-9eb6-529269fb1459"}, nil,
[]senders.SpanTag{
{Key: "application", Value: "Wavefront"},
{Key: "http.method", Value: "GET"},
},
nil); err != nil {
t.Error("Failed SendSpan", err)
}

if err := wf.SendEvent("updateAllUsers", 0, 37484, "localhost", map[string]string{"region": "us-west"}); err != nil {
t.Error("Failed SendEvent", err)
}

wf.Flush()
wf.Close()
assert.Equal(t, int64(0), wf.GetFailureCount(), "GetFailureCount")
}

0 comments on commit f0f4078

Please sign in to comment.