statuses update

This commit is contained in:
sanek5g
2026-06-24 18:58:35 +03:00
parent fdddacf534
commit 0a9bfd0799
39 changed files with 2099 additions and 12 deletions

View File

@@ -12,6 +12,7 @@ import (
"github.com/postmet/transcribe/internal/config"
"github.com/postmet/transcribe/internal/models"
"github.com/postmet/transcribe/internal/nexara"
"github.com/postmet/transcribe/internal/pipelinestatus"
"github.com/postmet/transcribe/internal/prompts"
)
@@ -70,6 +71,9 @@ func setupTopology(ch *amqp.Channel, cfg config.Config) error {
return fmt.Errorf("bind queue %s: %w", q, err)
}
}
if err := pipelinestatus.DeclareQueue(ch, cfg.StatusQueue); err != nil {
return fmt.Errorf("declare status queue: %w", err)
}
return ch.Qos(cfg.Prefetch, 0, false)
}
@@ -84,7 +88,11 @@ func (c *Consumer) Run(ctx context.Context) error {
return err
}
slog.Info("transcribe worker started", "queue", c.cfg.InputQueue, "output_exchange", c.cfg.OutputExchange)
slog.Info("transcribe worker started",
"queue", c.cfg.InputQueue,
"output_exchange", c.cfg.OutputExchange,
"status_queue", c.cfg.StatusQueue,
)
for {
select {
@@ -112,9 +120,12 @@ func (c *Consumer) handle(ctx context.Context, d amqp.Delivery) {
txCtx, cancel := context.WithTimeout(ctx, c.cfg.NexaraTimeout+30*time.Second)
defer cancel()
c.publishStatus(txCtx, task.TaskID, task.Filename, pipelinestatus.StatusInProgress, pipelinestatus.StageTranscribing, "")
text, lang, segments, err := c.nexara.TranscribeFile(txCtx, task.FilePath)
if err != nil {
slog.Warn("transcription failed", "task_id", task.TaskID, "error", err)
c.publishStatus(txCtx, task.TaskID, task.Filename, pipelinestatus.StatusError, pipelinestatus.StageTranscribing, err.Error())
_ = d.Nack(false, false)
return
}
@@ -122,6 +133,7 @@ func (c *Consumer) handle(ctx context.Context, d amqp.Delivery) {
promptList, err := c.prompts.Load(txCtx)
if err != nil {
slog.Warn("prompts load failed", "task_id", task.TaskID, "error", err)
c.publishStatus(txCtx, task.TaskID, task.Filename, pipelinestatus.StatusError, pipelinestatus.StageTranscribing, err.Error())
_ = d.Nack(false, false)
return
}
@@ -170,3 +182,18 @@ func (c *Consumer) handle(ctx context.Context, d amqp.Delivery) {
slog.Info("transcribed", "task_id", task.TaskID, "language", lang, "chars", len(text), "segments", len(segments), "prompts", len(promptList))
_ = d.Ack(false)
}
func (c *Consumer) publishStatus(ctx context.Context, taskID, filename, status, stage, errMsg string) {
ev := pipelinestatus.Event{
TaskID: taskID,
Filename: filename,
Status: status,
Stage: stage,
}
if errMsg != "" {
ev.Error = errMsg
}
if err := pipelinestatus.Publish(ctx, c.ch, c.cfg.StatusQueue, ev); err != nil {
slog.Warn("status publish failed", "task_id", taskID, "stage", stage, "error", err)
}
}