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) } }