mirror of
https://github.com/PoetryInCode/system-reporting.git
synced 2025-04-19 10:47:14 -04:00
This is a system daemon for my home network that will report system stats to my influxdb instance.
65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package influx
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/elliotchance/orderedmap/v3"
|
|
)
|
|
|
|
type LineBuilder struct {
|
|
Measurement string
|
|
Tags *orderedmap.OrderedMap[string, string]
|
|
Values *orderedmap.OrderedMap[string, string]
|
|
Timestamp time.Time
|
|
}
|
|
|
|
func (lb LineBuilder) AddTag(key, value string) {
|
|
lb.Tags.Set(key, value)
|
|
}
|
|
|
|
func (lb LineBuilder) Add(key, value string) {
|
|
lb.Values.Set(key, value)
|
|
}
|
|
|
|
func (lb LineBuilder) Encode() string {
|
|
sb := strings.Builder{}
|
|
|
|
sb.WriteString(lb.Measurement)
|
|
for key, val := range lb.Tags.AllFromFront() {
|
|
sb.WriteString(fmt.Sprintf(",%s=%s", key, val))
|
|
}
|
|
sb.WriteRune(' ')
|
|
|
|
i := 0
|
|
total := lb.Values.Len()
|
|
for key, val := range lb.Values.AllFromFront() {
|
|
sb.WriteString(fmt.Sprintf("%s=%s", key, val))
|
|
|
|
i++
|
|
if i < total {
|
|
sb.WriteRune(',')
|
|
}
|
|
}
|
|
|
|
sb.WriteRune(' ')
|
|
sb.WriteString(strconv.FormatInt(lb.Timestamp.UTC().UnixNano(), 10))
|
|
|
|
return sb.String()
|
|
}
|
|
|
|
func (lb *LineBuilder) UpdateTime() {
|
|
lb.Timestamp = time.Now()
|
|
}
|
|
|
|
func NewLineBuilder(measurement string) LineBuilder {
|
|
return LineBuilder{
|
|
Measurement: measurement,
|
|
Tags: orderedmap.NewOrderedMap[string, string](),
|
|
Values: orderedmap.NewOrderedMap[string, string](),
|
|
Timestamp: time.Now(),
|
|
}
|
|
}
|