Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,12 @@ Heimdall supports a growing set of pluggable command types:

| Plugin | Description | Execution Mode |
| ----------- | -------------------------------------- | -------------- |
| `ping` | Basic plugin used for testing | Sync or Async |
| `ping` | [Basic plugin used for testing](https://github.com/patterninc/heimdall/blob/main/plugins/ping/README.md) | Sync or Async |
| `shell` | [Shell command execution](https://github.com/patterninc/heimdall/blob/main/plugins/shell/README.md) | Sync or Async |
| `glue` | Pulling Iceberg table metadata | Sync or Async |
| `dynamodb` | DynamoDB read operation | Sync or Async |
| `glue` | [Pulling Iceberg table metadata](https://github.com/patterninc/heimdall/blob/main/plugins/glue/README.md) | Sync or Async |
| `dynamo` | [DynamoDB read operation](https://github.com/patterninc/heimdall/blob/main/plugins/dynamo/README.md) | Sync or Async |
| `snowflake` | Query execution in Snowflake | Async |
| `spark` | SparkSQL query execution on EMR on EKS | Async |
| `spark` | [SparkSQL query execution on EMR on EKS](https://github.com/patterninc/heimdall/blob/main/plugins/spark/README.md) | Async |

---

Expand Down
101 changes: 101 additions & 0 deletions plugins/dynamo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# 📦 DynamoDB Plugin

The **DynamoDB Plugin** enables Heimdall to run read-only PartiQL queries against AWS DynamoDB tables. It securely connects using AWS credentials or an optional assumed IAM role, supports pagination, and returns structured query results.

🔒 **Read-Only:** This plugin only supports data retrieval via PartiQL — no writes or modifications.

---

## 🧩 Plugin Overview

* **Plugin Name:** `dynamo`
* **Execution Mode:** Sync
* **Use Case:** Querying DynamoDB tables using PartiQL from within Heimdall workflows

---

## ⚙️ Defining a DynamoDB Command

### 📝 Command Definition

```yaml
- name: dynamo-0.0.1
status: active
plugin: dynamo
version: 0.0.1
description: Read data using PartiQL
tags:
- type:dynamodb
cluster_tags:
- type:dynamodb
```

### 🖥️ Cluster Definition (AWS Authentication)

```yaml
- name: dynamo-0.0.1
status: active
version: 0.0.1
description: AWS DynamoDB
context:
role_arn: arn:aws:iam::123456789012:role/HeimdallDynamoQueryRole
tags:
- type:dynamodb
- data:prod
```

* `role_arn` is optional. If provided, Heimdall will assume this IAM role to authenticate requests.

---

## 🚀 Submitting a DynamoDB Job

Define the PartiQL query and optional result limit in the job context:

```json
{
"name": "list-items-job",
"version": "0.0.1",
"command_criteria": ["type:dynamo"],
"cluster_criteria": ["data:prod"],
"context": {
"query": "SELECT * FROM my_table WHERE category = 'books'",
"limit": 100
}
}
```

---

## 📊 Returning Job Results

The plugin paginates through query results automatically, returning a structured output like:

```json
{
"columns": [
{"name": "id", "type": "string"},
{"name": "category", "type": "string"},
{"name": "price", "type": "float"}
],
"data": [
["123", "books", 12.99],
["124", "books", 15.50]
]
}
```

Retrieve results via:

```
GET /api/v1/job/<job_id>/result
```

---

## 🧠 Best Practices

* Use IAM roles with **least privilege** for security.
* Test queries in AWS console or CLI before running via Heimdall.
* Avoid large result sets by leveraging the `limit` parameter.
* Validate job input to prevent malformed PartiQL queries.
69 changes: 69 additions & 0 deletions plugins/glue/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# 🍯 Glue Plugin

The **Glue Plugin** enables Heimdall to query the AWS Glue Data Catalog to retrieve metadata about a specific table. It helps you integrate Glue metadata queries directly into your orchestration workflows.

---

## 🧩 Plugin Overview

* **Plugin Name:** `glue`
* **Execution Mode:** Sync
* **Use Case:** Fetching AWS Glue table metadata for auditing, validation, or downstream processing

---

## ⚙️ Defining a Glue Command

```yaml
- name: glue-metadata-0.0.1
status: active
plugin: glue
version: 0.0.1
description: Query AWS Glue catalog for table metadata
context:
catalog_id: 123456789012
tags:
- type:glue-query
cluster_tags:
- type:localhost
```

* `catalog_id` is the AWS Glue catalog identifier (optional; defaults to AWS account ID if omitted).

---

## 🚀 Submitting a Glue Job

Specify the Glue table name to fetch metadata for in the job context:

```json
{
"name": "fetch-glue-table-metadata",
"version": "0.0.1",
"command_criteria": ["type:glue-query"],
"cluster_criteria": ["data:local"],
"context": {
"table_name": "my_database.my_table"
}
}
```

---

## 📊 Returning Job Results

The plugin returns raw metadata as a JSON string containing the table schema and properties.

Retrieve results via:

```
GET /api/v1/job/<job_id>/result
```

---

## 🧠 Best Practices

* Use appropriate IAM permissions for Glue Catalog access.
* Validate the fully qualified `table_name` to avoid query errors.
* Use the metadata for auditing, documentation, or dynamic pipeline decisions.
102 changes: 102 additions & 0 deletions plugins/ping/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# 🏓 Ping Plugin

The **Ping Plugin** is a sample command used for testing Heimdall’s orchestration flow. Instead of sending actual ICMP packets, it responds instantly with a predefined message — perfect for dry runs, plugin testing, or just checking your Heimdall wiring. 🚧

⚠️ **Testing Only:** This plugin is a *no-op*. It does **not** reach out to real hosts. Use it to verify that jobs run through Heimdall correctly.

---

## 🧩 Plugin Overview

* **Plugin Name:** `ping`
* **Execution Mode:** Sync
* **Use Case:** Testing job submission, validation, or plugin behavior without side effects

---

## ⚙️ Defining a Ping Command

You don’t need to specify much — just use the `ping` plugin and give it a name.

```yaml
- name: ping-0.0.1
status: active
plugin: ping
version: 0.0.1
description: Check Heimdall wiring
tags:
- type:ping
cluster_tags:
- type:localhost
```

🔹 When this job runs, Heimdall will simulate a ping and respond with a message like:

```
Hello, <calling user>!
```

---

## 🖥️ Cluster Configuration

Use a simple localhost cluster (or any compatible test target) to execute ping jobs:

```yaml
- name: localhost-0.0.1
status: active
version: 0.0.1
description: Localhost
tags:
- type:localhost
- data:local
```

---

## 🚀 Submitting a Ping Job

Here’s how to submit an example ping command via the Heimdall API:

```json
{
"name": "ping-check-job",
"version": "0.0.1",
"command_criteria": ["type:ping"],
"cluster_criteria": ["data:local"],
"context": {}
}
```

🟢 This will run the ping plugin and instantly return result.

---

## 📊 Returning Job Results

The plugin returns this result:

```json
{
"columns": [
{"name": "message", "type": "string"}
],
"data": [
["Hello, alice!"]
]
}
```

You can retrieve the result from:

```
GET /api/v1/job/<job_id>/result
```

---

## 🧠 Best Practices

* Use this plugin to **test your pipelines** before running real jobs.
* It’s great for **CI/CD checks**, plugin regression tests, or mocking command behavior.
* Don't forget: **no real pinging happens** — it's just a friendly "Hello!" 🎯
Loading