1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
package exec // import "collectd.org/exec"
import (
"context"
"os"
"testing"
"time"
"collectd.org/api"
)
func TestSanitizeInterval(t *testing.T) {
var got, want time.Duration
got = sanitizeInterval(10 * time.Second)
want = 10 * time.Second
if got != want {
t.Errorf("got %v, want %v", got, want)
}
// Environment with seconds
if err := os.Setenv("COLLECTD_INTERVAL", "42"); err != nil {
t.Fatalf("os.Setenv: %v", err)
}
got = sanitizeInterval(0)
want = 42 * time.Second
if got != want {
t.Errorf("got %v, want %v", got, want)
}
// Environment with milliseconds
if err := os.Setenv("COLLECTD_INTERVAL", "31.337"); err != nil {
t.Fatalf("os.Setenv: %v", err)
}
got = sanitizeInterval(0)
want = 31337 * time.Millisecond
if got != want {
t.Errorf("got %v, want %v", got, want)
}
}
func Example() {
e := NewExecutor()
// simple "value" callback
answer := func() api.Value {
return api.Gauge(42)
}
e.ValueCallback(answer, &api.ValueList{
Identifier: api.Identifier{
Host: "example.com",
Plugin: "golang",
Type: "answer",
TypeInstance: "live_universe_and_everything",
},
Interval: time.Second,
})
// "complex" void callback
bicycles := func(ctx context.Context, interval time.Duration) {
vl := &api.ValueList{
Identifier: api.Identifier{
Host: "example.com",
Plugin: "golang",
Type: "bicycles",
},
Interval: interval,
Time: time.Now(),
Values: make([]api.Value, 1),
}
data := []struct {
TypeInstance string
Value api.Gauge
}{
{"beijing", api.Gauge(9000000)},
}
for _, d := range data {
vl.Values[0] = d.Value
vl.Identifier.TypeInstance = d.TypeInstance
Putval.Write(ctx, vl)
}
}
e.VoidCallback(bicycles, time.Second)
// blocks forever
e.Run(context.Background())
}
|