You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nightingale/models/metric_description.go

152 lines
3.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}