self_check.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package self_check
  2. import (
  3. "errors"
  4. "github.com/0xJacky/Nginx-UI/internal/helper"
  5. "github.com/uozi-tech/cosy"
  6. )
  7. type Task struct {
  8. Name string
  9. CheckFunc func() error
  10. FixFunc func() error
  11. }
  12. type Report struct {
  13. Name string `json:"name"`
  14. Err *cosy.Error `json:"err,omitempty"`
  15. }
  16. type Reports []*Report
  17. var selfCheckTasks = []*Task{
  18. {
  19. Name: "Directory-Sites",
  20. CheckFunc: CheckSitesDirectory,
  21. FixFunc: FixSitesDirectory,
  22. },
  23. {
  24. Name: "Directory-Streams",
  25. CheckFunc: CheckStreamDirectory,
  26. FixFunc: FixStreamDirectory,
  27. },
  28. {
  29. Name: "NginxConf-Sites-Enabled",
  30. CheckFunc: CheckNginxConfIncludeSites,
  31. FixFunc: FixNginxConfIncludeSites,
  32. },
  33. {
  34. Name: "NginxConf-Streams-Enabled",
  35. CheckFunc: CheckNginxConfIncludeStreams,
  36. FixFunc: FixNginxConfIncludeStreams,
  37. },
  38. {
  39. Name: "NginxConf-ConfD",
  40. CheckFunc: CheckNginxConfIncludeConfD,
  41. FixFunc: FixNginxConfIncludeConfD,
  42. },
  43. }
  44. var selfCheckTaskMap = make(map[string]*Task)
  45. func init() {
  46. for _, task := range selfCheckTasks {
  47. selfCheckTaskMap[task.Name] = task
  48. }
  49. if helper.InNginxUIOfficialDocker() {
  50. selfCheckTasks = append(selfCheckTasks, &Task{
  51. Name: "Docker-Socket",
  52. CheckFunc: CheckDockerSocket,
  53. })
  54. }
  55. }
  56. func Run() (reports Reports) {
  57. reports = make(Reports, 0)
  58. for _, task := range selfCheckTasks {
  59. var cErr *cosy.Error
  60. if err := task.CheckFunc(); err != nil {
  61. errors.As(err, &cErr)
  62. }
  63. reports = append(reports, &Report{
  64. Name: task.Name,
  65. Err: cErr,
  66. })
  67. }
  68. return
  69. }
  70. func AttemptFix(taskName string) (err error) {
  71. task, ok := selfCheckTaskMap[taskName]
  72. if !ok {
  73. return ErrTaskNotFound
  74. }
  75. return task.FixFunc()
  76. }