aeus-admin/pkg/chartjs/group.go

47 lines
968 B
Go

package chartjs
import "time"
// TimeSeriesGroup 时间计算数据, 实现类似以时间为维度的折线图
type TimeSeriesGroup struct {
step string
values map[string]*TimeSeries
}
func (g *TimeSeriesGroup) Inc(tm time.Time, key string, value float64) {
v, ok := g.values[key]
if !ok {
v = NewTimeSeries(g.step)
g.values[key] = v
}
v.Inc(tm, value)
}
func (g *TimeSeriesGroup) Dec(tm time.Time, key string, value float64) {
v, ok := g.values[key]
if !ok {
v = NewTimeSeries(g.step)
g.values[key] = v
}
v.Dec(tm, value)
}
// Data 生成chart.js 的图表dataset
func (g *TimeSeriesGroup) Data(sts, ets int64) (values []*TimeseriesData) {
for key, row := range g.values {
data := &TimeseriesData{
Label: key,
Data: row.Values(sts, ets),
}
values = append(values, data)
}
return
}
func NewTimeSeriesGroup(step string) *TimeSeriesGroup {
return &TimeSeriesGroup{
step: step,
values: make(map[string]*TimeSeries),
}
}