diff --git a/server/services/alerts_evaluator_service.go b/server/services/alerts_evaluator_service.go index 18ee209..5899485 100644 --- a/server/services/alerts_evaluator_service.go +++ b/server/services/alerts_evaluator_service.go @@ -61,7 +61,7 @@ func unitToSeconds(unit string) float64 { } func (s *AlertsEvaluatorService) EvaluateAlert(alert *models.AlertItem) error { - condition := map[string]interface{}{} + condition := map[string]any{} err := json.Unmarshal([]byte(alert.Condition), &condition) if err != nil { return err @@ -86,7 +86,7 @@ func (s *AlertsEvaluatorService) EvaluateAlert(alert *models.AlertItem) error { sensorId = int64(sensorValueCondition.SensorId) - value, err := s.ctx.Services.SensorValues.GetLatest(sensorValueCondition.SensorId, time.Now().Unix()) + value, err := s.ctx.Services.SensorValues.GetLatestToNow(sensorValueCondition.SensorId) if err != nil { if err == sql.ErrNoRows { lastValue = float64(0) @@ -112,7 +112,7 @@ func (s *AlertsEvaluatorService) EvaluateAlert(alert *models.AlertItem) error { sensorId = sensorLastContactCondition.SensorId - value, err := s.ctx.Services.SensorValues.GetLatest(sensorLastContactCondition.SensorId, time.Now().Unix()) + value, err := s.ctx.Services.SensorValues.GetLatestToNow(sensorLastContactCondition.SensorId) if err != nil { if err == sql.ErrNoRows { diff --git a/server/services/sensor_values_service.go b/server/services/sensor_values_service.go index 0868c18..60a1d50 100644 --- a/server/services/sensor_values_service.go +++ b/server/services/sensor_values_service.go @@ -48,6 +48,19 @@ func (s *SensorValuesService) GetLatest(sensorId int64, to int64) (*sensorValue, return &value, nil } +func (s *SensorValuesService) GetLatestToNow(sensorId int64) (*sensorValue, error) { + var value = sensorValue{} + + row := s.ctx.DB.QueryRow("SELECT timestamp, value FROM sensor_values WHERE sensor_id = ? ORDER BY timestamp DESC LIMIT 1", sensorId) + + err := row.Scan(&value.Timestamp, &value.Value) + if err != nil { + return nil, err + } + + return &value, nil +} + func (s *SensorValuesService) Cleanup(retentionInDays int64) error { if retentionInDays <= 0 { return fmt.Errorf("retentionInDays must be greater than 0")