3d3f9d133a
The used space graph values are correct when a single satellite is selected but wrong for 'All satellites'. This is related to the queries for getting the individual disk usages for all satellites per day and the summary and average for all satellites per day: 1. dividing the sum of at_rest_total by the total_hours is wrong. Simply put, we were assuming that, for example (4/2)+(6/3) equals to (4+6)/(2+3), assuming we had 4 and 6 at_rest_total values with 2 and 3 respective hours. 2. To get the average, we need to first find the sum of the at_rest_total_bytes for each timestamp across all satellites before taking the average of the sums instead of just taking the average from the individual satellite values. Closes https://github.com/storj/storj/issues/5519 Change-Id: Ib1314e238b695a6c1ecd9f9171ee86dd56bb3b24
60 lines
2.4 KiB
Go
60 lines
2.4 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package storageusage
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"storj.io/common/storj"
|
|
)
|
|
|
|
// DB works with storage usage database.
|
|
//
|
|
// architecture: Database
|
|
type DB interface {
|
|
// Store stores storage usage stamps to db replacing conflicting entries
|
|
Store(ctx context.Context, stamps []Stamp) error
|
|
// GetDaily returns daily storage usage stamps for particular satellite
|
|
// for provided time range
|
|
GetDaily(ctx context.Context, satelliteID storj.NodeID, from, to time.Time) ([]Stamp, error)
|
|
// GetDailyTotal returns daily storage usage stamps summed across all known satellites
|
|
// for provided time range
|
|
GetDailyTotal(ctx context.Context, from, to time.Time) ([]StampGroup, error)
|
|
// Summary returns aggregated storage usage across all satellites.
|
|
Summary(ctx context.Context, from, to time.Time) (float64, float64, error)
|
|
// SatelliteSummary returns aggregated storage usage for a particular satellite.
|
|
SatelliteSummary(ctx context.Context, satelliteID storj.NodeID, from, to time.Time) (float64, float64, error)
|
|
}
|
|
|
|
// Stamp is storage usage stamp for satellite from interval start till next interval.
|
|
type Stamp struct {
|
|
SatelliteID storj.NodeID `json:"-"`
|
|
// AtRestTotal is the bytes*hour disk space used at the IntervalEndTime.
|
|
AtRestTotal float64 `json:"atRestTotal"`
|
|
// AtRestTotalBytes is the AtRestTotal divided by the IntervalInHours.
|
|
AtRestTotalBytes float64 `json:"atRestTotalBytes"`
|
|
// IntervalInHours is hour difference between interval_end_time
|
|
// of this Stamp and that of the preceding Stamp
|
|
IntervalInHours float64 `json:"intervalInHours"`
|
|
// IntervalStart represents one tally day
|
|
// TODO: rename to timestamp to match DB
|
|
IntervalStart time.Time `json:"intervalStart"`
|
|
// IntervalEndTime represents the timestamp for the last tally run time
|
|
// (i.e. last interval_end_time) for the day
|
|
IntervalEndTime time.Time `json:"-"`
|
|
}
|
|
|
|
// StampGroup is storage usage stamp for all satellites from interval start till next interval
|
|
// grouped by interval_start time.
|
|
type StampGroup struct {
|
|
// AtRestTotal is the bytes*hour disk space used at the IntervalEndTime.
|
|
AtRestTotal float64 `json:"atRestTotal"`
|
|
// AtRestTotalBytes is the AtRestTotal divided by the IntervalInHours.
|
|
AtRestTotalBytes float64 `json:"atRestTotalBytes"`
|
|
// IntervalStart represents one tally day
|
|
// TODO: rename to timestamp to match DB
|
|
IntervalStart time.Time `json:"intervalStart"`
|
|
}
|