/usr/share/gocode/src/github.com/kimor79/gollectd/examples/server.go is in golang-github-kimor79-gollectd-dev 1.0.0-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | package main
import (
"fmt"
"log"
"net"
collectd "github.com/kimor79/gollectd"
)
// Listen for collectd network packets, parse , and send them over a channel
func Listen(addr string, c chan collectd.Packet, typesdb string) {
laddr, err := net.ResolveUDPAddr("udp", addr)
if err != nil {
log.Fatalln("fatal: failed to resolve address", err)
}
conn, err := net.ListenUDP("udp", laddr)
if err != nil {
log.Fatalln("fatal: failed to listen", err)
}
types, err := collectd.TypesDBFile(typesdb)
if err != nil {
log.Fatalln("fatal: failed to parse types.db", err)
}
for {
// 1452 is collectd 5's default buffer size. See:
// https://collectd.org/wiki/index.php/Binary_protocol
buf := make([]byte, 1452)
n, err := conn.Read(buf[:])
if err != nil {
log.Println("error: Failed to receive packet", err)
continue
}
packets, err := collectd.Packets(buf[0:n], types)
if err != nil {
log.Println("error: Failed to receive packet", err)
continue
}
for _, p := range *packets {
c <- p
}
}
}
func main() {
c := make(chan collectd.Packet)
go Listen("127.0.0.1:25826", c, "/usr/share/collectd/types.db")
for {
packet := <-c
fmt.Printf("%+v\n", packet)
}
}
|