mirror of
https://github.com/versia-pub/versia-go.git
synced 2025-12-06 06:28:18 +01:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
|
|
package svc_impls
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"github.com/lysand-org/versia-go/internal/service"
|
||
|
|
|
||
|
|
"git.devminer.xyz/devminer/unitel"
|
||
|
|
"github.com/go-logr/logr"
|
||
|
|
"github.com/lysand-org/versia-go/pkg/taskqueue"
|
||
|
|
)
|
||
|
|
|
||
|
|
var _ service.TaskService = (*TaskServiceImpl)(nil)
|
||
|
|
|
||
|
|
type TaskServiceImpl struct {
|
||
|
|
client *taskqueue.Client
|
||
|
|
|
||
|
|
telemetry *unitel.Telemetry
|
||
|
|
log logr.Logger
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewTaskServiceImpl(client *taskqueue.Client, telemetry *unitel.Telemetry, log logr.Logger) *TaskServiceImpl {
|
||
|
|
return &TaskServiceImpl{
|
||
|
|
client: client,
|
||
|
|
|
||
|
|
telemetry: telemetry,
|
||
|
|
log: log,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (i TaskServiceImpl) ScheduleTask(ctx context.Context, type_ string, data any) error {
|
||
|
|
s := i.telemetry.StartSpan(ctx, "function", "service/svc_impls.TaskServiceImpl.ScheduleTask")
|
||
|
|
defer s.End()
|
||
|
|
ctx = s.Context()
|
||
|
|
|
||
|
|
t, err := taskqueue.NewTask(type_, data)
|
||
|
|
if err != nil {
|
||
|
|
i.log.Error(err, "Failed to create task", "type", type_)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
if err := i.client.Submit(ctx, t); err != nil {
|
||
|
|
i.log.Error(err, "Failed to schedule task", "type", type_, "taskID", t.ID)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
i.log.V(2).Info("Scheduled task", "type", type_, "taskID", t.ID)
|
||
|
|
|
||
|
|
return nil
|
||
|
|
}
|