self_check.go 1.3 KB

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