87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"git.ohea.xyz/cursorius/runner/config"
|
|
"git.ohea.xyz/cursorius/runner/runner"
|
|
"github.com/op/go-logging"
|
|
"nhooyr.io/websocket"
|
|
"nhooyr.io/websocket/wsjson"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
var log = logging.MustGetLogger("cursorius-server")
|
|
|
|
type Register struct {
|
|
Secret string
|
|
Id string
|
|
Tags []string
|
|
}
|
|
|
|
func main() {
|
|
|
|
var format = logging.MustStringFormatter(
|
|
`%{color}%{time:15:04:05.000} %{level:.4s}:%{color:reset} %{message}`,
|
|
)
|
|
|
|
backend := logging.NewLogBackend(os.Stderr, "", 0)
|
|
backendFormatter := logging.NewBackendFormatter(backend, format)
|
|
backendLeveled := logging.AddModuleLevel(backendFormatter)
|
|
backendLeveled.SetLevel(logging.DEBUG, "")
|
|
|
|
logging.SetBackend(backendLeveled)
|
|
|
|
log.Info("Starting cursorius-runner")
|
|
|
|
configData, isNew, err := config.GetConfig()
|
|
if err != nil {
|
|
log.Fatalf("Could not get configuration: %v", err)
|
|
os.Exit(1)
|
|
}
|
|
if isNew {
|
|
log.Infof("New config file created at %s, please update and relaunch", *configData.ConfigFile)
|
|
os.Exit(0)
|
|
}
|
|
|
|
registrationData := Register{
|
|
Secret: configData.Config.Secret,
|
|
Id: configData.Config.Id,
|
|
Tags: configData.Config.Tags,
|
|
}
|
|
|
|
connectString := fmt.Sprintf("ws://%v/runner", configData.Config.ServerUrl)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
|
|
defer cancel()
|
|
|
|
conn, _, err := websocket.Dial(ctx, connectString, nil)
|
|
if err != nil {
|
|
log.Fatalf("Could not connect to server at \"%v\", %v", connectString, err)
|
|
os.Exit(1)
|
|
}
|
|
defer conn.Close(websocket.StatusInternalError, "the sky is falling")
|
|
|
|
err = wsjson.Write(ctx, conn, registrationData)
|
|
if err != nil {
|
|
log.Fatalf("Could not send registration information to server: %v", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
for {
|
|
var job runner.Job
|
|
err = wsjson.Read(ctx, conn, &job)
|
|
if err != nil {
|
|
log.Fatalf("Could not receive from connection: %v", err)
|
|
continue
|
|
}
|
|
log.Infof("Received job from server: id: %v, URL: %v", job.Id, job.URL)
|
|
|
|
err = runner.RunJob(job, configData.Config.WorkingDir)
|
|
if err != nil {
|
|
log.Errorf("Could not run job: %v", err)
|
|
}
|
|
}
|
|
}
|