// 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 "fmt"

// DataPoint for OpenTSDB to store.
type DataPoint struct {
	// Metric name.
	Metric string `json:"metric"`

	// UNIX timestamp with millisecond resolution.
	Timestamp uint64 `json:"timestamp"`

	// Value of the data point (integer or floating point).
	Value interface{} `json:"value"`

	// Tags.  The host is automatically populated by the OpenTSDBConn.
	Tags map[string]string `json:"tags"`
}

func (d *DataPoint) String() string {
	var tags string
	if len(d.Tags) != 0 {
		for tag, value := range d.Tags {
			tags += " " + tag + "=" + value
		}
	}
	return fmt.Sprintf("put %s %d %#v%s\n", d.Metric, d.Timestamp/1e9, d.Value, tags)
}

// OpenTSDBConn is a managed connection to an OpenTSDB instance (or cluster).
type OpenTSDBConn interface {
	Put(d *DataPoint) error
}
