admin.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package caddy
  2. import (
  3. "fmt"
  4. "github.com/caddyserver/caddy/v2"
  5. "github.com/dunglas/frankenphp"
  6. "net/http"
  7. )
  8. type FrankenPHPAdmin struct{}
  9. // if the id starts with "admin.api" the module will register AdminRoutes via module.Routes()
  10. func (FrankenPHPAdmin) CaddyModule() caddy.ModuleInfo {
  11. return caddy.ModuleInfo{
  12. ID: "admin.api.frankenphp",
  13. New: func() caddy.Module { return new(FrankenPHPAdmin) },
  14. }
  15. }
  16. func (admin FrankenPHPAdmin) Routes() []caddy.AdminRoute {
  17. return []caddy.AdminRoute{
  18. {
  19. Pattern: "/frankenphp/workers/restart",
  20. Handler: caddy.AdminHandlerFunc(admin.restartWorkers),
  21. },
  22. {
  23. Pattern: "/frankenphp/threads",
  24. Handler: caddy.AdminHandlerFunc(admin.threads),
  25. },
  26. }
  27. }
  28. func (admin *FrankenPHPAdmin) restartWorkers(w http.ResponseWriter, r *http.Request) error {
  29. if r.Method != http.MethodPost {
  30. return admin.error(http.StatusMethodNotAllowed, fmt.Errorf("method not allowed"))
  31. }
  32. frankenphp.RestartWorkers()
  33. caddy.Log().Info("workers restarted from admin api")
  34. admin.success(w, "workers restarted successfully\n")
  35. return nil
  36. }
  37. func (admin *FrankenPHPAdmin) threads(w http.ResponseWriter, r *http.Request) error {
  38. return admin.success(w, frankenphp.ThreadDebugStatus())
  39. }
  40. func (admin *FrankenPHPAdmin) success(w http.ResponseWriter, message string) error {
  41. w.WriteHeader(http.StatusOK)
  42. _, err := w.Write([]byte(message))
  43. return err
  44. }
  45. func (admin *FrankenPHPAdmin) error(statusCode int, err error) error {
  46. return caddy.APIError{HTTPStatus: statusCode, Err: err}
  47. }