| 
 | 1 | +/*  | 
 | 2 | + * Copyright (c) 2024 OceanBase.  | 
 | 3 | + *  | 
 | 4 | + * Licensed under the Apache License, Version 2.0 (the "License");  | 
 | 5 | + * you may not use this file except in compliance with the License.  | 
 | 6 | + * You may obtain a copy of the License at  | 
 | 7 | + *  | 
 | 8 | + *     http://www.apache.org/licenses/LICENSE-2.0  | 
 | 9 | + *  | 
 | 10 | + * Unless required by applicable law or agreed to in writing, software  | 
 | 11 | + * distributed under the License is distributed on an "AS IS" BASIS,  | 
 | 12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  | 
 | 13 | + * See the License for the specific language governing permissions and  | 
 | 14 | + * limitations under the License.  | 
 | 15 | + */  | 
 | 16 | + | 
 | 17 | +package api  | 
 | 18 | + | 
 | 19 | +import (  | 
 | 20 | +	"github.com/gin-gonic/gin"  | 
 | 21 | + | 
 | 22 | +	"github.com/oceanbase/obshell/agent/api/common"  | 
 | 23 | +	"github.com/oceanbase/obshell/agent/constant"  | 
 | 24 | +	"github.com/oceanbase/obshell/agent/executor/alarm"  | 
 | 25 | +	"github.com/oceanbase/obshell/model/alarm/alert"  | 
 | 26 | +	"github.com/oceanbase/obshell/model/alarm/rule"  | 
 | 27 | +	"github.com/oceanbase/obshell/model/alarm/silence"  | 
 | 28 | +)  | 
 | 29 | + | 
 | 30 | +// ListAlerts godoc  | 
 | 31 | +// @ID ListAlerts  | 
 | 32 | +// @Summary List all alerts  | 
 | 33 | +// @Description List all alerts  | 
 | 34 | +// @Tags alarm  | 
 | 35 | +// @Accept json  | 
 | 36 | +// @Produce json  | 
 | 37 | +// @Param filter body alert.AlertFilter false "alert filter"  | 
 | 38 | +// @Success 200 {object} http.OcsAgentResponse{data=[]alert.Alert}  | 
 | 39 | +// @Router /api/v1/alarm/alerts [post]  | 
 | 40 | +func ListAlerts(ctx *gin.Context) {  | 
 | 41 | +	filter := &alert.AlertFilter{}  | 
 | 42 | +	err := ctx.Bind(filter)  | 
 | 43 | +	if err != nil {  | 
 | 44 | +		common.SendResponse(ctx, nil, err)  | 
 | 45 | +		return  | 
 | 46 | +	}  | 
 | 47 | +	data, err := alarm.ListAlerts(ctx, filter)  | 
 | 48 | +	common.SendResponse(ctx, data, err)  | 
 | 49 | +}  | 
 | 50 | + | 
 | 51 | +// ListSilencers godoc  | 
 | 52 | +// @ID ListSilencers  | 
 | 53 | +// @Summary List all silencers  | 
 | 54 | +// @Description List all silencers  | 
 | 55 | +// @Tags alarm  | 
 | 56 | +// @Accept json  | 
 | 57 | +// @Produce json  | 
 | 58 | +// @Param filter body silence.SilencerFilter false "silencer filter"  | 
 | 59 | +// @Success 200 {object} http.OcsAgentResponse{data=[]silence.SilencerResponse}  | 
 | 60 | +// @Router /api/v1/alarm/silencers [post]  | 
 | 61 | +func ListSilencers(ctx *gin.Context) {  | 
 | 62 | +	filter := &silence.SilencerFilter{}  | 
 | 63 | +	err := ctx.Bind(filter)  | 
 | 64 | +	if err != nil {  | 
 | 65 | +		common.SendResponse(ctx, nil, err)  | 
 | 66 | +		return  | 
 | 67 | +	}  | 
 | 68 | +	data, err := alarm.ListSilencers(ctx, filter)  | 
 | 69 | +	common.SendResponse(ctx, data, err)  | 
 | 70 | +}  | 
 | 71 | + | 
 | 72 | +// GetSilencer godoc  | 
 | 73 | +// @ID GetSilencer  | 
 | 74 | +// @Summary Get a silencer  | 
 | 75 | +// @Description Get a silencer by id  | 
 | 76 | +// @Tags alarm  | 
 | 77 | +// @Accept json  | 
 | 78 | +// @Produce json  | 
 | 79 | +// @Param id path string true "silencer id"  | 
 | 80 | +// @Success 200 {object} http.OcsAgentResponse{data=silence.SilencerResponse}  | 
 | 81 | +// @Router /api/v1/alarm/silencer/{id} [get]  | 
 | 82 | +func GetSilencer(ctx *gin.Context) {  | 
 | 83 | +	id := ctx.Param("id")  | 
 | 84 | +	data, err := alarm.GetSilencer(ctx, id)  | 
 | 85 | +	common.SendResponse(ctx, data, err)  | 
 | 86 | +}  | 
 | 87 | + | 
 | 88 | +// CreateOrUpdateSilencer godoc  | 
 | 89 | +// @ID CreateOrUpdateSilencer  | 
 | 90 | +// @Summary Create or update a silencer  | 
 | 91 | +// @Description Create or update a silencer  | 
 | 92 | +// @Tags alarm  | 
 | 93 | +// @Accept json  | 
 | 94 | +// @Produce json  | 
 | 95 | +// @Param silencer body silence.SilencerParam true "silencer"  | 
 | 96 | +// @Success 200 {object} http.OcsAgentResponse{data=silence.SilencerResponse}  | 
 | 97 | +// @Router /api/v1/alarm/silencer [put]  | 
 | 98 | +func CreateOrUpdateSilencer(ctx *gin.Context) {  | 
 | 99 | +	param := &silence.SilencerParam{}  | 
 | 100 | +	err := ctx.Bind(param)  | 
 | 101 | +	if err != nil {  | 
 | 102 | +		common.SendResponse(ctx, nil, err)  | 
 | 103 | +		return  | 
 | 104 | +	}  | 
 | 105 | +	data, err := alarm.CreateOrUpdateSilencer(ctx, param)  | 
 | 106 | +	common.SendResponse(ctx, data, err)  | 
 | 107 | +}  | 
 | 108 | + | 
 | 109 | +// DeleteSilencer godoc  | 
 | 110 | +// @ID DeleteSilencer  | 
 | 111 | +// @Summary Delete a silencer  | 
 | 112 | +// @Description Delete a silencer by id  | 
 | 113 | +// @Tags alarm  | 
 | 114 | +// @Accept json  | 
 | 115 | +// @Produce json  | 
 | 116 | +// @Param id path string true "silencer id"  | 
 | 117 | +// @Success 200 {object} http.OcsAgentResponse  | 
 | 118 | +// @Router /api/v1/alarm/silencer/{id} [delete]  | 
 | 119 | +func DeleteSilencer(ctx *gin.Context) {  | 
 | 120 | +	id := ctx.Param("id")  | 
 | 121 | +	err := alarm.DeleteSilencer(ctx, id)  | 
 | 122 | +	common.SendResponse(ctx, nil, err)  | 
 | 123 | +}  | 
 | 124 | + | 
 | 125 | +// ListRules godoc  | 
 | 126 | +// @ID ListRules  | 
 | 127 | +// @Summary List all rules  | 
 | 128 | +// @Description List all rules  | 
 | 129 | +// @Tags alarm  | 
 | 130 | +// @Accept json  | 
 | 131 | +// @Produce json  | 
 | 132 | +// @Param filter body rule.RuleFilter false "rule filter"  | 
 | 133 | +// @Success 200 {object} http.OcsAgentResponse{data=[]rule.RuleResponse}  | 
 | 134 | +// @Router /api/v1/alarm/rules [post]  | 
 | 135 | +func ListRules(ctx *gin.Context) {  | 
 | 136 | +	filter := &rule.RuleFilter{}  | 
 | 137 | +	err := ctx.Bind(filter)  | 
 | 138 | +	if err != nil {  | 
 | 139 | +		common.SendResponse(ctx, nil, err)  | 
 | 140 | +		return  | 
 | 141 | +	}  | 
 | 142 | +	data, err := alarm.ListRules(ctx, filter)  | 
 | 143 | +	common.SendResponse(ctx, data, err)  | 
 | 144 | +}  | 
 | 145 | + | 
 | 146 | +// GetRule godoc  | 
 | 147 | +// @ID GetRule  | 
 | 148 | +// @Summary Get a rule  | 
 | 149 | +// @Description Get a rule by name  | 
 | 150 | +// @Tags alarm  | 
 | 151 | +// @Accept json  | 
 | 152 | +// @Produce json  | 
 | 153 | +// @Param name path string true "rule name"  | 
 | 154 | +// @Success 200 {object} http.OcsAgentResponse{data=rule.RuleResponse}  | 
 | 155 | +// @Router /api/v1/alarm/rule/{name} [get]  | 
 | 156 | +func GetRule(ctx *gin.Context) {  | 
 | 157 | +	name := ctx.Param(constant.URI_PARAM_NAME)  | 
 | 158 | +	data, err := alarm.GetRule(ctx, name)  | 
 | 159 | +	common.SendResponse(ctx, data, err)  | 
 | 160 | +}  | 
0 commit comments