Add "status" command to daemon for runtime health checking
- Introduced `CmdStatus` command to verify if the daemon is running via Unix socket communication. - Updated daemon logic to handle the "status" command and respond accordingly. - Extended localization files with translations for status command messages. - Registered `CmdStatus` in the main CLI application.
This commit is contained in:
48
internal/cmd/daemon/status.go
Normal file
48
internal/cmd/daemon/status.go
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
package daemon
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/i18n"
|
||||||
|
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/setting"
|
||||||
|
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/socket"
|
||||||
|
"github.com/urfave/cli/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CmdStatus() *cli.Command {
|
||||||
|
return &cli.Command{
|
||||||
|
Name: "status",
|
||||||
|
Usage: i18n.Lang.T("cmd.daemon.status.Usage"),
|
||||||
|
Description: i18n.Lang.T("cmd.daemon.status.Description"),
|
||||||
|
Action: cmdStatus,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func cmdStatus(_ context.Context, _ *cli.Command) error {
|
||||||
|
if setting.Config.SocketFile == "" {
|
||||||
|
return errors.New(i18n.Lang.T("socket file is not specified"))
|
||||||
|
}
|
||||||
|
|
||||||
|
sock, err := socket.NewSocketClient(setting.Config.SocketFile)
|
||||||
|
if err != nil {
|
||||||
|
return errors.New(i18n.Lang.T("daemon is not running"))
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
_ = sock.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
|
result, err := sock.Send("status")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if result != "ok" {
|
||||||
|
return errors.New(i18n.Lang.T("daemon is not running"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("ok")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -36,6 +36,7 @@ func NewMainApp(appVer AppVersion, defaultConfigPath string) *cli.Command {
|
|||||||
app.Commands = []*cli.Command{
|
app.Commands = []*cli.Command{
|
||||||
daemon.CmdStart(),
|
daemon.CmdStart(),
|
||||||
daemon.CmdStop(),
|
daemon.CmdStop(),
|
||||||
|
daemon.CmdStatus(),
|
||||||
}
|
}
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ func (d *daemon) socketCommand(command string, socket socket.Connect) error {
|
|||||||
case "stop":
|
case "stop":
|
||||||
d.stopCh <- struct{}{}
|
d.stopCh <- struct{}{}
|
||||||
return socket.Write("ok")
|
return socket.Write("ok")
|
||||||
|
case "status":
|
||||||
|
return socket.Write("ok")
|
||||||
default:
|
default:
|
||||||
_ = socket.Write("unknown command")
|
_ = socket.Write("unknown command")
|
||||||
return errors.New("unknown command")
|
return errors.New("unknown command")
|
||||||
|
|||||||
@@ -9,6 +9,9 @@
|
|||||||
"cmd.daemon.stop.Usage": "Stop the daemon",
|
"cmd.daemon.stop.Usage": "Stop the daemon",
|
||||||
"cmd.daemon.stop.Description": "Stops the daemon. Note: This will clear the nftables firewall rules!",
|
"cmd.daemon.stop.Description": "Stops the daemon. Note: This will clear the nftables firewall rules!",
|
||||||
|
|
||||||
|
"cmd.daemon.status.Usage": "Checking if the daemon is running",
|
||||||
|
"cmd.daemon.status.Description": "Checking if the daemon is running",
|
||||||
|
|
||||||
"Command error": "Command error",
|
"Command error": "Command error",
|
||||||
"invalid log level": "The log level specified in the settings is invalid. It is currently set to: {{.Level}}. Valid values: {{.Levels}}",
|
"invalid log level": "The log level specified in the settings is invalid. It is currently set to: {{.Level}}. Valid values: {{.Levels}}",
|
||||||
"invalid log encoding": "Invalid encoding setting. Currently set to: {{.Encoding}}. Valid values: {{.Encodings}}",
|
"invalid log encoding": "Invalid encoding setting. Currently set to: {{.Encoding}}. Valid values: {{.Encodings}}",
|
||||||
@@ -17,5 +20,6 @@
|
|||||||
"failed to open file for writing": "Permission denied: {{.File}}",
|
"failed to open file for writing": "Permission denied: {{.File}}",
|
||||||
"socket file is not specified": "Socket file is not specified",
|
"socket file is not specified": "Socket file is not specified",
|
||||||
"daemon stopped": "Daemon stopped",
|
"daemon stopped": "Daemon stopped",
|
||||||
"daemon stop failed": "Daemon stop failed"
|
"daemon stop failed": "Daemon stop failed",
|
||||||
|
"daemon is not running": "Daemon is not running"
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,9 @@
|
|||||||
"cmd.daemon.stop.Usage": "Демонды тоқтату",
|
"cmd.daemon.stop.Usage": "Демонды тоқтату",
|
||||||
"cmd.daemon.stop.Description": "Демонды тоқтатады. Ескерту: Бұл nftables брандмауэр ережелерін жояды!",
|
"cmd.daemon.stop.Description": "Демонды тоқтатады. Ескерту: Бұл nftables брандмауэр ережелерін жояды!",
|
||||||
|
|
||||||
|
"cmd.daemon.status.Usage": "Демонның жұмыс істеп тұрғанын тексеру",
|
||||||
|
"cmd.daemon.status.Description": "Демонның жұмыс істеп тұрғанын тексеру",
|
||||||
|
|
||||||
"Command error": "Командалық қате",
|
"Command error": "Командалық қате",
|
||||||
"invalid log level": "Параметрлерде көрсетілген журнал деңгейі жарамсыз. Ол қазір мына күйге орнатылған: {{.Level}}. Жарамды мәндер: {{.Levels}}",
|
"invalid log level": "Параметрлерде көрсетілген журнал деңгейі жарамсыз. Ол қазір мына күйге орнатылған: {{.Level}}. Жарамды мәндер: {{.Levels}}",
|
||||||
"invalid log encoding": "Жарамсыз кодтау параметрі. Қазіргі уақытта орнатылған: {{.Encoding}}. Жарамды мәндер: {{.Encodings}}",
|
"invalid log encoding": "Жарамсыз кодтау параметрі. Қазіргі уақытта орнатылған: {{.Encoding}}. Жарамды мәндер: {{.Encodings}}",
|
||||||
@@ -17,5 +20,6 @@
|
|||||||
"failed to open file for writing": "Кіруге тыйым салынды: {{.File}}",
|
"failed to open file for writing": "Кіруге тыйым салынды: {{.File}}",
|
||||||
"socket file is not specified": "сокет файлы көрсетілмеген",
|
"socket file is not specified": "сокет файлы көрсетілмеген",
|
||||||
"daemon stopped": "Жын тоқтатылды",
|
"daemon stopped": "Жын тоқтатылды",
|
||||||
"daemon stop failed": "Жынды тоқтату сәтсіз аяқталды"
|
"daemon stop failed": "Жынды тоқтату сәтсіз аяқталды",
|
||||||
|
"daemon is not running": "Демон жұмыс істемейді"
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,9 @@
|
|||||||
"cmd.daemon.stop.Usage": "Остановить демон",
|
"cmd.daemon.stop.Usage": "Остановить демон",
|
||||||
"cmd.daemon.stop.Description": "Останавливает демон. Примечание: это очистит правила брандмауэра nftables!",
|
"cmd.daemon.stop.Description": "Останавливает демон. Примечание: это очистит правила брандмауэра nftables!",
|
||||||
|
|
||||||
|
"cmd.daemon.status.Usage": "Проверка запущен ли демон",
|
||||||
|
"cmd.daemon.status.Description": "Проверка запущен ли демон",
|
||||||
|
|
||||||
"Command error": "Ошибка команды",
|
"Command error": "Ошибка команды",
|
||||||
"invalid log level": "В настройках указан не верный уровень log. Сейчас указан: {{.Level}}. Допустимые значения: {{.Levels}}",
|
"invalid log level": "В настройках указан не верный уровень log. Сейчас указан: {{.Level}}. Допустимые значения: {{.Levels}}",
|
||||||
"invalid log encoding": "Неверная настройка encoding. Сейчас указан: {{.Encoding}}. Допустимые значения: {{.Encodings}}",
|
"invalid log encoding": "Неверная настройка encoding. Сейчас указан: {{.Encoding}}. Допустимые значения: {{.Encodings}}",
|
||||||
@@ -17,5 +20,6 @@
|
|||||||
"failed to open file for writing": "Доступ запрещен: {{.File}}",
|
"failed to open file for writing": "Доступ запрещен: {{.File}}",
|
||||||
"socket file is not specified": "Файл сокета не указан",
|
"socket file is not specified": "Файл сокета не указан",
|
||||||
"daemon stopped": "Демон остановлен",
|
"daemon stopped": "Демон остановлен",
|
||||||
"daemon stop failed": "Остановка демона не удалась"
|
"daemon stop failed": "Остановка демона не удалась",
|
||||||
|
"daemon is not running": "Демон не запущен"
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user