mirror of
https://github.com/cuigh/swirl
synced 2024-12-28 23:02:02 +00:00
99 lines
2.5 KiB
Go
99 lines
2.5 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/cuigh/auxo/data"
|
|
"github.com/cuigh/auxo/util/cast"
|
|
)
|
|
|
|
// Chart represents a dashboard chart.
|
|
type Chart struct {
|
|
Name string `json:"name" bson:"_id" valid:"required"` // unique, the name of build-in charts has '$' prefix.
|
|
Title string `json:"title" valid:"required"`
|
|
Description string `json:"desc"`
|
|
Legend string `json:"-"`
|
|
Query string `json:"-"`
|
|
Metrics []ChartMetric `json:"metrics" valid:"required"`
|
|
Kind string `json:"kind"` // builtin/custom
|
|
Dashboard string `json:"dashboard"` // home/service/task...
|
|
Type string `json:"type"` // pie/line...
|
|
Unit string `json:"unit"` // bytes/milliseconds/percent:100...
|
|
Width int32 `json:"width"` // 1-12(12 columns total)
|
|
Height int32 `json:"height"` // default 50
|
|
Options data.Map `json:"options"`
|
|
//Colors []string `json:"colors"`
|
|
}
|
|
|
|
func NewChart(dashboard, name, title, legend, query, unit string) *Chart {
|
|
return &Chart{
|
|
Name: name,
|
|
Title: title,
|
|
Description: title,
|
|
Metrics: []ChartMetric{
|
|
{Legend: legend, Query: query},
|
|
},
|
|
Dashboard: dashboard,
|
|
Type: "line",
|
|
Unit: unit,
|
|
Width: 12,
|
|
Height: 200,
|
|
}
|
|
}
|
|
|
|
type ChartMetric struct {
|
|
Legend string `json:"legend"`
|
|
Query string `json:"query"`
|
|
}
|
|
|
|
type ChartOption struct {
|
|
Name string `json:"name"`
|
|
Width int32 `json:"width"`
|
|
Height int32 `json:"height"`
|
|
//Colors []string `json:"colors"`
|
|
}
|
|
|
|
type ChartDashboard struct {
|
|
Name string `json:"name"`
|
|
Key string `json:"key"`
|
|
Period int32 `json:"period"` // minutes
|
|
RefreshInterval int32 `json:"refresh_interval"` // seconds, 0 means disabled.
|
|
Charts []ChartOption `json:"charts"`
|
|
}
|
|
|
|
func (cd *ChartDashboard) ID() string {
|
|
if cd.Key == "" {
|
|
return cd.Name
|
|
}
|
|
return cd.Name + ":" + cd.Key
|
|
}
|
|
|
|
type ChartPoint struct {
|
|
X int64 `json:"x"`
|
|
Y float64 `json:"y"`
|
|
}
|
|
|
|
func (p *ChartPoint) MarshalJSON() ([]byte, error) {
|
|
return cast.StringToBytes(fmt.Sprintf("[%v,%v]", p.X, p.Y)), nil
|
|
}
|
|
|
|
type ChartLine struct {
|
|
Name string `json:"name"`
|
|
Data []ChartPoint `json:"data"`
|
|
}
|
|
|
|
type ChartMatrixData struct {
|
|
Legend []string `json:"legend"`
|
|
Series []ChartLine `json:"series"`
|
|
}
|
|
|
|
type ChartValue struct {
|
|
Name string `json:"name"`
|
|
Value float64 `json:"value"`
|
|
}
|
|
|
|
type ChartVectorData struct {
|
|
Legend []string `json:"legend"`
|
|
Data []ChartValue `json:"data"`
|
|
}
|