feat: добавлен флаг --now для немедленного запуска всех проверок
- Добавлен флаг --now (-n) для запуска всех зарегистрированных проверок сразу при старте - Программа завершается после выполнения всех проверок при использовании --now - Исправлена ошибка в плагине binary-packages с store.get() - Исправлена ошибка с атрибутом .text в плагине binary-packages - Использован sync.WaitGroup для корректного ожидания завершения всех проверок
This commit is contained in:
12
main.go
12
main.go
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user