robot-control-manager/routers/api/v1/control/control.go

125 lines
3.2 KiB
Go

package control
import (
"jannex/robot-control-manager/modules/cache"
"jannex/robot-control-manager/modules/logger"
"jannex/robot-control-manager/modules/request"
"jannex/robot-control-manager/modules/robot"
"jannex/robot-control-manager/modules/structs"
"jannex/robot-control-manager/modules/utils"
"time"
"git.ex.umbach.dev/Alex/roese-utils/rslogger"
"git.ex.umbach.dev/Alex/roese-utils/rsutils"
"github.com/gofiber/fiber/v2"
)
func ControlRex(c *fiber.Ctx) error {
// swagger:operation POST /control/1 control controlRex
// ---
// summary: Control Rex.
// description: |
// This is used to control Rex.
// consumes:
// - application/json
// produces:
// - application/json
// parameters:
// - in: body
// name: body
// description: Control Rex body.
// required: true
// schema:
// "$ref": "#/definitions/ControlBody"
// responses:
// "200":
// description: Control Rex
// "400":
// description: Invalid request body
// "422":
// description: Robot not found
var body structs.ControlBody
if err := rsutils.BodyParserHelper(c, &body); err != nil {
return c.SendStatus(fiber.StatusBadRequest)
}
/*
if body.Task.Y == nil {
fmt.Println("y not sent")
} else {
fmt.Printf("y-value: %d\n", *body.Task.Y)
} */
r := cache.GetRobotByName(body.RobotName)
if r == nil {
return c.SendStatus(fiber.StatusUnprocessableEntity)
}
if r.Status == utils.RobotStatusOffline {
return c.JSON(structs.StatusResponse{Status: utils.ResponseStatusOffline})
}
if r.Status != utils.RobotStatusIdle &&
r.Status != utils.RobotStatusRunning &&
r.Status != utils.RobotStatusWaiting {
return c.JSON(structs.StatusResponse{Status: utils.ResponseStatusError})
}
robot.ProcessJobTask(r, body.JobId, body.JobName)
robot.UpdateRobotStatus(r, utils.RobotStatusRunning)
r.LastTaskAt = time.Now()
logger.AddRobotLog(rslogger.LogTypeInfo, utils.RobotTypeRex, r.Id, "Control robot with task: %v", rsutils.MarshalJson(body.Task))
if err := request.Request(fiber.MethodPost, r.Address+":5000/api/v1/control", body.Task); err != nil {
return c.JSON(structs.StatusResponse{Status: utils.ResponseStatusError})
}
robot.UpdateRobotStatus(r, utils.RobotStatusWaiting)
return c.JSON(structs.StatusResponse{Status: utils.ResponseStatusOk})
}
func FinishControlRex(c *fiber.Ctx) error {
// swagger:operation POST /control/1/finish control finishControlRex
// ---
// summary: Finish control Rex.
// description: |
// This is used to finish control Rex.
// consumes:
// - application/json
// produces:
// - application/json
// responses:
// "200":
// description: Finish control Rex
// "400":
// description: Invalid robot name
// "422":
// description: Robot not found
var body structs.RobotFinishBody
if err := rsutils.BodyParserHelper(c, &body); err != nil {
return c.SendStatus(fiber.StatusBadRequest)
}
r := cache.GetRobotByName(body.RobotName)
if r == nil || r.CurrentJobId != body.JobId {
return c.SendStatus(fiber.StatusUnprocessableEntity)
}
robot.UpdateRobotCurrentJob(r, "", "")
robot.CountDownJobsWaiting(r)
robot.UpdateRobotStatus(r, utils.RobotStatusIdle)
logger.AddRobotLog(rslogger.LogTypeInfo, utils.RobotTypeRex, r.Id, "Finish control robot")
return c.SendStatus(fiber.StatusOK)
}