feat: добавлен флаг --now для немедленного запуска всех проверок

- Добавлен флаг --now (-n) для запуска всех зарегистрированных проверок сразу при старте
- Программа завершается после выполнения всех проверок при использовании --now
- Исправлена ошибка в плагине binary-packages с store.get()
- Исправлена ошибка с атрибутом .text в плагине binary-packages
- Использован sync.WaitGroup для корректного ожидания завершения всех проверок
This commit is contained in:
2025-08-15 22:50:34 +03:00
parent cef456b962
commit 2ae44a466e

12
main.go
View File

@@ -24,7 +24,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"strings" "strings"
"time" "sync"
"github.com/caarlos0/env/v8" "github.com/caarlos0/env/v8"
"github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5"
@@ -156,14 +156,17 @@ func main() {
if len(registeredFns) > 0 { if len(registeredFns) > 0 {
log.Info("Running all registered plugin checks immediately").Int("functions", len(registeredFns)).Send() log.Info("Running all registered plugin checks immediately").Int("functions", len(registeredFns)).Send()
var wg sync.WaitGroup
for key, fn := range registeredFns { for key, fn := range registeredFns {
parts := strings.Split(key, ":") parts := strings.Split(key, ":")
pluginName := parts[0] pluginName := parts[0]
log.Info("Executing registered function").Str("plugin", pluginName).Str("function", fn.Name()).Send() log.Info("Executing registered function").Str("plugin", pluginName).Str("function", fn.Name()).Send()
wg.Add(1)
// Запускаем функцию в горутине для параллельного выполнения // Запускаем функцию в горутине для параллельного выполнения
go func(function *starlark.Function, plugin string) { go func(function *starlark.Function, plugin string) {
defer wg.Done()
thread := &starlark.Thread{Name: plugin} thread := &starlark.Thread{Name: plugin}
_, err := starlark.Call(thread, function, nil, nil) _, err := starlark.Call(thread, function, nil, nil)
if err != nil { if err != nil {
@@ -174,11 +177,14 @@ func main() {
}(fn, pluginName) }(fn, pluginName)
} }
// Даём время на выполнение функций // Ждём завершения всех функций
log.Info("Waiting for immediate checks to complete...").Send() log.Info("Waiting for immediate checks to complete...").Send()
time.Sleep(5 * time.Second) wg.Wait()
log.Info("All checks completed, exiting").Send()
return // Выходим после выполнения всех проверок
} else { } else {
log.Warn("No functions registered with run_every, nothing to run immediately").Send() log.Warn("No functions registered with run_every, nothing to run immediately").Send()
return
} }
} }