health.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package v2
  2. import (
  3. "net/http"
  4. "net/url"
  5. "os"
  6. "path/filepath"
  7. "github.com/IceWhaleTech/CasaOS/codegen"
  8. "github.com/IceWhaleTech/CasaOS/pkg/utils/file"
  9. "github.com/IceWhaleTech/CasaOS/service"
  10. "github.com/labstack/echo/v4"
  11. "github.com/mholt/archiver/v3"
  12. )
  13. func (s *CasaOS) GetHealthServices(ctx echo.Context) error {
  14. services, err := service.MyService.Health().Services()
  15. if err != nil {
  16. message := err.Error()
  17. return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
  18. Message: &message,
  19. })
  20. }
  21. return ctx.JSON(http.StatusOK, codegen.GetHealthServicesOK{
  22. Data: &codegen.HealthServices{
  23. Running: services[true],
  24. NotRunning: services[false],
  25. },
  26. })
  27. }
  28. func (s *CasaOS) GetHealthPorts(ctx echo.Context) error {
  29. tcpPorts, udpPorts, err := service.MyService.Health().Ports()
  30. if err != nil {
  31. message := err.Error()
  32. return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
  33. Message: &message,
  34. })
  35. }
  36. return ctx.JSON(http.StatusOK, codegen.GetHealthPortsOK{
  37. Data: &codegen.HealthPorts{
  38. TCP: &tcpPorts,
  39. UDP: &udpPorts,
  40. },
  41. })
  42. }
  43. func (c *CasaOS) GetHealthlogs(ctx echo.Context) error {
  44. var name, currentPath, commonDir, extension string
  45. var err error
  46. var ar archiver.Writer
  47. fileList, err := os.ReadDir("/var/log/casaos")
  48. if err != nil {
  49. message := err.Error()
  50. return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
  51. Message: &message,
  52. })
  53. }
  54. extension, ar, err = file.GetCompressionAlgorithm("zip")
  55. if err != nil {
  56. ctx.Response().Header().Set("Content-Type", "application/json")
  57. message := err.Error()
  58. return ctx.JSON(http.StatusNotFound, codegen.ResponseInternalServerError{
  59. Message: &message,
  60. })
  61. }
  62. err = ar.Create(ctx.Response().Writer)
  63. if err != nil {
  64. ctx.Response().Header().Set("Content-Type", "application/json")
  65. message := err.Error()
  66. return ctx.JSON(http.StatusNotFound, codegen.ResponseInternalServerError{
  67. Message: &message,
  68. })
  69. }
  70. defer ar.Close()
  71. commonDir = "/var/log/casaos"
  72. currentPath = filepath.Base(commonDir)
  73. name = currentPath
  74. name += extension
  75. ctx.Response().Header().Add("Content-Type", "application/octet-stream")
  76. ctx.Response().Header().Add("Content-Transfer-Encoding", "binary")
  77. ctx.Response().Header().Add("Cache-Control", "no-cache")
  78. ctx.Response().Header().Add("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(name))
  79. for _, fname := range fileList {
  80. err := file.AddFile(ar, filepath.Join("/var/log/casaos", fname.Name()), commonDir)
  81. if err != nil {
  82. message := err.Error()
  83. return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
  84. Message: &message,
  85. })
  86. }
  87. }
  88. return nil
  89. }