| package admin |
|
|
| import ( |
| "net/http" |
|
|
| "github.com/Wei-Shaw/sub2api/internal/pkg/response" |
| "github.com/Wei-Shaw/sub2api/internal/server/middleware" |
| "github.com/Wei-Shaw/sub2api/internal/service" |
| "github.com/gin-gonic/gin" |
| ) |
|
|
| |
| |
| func (h *OpsHandler) GetEmailNotificationConfig(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| cfg, err := h.opsService.GetEmailNotificationConfig(c.Request.Context()) |
| if err != nil { |
| response.Error(c, http.StatusInternalServerError, "Failed to get email notification config") |
| return |
| } |
| response.Success(c, cfg) |
| } |
|
|
| |
| |
| func (h *OpsHandler) UpdateEmailNotificationConfig(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| var req service.OpsEmailNotificationConfigUpdateRequest |
| if err := c.ShouldBindJSON(&req); err != nil { |
| response.BadRequest(c, "Invalid request body") |
| return |
| } |
|
|
| updated, err := h.opsService.UpdateEmailNotificationConfig(c.Request.Context(), &req) |
| if err != nil { |
| |
| response.Error(c, http.StatusBadRequest, err.Error()) |
| return |
| } |
| response.Success(c, updated) |
| } |
|
|
| |
| |
| func (h *OpsHandler) GetAlertRuntimeSettings(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| cfg, err := h.opsService.GetOpsAlertRuntimeSettings(c.Request.Context()) |
| if err != nil { |
| response.Error(c, http.StatusInternalServerError, "Failed to get alert runtime settings") |
| return |
| } |
| response.Success(c, cfg) |
| } |
|
|
| |
| |
| func (h *OpsHandler) UpdateAlertRuntimeSettings(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| var req service.OpsAlertRuntimeSettings |
| if err := c.ShouldBindJSON(&req); err != nil { |
| response.BadRequest(c, "Invalid request body") |
| return |
| } |
|
|
| updated, err := h.opsService.UpdateOpsAlertRuntimeSettings(c.Request.Context(), &req) |
| if err != nil { |
| response.Error(c, http.StatusBadRequest, err.Error()) |
| return |
| } |
| response.Success(c, updated) |
| } |
|
|
| |
| |
| func (h *OpsHandler) GetRuntimeLogConfig(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| cfg, err := h.opsService.GetRuntimeLogConfig(c.Request.Context()) |
| if err != nil { |
| response.Error(c, http.StatusInternalServerError, "Failed to get runtime log config") |
| return |
| } |
| response.Success(c, cfg) |
| } |
|
|
| |
| |
| func (h *OpsHandler) UpdateRuntimeLogConfig(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| var req service.OpsRuntimeLogConfig |
| if err := c.ShouldBindJSON(&req); err != nil { |
| response.BadRequest(c, "Invalid request body") |
| return |
| } |
|
|
| subject, ok := middleware.GetAuthSubjectFromContext(c) |
| if !ok || subject.UserID <= 0 { |
| response.Error(c, http.StatusUnauthorized, "Unauthorized") |
| return |
| } |
|
|
| updated, err := h.opsService.UpdateRuntimeLogConfig(c.Request.Context(), &req, subject.UserID) |
| if err != nil { |
| response.Error(c, http.StatusBadRequest, err.Error()) |
| return |
| } |
| response.Success(c, updated) |
| } |
|
|
| |
| |
| func (h *OpsHandler) ResetRuntimeLogConfig(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| subject, ok := middleware.GetAuthSubjectFromContext(c) |
| if !ok || subject.UserID <= 0 { |
| response.Error(c, http.StatusUnauthorized, "Unauthorized") |
| return |
| } |
|
|
| updated, err := h.opsService.ResetRuntimeLogConfig(c.Request.Context(), subject.UserID) |
| if err != nil { |
| response.Error(c, http.StatusBadRequest, err.Error()) |
| return |
| } |
| response.Success(c, updated) |
| } |
|
|
| |
| |
| func (h *OpsHandler) GetAdvancedSettings(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| cfg, err := h.opsService.GetOpsAdvancedSettings(c.Request.Context()) |
| if err != nil { |
| response.Error(c, http.StatusInternalServerError, "Failed to get advanced settings") |
| return |
| } |
| response.Success(c, cfg) |
| } |
|
|
| |
| |
| func (h *OpsHandler) UpdateAdvancedSettings(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| var req service.OpsAdvancedSettings |
| if err := c.ShouldBindJSON(&req); err != nil { |
| response.BadRequest(c, "Invalid request body") |
| return |
| } |
|
|
| updated, err := h.opsService.UpdateOpsAdvancedSettings(c.Request.Context(), &req) |
| if err != nil { |
| response.Error(c, http.StatusBadRequest, err.Error()) |
| return |
| } |
| response.Success(c, updated) |
| } |
|
|
| |
| |
| func (h *OpsHandler) GetMetricThresholds(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| cfg, err := h.opsService.GetMetricThresholds(c.Request.Context()) |
| if err != nil { |
| response.Error(c, http.StatusInternalServerError, "Failed to get metric thresholds") |
| return |
| } |
| response.Success(c, cfg) |
| } |
|
|
| |
| |
| func (h *OpsHandler) UpdateMetricThresholds(c *gin.Context) { |
| if h.opsService == nil { |
| response.Error(c, http.StatusServiceUnavailable, "Ops service not available") |
| return |
| } |
| if err := h.opsService.RequireMonitoringEnabled(c.Request.Context()); err != nil { |
| response.ErrorFrom(c, err) |
| return |
| } |
|
|
| var req service.OpsMetricThresholds |
| if err := c.ShouldBindJSON(&req); err != nil { |
| response.BadRequest(c, "Invalid request body") |
| return |
| } |
|
|
| updated, err := h.opsService.UpdateMetricThresholds(c.Request.Context(), &req) |
| if err != nil { |
| response.Error(c, http.StatusBadRequest, err.Error()) |
| return |
| } |
| response.Success(c, updated) |
| } |
|
|