mirror of
https://github.com/ultravioletrs/cocos.git
synced 2026-08-07 23:31:55 +00:00
fad3182638
* extract events service Signed-off-by: Sammy Oina <sammyoina@gmail.com> * major refactor and detangling Signed-off-by: Sammy Oina <sammyoina@gmail.com> * small fixes Signed-off-by: Sammy Oina <sammyoina@gmail.com> * handle tests better Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix lint Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix race condition Signed-off-by: Sammy Oina <sammyoina@gmail.com> * fix race Signed-off-by: Sammy Oina <sammyoina@gmail.com> * use plain interface Signed-off-by: Sammy Oina <sammyoina@gmail.com> * move mutex Signed-off-by: Sammy Oina <sammyoina@gmail.com> --------- Signed-off-by: Sammy Oina <sammyoina@gmail.com>
49 lines
1.0 KiB
Go
49 lines
1.0 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
|
|
}
|
|
|
|
func NewAlgorithm(logger *slog.Logger, eventsSvc events.Service, algoFile string, args []string) algorithm.Algorithm {
|
|
return &binary{
|
|
algoFile: algoFile,
|
|
stderr: &logging.Stderr{Logger: logger, EventSvc: eventsSvc},
|
|
stdout: &logging.Stdout{Logger: logger},
|
|
args: args,
|
|
}
|
|
}
|
|
|
|
func (b *binary) Run() error {
|
|
cmd := exec.Command(b.algoFile, b.args...)
|
|
cmd.Stderr = b.stderr
|
|
cmd.Stdout = b.stdout
|
|
|
|
if err := cmd.Start(); err != nil {
|
|
return fmt.Errorf("error starting algorithm: %v", err)
|
|
}
|
|
|
|
if err := cmd.Wait(); err != nil {
|
|
return fmt.Errorf("algorithm execution error: %v", err)
|
|
}
|
|
|
|
return nil
|
|
}
|