nginx-ui/internal/self_check/tasks.go
Jacky 202ac03537
Some checks are pending
Build / build_app (push) Waiting to run
Build / build (386, linux) (push) Blocked by required conditions
Build / build (386, windows) (push) Blocked by required conditions
Build / build (amd64, darwin) (push) Blocked by required conditions
Build / build (amd64, linux) (push) Blocked by required conditions
Build / build (amd64, windows) (push) Blocked by required conditions
Build / build (arm, 5, linux) (push) Blocked by required conditions
Build / build (arm, 6, linux) (push) Blocked by required conditions
Build / build (arm, 7, linux) (push) Blocked by required conditions
Build / build (arm64, darwin) (push) Blocked by required conditions
Build / build (arm64, linux) (push) Blocked by required conditions
Build / build (arm64, windows) (push) Blocked by required conditions
Build / build (loong64, linux) (push) Blocked by required conditions
Build / build (mips, linux) (push) Blocked by required conditions
Build / build (mips64, linux) (push) Blocked by required conditions
Build / build (mips64le, linux) (push) Blocked by required conditions
Build / build (mipsle, linux) (push) Blocked by required conditions
Build / build (riscv64, linux) (push) Blocked by required conditions
Build / docker-build (push) Blocked by required conditions
CodeQL / Analyze (go) (push) Waiting to run
CodeQL / Analyze (javascript-typescript) (push) Waiting to run
feat(self-check): check stream if stream loaded #1028
2025-05-09 08:52:47 +08:00

130 lines
4.2 KiB
Go

package self_check
import (
"github.com/0xJacky/Nginx-UI/internal/helper"
"github.com/0xJacky/Nginx-UI/internal/translation"
"github.com/elliotchance/orderedmap/v3"
"github.com/uozi-tech/cosy"
"github.com/0xJacky/Nginx-UI/internal/nginx"
)
type Task struct {
Key string
Name *translation.Container
Description *translation.Container
CheckFunc func() error
FixFunc func() error
}
type ReportStatus string
const (
ReportStatusSuccess ReportStatus = "success"
ReportStatusWarning ReportStatus = "warning"
ReportStatusError ReportStatus = "error"
)
type Report struct {
Key string `json:"key"`
Name *translation.Container `json:"name"`
Description *translation.Container `json:"description,omitempty"`
Fixable bool `json:"fixable"`
Err *cosy.Error `json:"err,omitempty"`
Status ReportStatus `json:"status"`
}
type Reports []*Report
var selfCheckTasks = []*Task{
{
Key: "Directory-Sites",
Name: translation.C("Sites directory exists"),
Description: translation.C("Check if the " +
"sites-available and sites-enabled directories are " +
"under the nginx configuration directory"),
CheckFunc: CheckSitesDirectory,
FixFunc: FixSitesDirectory,
},
{
Key: "NginxConf-Sites-Enabled",
Name: translation.C("Nginx.conf includes sites-enabled directory"),
Description: translation.C("Check if the nginx.conf includes the " +
"sites-enabled directory"),
CheckFunc: CheckNginxConfIncludeSites,
FixFunc: FixNginxConfIncludeSites,
},
{
Key: "NginxConf-ConfD",
Name: translation.C("Nginx.conf includes conf.d directory"),
Description: translation.C("Check if the nginx.conf includes the " +
"conf.d directory"),
CheckFunc: CheckNginxConfIncludeConfD,
FixFunc: FixNginxConfIncludeConfD,
},
{
Key: "NginxConf-Directory",
Name: translation.C("Nginx configuration directory exists"),
Description: translation.C("Check if the nginx configuration directory exists"),
CheckFunc: CheckConfigDir,
},
{
Key: "NginxConf-Entry-File",
Name: translation.C("Nginx configuration entry file exists"),
Description: translation.C("Check if the nginx configuration entry file exists"),
CheckFunc: CheckConfigEntryFile,
},
{
Key: "NginxPID-Path",
Name: translation.C("Nginx PID path exists"),
Description: translation.C("Check if the nginx PID path exists"),
CheckFunc: CheckPIDPath,
},
{
Key: "NginxAccessLog-Path",
Name: translation.C("Nginx access log path exists"),
Description: translation.C("Check if the nginx access log path exists"),
CheckFunc: CheckAccessLogPath,
},
{
Key: "NginxErrorLog-Path",
Name: translation.C("Nginx error log path exists"),
Description: translation.C("Check if the nginx error log path exists"),
CheckFunc: CheckErrorLogPath,
},
}
var selfCheckTaskMap = orderedmap.NewOrderedMap[string, *Task]()
func init() {
if nginx.IsModuleLoaded(nginx.ModuleStream) {
selfCheckTasks = append(selfCheckTasks, &Task{
Key: "Directory-Streams",
Name: translation.C("Streams directory exists"),
Description: translation.C("Check if the " +
"streams-available and streams-enabled directories are " +
"under the nginx configuration directory"),
CheckFunc: CheckStreamDirectory,
FixFunc: FixStreamDirectory,
}, &Task{
Key: "NginxConf-Streams-Enabled",
Name: translation.C("Nginx.conf includes streams-enabled directory"),
Description: translation.C("Check if the nginx.conf includes the " +
"streams-enabled directory"),
CheckFunc: CheckNginxConfIncludeStreams,
FixFunc: FixNginxConfIncludeStreams,
})
}
if helper.InNginxUIOfficialDocker() {
selfCheckTasks = append(selfCheckTasks, &Task{
Name: translation.C("Docker socket exists"),
Description: translation.C("Check if /var/run/docker.sock exists. If you are using Nginx UI Official " +
"Docker Image, please make sure the docker socket is mounted like this: `-" +
"v /var/run/docker.sock:/var/run/docker.sock`."),
CheckFunc: CheckDockerSocket,
})
}
for _, task := range selfCheckTasks {
selfCheckTaskMap.Set(task.Key, task)
}
}