diff --git a/backend/internal/grpcsrv/commander/commander.go b/backend/internal/grpcsrv/commander/commander.go index ba0cec0..429adff 100644 --- a/backend/internal/grpcsrv/commander/commander.go +++ b/backend/internal/grpcsrv/commander/commander.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "log" "sync" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/models" @@ -77,20 +78,26 @@ func (self *Commander) removeAgent(aid string) { } func (self *Agent) AddJob(job models.JobForInsert) (int64, error) { + log.Printf("[DEBUG] AddJob: agent=%s, command=%v", self.aid, job.Command) jid, err := self.jobber.InitJob(self.ctx, self.aid, job) if err != nil { + log.Printf("[DEBUG] AddJob: InitJob failed: %v", err) return 0, err } + log.Printf("[DEBUG] AddJob: InitJob returned jid=%d, sending to self.in channel", jid) self.in <- &proto.Command{ Id: jid, Command: job.Command, Stdin: job.Stdin, } + log.Printf("[DEBUG] AddJob: sent to self.in channel successfully") return jid, err } func (self *Agent) WaitJob(jid int64) (*models.Job, error) { + log.Printf("[DEBUG] WaitJob: agent=%s, jid=%d, waiting on self.jobs[%d].out", self.aid, jid, jid) result := <-self.jobs[jid].out + log.Printf("[DEBUG] WaitJob: agent=%s, jid=%d, received result", self.aid, jid) return &result.fc, result.err } @@ -134,6 +141,7 @@ func (self *Agent) recv() error { if err != nil { return } + log.Printf("[DEBUG] recv: agent=%s, received finished job id=%d", self.aid, msg.Id) return self.jobber.UpdateJobInDB(self.ctx, msg.Id, models.JobForUpdate{ Stdout: msg.Stdout, Stderr: msg.Stderr, @@ -141,25 +149,33 @@ func (self *Agent) recv() error { }) }() if err == io.EOF { + log.Printf("[DEBUG] recv: agent=%s, EOF received", self.aid) return nil } - // TODO: that would blow up at some point + if err != nil { + log.Printf("[DEBUG] recv: agent=%s, error: %v", self.aid, err) + } out := self.jobs[job.ID].out out <- JobOut{ fc: job, err: err, } close(out) + log.Printf("[DEBUG] recv: agent=%s, sent result for job id=%d", self.aid, job.ID) } } func (self *Agent) send() error { for job := range self.in { + log.Printf("[DEBUG] send: agent=%s, job id=%d, command=%v", self.aid, job.Id, job.Command) self.jobs[job.Id] = newJob() if err := self.bidi.Send(job); err != nil { + log.Printf("[DEBUG] send: agent=%s, failed to send job id=%d: %v", self.aid, job.Id, err) return err } + log.Printf("[DEBUG] send: agent=%s, sent job id=%d to agent", self.aid, job.Id) } + log.Printf("[DEBUG] send: agent=%s, self.in channel closed", self.aid) return io.EOF // self.jobs[] } diff --git a/backend/internal/handlers/jobs.go b/backend/internal/handlers/jobs.go index c26d26c..ed1c796 100644 --- a/backend/internal/handlers/jobs.go +++ b/backend/internal/handlers/jobs.go @@ -2,6 +2,7 @@ package handlers import ( "fmt" + "log" "net/http" "gitea.d3m0k1d.ru/d3m0k1d/HellreigN/backend/internal/grpcsrv/commander" @@ -44,16 +45,21 @@ type AddJobOut struct { // @Success 201 {object} AddJobOut // @Router /jobs [post] func (self *JobsHandlers) AddJob(c *gin.Context) { + log.Printf("[DEBUG] AddJob handler: request received") err := func() error { var in AddJobIn if err := c.Bind(&in); err != nil { + log.Printf("[DEBUG] AddJob handler: bind failed: %v", err) return err } + log.Printf("[DEBUG] AddJob handler: agent_id=%s, command=%s, interpreter_id=%d", in.AgentID, in.Command, in.InterpreterID) agent, ok := self.cmder.GetAgent(in.AgentID) if !ok { + log.Printf("[DEBUG] AddJob handler: agent %s not found", in.AgentID) c.Status(http.StatusNotFound) return fmt.Errorf("agent not found") } + log.Printf("[DEBUG] AddJob handler: agent found, resolving command") var command []string if in.InterpreterID == 0 { @@ -62,21 +68,27 @@ func (self *JobsHandlers) AddJob(c *gin.Context) { var err error command, err = self.svc.ResolveCommand(c.Request.Context(), in.InterpreterID, in.Command) if err != nil { + log.Printf("[DEBUG] AddJob handler: ResolveCommand failed: %v", err) return err } } + log.Printf("[DEBUG] AddJob handler: calling agent.AddJob with command=%v", command) jid, err := agent.AddJob(models.JobForInsert{ Command: command, Stdin: in.Stdin, }) if err != nil { + log.Printf("[DEBUG] AddJob handler: agent.AddJob failed: %v", err) return err } + log.Printf("[DEBUG] AddJob handler: agent.AddJob returned jid=%d, calling WaitJob", jid) job, err := agent.WaitJob(jid) if err != nil { + log.Printf("[DEBUG] AddJob handler: agent.WaitJob failed: %v", err) return err } + log.Printf("[DEBUG] AddJob handler: agent.WaitJob returned job id=%d, status=%d", job.ID, job.Status) c.JSON(http.StatusCreated, AddJobOut{ ID: job.ID, Command: job.Command, @@ -85,6 +97,7 @@ func (self *JobsHandlers) AddJob(c *gin.Context) { Stderr: job.Stderr, Status: job.Status, }) + log.Printf("[DEBUG] AddJob handler: response sent") return nil }() if err != nil {