mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
| package api
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"errors"
 | |
| 	"net/http"
 | |
| 
 | |
| 	"github.com/grafana/grafana/pkg/api/response"
 | |
| 	"github.com/grafana/grafana/pkg/infra/log"
 | |
| 	"github.com/grafana/grafana/pkg/services/auth/identity"
 | |
| 	contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
 | |
| 	"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions"
 | |
| 	"github.com/grafana/grafana/pkg/services/ngalert/models"
 | |
| 	"github.com/grafana/grafana/pkg/services/ngalert/notifier"
 | |
| )
 | |
| 
 | |
| type NotificationSrv struct {
 | |
| 	logger            log.Logger
 | |
| 	receiverService   ReceiverService
 | |
| 	muteTimingService MuteTimingService // defined in api_provisioning.go
 | |
| }
 | |
| 
 | |
| type ReceiverService interface {
 | |
| 	GetReceiver(ctx context.Context, q models.GetReceiverQuery, u identity.Requester) (definitions.GettableApiReceiver, error)
 | |
| 	GetReceivers(ctx context.Context, q models.GetReceiversQuery, u identity.Requester) ([]definitions.GettableApiReceiver, error)
 | |
| }
 | |
| 
 | |
| func (srv *NotificationSrv) RouteGetTimeInterval(c *contextmodel.ReqContext, name string) response.Response {
 | |
| 	muteTimeInterval, err := srv.muteTimingService.GetMuteTiming(c.Req.Context(), name, c.OrgID)
 | |
| 	if err != nil {
 | |
| 		return errorToResponse(err)
 | |
| 	}
 | |
| 	return response.JSON(http.StatusOK, muteTimeInterval) // TODO convert to timing interval
 | |
| }
 | |
| 
 | |
| func (srv *NotificationSrv) RouteGetTimeIntervals(c *contextmodel.ReqContext) response.Response {
 | |
| 	muteTimeIntervals, err := srv.muteTimingService.GetMuteTimings(c.Req.Context(), c.OrgID)
 | |
| 	if err != nil {
 | |
| 		return errorToResponse(err)
 | |
| 	}
 | |
| 	return response.JSON(http.StatusOK, muteTimeIntervals) // TODO convert to timing interval
 | |
| }
 | |
| 
 | |
| func (srv *NotificationSrv) RouteGetReceiver(c *contextmodel.ReqContext, name string) response.Response {
 | |
| 	q := models.GetReceiverQuery{
 | |
| 		OrgID:   c.SignedInUser.OrgID,
 | |
| 		Name:    name,
 | |
| 		Decrypt: c.QueryBool("decrypt"),
 | |
| 	}
 | |
| 
 | |
| 	receiver, err := srv.receiverService.GetReceiver(c.Req.Context(), q, c.SignedInUser)
 | |
| 	if err != nil {
 | |
| 		if errors.Is(err, notifier.ErrNotFound) {
 | |
| 			return ErrResp(http.StatusNotFound, err, "receiver not found")
 | |
| 		}
 | |
| 		if errors.Is(err, notifier.ErrPermissionDenied) {
 | |
| 			return ErrResp(http.StatusForbidden, err, "permission denied")
 | |
| 		}
 | |
| 		return ErrResp(http.StatusInternalServerError, err, "failed to get receiver")
 | |
| 	}
 | |
| 
 | |
| 	return response.JSON(http.StatusOK, receiver)
 | |
| }
 | |
| 
 | |
| func (srv *NotificationSrv) RouteGetReceivers(c *contextmodel.ReqContext) response.Response {
 | |
| 	q := models.GetReceiversQuery{
 | |
| 		OrgID:   c.SignedInUser.OrgID,
 | |
| 		Names:   c.QueryStrings("names"),
 | |
| 		Limit:   c.QueryInt("limit"),
 | |
| 		Offset:  c.QueryInt("offset"),
 | |
| 		Decrypt: c.QueryBool("decrypt"),
 | |
| 	}
 | |
| 
 | |
| 	receivers, err := srv.receiverService.GetReceivers(c.Req.Context(), q, c.SignedInUser)
 | |
| 	if err != nil {
 | |
| 		if errors.Is(err, notifier.ErrPermissionDenied) {
 | |
| 			return ErrResp(http.StatusForbidden, err, "permission denied")
 | |
| 		}
 | |
| 		return ErrResp(http.StatusInternalServerError, err, "failed to get receiver groups")
 | |
| 	}
 | |
| 
 | |
| 	return response.JSON(http.StatusOK, receivers)
 | |
| }
 |