mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			152 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
						|
 | 
						|
package services
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"encoding/json"
 | 
						|
	"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
						|
	"github.com/iwind/TeaGo/maps"
 | 
						|
	"github.com/iwind/TeaGo/types"
 | 
						|
)
 | 
						|
 | 
						|
// MetricChartService 指标图表相关服务
 | 
						|
type MetricChartService struct {
 | 
						|
	BaseService
 | 
						|
}
 | 
						|
 | 
						|
// CreateMetricChart 创建图表
 | 
						|
func (this *MetricChartService) CreateMetricChart(ctx context.Context, req *pb.CreateMetricChartRequest) (*pb.CreateMetricChartResponse, error) {
 | 
						|
	_, err := this.ValidateAdmin(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	var params = maps.Map{}
 | 
						|
	if len(req.ParamsJSON) > 0 {
 | 
						|
		err = json.Unmarshal(req.ParamsJSON, ¶ms)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
	}
 | 
						|
	chartId, err := models.SharedMetricChartDAO.CreateChart(tx, req.MetricItemId, req.Name, req.Type, req.WidthDiv, req.MaxItems, params, req.IgnoreEmptyKeys, req.IgnoredKeys)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return &pb.CreateMetricChartResponse{MetricChartId: chartId}, nil
 | 
						|
}
 | 
						|
 | 
						|
// UpdateMetricChart 修改图表
 | 
						|
func (this *MetricChartService) UpdateMetricChart(ctx context.Context, req *pb.UpdateMetricChartRequest) (*pb.RPCSuccess, error) {
 | 
						|
	_, err := this.ValidateAdmin(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	var params = maps.Map{}
 | 
						|
	if len(req.ParamsJSON) > 0 {
 | 
						|
		err = json.Unmarshal(req.ParamsJSON, ¶ms)
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
	}
 | 
						|
	err = models.SharedMetricChartDAO.UpdateChart(tx, req.MetricChartId, req.Name, req.Type, req.WidthDiv, req.MaxItems, params, req.IgnoreEmptyKeys, req.IgnoredKeys, req.IsOn)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return this.Success()
 | 
						|
}
 | 
						|
 | 
						|
// FindEnabledMetricChart 查找单个图表
 | 
						|
func (this *MetricChartService) FindEnabledMetricChart(ctx context.Context, req *pb.FindEnabledMetricChartRequest) (*pb.FindEnabledMetricChartResponse, error) {
 | 
						|
	_, err := this.ValidateAdmin(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	chart, err := models.SharedMetricChartDAO.FindEnabledMetricChart(tx, req.MetricChartId)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	if chart == nil {
 | 
						|
		return &pb.FindEnabledMetricChartResponse{MetricChart: nil}, nil
 | 
						|
	}
 | 
						|
	return &pb.FindEnabledMetricChartResponse{
 | 
						|
		MetricChart: &pb.MetricChart{
 | 
						|
			Id:              int64(chart.Id),
 | 
						|
			Name:            chart.Name,
 | 
						|
			Type:            chart.Type,
 | 
						|
			WidthDiv:        types.Int32(chart.WidthDiv),
 | 
						|
			MaxItems:        types.Int32(chart.MaxItems),
 | 
						|
			ParamsJSON:      chart.Params,
 | 
						|
			IgnoreEmptyKeys: chart.IgnoreEmptyKeys == 1,
 | 
						|
			IgnoredKeys:     chart.DecodeIgnoredKeys(),
 | 
						|
			IsOn:            chart.IsOn,
 | 
						|
			MetricItem:      &pb.MetricItem{Id: int64(chart.ItemId)},
 | 
						|
		},
 | 
						|
	}, nil
 | 
						|
}
 | 
						|
 | 
						|
// CountEnabledMetricCharts 计算图表数量
 | 
						|
func (this *MetricChartService) CountEnabledMetricCharts(ctx context.Context, req *pb.CountEnabledMetricChartsRequest) (*pb.RPCCountResponse, error) {
 | 
						|
	_, err := this.ValidateAdmin(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	count, err := models.SharedMetricChartDAO.CountEnabledCharts(tx, req.MetricItemId)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return this.SuccessCount(count)
 | 
						|
}
 | 
						|
 | 
						|
// ListEnabledMetricCharts 列出单页图表
 | 
						|
func (this *MetricChartService) ListEnabledMetricCharts(ctx context.Context, req *pb.ListEnabledMetricChartsRequest) (*pb.ListEnabledMetricChartsResponse, error) {
 | 
						|
	_, err := this.ValidateAdmin(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	charts, err := models.SharedMetricChartDAO.ListEnabledCharts(tx, req.MetricItemId, req.Offset, req.Size)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	var pbCharts []*pb.MetricChart
 | 
						|
	for _, chart := range charts {
 | 
						|
		pbCharts = append(pbCharts, &pb.MetricChart{
 | 
						|
			Id:              int64(chart.Id),
 | 
						|
			Name:            chart.Name,
 | 
						|
			Type:            chart.Type,
 | 
						|
			WidthDiv:        types.Int32(chart.WidthDiv),
 | 
						|
			MaxItems:        types.Int32(chart.MaxItems),
 | 
						|
			ParamsJSON:      chart.Params,
 | 
						|
			IgnoreEmptyKeys: chart.IgnoreEmptyKeys == 1,
 | 
						|
			IgnoredKeys:     chart.DecodeIgnoredKeys(),
 | 
						|
			IsOn:            chart.IsOn,
 | 
						|
		})
 | 
						|
	}
 | 
						|
	return &pb.ListEnabledMetricChartsResponse{MetricCharts: pbCharts}, nil
 | 
						|
}
 | 
						|
 | 
						|
// DeleteMetricChart 删除图表
 | 
						|
func (this *MetricChartService) DeleteMetricChart(ctx context.Context, req *pb.DeleteMetricChartRequest) (*pb.RPCSuccess, error) {
 | 
						|
	_, err := this.ValidateAdmin(ctx)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	var tx = this.NullTx()
 | 
						|
	err = models.SharedMetricChartDAO.DisableMetricChart(tx, req.MetricChartId)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return this.Success()
 | 
						|
}
 |