Files
runner/main.go
T

87 lines
2.1 KiB
Go

package main
import (
"context"
"fmt"
"git.ohea.xyz/cursorius/runner/config"
"git.ohea.xyz/cursorius/runner/jobrunner"
"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 jobrunner.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 = jobrunner.RunJob(job, configData.Config.WorkingDir)
if err != nil {
log.Errorf("Could not run job: %v", err)
}
}
}