pcm-coordinator/internal/logic/monitoring/deletealertrulelogic.go

67 lines
1.6 KiB
Go

package monitoring
import (
"context"
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc"
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteAlertRuleLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewDeleteAlertRuleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteAlertRuleLogic {
return &DeleteAlertRuleLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *DeleteAlertRuleLogic) DeleteAlertRule(req *types.DeleteAlertRuleReq) error {
// Delete data from the database
l.svcCtx.DbEngin.Delete(&types.AlertRule{}, "id = ?", req.Id)
// query cluster http url.
var server string
l.svcCtx.DbEngin.Raw("select ta.server from t_adapter ta,t_cluster tc where ta.id = tc.adapter_id and tc.name = ?", &req.ClusterName).Scan(&server)
// create prometheus rule
response, err := l.svcCtx.HttpClient.R().
SetBody(&CrdStruct{
ClusterName: req.ClusterName,
Name: req.Name,
Grv: Grv{
Group: "monitoring.coreos.com",
Version: "v1",
Resource: "prometheusrules",
},
}).
ForceContentType("application/json").
Delete(server + "/api/v1/crd")
if err != nil {
return err
}
if err != nil || response.IsError() {
return err
}
return nil
}
type Grv struct {
Group string `json:"group"`
Version string `json:"version"`
Resource string `json:"resource"`
}
type CrdStruct struct {
ClusterName string `json:"clusterName"`
Grv Grv `json:"grv"`
Name string `json:"name"`
}