services_handlers.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package api
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "strconv"
  6. "proxmox-router/internal/logging"
  7. )
  8. func (s *Server) handleListServices(w http.ResponseWriter, r *http.Request) {
  9. if s.servicesMgr == nil {
  10. writeError(w, http.StatusServiceUnavailable, "services manager not configured")
  11. return
  12. }
  13. list := s.servicesMgr.ListServices()
  14. writeJSON(w, http.StatusOK, list)
  15. }
  16. func (s *Server) handleUpdateService(w http.ResponseWriter, r *http.Request) {
  17. if s.servicesMgr == nil {
  18. writeError(w, http.StatusServiceUnavailable, "services manager not configured")
  19. return
  20. }
  21. name := r.PathValue("name")
  22. var req struct {
  23. Port int `json:"port"`
  24. Disabled bool `json:"disabled"`
  25. Comment string `json:"comment"`
  26. }
  27. if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
  28. writeError(w, http.StatusBadRequest, "invalid request body")
  29. return
  30. }
  31. if err := s.servicesMgr.SetService(name, req.Port, req.Disabled); err != nil {
  32. writeError(w, http.StatusBadRequest, err.Error())
  33. return
  34. }
  35. svc, _ := s.servicesMgr.GetService(name)
  36. writeJSON(w, http.StatusOK, svc)
  37. }
  38. func (s *Server) handleSetServiceState(w http.ResponseWriter, r *http.Request) {
  39. if s.servicesMgr == nil {
  40. writeError(w, http.StatusServiceUnavailable, "services manager not configured")
  41. return
  42. }
  43. name := r.PathValue("name")
  44. var req struct {
  45. Disabled bool `json:"disabled"`
  46. }
  47. if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
  48. writeError(w, http.StatusBadRequest, "invalid request body")
  49. return
  50. }
  51. if err := s.servicesMgr.SetServiceState(name, req.Disabled); err != nil {
  52. writeError(w, http.StatusBadRequest, err.Error())
  53. return
  54. }
  55. svc, _ := s.servicesMgr.GetService(name)
  56. writeJSON(w, http.StatusOK, svc)
  57. }
  58. func (s *Server) handleListLogs(w http.ResponseWriter, r *http.Request) {
  59. limit := 100
  60. if lStr := r.URL.Query().Get("limit"); lStr != "" {
  61. if lVal, err := strconv.Atoi(lStr); err == nil && lVal > 0 {
  62. limit = lVal
  63. }
  64. }
  65. filter := r.URL.Query().Get("filter")
  66. if filter == "" {
  67. filter = r.URL.Query().Get("where")
  68. }
  69. logger := logging.GetLogger()
  70. logs := logger.List(limit, filter)
  71. writeJSON(w, http.StatusOK, map[string]any{
  72. "total": len(logs),
  73. "logs": logs,
  74. })
  75. }