mirror of https://github.com/statping/statping
				
				
				
			
		
			
				
	
	
		
			115 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Go
		
	
	
| package handlers
 | |
| 
 | |
| import (
 | |
| 	"github.com/gorilla/mux"
 | |
| 	"github.com/statping/statping/types/errors"
 | |
| 	"github.com/statping/statping/types/failures"
 | |
| 	"github.com/statping/statping/types/notifications"
 | |
| 	"github.com/statping/statping/types/services"
 | |
| 	"net/http"
 | |
| 	"sort"
 | |
| )
 | |
| 
 | |
| func apiNotifiersHandler(w http.ResponseWriter, r *http.Request) {
 | |
| 	var notifs []notifications.Notification
 | |
| 	for _, n := range services.AllNotifiers() {
 | |
| 		notif := n.Select()
 | |
| 		no, err := notifications.Find(notif.Method)
 | |
| 		if err != nil {
 | |
| 			log.Error(err)
 | |
| 			sendErrorJson(err, w, r)
 | |
| 		}
 | |
| 		notif.UpdateFields(no)
 | |
| 		notifs = append(notifs, *notif)
 | |
| 	}
 | |
| 	sort.Sort(notifications.NotificationOrder(notifs))
 | |
| 	returnJson(notifs, w, r)
 | |
| }
 | |
| 
 | |
| func apiNotifierGetHandler(w http.ResponseWriter, r *http.Request) {
 | |
| 	vars := mux.Vars(r)
 | |
| 	notifer := services.FindNotifier(vars["notifier"])
 | |
| 	if notifer == nil {
 | |
| 		sendErrorJson(errors.New("could not find notifier"), w, r)
 | |
| 		return
 | |
| 	}
 | |
| 	returnJson(notifer, w, r)
 | |
| }
 | |
| 
 | |
| func apiNotifierUpdateHandler(w http.ResponseWriter, r *http.Request) {
 | |
| 	vars := mux.Vars(r)
 | |
| 	notifer, err := notifications.Find(vars["notifier"])
 | |
| 	if err != nil {
 | |
| 		sendErrorJson(err, w, r)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if err := DecodeJSON(r, ¬ifer); err != nil {
 | |
| 		sendErrorJson(err, w, r)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	log.Infof("Updating %s Notifier", notifer.Title)
 | |
| 
 | |
| 	if err := notifer.Update(); err != nil {
 | |
| 		sendErrorJson(err, w, r)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	notif := services.ReturnNotifier(notifer.Method)
 | |
| 	if err := notif.Valid(notifer.Values()); err != nil {
 | |
| 		sendErrorJson(err, w, r)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	if _, err := notif.OnSave(); err != nil {
 | |
| 		sendErrorJson(err, w, r)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	sendJsonAction(vars["notifier"], "update", w, r)
 | |
| }
 | |
| 
 | |
| type testNotificationReq struct {
 | |
| 	Method       string                     `json:"method"`
 | |
| 	Notification notifications.Notification `json:"notifier"`
 | |
| }
 | |
| 
 | |
| func testNotificationHandler(w http.ResponseWriter, r *http.Request) {
 | |
| 	vars := mux.Vars(r)
 | |
| 	n := services.FindNotifier(vars["notifier"])
 | |
| 	if n == nil {
 | |
| 		sendErrorJson(errors.New("unknown notifier"), w, r)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	var req testNotificationReq
 | |
| 	if err := DecodeJSON(r, &req); err != nil {
 | |
| 		sendErrorJson(err, w, r)
 | |
| 		return
 | |
| 	}
 | |
| 
 | |
| 	notif := services.ReturnNotifier(n.Method)
 | |
| 
 | |
| 	var out string
 | |
| 	var err error
 | |
| 	if req.Method == "success" {
 | |
| 		out, err = notif.OnSuccess(services.Example(true))
 | |
| 	} else {
 | |
| 		out, err = notif.OnFailure(services.Example(false), failures.Example())
 | |
| 	}
 | |
| 
 | |
| 	resp := ¬ifierTestResp{
 | |
| 		Success:  err == nil,
 | |
| 		Response: out,
 | |
| 		Error:    err,
 | |
| 	}
 | |
| 	returnJson(resp, w, r)
 | |
| }
 | |
| 
 | |
| type notifierTestResp struct {
 | |
| 	Success  bool   `json:"success"`
 | |
| 	Response string `json:"response,omitempty"`
 | |
| 	Error    error  `json:"error,omitempty"`
 | |
| }
 |