nightingale/models/metric_description.go

152 lines
3.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}