···
"github.com/go-chi/chi/v5"
-
"golang.org/x/net/context"
"tangled.sh/tangled.sh/core/api/tangled"
"tangled.sh/tangled.sh/core/jetstream"
"tangled.sh/tangled.sh/core/knotclient"
···
"tangled.sh/tangled.sh/core/spindle/config"
"tangled.sh/tangled.sh/core/spindle/db"
"tangled.sh/tangled.sh/core/spindle/engine"
···
func Run(ctx context.Context) error {
···
···
logger.Info("starting event consumer")
knotEventSource := knotclient.NewEventSource("localhost:5555")
···
ccfg := knotclient.NewConsumerConfig()
ccfg.Dev = cfg.Server.Dev
-
ccfg.ProcessFunc = spindle.exec
ccfg.AddEventSource(knotEventSource)
ec := knotclient.NewEventConsumer(*ccfg)
···
-
func (s *Spindle) exec(ctx context.Context, src knotclient.EventSource, msg knotclient.Message) error {
if msg.Nsid == tangled.PipelineNSID {
pipeline := tangled.Pipeline{}
err := json.Unmarshal(msg.EventJson, &pipeline)
···
-
// this is a "fake" at uri for now
-
pipelineAtUri := fmt.Sprintf("at://%s/did:web:%s/%s", tangled.PipelineNSID, pipeline.TriggerMetadata.Repo.Knot, msg.Rkey)
-
err = s.eng.SetupPipeline(ctx, &pipeline, pipelineAtUri, rkey)
-
err = s.eng.StartWorkflows(ctx, &pipeline, rkey)
···
"github.com/go-chi/chi/v5"
"tangled.sh/tangled.sh/core/api/tangled"
"tangled.sh/tangled.sh/core/jetstream"
"tangled.sh/tangled.sh/core/knotclient"
···
"tangled.sh/tangled.sh/core/spindle/config"
"tangled.sh/tangled.sh/core/spindle/db"
"tangled.sh/tangled.sh/core/spindle/engine"
+
"tangled.sh/tangled.sh/core/spindle/queue"
···
func Run(ctx context.Context) error {
···
+
jq := queue.NewQueue(100)
+
// starts a job queue runner in the background
···
+
// for each incoming sh.tangled.pipeline, we execute
+
// spindle.processPipeline, which in turn enqueues the pipeline
+
// job in the above registered queue.
logger.Info("starting event consumer")
knotEventSource := knotclient.NewEventSource("localhost:5555")
···
ccfg := knotclient.NewConsumerConfig()
ccfg.Dev = cfg.Server.Dev
+
ccfg.ProcessFunc = spindle.processPipeline
ccfg.AddEventSource(knotEventSource)
ec := knotclient.NewEventConsumer(*ccfg)
···
+
func (s *Spindle) processPipeline(ctx context.Context, src knotclient.EventSource, msg knotclient.Message) error {
if msg.Nsid == tangled.PipelineNSID {
pipeline := tangled.Pipeline{}
err := json.Unmarshal(msg.EventJson, &pipeline)
···
+
ok := s.jq.Enqueue(queue.Job{
+
// this is a "fake" at uri for now
+
pipelineAtUri := fmt.Sprintf("at://%s/did:web:%s/%s", tangled.PipelineNSID, pipeline.TriggerMetadata.Repo.Knot, msg.Rkey)
+
err = s.eng.SetupPipeline(ctx, &pipeline, pipelineAtUri, rkey)
+
return s.eng.StartWorkflows(ctx, &pipeline, rkey)
+
s.l.Error("pipeline setup failed", "error", err)
+
s.l.Info("pipeline enqueued successfully", "id", msg.Rkey)
+
s.l.Error("failed to enqueue pipeline: queue is full")