Files
oc-schedulerd/daemons/execute_monitor_local.go

101 lines
2.7 KiB
Go
Raw Normal View History

2024-07-29 15:46:44 +02:00
package daemons
2024-08-09 18:44:33 +02:00
import (
2024-08-20 15:24:46 +02:00
"fmt"
"oc-schedulerd/conf"
2026-03-26 11:14:29 +01:00
"os"
2024-08-09 18:44:33 +02:00
"os/exec"
2026-03-26 11:14:29 +01:00
"time"
2026-02-03 16:12:57 +01:00
oclib "cloud.o-forge.io/core/oc-lib"
2026-02-25 13:19:46 +01:00
"cloud.o-forge.io/core/oc-lib/models/common/enum"
"github.com/rs/zerolog"
2024-08-09 18:44:33 +02:00
)
2024-07-29 15:46:44 +02:00
type LocalMonitor struct {
2026-03-26 11:14:29 +01:00
ExecutionID string
PeerID string
Duration int
LokiUrl string
MongoUrl string
DBName string
ScheduledTime time.Time
2024-07-29 15:46:44 +02:00
}
2026-03-26 11:14:29 +01:00
func NewLocalMonitor(UUID string, peerId string, duration int, scheduledTime time.Time) Executor {
return &LocalMonitor{
2026-03-26 11:14:29 +01:00
ExecutionID: UUID,
PeerID: peerId,
Duration: duration,
ScheduledTime: scheduledTime,
2024-07-29 15:46:44 +02:00
}
}
// func (lm *LocalMonitor) LaunchLocalMonitor() {
// if lm.ExecutionID == "" {
// lm.Logger.Error().Msg("Missing parameter in LocalMonitor")
// }
// }
func (lm *LocalMonitor) PrepareMonitorExec() []string {
2025-02-18 15:00:17 +01:00
args := []string{
"-e", lm.ExecutionID,
"-p", lm.PeerID,
2026-03-26 11:14:29 +01:00
"-H", conf.GetConfig().KubeHost,
"-c", conf.GetConfig().KubeCA,
"-C", conf.GetConfig().KubeCert,
"-D", conf.GetConfig().KubeData,
"-s", fmt.Sprintf("%d", lm.ScheduledTime.Unix()),
2025-02-18 15:00:17 +01:00
}
2024-08-20 16:14:10 +02:00
if lm.Duration > 0 {
args = append(args, "-t", fmt.Sprintf("%d", lm.Duration))
}
return args
}
2026-03-26 11:14:29 +01:00
func (lm *LocalMonitor) LaunchMonitor(args []string, execID string, ns string, l zerolog.Logger) {
2024-08-20 16:14:10 +02:00
cmd := exec.Command(conf.GetConfig().MonitorPath, args...)
2026-03-26 11:14:29 +01:00
cmd.Env = append(os.Environ(),
"OC_MONGO_URL="+oclib.GetConfig().MongoUrl,
"OC_MONGO_DATABASE="+oclib.GetConfig().MongoDatabase,
"OC_LOKI_URL="+oclib.GetConfig().LokiUrl,
"OC_NATS_URL="+oclib.GetConfig().NATSUrl,
)
fmt.Println("LaunchMonitor LOCAL")
l.Info().Str("binary", conf.GetConfig().MonitorPath).Strs("args", args).Msg("Starting oc-monitord")
stdoutMonitord, err := cmd.StdoutPipe()
if err != nil {
2026-03-26 11:14:29 +01:00
l.Error().Err(err).Msg("Could not retrieve stdout pipe for oc-monitord")
oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), nil).UpdateOne(map[string]interface{}{
"state": enum.FAILURE.EnumIndex(),
}, execID)
return
}
stderrMonitord, err := cmd.StderrPipe()
if err != nil {
l.Error().Err(err).Msg("Could not retrieve stderr pipe for oc-monitord")
2026-02-25 13:19:46 +01:00
oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), nil).UpdateOne(map[string]interface{}{
"state": enum.FAILURE.EnumIndex(),
}, execID)
return
}
err = cmd.Start()
if err != nil {
2026-03-26 11:14:29 +01:00
l.Error().Err(err).Str("execution", lm.ExecutionID).Msg("Could not start oc-monitord")
2026-02-25 13:19:46 +01:00
oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.WORKFLOW_EXECUTION), nil).UpdateOne(map[string]interface{}{
"state": enum.FAILURE.EnumIndex(),
}, execID)
return
2024-08-09 18:44:33 +02:00
}
2026-03-26 11:14:29 +01:00
l.Info().Int("pid", cmd.Process.Pid).Msg("oc-monitord started")
go logExecution(stderrMonitord, l)
logExecution(stdoutMonitord, l)
2024-07-29 15:46:44 +02:00
}