statuses update
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user