add counter support, add lightning time
This commit is contained in:
parent
f0bda0a3bd
commit
82ae3e4ba4
@ -40,6 +40,7 @@ type WeatherMetrics struct {
|
|||||||
// Lightning Sensor
|
// Lightning Sensor
|
||||||
LightningCountDay metric.Int64Gauge
|
LightningCountDay metric.Int64Gauge
|
||||||
LightningLastDistance metric.Int64Gauge
|
LightningLastDistance metric.Int64Gauge
|
||||||
|
LightningLastTime metric.Int64Gauge
|
||||||
|
|
||||||
// Temp and Humidity Sensors
|
// Temp and Humidity Sensors
|
||||||
SensorTempF metric.Float64Gauge
|
SensorTempF metric.Float64Gauge
|
||||||
@ -79,9 +80,9 @@ func (wm *WeatherMetrics) Update(u *WeatherUpdate) {
|
|||||||
wm.recorder.Record(&RecordOpts{Float64Gauge: wm.DewPointF, FloatVal: u.DewPointF, Field: FieldDewPointF, Attributes: attributes, Station: u.StationConfig})
|
wm.recorder.Record(&RecordOpts{Float64Gauge: wm.DewPointF, FloatVal: u.DewPointF, Field: FieldDewPointF, Attributes: attributes, Station: u.StationConfig})
|
||||||
wm.recorder.Record(&RecordOpts{Float64Gauge: wm.WindChillF, FloatVal: u.WindChillF, Field: FieldWindChillF, Attributes: attributes, Station: u.StationConfig})
|
wm.recorder.Record(&RecordOpts{Float64Gauge: wm.WindChillF, FloatVal: u.WindChillF, Field: FieldWindChillF, Attributes: attributes, Station: u.StationConfig})
|
||||||
|
|
||||||
lightningAttributes := append(attributes, attribute.String("unit", "km"))
|
wm.recorder.Record(&RecordOpts{Int64Gauge: wm.LightningLastDistance, IntVal: u.LightningDistance, Field: FieldLightningDistance, Attributes: attributes, Station: u.StationConfig})
|
||||||
wm.recorder.Record(&RecordOpts{Int64Gauge: wm.LightningLastDistance, IntVal: u.LightningDistance, Field: FieldLightningDistance, Attributes: lightningAttributes, Station: u.StationConfig})
|
|
||||||
wm.recorder.Record(&RecordOpts{Int64Gauge: wm.LightningCountDay, IntVal: u.LightningDay, Field: FieldLightningDay, Attributes: attributes, Station: u.StationConfig})
|
wm.recorder.Record(&RecordOpts{Int64Gauge: wm.LightningCountDay, IntVal: u.LightningDay, Field: FieldLightningDay, Attributes: attributes, Station: u.StationConfig})
|
||||||
|
wm.recorder.Record(&RecordOpts{Int64Gauge: wm.LightningLastTime, IntVal: u.LightningTime, Field: FieldLightningLastTime, Attributes: attributes, Station: u.StationConfig})
|
||||||
|
|
||||||
wm.RecordBatteries(u, attributes)
|
wm.RecordBatteries(u, attributes)
|
||||||
wm.RecordTempHumiditySensors(u, attributes)
|
wm.RecordTempHumiditySensors(u, attributes)
|
||||||
|
@ -70,7 +70,11 @@ func MustInitMetrics(appCtx context.Context) *WeatherMetrics {
|
|||||||
wm.LightningCountDay, _ = wm.meter.Int64Gauge(MetricPrefix+"_lightning_day",
|
wm.LightningCountDay, _ = wm.meter.Int64Gauge(MetricPrefix+"_lightning_day",
|
||||||
metric.WithDescription("Count of lightning strikes for current day"))
|
metric.WithDescription("Count of lightning strikes for current day"))
|
||||||
wm.LightningLastDistance, _ = wm.meter.Int64Gauge(MetricPrefix+"_lightning_last_distance",
|
wm.LightningLastDistance, _ = wm.meter.Int64Gauge(MetricPrefix+"_lightning_last_distance",
|
||||||
metric.WithDescription("Last measured lightning distance"))
|
metric.WithDescription("Last measured lightning distance"),
|
||||||
|
metric.WithUnit("kph"))
|
||||||
|
wm.LightningLastTime, _ = wm.meter.Int64Gauge(MetricPrefix+"_lightning_last_time",
|
||||||
|
metric.WithDescription("Last lightning time (epoch)"),
|
||||||
|
metric.WithUnit("s"))
|
||||||
|
|
||||||
// Temp and Humidity Sensors
|
// Temp and Humidity Sensors
|
||||||
wm.SensorTempF, _ = wm.meter.Float64Gauge(MetricPrefix+"_sensor_temp_f",
|
wm.SensorTempF, _ = wm.meter.Float64Gauge(MetricPrefix+"_sensor_temp_f",
|
||||||
|
@ -20,6 +20,7 @@ type MetricRecorder struct {
|
|||||||
type RecordOpts struct {
|
type RecordOpts struct {
|
||||||
Float64Gauge metric.Float64Gauge
|
Float64Gauge metric.Float64Gauge
|
||||||
Int64Gauge metric.Int64Gauge
|
Int64Gauge metric.Int64Gauge
|
||||||
|
Int64Counter metric.Int64Counter
|
||||||
IntVal *int
|
IntVal *int
|
||||||
FloatVal *float64
|
FloatVal *float64
|
||||||
Attributes []attribute.KeyValue
|
Attributes []attribute.KeyValue
|
||||||
@ -59,6 +60,16 @@ func (r *MetricRecorder) Record(opts *RecordOpts) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
r.recordFloat(opts.Float64Gauge, *opts.FloatVal, opts.Attributes...)
|
r.recordFloat(opts.Float64Gauge, *opts.FloatVal, opts.Attributes...)
|
||||||
|
} else if opts.Int64Counter != nil {
|
||||||
|
if opts.IntVal == nil {
|
||||||
|
log := r.l.Trace().Str("field", string(opts.Field))
|
||||||
|
if opts.Station != nil {
|
||||||
|
log = log.Str("station", opts.Station.Name)
|
||||||
|
}
|
||||||
|
log.Msg("Dropping nil float metric")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r.recordCounter(opts.Int64Counter, *opts.IntVal, opts.Attributes...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,6 +82,19 @@ func (o *RecordOpts) keep() bool {
|
|||||||
return !slices.Contains(o.Station.DropMetrics, o.Field)
|
return !slices.Contains(o.Station.DropMetrics, o.Field)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *MetricRecorder) recordCounter(
|
||||||
|
m metric.Int64Counter, value int, attributes ...attribute.KeyValue,
|
||||||
|
) {
|
||||||
|
// Prepare metric attributes
|
||||||
|
options := make([]metric.AddOption, 0, len(attributes))
|
||||||
|
if len(attributes) > 0 {
|
||||||
|
options = append(options, metric.WithAttributes(attributes...))
|
||||||
|
}
|
||||||
|
|
||||||
|
val := int64(value)
|
||||||
|
m.Add(r.ctx, val, options...)
|
||||||
|
}
|
||||||
|
|
||||||
func (r *MetricRecorder) recordInt(
|
func (r *MetricRecorder) recordInt(
|
||||||
m metric.Int64Gauge, value int, attributes ...attribute.KeyValue,
|
m metric.Int64Gauge, value int, attributes ...attribute.KeyValue,
|
||||||
) {
|
) {
|
||||||
|
@ -90,6 +90,7 @@ const (
|
|||||||
FieldSensorHumidity = "SensorHumidity"
|
FieldSensorHumidity = "SensorHumidity"
|
||||||
FieldLightningDay = "LightningDay"
|
FieldLightningDay = "LightningDay"
|
||||||
FieldLightningDistance = "LightningDistance"
|
FieldLightningDistance = "LightningDistance"
|
||||||
|
FieldLightningLastTime = "LightningLastTime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (u *WeatherUpdate) GetStationName() string {
|
func (u *WeatherUpdate) GetStationName() string {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user