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:
2025-11-02 21:10:27 +05:00
parent c8a0df90c2
commit d9cfecfb1e
6 changed files with 66 additions and 3 deletions

View 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
}

View File

@@ -36,6 +36,7 @@ func NewMainApp(appVer AppVersion, defaultConfigPath string) *cli.Command {
app.Commands = []*cli.Command{
daemon.CmdStart(),
daemon.CmdStop(),
daemon.CmdStatus(),
}
return app

View File

@@ -95,6 +95,8 @@ func (d *daemon) socketCommand(command string, socket socket.Connect) error {
case "stop":
d.stopCh <- struct{}{}
return socket.Write("ok")
case "status":
return socket.Write("ok")
default:
_ = socket.Write("unknown command")
return errors.New("unknown command")

View File

@@ -9,6 +9,9 @@
"cmd.daemon.stop.Usage": "Stop the daemon",
"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",
"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}}",
@@ -17,5 +20,6 @@
"failed to open file for writing": "Permission denied: {{.File}}",
"socket file is not specified": "Socket file is not specified",
"daemon stopped": "Daemon stopped",
"daemon stop failed": "Daemon stop failed"
"daemon stop failed": "Daemon stop failed",
"daemon is not running": "Daemon is not running"
}

View File

@@ -9,6 +9,9 @@
"cmd.daemon.stop.Usage": "Демонды тоқтату",
"cmd.daemon.stop.Description": "Демонды тоқтатады. Ескерту: Бұл nftables брандмауэр ережелерін жояды!",
"cmd.daemon.status.Usage": "Демонның жұмыс істеп тұрғанын тексеру",
"cmd.daemon.status.Description": "Демонның жұмыс істеп тұрғанын тексеру",
"Command error": "Командалық қате",
"invalid log level": "Параметрлерде көрсетілген журнал деңгейі жарамсыз. Ол қазір мына күйге орнатылған: {{.Level}}. Жарамды мәндер: {{.Levels}}",
"invalid log encoding": "Жарамсыз кодтау параметрі. Қазіргі уақытта орнатылған: {{.Encoding}}. Жарамды мәндер: {{.Encodings}}",
@@ -17,5 +20,6 @@
"failed to open file for writing": "Кіруге тыйым салынды: {{.File}}",
"socket file is not specified": "сокет файлы көрсетілмеген",
"daemon stopped": "Жын тоқтатылды",
"daemon stop failed": "Жынды тоқтату сәтсіз аяқталды"
"daemon stop failed": "Жынды тоқтату сәтсіз аяқталды",
"daemon is not running": "Демон жұмыс істемейді"
}

View File

@@ -9,6 +9,9 @@
"cmd.daemon.stop.Usage": "Остановить демон",
"cmd.daemon.stop.Description": "Останавливает демон. Примечание: это очистит правила брандмауэра nftables!",
"cmd.daemon.status.Usage": "Проверка запущен ли демон",
"cmd.daemon.status.Description": "Проверка запущен ли демон",
"Command error": "Ошибка команды",
"invalid log level": "В настройках указан не верный уровень log. Сейчас указан: {{.Level}}. Допустимые значения: {{.Levels}}",
"invalid log encoding": "Неверная настройка encoding. Сейчас указан: {{.Encoding}}. Допустимые значения: {{.Encodings}}",
@@ -17,5 +20,6 @@
"failed to open file for writing": "Доступ запрещен: {{.File}}",
"socket file is not specified": "Файл сокета не указан",
"daemon stopped": "Демон остановлен",
"daemon stop failed": "Остановка демона не удалась"
"daemon stop failed": "Остановка демона не удалась",
"daemon is not running": "Демон не запущен"
}