Files
horus/docs/runner/osiris.md
2025-11-14 11:10:32 +01:00

2.8 KiB

Osiris Runner

Database-backed runner for structured data storage and retrieval.

Overview

The Osiris runner executes Rhai scripts with access to a model-based database system, enabling structured data operations and persistence.

Features

  • Rhai Scripting: Execute Rhai scripts with Osiris database access
  • Model-Based Storage: Define and use data models
  • CRUD Operations: Create, read, update, delete records
  • Query Support: Search and filter data
  • Schema Validation: Type-safe data operations
  • Transaction Support: Atomic database operations

Usage

# Start the runner
runner_osiris my-osiris-runner

# With custom Redis
runner_osiris my-osiris-runner --redis-url redis://custom:6379

Job Payload

The payload should contain a Rhai script using Osiris operations:

// Example: Store data
let model = osiris.model("users");
let user = model.create(#{
    name: "Alice",
    email: "alice@example.com",
    age: 30
});
print(user.id);

// Example: Retrieve data
let found = model.get(user.id);
print(found.name);

Examples

Create Model and Store Data

// Define model
let posts = osiris.model("posts");

// Create record
let post = posts.create(#{
    title: "Hello World",
    content: "First post",
    author: "Alice",
    published: true
});

print(`Created post with ID: ${post.id}`);

Query Data

let posts = osiris.model("posts");

// Find by field
let published = posts.find(#{
    published: true
});

for post in published {
    print(post.title);
}

Update Records

let posts = osiris.model("posts");

// Get record
let post = posts.get("post-123");

// Update fields
post.content = "Updated content";
posts.update(post);

Delete Records

let posts = osiris.model("posts");

// Delete by ID
posts.delete("post-123");

Transactions

osiris.transaction(|| {
    let users = osiris.model("users");
    let posts = osiris.model("posts");
    
    let user = users.create(#{ name: "Bob" });
    let post = posts.create(#{
        title: "Bob's Post",
        author_id: user.id
    });
    
    // Both operations commit together
});

Data Models

Models are defined dynamically through Rhai scripts:

let model = osiris.model("products");

// Model automatically handles:
// - ID generation
// - Timestamps (created_at, updated_at)
// - Schema validation
// - Indexing

Requirements

  • Redis server accessible
  • Osiris database configured
  • Valid job signatures
  • Sufficient storage for data operations

Use Cases

  • Configuration Storage: Store application configs
  • User Data: Manage user profiles and preferences
  • Workflow State: Persist workflow execution state
  • Metrics & Logs: Store structured logs and metrics
  • Cache Management: Persistent caching layer