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
|
||
|
}
|