Documentation | Console | Example Gallery
Go library for Tilebox, a lightweight space data management and orchestration software - on ground and in orbit.
Run the following command to add the library to your project:
go get github.com/tilebox/tilebox-goFor Tilebox datasets type generation, you will need to install tilebox-generate command-line tool.
For examples on how to use the library, see the examples directory.
Here we define a simple task that logs "Hello World!":
package helloworld
import (
"context"
"log/slog"
"github.com/tilebox/tilebox-go/workflows/v1"
)
type HelloTask struct {
Name string // You can add any fields you need to the task struct.
}
// The Execute method isn't needed to submit a task but is required to run a task.
func (t *HelloTask) Execute(ctx context.Context) error {
slog.InfoContext(ctx, "Hello World!", slog.String("Name", t.Name))
return nil
}
// The Identifier method is optional and will be generated if not provided.
func (t *HelloTask) Identifier() workflows.TaskIdentifier {
return workflows.NewTaskIdentifier("hello-world", "v1.0")
}Here we create a Workflows client and submit a job with a single task:
package main
import (
"context"
"log/slog"
"github.com/tilebox/tilebox-go/workflows/v1"
)
type HelloTask struct {
Name string
}
func main() {
ctx := context.Background()
workflows.ConfigureConsoleLogging(slog.LevelInfo)
client := workflows.NewClient()
job, err := client.Jobs.Submit(ctx, "hello-world",
[]workflows.Task{
&HelloTask{
Name: "Tilebox",
},
},
)
if err != nil {
slog.ErrorContext(ctx, "Failed to submit job", slog.Any("error", err))
return
}
slog.InfoContext(ctx, "Job submitted", slog.String("job_id", job.ID.String()))
}workflows.NewClient() configures Tilebox OpenTelemetry export when an API key is available. workflows.ConfigureConsoleLogging adds console output without replacing the Tilebox exporter, so logs are written to both destinations when both are configured.
Here we create a TaskRunner and run a worker that is capable of executing HelloTask tasks:
package main
import (
"context"
"log/slog"
"github.com/tilebox/tilebox-go/workflows/v1"
)
type HelloTask struct {
Name string
}
// The Execute method is required to run a task.
func (t *HelloTask) Execute(ctx context.Context) error {
slog.InfoContext(ctx, "Hello World!", slog.String("Name", t.Name))
return nil
}
func main() {
ctx := context.Background()
workflows.ConfigureConsoleLogging(slog.LevelInfo)
client := workflows.NewClient()
runner, err := client.NewTaskRunner(ctx)
if err != nil {
slog.ErrorContext(ctx, "failed to create task runner", slog.Any("error", err))
return
}
err = runner.RegisterTasks(&HelloTask{})
if err != nil {
slog.ErrorContext(ctx, "failed to register tasks", slog.Any("error", err))
return
}
runner.RunForever(ctx)
}Distributed under the MIT License (The MIT License).