Files
runner/main.go
T

86 lines
1.9 KiB
Go

package main
import (
"context"
"fmt"
"git.ohea.xyz/cursorius/runner/config"
"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
}
type Job struct {
URL *string
Folder *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()
c, _, 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 c.Close(websocket.StatusInternalError, "the sky is falling")
err = wsjson.Write(ctx, c, registrationData)
if err != nil {
log.Fatalf("Could not send registration information to server: %v", err)
os.Exit(1)
}
for {
var job Job
err = wsjson.Read(ctx, c, &job)
if err != nil {
log.Fatalf("Could not receive from connection: %v", err)
continue
}
log.Infof("Received job from server: %v", *job.URL)
}
}