This commit is contained in:
2026-06-19 07:25:46 +03:00
parent 06823ee547
commit 2d73ce1727
52 changed files with 5173 additions and 547 deletions

81
mqe/raw.go Normal file
View File

@@ -0,0 +1,81 @@
package mqe
import (
"database/sql"
"gordenko.dev/dima/qb"
)
type RawMeasure struct {
Time int64 `json:"t"`
Value float64 `json:"v"`
}
type RawMeasuresFilter struct {
MetricID int64 `json:"metricID"`
MetricType qb.MetricType `json:"metricType"`
Since int64 `json:"since"` // уже учтен firstHourOfDay
Until int64 `json:"until"` // уже учтен firstHourOfDay
}
// ListRawMeasures - cписок показаний мгновенных метрик (Температура, Давление, Расход)
// за за интервал без группировки
func (s *MeasureQueryEngine) ListRawMeasures(req RawMeasuresFilter) (_ []RawMeasure, err error) {
tx, err := s.db.Driver().Begin()
if err != nil {
return
}
defer tx.Rollback()
rows, err := tx.Query(`
SELECT tm, value
FROM f64
WHERE metricID=? AND tm BETWEEN ? AND ?
ORDER BY tm ASC`,
req.MetricID, req.Since, req.Until)
if err != nil {
if err == sql.ErrNoRows {
err = nil
}
return
}
defer rows.Close()
var result []RawMeasure
for rows.Next() {
var (
tm int64
value float64
)
err = rows.Scan(&tm, &value)
if err != nil {
return
}
result = append(result, RawMeasure{
Time: tm,
Value: value,
})
}
if err = rows.Err(); err != nil {
return
}
if len(result) == 0 {
return
}
if req.MetricType == qb.Cumulative {
var corrections []_f64Correction
corrections, err = listF64CorrectionsTx(tx, req.MetricID)
if err != nil {
return
}
if len(corrections) > 0 {
applyCorrectionsToRawMeasures(corrections, result)
}
}
return result, nil
}