123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // Implementation of GetDetailedStatus API
- // This feature is designed to address Issue #850, providing Nginx load monitoring functionality similar to BT Panel
- // Returns detailed Nginx status information, including request statistics, connections, worker processes, and other data
- package nginx
- import (
- "net/http"
- "strings"
- "github.com/0xJacky/Nginx-UI/internal/nginx"
- "github.com/0xJacky/Nginx-UI/internal/performance"
- "github.com/gin-gonic/gin"
- "github.com/uozi-tech/cosy"
- )
- // NginxPerformanceInfo stores Nginx performance-related information
- type NginxPerformanceInfo struct {
- // Basic status information
- performance.StubStatusData
- // Process-related information
- performance.NginxProcessInfo
- // Configuration information
- performance.NginxConfigInfo
- }
- // GetDetailStatus retrieves detailed Nginx status information
- func GetDetailStatus(c *gin.Context) {
- response := performance.GetPerformanceData()
- c.JSON(http.StatusOK, response)
- }
- // CheckStubStatus gets Nginx stub_status module status
- func CheckStubStatus(c *gin.Context) {
- stubStatus := performance.GetStubStatus()
- c.JSON(http.StatusOK, stubStatus)
- }
- // ToggleStubStatus enables or disables stub_status module
- func ToggleStubStatus(c *gin.Context) {
- var json struct {
- Enable bool `json:"enable"`
- }
- if !cosy.BindAndValid(c, &json) {
- return
- }
- stubStatus := performance.GetStubStatus()
- // If current status matches desired status, no action needed
- if stubStatus.Enabled == json.Enable {
- c.JSON(http.StatusOK, stubStatus)
- return
- }
- var err error
- if json.Enable {
- err = performance.EnableStubStatus()
- } else {
- err = performance.DisableStubStatus()
- }
- if err != nil {
- cosy.ErrHandler(c, err)
- return
- }
- // Reload Nginx configuration
- reloadOutput, err := nginx.Reload()
- if err != nil {
- cosy.ErrHandler(c, err)
- return
- }
- if len(reloadOutput) > 0 && (strings.Contains(strings.ToLower(reloadOutput), "error") ||
- strings.Contains(strings.ToLower(reloadOutput), "failed")) {
- cosy.ErrHandler(c, cosy.WrapErrorWithParams(nginx.ErrReloadFailed, reloadOutput))
- return
- }
- // Check status after operation
- newStubStatus := performance.GetStubStatus()
- c.JSON(http.StatusOK, newStubStatus)
- }
|