123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- // 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"
- "notabug.org/themusicgod1/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
- }
|