feat(backend): add jobs http handler

This commit is contained in:
2026-04-04 02:43:02 +03:00
parent 84807b9ba9
commit baaa27005e
+67
View File
@@ -0,0 +1,67 @@
package handlers
import (
"fmt"
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/grpcsrv/commander"
"gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/models"
"github.com/gin-gonic/gin"
)
type JobsHandlers struct {
cmder *commander.Commander
}
func NewJobsHandlers(cmder *commander.Commander) JobsHandlers {
return JobsHandlers{cmder}
}
func (self *JobsHandlers) AddJob(c *gin.Context) {
err := func() error {
type In struct {
Command []string `json:"command"`
Stdin *string `json:"stdin"`
AID string `json:"agent_id"`
}
var in In
if err := c.Bind(&in); err != nil {
return err
}
agent, ok := self.cmder.GetAgent(in.AID)
if !ok {
c.Status(404)
return fmt.Errorf("Agent not found")
}
jid, err := agent.AddJob(models.JobForInsert{
Command: in.Command,
Stdin: in.Stdin,
})
if err != nil {
return err
}
job, err := agent.WaitJob(jid)
if err != nil {
return err
}
type Out struct {
ID int64 `json:"id"`
Command []string `json:"command"`
Stdin *string `json:"stdin"`
Stdout string `json:"stdout"`
Stderr string `json:"stderr"`
Status int32 `json:"status"`
}
c.JSON(201, Out{
ID: job.ID,
Command: job.Command,
Stdin: job.Stdin,
Stdout: job.Stdout,
Stderr: job.Stderr,
Status: job.Status,
})
return nil
}()
if err != nil {
c.Error(err)
}
}