47 lines
968 B
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),
|
|
}
|
|
}
|