writer.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package log_temperature
  2. import (
  3. "fmt"
  4. "time"
  5. influx "github.com/influxdata/influxdb/client/v2"
  6. )
  7. // Writer is used to write out measurements
  8. type Writer interface {
  9. Write(Measurement) error
  10. }
  11. type influxWriter struct {
  12. locations map[int]string
  13. db string
  14. client influx.Client
  15. }
  16. func (i influxWriter) Write(measurement Measurement) error {
  17. bp, err := influx.NewBatchPoints(influx.BatchPointsConfig{
  18. Database: i.db,
  19. Precision: "s",
  20. })
  21. if err != nil {
  22. fmt.Println("Could not log temperature")
  23. fmt.Println(err)
  24. return err
  25. }
  26. var tags = map[string]string{}
  27. if val, ok := i.locations[measurement.ID]; ok {
  28. tags["location"] = val
  29. } else {
  30. tags["location"] = "id:" + string(measurement.ID)
  31. }
  32. fields := map[string]interface{}{
  33. "temperature": measurement.Temperature,
  34. }
  35. pt, err := influx.NewPoint("temperature", tags, fields, time.Now())
  36. if err != nil {
  37. fmt.Println("Could not log temperature")
  38. fmt.Println(err)
  39. return err
  40. }
  41. bp.AddPoint(pt)
  42. err = i.client.Write(bp)
  43. if err != nil {
  44. fmt.Println("Could not log temperature")
  45. fmt.Println(err)
  46. return err
  47. }
  48. return nil
  49. }
  50. // NewInfluxWriter creates an influxdb writer
  51. func NewInfluxWriter(db string, host string, username string, password string, locations map[int]string) (Writer, error) {
  52. client, err := influx.NewHTTPClient(influx.HTTPConfig{
  53. Addr: host,
  54. Username: username,
  55. Password: password,
  56. })
  57. if err != nil {
  58. return nil, err
  59. }
  60. return &influxWriter{db: db, client: client, locations: locations}, nil
  61. }