diff --git a/db/queries/metrics.sql b/db/queries/metrics.sql index 3b6ad0b..f58d480 100644 --- a/db/queries/metrics.sql +++ b/db/queries/metrics.sql @@ -35,7 +35,7 @@ ON CONFLICT (sandbox_id, tier, ts) DO NOTHING; -- name: GetSandboxMetricPoints :many SELECT ts, cpu_pct, mem_bytes, disk_bytes FROM sandbox_metric_points -WHERE sandbox_id = $1 AND tier = $2 +WHERE sandbox_id = $1 AND tier = $2 AND ts >= $3 ORDER BY ts ASC; -- name: DeleteSandboxMetricPoints :exec diff --git a/internal/api/handlers_metrics.go b/internal/api/handlers_metrics.go index a2ab0b9..793349e 100644 --- a/internal/api/handlers_metrics.go +++ b/internal/api/handlers_metrics.go @@ -123,22 +123,20 @@ func (h *sandboxMetricsHandler) getFromDB(ctx context.Context, w http.ResponseWr rows, err := h.db.GetSandboxMetricPoints(ctx, db.GetSandboxMetricPointsParams{ SandboxID: sandboxID, Tier: mapping.tier, + Ts: time.Now().Add(-mapping.cutoff).Unix(), }) if err != nil { writeError(w, http.StatusInternalServerError, "internal_error", "failed to read metrics") return } - threshold := time.Now().Add(-mapping.cutoff).Unix() - var points []metricPointResponse - for _, row := range rows { - if row.Ts >= threshold { - points = append(points, metricPointResponse{ - TimestampUnix: row.Ts, - CPUPct: row.CpuPct, - MemBytes: row.MemBytes, - DiskBytes: row.DiskBytes, - }) + points := make([]metricPointResponse, len(rows)) + for i, row := range rows { + points[i] = metricPointResponse{ + TimestampUnix: row.Ts, + CPUPct: row.CpuPct, + MemBytes: row.MemBytes, + DiskBytes: row.DiskBytes, } } diff --git a/internal/db/metrics.sql.go b/internal/db/metrics.sql.go index b719caa..8050155 100644 --- a/internal/db/metrics.sql.go +++ b/internal/db/metrics.sql.go @@ -86,13 +86,14 @@ func (q *Queries) GetPeakMetrics(ctx context.Context, teamID string) (GetPeakMet const getSandboxMetricPoints = `-- name: GetSandboxMetricPoints :many SELECT ts, cpu_pct, mem_bytes, disk_bytes FROM sandbox_metric_points -WHERE sandbox_id = $1 AND tier = $2 +WHERE sandbox_id = $1 AND tier = $2 AND ts >= $3 ORDER BY ts ASC ` type GetSandboxMetricPointsParams struct { SandboxID string `json:"sandbox_id"` Tier string `json:"tier"` + Ts int64 `json:"ts"` } type GetSandboxMetricPointsRow struct { @@ -103,7 +104,7 @@ type GetSandboxMetricPointsRow struct { } func (q *Queries) GetSandboxMetricPoints(ctx context.Context, arg GetSandboxMetricPointsParams) ([]GetSandboxMetricPointsRow, error) { - rows, err := q.db.Query(ctx, getSandboxMetricPoints, arg.SandboxID, arg.Tier) + rows, err := q.db.Query(ctx, getSandboxMetricPoints, arg.SandboxID, arg.Tier, arg.Ts) if err != nil { return nil, err }