100 lines
2.7 KiB
Go
100 lines
2.7 KiB
Go
package v2
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/IceWhaleTech/CasaOS/codegen"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
|
"github.com/IceWhaleTech/CasaOS/service"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/mholt/archiver/v3"
|
|
)
|
|
|
|
func (s *CasaOS) GetHealthServices(ctx echo.Context) error {
|
|
services, err := service.MyService.Health().Services()
|
|
if err != nil {
|
|
message := err.Error()
|
|
return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
|
|
Message: &message,
|
|
})
|
|
}
|
|
|
|
return ctx.JSON(http.StatusOK, codegen.GetHealthServicesOK{
|
|
Data: &codegen.HealthServices{
|
|
Running: services[true],
|
|
NotRunning: services[false],
|
|
},
|
|
})
|
|
}
|
|
|
|
func (s *CasaOS) GetHealthPorts(ctx echo.Context) error {
|
|
tcpPorts, udpPorts, err := service.MyService.Health().Ports()
|
|
if err != nil {
|
|
message := err.Error()
|
|
return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
|
|
Message: &message,
|
|
})
|
|
}
|
|
|
|
return ctx.JSON(http.StatusOK, codegen.GetHealthPortsOK{
|
|
Data: &codegen.HealthPorts{
|
|
TCP: &tcpPorts,
|
|
UDP: &udpPorts,
|
|
},
|
|
})
|
|
}
|
|
func (c *CasaOS) GetHealthlogs(ctx echo.Context) error {
|
|
var name, currentPath, commonDir, extension string
|
|
var err error
|
|
var ar archiver.Writer
|
|
fileList, err := os.ReadDir("/var/log/casaos")
|
|
if err != nil {
|
|
message := err.Error()
|
|
return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
|
|
Message: &message,
|
|
})
|
|
}
|
|
extension, ar, err = file.GetCompressionAlgorithm("zip")
|
|
if err != nil {
|
|
ctx.Response().Header().Set("Content-Type", "application/json")
|
|
message := err.Error()
|
|
return ctx.JSON(http.StatusNotFound, codegen.ResponseInternalServerError{
|
|
Message: &message,
|
|
})
|
|
}
|
|
err = ar.Create(ctx.Response().Writer)
|
|
if err != nil {
|
|
ctx.Response().Header().Set("Content-Type", "application/json")
|
|
message := err.Error()
|
|
return ctx.JSON(http.StatusNotFound, codegen.ResponseInternalServerError{
|
|
Message: &message,
|
|
})
|
|
}
|
|
defer ar.Close()
|
|
|
|
commonDir = "/var/log/casaos"
|
|
|
|
currentPath = filepath.Base(commonDir)
|
|
|
|
name = currentPath
|
|
name += extension
|
|
ctx.Response().Header().Add("Content-Type", "application/octet-stream")
|
|
ctx.Response().Header().Add("Content-Transfer-Encoding", "binary")
|
|
ctx.Response().Header().Add("Cache-Control", "no-cache")
|
|
ctx.Response().Header().Add("Content-Disposition", "attachment; filename*=utf-8''"+url.PathEscape(name))
|
|
|
|
for _, fname := range fileList {
|
|
err := file.AddFile(ar, filepath.Join("/var/log/casaos", fname.Name()), commonDir)
|
|
if err != nil {
|
|
message := err.Error()
|
|
return ctx.JSON(http.StatusInternalServerError, codegen.ResponseInternalServerError{
|
|
Message: &message,
|
|
})
|
|
}
|
|
|
|
}
|
|
return nil
|
|
}
|