mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-04 15:06:37 +08:00
fix(tasks): canonicalize triggered_by so execution labels resolve
Unknown values such as http and inproc_cron made the admin UI call t(undefined). Dispatch sites now write system/manual/retry/schedule, the list API maps legacy rows, and the table skips missing i18n keys.
This commit is contained in:
@@ -41,7 +41,7 @@ func DispatchTask(ctx context.Context, req model.DispatchTaskRequest) (string, e
|
||||
return "", err
|
||||
}
|
||||
|
||||
taskID, err := taskSvc.Dispatch(ctx, req.TaskType, validated, "manual")
|
||||
taskID, err := taskSvc.Dispatch(ctx, req.TaskType, validated, contracts.TaskTriggerManual)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("%s: %w", errs.TaskDispatchFailed, err)
|
||||
}
|
||||
@@ -110,6 +110,21 @@ func TaskExecution(ctx context.Context, id uint64) (*model.TaskExecution, error)
|
||||
return &row, nil
|
||||
}
|
||||
|
||||
func normalizeTaskTrigger(v string) string {
|
||||
switch v {
|
||||
case contracts.TaskTriggerManual, contracts.TaskTriggerSystem, contracts.TaskTriggerRetry, contracts.TaskTriggerSchedule:
|
||||
return v
|
||||
case "inproc_cron", "cron":
|
||||
return contracts.TaskTriggerSchedule
|
||||
case "http":
|
||||
return contracts.TaskTriggerSystem
|
||||
case "":
|
||||
return contracts.TaskTriggerSystem
|
||||
default:
|
||||
return v
|
||||
}
|
||||
}
|
||||
|
||||
func executionFromDTO(dto contracts.TaskExecutionDTO) model.TaskExecution {
|
||||
return model.TaskExecution{
|
||||
ID: dto.ID,
|
||||
@@ -127,7 +142,7 @@ func executionFromDTO(dto contracts.TaskExecutionDTO) model.TaskExecution {
|
||||
FinishedAt: dto.FinishedAt,
|
||||
Duration: dto.Duration,
|
||||
Payload: dto.Payload,
|
||||
TriggeredBy: dto.TriggeredBy,
|
||||
TriggeredBy: normalizeTaskTrigger(dto.TriggeredBy),
|
||||
CreatedAt: dto.CreatedAt,
|
||||
UpdatedAt: dto.UpdatedAt,
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// Copyright 2026 Arctel.net
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package service
|
||||
|
||||
import (
|
||||
"Wavelet/core/contracts"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestNormalizeTaskTrigger(t *testing.T) {
|
||||
tests := []struct {
|
||||
in string
|
||||
want string
|
||||
}{
|
||||
{in: contracts.TaskTriggerManual, want: contracts.TaskTriggerManual},
|
||||
{in: contracts.TaskTriggerSystem, want: contracts.TaskTriggerSystem},
|
||||
{in: contracts.TaskTriggerRetry, want: contracts.TaskTriggerRetry},
|
||||
{in: contracts.TaskTriggerSchedule, want: contracts.TaskTriggerSchedule},
|
||||
{in: "http", want: contracts.TaskTriggerSystem},
|
||||
{in: "inproc_cron", want: contracts.TaskTriggerSchedule},
|
||||
{in: "cron", want: contracts.TaskTriggerSchedule},
|
||||
{in: "", want: contracts.TaskTriggerSystem},
|
||||
{in: "custom", want: "custom"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
got := normalizeTaskTrigger(tt.in)
|
||||
if got != tt.want {
|
||||
t.Errorf("normalizeTaskTrigger(%q) = %q, want %q", tt.in, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user