51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"tulpa.dev/within/wasmcloud/cmd/internal"
|
|
"within.website/ln"
|
|
"within.website/ln/opname"
|
|
)
|
|
|
|
func runHandler(ctx context.Context, hdlr Handler, timeout time.Duration, message []byte) (*internal.ExecResponse, error) {
|
|
ctx = opname.With(ctx, "invoke")
|
|
execID := uuid.New().String()
|
|
er := internal.ExecRequest{
|
|
WASMCID: hdlr.Path,
|
|
Name: hdlr.Name,
|
|
Data: message,
|
|
Env: map[string]string{
|
|
"RUN_ID": execID,
|
|
},
|
|
UUID: execID,
|
|
}
|
|
|
|
encData, err := json.Marshal(er)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("can't encode job: %w", err)
|
|
}
|
|
|
|
f := ln.F{
|
|
"name": hdlr.Name,
|
|
"run_id": execID,
|
|
}
|
|
ln.Log(ctx, ln.Info("starting run"), f)
|
|
msg, err := nc.Request(internal.TopicName, encData, timeout)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("can't submit job: %w", err)
|
|
}
|
|
|
|
var resp internal.ExecResponse
|
|
err = json.Unmarshal(msg.Data, &resp)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("can't unmarshal response: %w", err)
|
|
}
|
|
|
|
return &resp, nil
|
|
}
|