Documentation
¶
Overview ¶
Package sender provides a client that sends Influx line protocol metrics to a TCP endpoint. The client provides options for batching metrics by size and/or timeout.
A simple implementation of protocol.Metric is also provided to ensure this package is ready-to-use with no Influx specific implementation needed.
Example ¶
The following would send a metric immediately to the telegraf socket_listener input plugin listening on port 8094:
client, err := sender.NewClient(context.Background(), sender.Config{Endpoint: "telegraf:8094"})
metric := sender.NewSimpleMetric("metric_name")
metric.AddTag("tag", "t1")
metric.AddField("intField", 1)
metric.AddField("floatField", 3.14)
client.Send(metric)
Example (Sending) ¶
package main
import (
"bytes"
"context"
"fmt"
sender "github.com/itzg/line-protocol-sender"
"io"
"log"
"net"
"time"
)
type ExampleEndpoint struct {
listener net.Listener
}
func NewExampleEndpoint() *ExampleEndpoint {
listener, err := net.Listen("tcp", "127.0.0.1:")
if err != nil {
log.Fatal(err)
}
e := &ExampleEndpoint{listener: listener}
go e.listen()
return e
}
func (e *ExampleEndpoint) Addr() string {
return e.listener.Addr().String()
}
func (e *ExampleEndpoint) listen() {
conn, err := e.listener.Accept()
if err != nil {
log.Fatal(err)
}
var buffer bytes.Buffer
_, err = io.Copy(&buffer, conn)
if err != nil {
log.Fatal(err)
}
conn.Close()
fmt.Print(buffer.String())
}
func main() {
endpoint := NewExampleEndpoint()
client, _ := sender.NewClient(context.Background(), sender.Config{Endpoint: endpoint.Addr()})
metric := sender.NewSimpleMetric("metric_name")
metric.SetTime(time.Unix(3, 1))
metric.AddTag("tag", "t1")
metric.AddField("intField", 1)
metric.AddField("floatField", 3.14)
client.Send(metric)
// allow time for listener to receive line
time.Sleep(10 * time.Millisecond)
}
Output: metric_name,tag=t1 intField=1i,floatField=3.14 3000000001
Index ¶
- Constants
- type Client
- type Config
- type ErrorListener
- type SimpleMetric
- func (m *SimpleMetric) AddField(key string, value interface{})
- func (m *SimpleMetric) AddTag(key, value string)
- func (m *SimpleMetric) FieldList() []*protocol.Field
- func (m *SimpleMetric) Name() string
- func (m *SimpleMetric) SetTime(t time.Time)
- func (m *SimpleMetric) TagList() []*protocol.Tag
- func (m *SimpleMetric) Time() time.Time
Examples ¶
Constants ¶
View Source
const MetricsChanSize = 100
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
Endpoint string
BatchSize int
BatchTimeout time.Duration
ErrorListener
}
type ErrorListener ¶
type ErrorListener func(err error)
type SimpleMetric ¶
type SimpleMetric struct {
// contains filtered or unexported fields
}
func NewSimpleMetric ¶
func NewSimpleMetric(name string) *SimpleMetric
func (*SimpleMetric) AddField ¶
func (m *SimpleMetric) AddField(key string, value interface{})
func (*SimpleMetric) AddTag ¶
func (m *SimpleMetric) AddTag(key, value string)
func (*SimpleMetric) FieldList ¶
func (m *SimpleMetric) FieldList() []*protocol.Field
func (*SimpleMetric) Name ¶
func (m *SimpleMetric) Name() string
func (*SimpleMetric) SetTime ¶
func (m *SimpleMetric) SetTime(t time.Time)
func (*SimpleMetric) TagList ¶
func (m *SimpleMetric) TagList() []*protocol.Tag
func (*SimpleMetric) Time ¶
func (m *SimpleMetric) Time() time.Time
Click to show internal directories.
Click to hide internal directories.