nightingale/models/metric_description.go

152 lines
3.5 KiB
Go
Raw Normal View History

package models
import (
"strings"
"github.com/toolkits/pkg/logger"
)
type MetricDescription struct {
Id int64 `json:"id"`
Metric string `json:"metric"`
Description string `json:"description"`
}
func (md *MetricDescription) TableName() string {
return "metric_description"
}
func MetricDescriptionUpdate(mds []MetricDescription) error {
for i := 0; i < len(mds); i++ {
mds[i].Metric = strings.TrimSpace(mds[i].Metric)
md, err := MetricDescriptionGet("metric = ?", mds[i].Metric)
if err != nil {
return err
}
if md == nil {
// insert
err = DBInsertOne(mds[i])
if err != nil {
return err
}
} else {
// update
md.Description = mds[i].Description
err = md.Update("description")
if err != nil {
return err
}
}
}
return nil
}
func (md *MetricDescription) Update(cols ...string) error {
_, err := DB.Where("id=?", md.Id).Cols(cols...).Update(md)
if err != nil {
logger.Errorf("mysql.error: update metric_description(metric=%s) fail: %v", md.Metric, err)
return internalServerError
}
return nil
}
func MetricDescriptionGet(where string, args ...interface{}) (*MetricDescription, error) {
var obj MetricDescription
has, err := DB.Where(where, args...).Get(&obj)
if err != nil {
logger.Errorf("mysql.error: query metric_description(%s)%+v fail: %s", where, args, err)
return nil, internalServerError
}
if !has {
return nil, nil
}
return &obj, nil
}
func MetricDescriptionTotal(query string) (num int64, err error) {
if query != "" {
q := "%" + query + "%"
num, err = DB.Where("metric like ? or description like ?", q, q).Count(new(MetricDescription))
} else {
num, err = DB.Count(new(MetricDescription))
}
if err != nil {
logger.Errorf("mysql.error: count metric_description fail: %v", err)
return 0, internalServerError
}
return num, nil
}
func MetricDescriptionGets(query string, limit, offset int) ([]MetricDescription, error) {
session := DB.Limit(limit, offset).OrderBy("metric")
if query != "" {
q := "%" + query + "%"
session = session.Where("metric like ? or description like ?", q, q)
}
var objs []MetricDescription
err := session.Find(&objs)
if err != nil {
logger.Errorf("mysql.error: query metric_description fail: %v", err)
return nil, internalServerError
}
if len(objs) == 0 {
return []MetricDescription{}, nil
}
return objs, nil
}
func MetricDescriptionGetAll() ([]MetricDescription, error) {
var objs []MetricDescription
err := DB.Find(&objs)
if err != nil {
logger.Errorf("mysql.error: query metric_description fail: %v", err)
return nil, internalServerError
}
if len(objs) == 0 {
return []MetricDescription{}, nil
}
return objs, nil
}
// MetricDescriptionMapper 即时看图页面应该会用到这个方法填充metric对应的description
func MetricDescriptionMapper(metrics []string) (map[string]string, error) {
var objs []MetricDescription
err := DB.In("metric", metrics).Find(&objs)
if err != nil {
logger.Errorf("mysql.error: query metric_description fail: %v", err)
return nil, internalServerError
}
count := len(objs)
if count == 0 {
return map[string]string{}, nil
}
mapper := make(map[string]string, count)
for i := 0; i < count; i++ {
mapper[objs[i].Metric] = objs[i].Description
}
return mapper, nil
}
func MetricDescriptionDel(ids []int64) error {
_, err := DB.In("id", ids).Delete(new(MetricDescription))
if err != nil {
logger.Errorf("mysql.error: delete metric_description fail: %v", err)
return internalServerError
}
return nil
}