wormhole-explorer/parser/metrics/metrics.go

51 lines
1.2 KiB
Go

package metrics
import (
"context"
"fmt"
"time"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
"github.com/influxdata/influxdb-client-go/v2/api"
"go.uber.org/zap"
)
const measurement = "vaa_volume"
// Metric definition.
type Metrics struct {
influxCli influxdb2.Client
writeApi api.WriteAPIBlocking
logger *zap.Logger
}
type Volume struct {
ChainSourceID uint16
ChainDestinationID uint16
Value uint64
Timestamp time.Time
AppID string
}
// New create a new *Metric
func New(influxCli influxdb2.Client, organization, bucket string, logger *zap.Logger) *Metrics {
writeAPI := influxCli.WriteAPIBlocking(organization, bucket)
return &Metrics{influxCli: influxCli, writeApi: writeAPI, logger: logger}
}
func (m *Metrics) PushVolume(ctx context.Context, v *Volume) error {
point := influxdb2.NewPointWithMeasurement(measurement).
AddTag("chain_source_id", fmt.Sprintf("%d", v.ChainSourceID)).
AddTag("chain_destination_id", fmt.Sprintf("%d", v.ChainDestinationID)).
AddField("volume", v.Value).
AddField("app_id", v.AppID).
SetTime(v.Timestamp)
// write point to influx
err := m.writeApi.WritePoint(ctx, point)
if err != nil {
return err
}
return nil
}