mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-08-07 15:26:26 +00:00
ecad6514f3
* new agent structure Signed-off-by: Sammy Oina <sammyoina@gmail.com> * minor fixes and testing Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix lint Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix tests Signed-off-by: Sammy Oina <sammyoina@gmail.com> * cvm tests fix Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix test Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix cli test Signed-off-by: Sammy Oina <sammyoina@gmail.com> * rename Signed-off-by: Sammy Oina <sammyoina@gmail.com> * rename cvm to cvms plural Signed-off-by: Sammy Oina <sammyoina@gmail.com> * rename service Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix tests Signed-off-by: Sammy Oina <sammyoina@gmail.com> * remove context Signed-off-by: Sammy Oina <sammyoina@gmail.com> * refactor: reorder parameters in NewAlgorithm functions and update CVMClient to CVMSClient Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix(tests): update SendEvent mock to include an additional parameter Signed-off-by: Sammy Oina <sammyoina@gmail.com> * move expectations Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix(tests): move event initialization to the correct scope in service tests Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix(tests): update SendEvent mock to use EXPECT instead of On in service tests Signed-off-by: Sammy Oina <sammyoina@gmail.com> --------- Signed-off-by: Sammy Oina <sammyoina@gmail.com>
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
// Copyright (c) Ultraviolet
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
package binary
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log/slog"
|
|
"os/exec"
|
|
|
|
"github.com/ultravioletrs/cocos/agent/algorithm"
|
|
"github.com/ultravioletrs/cocos/agent/algorithm/logging"
|
|
"github.com/ultravioletrs/cocos/agent/events"
|
|
)
|
|
|
|
var _ algorithm.Algorithm = (*binary)(nil)
|
|
|
|
type binary struct {
|
|
algoFile string
|
|
stderr io.Writer
|
|
stdout io.Writer
|
|
args []string
|
|
cmd *exec.Cmd
|
|
}
|
|
|
|
func NewAlgorithm(logger *slog.Logger, eventsSvc events.Service, algoFile string, args []string, cmpID string) algorithm.Algorithm {
|
|
return &binary{
|
|
algoFile: algoFile,
|
|
stderr: &logging.Stderr{Logger: logger, EventSvc: eventsSvc, CmpID: cmpID},
|
|
stdout: &logging.Stdout{Logger: logger},
|
|
args: args,
|
|
}
|
|
}
|
|
|
|
func (b *binary) Run() error {
|
|
b.cmd = exec.Command(b.algoFile, b.args...)
|
|
b.cmd.Stderr = b.stderr
|
|
b.cmd.Stdout = b.stdout
|
|
|
|
if err := b.cmd.Start(); err != nil {
|
|
return fmt.Errorf("error starting algorithm: %v", err)
|
|
}
|
|
|
|
if err := b.cmd.Wait(); err != nil {
|
|
return fmt.Errorf("algorithm execution error: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (b *binary) Stop() error {
|
|
if b.cmd == nil {
|
|
return nil
|
|
}
|
|
|
|
if b.cmd.ProcessState != nil && b.cmd.ProcessState.Exited() {
|
|
return nil
|
|
}
|
|
|
|
if err := b.cmd.Process.Kill(); err != nil {
|
|
return fmt.Errorf("error stopping algorithm: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|