ipld-eth-server/vendor/github.com/aristanetworks/goarista/cmd/octsdb/telnet.go

66 lines
1.2 KiB
Go
Raw Normal View History

// Copyright (c) 2016 Arista Networks, Inc.
// Use of this source code is governed by the Apache License 2.0
// that can be found in the COPYING file.
package main
import (
"bytes"
"net"
"github.com/aristanetworks/glog"
)
type telnetClient struct {
addr string
conn net.Conn
}
func newTelnetClient(addr string) OpenTSDBConn {
return &telnetClient{
addr: addr,
}
}
func readErrors(conn net.Conn) {
var buf [4096]byte
for {
// TODO: We should add a buffer to read line-by-line properly instead
// of using a fixed-size buffer and splitting on newlines manually.
n, err := conn.Read(buf[:])
if n == 0 {
return
} else if n > 0 {
for _, line := range bytes.Split(buf[:n], []byte{'\n'}) {
if s := string(line); s != "" {
glog.Info("tsd replied: ", s)
}
}
}
if err != nil {
return
}
}
}
func (c *telnetClient) Put(d *DataPoint) error {
return c.PutBytes([]byte(d.String()))
}
func (c *telnetClient) PutBytes(d []byte) error {
var err error
if c.conn == nil {
c.conn, err = net.Dial("tcp", c.addr)
if err != nil {
return err
}
go readErrors(c.conn)
}
_, err = c.conn.Write(d)
if err != nil {
c.conn.Close()
c.conn = nil
}
return err
}