github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/pkg/influx/client.go (about)

     1  package influx
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  
     7  	influxdb2 "github.com/influxdata/influxdb-client-go/v2"
     8  )
     9  
    10  // Client handles communication with InfluxDB
    11  type Client struct {
    12  	client       influxdb2.Client
    13  	ctx          context.Context
    14  	organization string
    15  	bucket       string
    16  }
    17  
    18  // NewClient instantiates a Client
    19  func NewClient(influxClient influxdb2.Client, organization string, bucket string) *Client {
    20  	ctx := context.Background()
    21  	client := Client{
    22  		client:       influxClient,
    23  		ctx:          ctx,
    24  		organization: organization,
    25  		bucket:       bucket,
    26  	}
    27  	return &client
    28  }
    29  
    30  // WriteMetrics writes metrics to InfluxDB
    31  func (c *Client) WriteMetrics(dataMap map[string]map[string]interface{}, dataMapTags map[string]map[string]string) error {
    32  	writeAPI := c.client.WriteAPIBlocking(c.organization, c.bucket)
    33  
    34  	for measurement, fields := range dataMap {
    35  		tags := dataMapTags[measurement]
    36  		point := influxdb2.NewPoint(measurement,
    37  			tags,
    38  			fields,
    39  			time.Now())
    40  		if err := writeAPI.WritePoint(c.ctx, point); err != nil {
    41  			return err
    42  		}
    43  	}
    44  	return nil
    45  }