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
10 changes: 5 additions & 5 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: ${{ secrets.DOCKERHUB_USERNAME }}/rekuiper
repository: indusstack/rekuiper
readme-filepath: ./deploy/docker/README.md
short-description: "Lightweight, ultra-fast streaming SQL engine for edge & IoT in Rust"

Expand Down Expand Up @@ -115,14 +115,14 @@ jobs:
id: docker_meta
shell: bash
run: |
DOCKER_USER="${{ secrets.DOCKERHUB_USERNAME }}"
DOCKER_ORG="indusstack"
if [ -n "${{ inputs.tag }}" ]; then
RAW_TAG="${{ inputs.tag }}"
VERSION_TAG="${RAW_TAG#v}"
echo "tags=${DOCKER_USER}/rekuiper:${VERSION_TAG},${DOCKER_USER}/rekuiper:latest" >> $GITHUB_OUTPUT
echo "tags=${DOCKER_ORG}/rekuiper:${VERSION_TAG},${DOCKER_ORG}/rekuiper:latest" >> $GITHUB_OUTPUT
else
VERSION=$(grep -m 1 '^version = ' Cargo.toml | cut -d '"' -f 2)
echo "tags=${DOCKER_USER}/rekuiper:${VERSION},${DOCKER_USER}/rekuiper:latest" >> $GITHUB_OUTPUT
echo "tags=${DOCKER_ORG}/rekuiper:${VERSION},${DOCKER_ORG}/rekuiper:latest" >> $GITHUB_OUTPUT
fi

- name: Build and push Docker image
Expand All @@ -139,6 +139,6 @@ jobs:
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: ${{ secrets.DOCKERHUB_USERNAME }}/rekuiper
repository: indusstack/rekuiper
readme-filepath: ./deploy/docker/README.md
short-description: "Lightweight, ultra-fast streaming SQL engine for edge & IoT in Rust"
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,10 @@ jobs:
id: docker_meta
shell: bash
run: |
DOCKER_USER="${{ secrets.DOCKERHUB_USERNAME }}"
DOCKER_ORG="indusstack"
RAW_TAG="${{ inputs.tag || github.ref_name }}"
VERSION_TAG="${RAW_TAG#v}"
echo "tags=${DOCKER_USER}/rekuiper:${VERSION_TAG},${DOCKER_USER}/rekuiper:latest" >> $GITHUB_OUTPUT
echo "tags=${DOCKER_ORG}/rekuiper:${VERSION_TAG},${DOCKER_ORG}/rekuiper:latest" >> $GITHUB_OUTPUT

- name: Build and push Docker image
uses: docker/build-push-action@v6
Expand All @@ -205,7 +205,7 @@ jobs:
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: ${{ secrets.DOCKERHUB_USERNAME }}/rekuiper
repository: indusstack/rekuiper
readme-filepath: ./deploy/docker/README.md
short-description: "Lightweight, ultra-fast streaming SQL engine for edge & IoT in Rust"

Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
*.dll
*.so
*.dylib
/target/
**/target/
brag-output/
/bin/*
!/bin/README.md

Expand Down Expand Up @@ -83,3 +84,5 @@ test/benchmark/iiot-mqtt/evidence/iot-warm-*.json
test/benchmark/iiot-mqtt/evidence/mqttprobe-*.log
test/benchmark/iiot-mqtt/evidence/mqttgen-probe-1000.json
test/benchmark/iiot-mqtt/evidence/mqttprobe-1000.json

.vercel
12 changes: 12 additions & 0 deletions .vercelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
crates/
test/
deploy/
etc/
.git/
target/
*.zip
*.tar.gz
*.mp4
docs/node_modules/
docs/.vitepress/dist/
docs/.vitepress/cache/
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ All participants in the rekuiper project must follow professional conduct. Treat
## How to Contribute

### Reporting Bugs
- Search existing [GitHub Issues](https://github.com/ankur-paan/rekuiper/issues) before you open a new issue.
- Search existing [GitHub Issues](https://github.com/Indus-Stack/rekuiper/issues) before you open a new issue.
- Provide a clear title, reproduction steps, system environment (OS, CPU, Rust version), and sample JSON rules or stream definitions.

### Reporting Security Vulnerabilities
Expand All @@ -57,7 +57,7 @@ Please do **not** file public issues for security vulnerabilities. Review [SECUR
```bash
git clone https://github.com/<your-username>/rekuiper.git
cd rekuiper
git remote add upstream https://github.com/ankur-paan/rekuiper.git
git remote add upstream https://github.com/Indus-Stack/rekuiper.git
```

### Workspace Crates Architecture
Expand Down
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ version = "1.0.0-rc4"
edition = "2021"
authors = ["I-Dacs Labs <measure@i-dacs.com>", "rekuiper contributors"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/ankur-paan/rekuiper"
repository = "https://github.com/Indus-Stack/rekuiper"
homepage = "https://i-dacs.com"
documentation = "https://github.com/ankur-paan/rekuiper#documentation"
documentation = "https://github.com/Indus-Stack/rekuiper#documentation"
readme = "README.md"
keywords = ["iot", "stream-processing", "edge-computing", "sql", "mqtt"]
categories = ["embedded", "network-programming", "science"]
Expand Down
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

rekuiper is a small SQL engine that sits between your devices and your cloud. It filters, aggregates, and routes live data on the gateway itself, so you send upstream only what matters.

[![Release](https://img.shields.io/badge/release-v1.0.0--rc4-blue.svg)](https://github.com/ankur-paan/rekuiper/releases)
[![Rust CI](https://img.shields.io/badge/Rust%20CI-passing-brightgreen.svg)](https://github.com/ankur-paan/rekuiper/actions/workflows/ci.yml)
[![Release](https://img.shields.io/badge/release-v1.0.0--rc4-blue.svg)](https://github.com/Indus-Stack/rekuiper/releases)
[![Rust CI](https://github.com/Indus-Stack/rekuiper/actions/workflows/ci.yml/badge.svg)](https://github.com/Indus-Stack/rekuiper/actions/workflows/ci.yml)
[![License: MIT or Apache-2.0](https://img.shields.io/badge/license-MIT%20%2F%20Apache--2.0-yellow.svg)](LICENSE)
[![Docker Pulls](https://img.shields.io/docker/pulls/ankurkrp/rekuiper?color=blue&logo=docker)](https://hub.docker.com/r/ankurkrp/rekuiper)
[![Docker Pulls](https://img.shields.io/docker/pulls/indusstack/rekuiper?color=blue&logo=docker)](https://hub.docker.com/r/indusstack/rekuiper)

[Documentation](https://rekuiper.indramqtt.com) · [Run the demo](#try-it-in-60-seconds) · [Is it a fit?](#is-it-a-fit) · [Coming from eKuiper?](#coming-from-ekuiper)

Expand All @@ -34,7 +34,7 @@ This demo needs only Docker. A built-in simulator makes the data.
**1. Start the engine.**

```bash
docker run -d --name rekuiper -p 9081:9081 ankurkrp/rekuiper:1.0.0-rc4
docker run -d --name rekuiper -p 9081:9081 indusstack/rekuiper:1.0.0-rc4
```

**2. Register simulated sensor readings, ten per second.**
Expand Down Expand Up @@ -184,17 +184,17 @@ rekuiper implements the eKuiper REST API, SQL dialect, rule format, and `kuiper`

| Method | Command or link |
| :--- | :--- |
| Docker | `docker run -d -p 9081:9081 ankurkrp/rekuiper:1.0.0-rc4` |
| Docker | `docker run -d -p 9081:9081 indusstack/rekuiper:1.0.0-rc4` |
| Docker Compose | `docker compose -f deploy/docker/docker-compose.yml up -d` |
| Kubernetes | `helm install rekuiper deploy/chart/ekuiper` ([chart docs](deploy/chart/ekuiper/README.md)) |
| Binaries | [Releases](https://github.com/ankur-paan/rekuiper/releases) |
| Kubernetes | `helm install rekuiper deploy/chart/rekuiper` ([chart docs](deploy/chart/rekuiper/README.md)) |
| Binaries | [Releases](https://github.com/Indus-Stack/rekuiper/releases) |
| Source | `cargo build --release -p kuiperd` |

The Docker image listens on all interfaces. A binary that you run directly listens on `127.0.0.1` by default. Ports, TLS, and authentication: [Installation and Deployment](docs/en_US/installation.md).

---

[![Docker Pulls Tracker](docs/docker-pulls.svg)](https://hub.docker.com/r/ankurkrp/rekuiper)
[![Docker Pulls Tracker](docs/docker-pulls.svg)](https://hub.docker.com/r/indusstack/rekuiper)

---

Expand Down
4 changes: 2 additions & 2 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ Key highlights:
- **Immediate Metric Updates**: Added atomic counter updates to report rule completion immediately during test polling.
- **Zero New Dependencies**: Kept `Cargo.lock` free of new external crates. Zero security advisories are present in the workspace.

- Docker image: `ankurkrp/rekuiper:1.0.0-rc4` (plus `latest`)
- Helm chart: `deploy/chart/ekuiper` (`AppVersion: 1.0.0-rc4`)
- Docker image: `indusstack/rekuiper:1.0.0-rc4` (plus `latest`)
- Helm chart: `deploy/chart/rekuiper` (`AppVersion: 1.0.0-rc4`)

---

Expand Down
10 changes: 9 additions & 1 deletion crates/rekuiper-server/src/handlers/rules.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1758,6 +1758,8 @@ pub async fn rule_cpu_usage(State(state): State<AppState>) -> impl IntoResponse
pub struct TagMatchQuery {
tags: Option<String>,
keys: Option<String>,
tag: Option<String>,
key: Option<String>,
}

pub fn extract_tags_from_value(val: &Value) -> Vec<String> {
Expand All @@ -1773,6 +1775,12 @@ pub fn extract_tags_from_value(val: &Value) -> Vec<String> {
.filter_map(|s| s.as_str().map(|s| s.to_string()))
.collect();
}
if let Some(s) = val.get("tag").and_then(|t| t.as_str()) {
return vec![s.to_string()];
}
if let Some(s) = val.get("key").and_then(|t| t.as_str()) {
return vec![s.to_string()];
}
if let Some(arr) = val.as_array() {
return arr
.iter()
Expand Down Expand Up @@ -1862,7 +1870,7 @@ pub async fn rule_tags_match(
body: Bytes,
) -> Response {
let mut search_tags: HashSet<String> = HashSet::new();
if let Some(t_str) = query.tags.or(query.keys) {
if let Some(t_str) = query.tags.or(query.keys).or(query.tag).or(query.key) {
for t in t_str.split(',') {
let trimmed = t.trim();
if !trimmed.is_empty() {
Expand Down
1 change: 1 addition & 0 deletions crates/rekuiper-server/src/routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ pub fn create_router(state: AppState) -> Router {
get(rule_tags_match).post(rule_tags_match),
)
.route("/configs", get(get_configs).patch(patch_configs))
.route("/config", get(get_configs).patch(patch_configs))
.route(
"/config/uploads",
get(get_config_uploads).post(upload_config_file),
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
apiVersion: v2
name: ekuiper
description: A lightweight IoT edge analytic software
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 1.5.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0-rc4
apiVersion: v2
name: rekuiper
description: High-performance Rust SQL stream processing engine for IoT edge gateways

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
version: 1.5.0

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application.
appVersion: 1.0.0-rc4
124 changes: 62 additions & 62 deletions deploy/chart/ekuiper/README.md → deploy/chart/rekuiper/README.md
Original file line number Diff line number Diff line change
@@ -1,62 +1,62 @@
# rekuiper Helm Chart
A lightweight, high-performance edge streaming SQL engine for Kubernetes.
![Version: 1.5.0](https://img.shields.io/badge/Version-1.5.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0--rc4](https://img.shields.io/badge/AppVersion-1.0.0--rc4-informational?style=flat-square)
## Install the Chart
```bash
git clone https://github.com/ankur-paan/rekuiper.git
cd rekuiper
helm install rekuiper deploy/chart/ekuiper
```
## Custom Values Example
```bash
helm install rekuiper deploy/chart/ekuiper \
--set image.repository=ankurkrp/rekuiper \
--set image.tag=1.0.0-rc4
```
## Uninstall Chart
```bash
helm uninstall rekuiper
```
## Values
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| affinity | object | `{}` | |
| clusterDomain | string | `"cluster.local"` | clusterDomain Kubernetes Cluster Domain |
| ekuiperEnv | object | `{"enabled":true,"key":{"mqttDefaultServer":"MQTT_SOURCE__DEFAULT__SERVER"},"value":{"mqttDefaultServer":"tcp://127.0.0.1:1883"}}` | remove this when the mqtt_source configmap is available |
| image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"ankurkrp/rekuiper"` | |
| image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. |
| nodeSelector | object | `{}` | |
| persistence.enabled | bool | `false` | Enable persistent storage for data and plugins |
| persistence.storageClass | string | `""` | Storage class of backing PVC |
| persistence.existingClaim | string | `""` | Existing PersistentVolumeClaim name, evaluated as a template |
| persistence.accessMode | string | `"ReadWriteOnce"` | PVC Access Mode for volume |
| persistence.size | string | `"20Mi"` | PVC Storage Request for rekuiper volume |
| resources | object | `{}` | Pod resource requests and limits |
| service.annotations | object | `{}` | Provide any additional annotations which may be required. Evaluated as a template |
| service.nodePorts | object | `{"ekuiper":null,"restapi":null,"prometheus":null}` | Specify nodePort(s) for LoadBalancer and NodePort service types |
| service.ports | object | `{"ekuiper":{"name":"ekuiper","port":20498},"restapi":{"name":"restapi","port":9081},"prometheus":{"name":"prometheus","port":20499}}` | Service ports |
| service.ports.ekuiper.name | string | `"ekuiper"` | CLI port name |
| service.ports.ekuiper.port | int | `20498` | CLI port |
| service.ports.restapi.name | string | `"restapi"` | REST API port name |
| service.ports.restapi.port | int | `9081` | REST API port |
| service.ports.prometheus.name | string | `"prometheus"` | Prometheus metrics port name |
| service.ports.prometheus.port | int | `20499` | Prometheus metrics port |
| service.type | string | `"ClusterIP"` | Service type |
| serviceAccount.annotations | object | `{}` | |
| serviceAccount.create | bool | `true` | |
| serviceAccount.name | string | `""` | |
| tls | object | `{"autoGenerated":false,"caCertificate":"","enabled":false,"existingSecret":"","existingSecretFullChain":false,"serverCertificate":"","serverKey":""}` | Enable encryption to eKuiper |
| tls.autoGenerated | bool | `false` | tls.autoGenerated Generate automatically self-signed TLS certificates |
| tls.caCertificate | string | `""` | tls.caCertificate Certificate Authority (CA) bundle content |
| tls.enabled | bool | `false` | tls.enabled Enable TLS support on eKuiper |
| tolerations | list | `[]` | |
# rekuiper Helm Chart
A lightweight, high-performance edge streaming SQL engine for Kubernetes.

![Version: 1.5.0](https://img.shields.io/badge/Version-1.5.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0--rc4](https://img.shields.io/badge/AppVersion-1.0.0--rc4-informational?style=flat-square)

## Install the Chart

```bash
git clone https://github.com/Indus-Stack/rekuiper.git
cd rekuiper
helm install rekuiper deploy/chart/rekuiper
```

## Custom Values Example

```bash
helm install rekuiper deploy/chart/rekuiper \
--set image.repository=indusstack/rekuiper \
--set image.tag=1.0.0-rc4
```

## Uninstall Chart

```bash
helm uninstall rekuiper
```

## Values

| Key | Type | Default | Description |
|-----|------|---------|-------------|
| affinity | object | `{}` | |
| clusterDomain | string | `"cluster.local"` | clusterDomain Kubernetes Cluster Domain |
| ekuiperEnv | object | `{"enabled":true,"key":{"mqttDefaultServer":"MQTT_SOURCE__DEFAULT__SERVER"},"value":{"mqttDefaultServer":"tcp://127.0.0.1:1883"}}` | remove this when the mqtt_source configmap is available |
| image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"indusstack/rekuiper"` | |
| image.tag | string | `""` | Overrides the image tag whose default is the chart appVersion. |
| nodeSelector | object | `{}` | |
| persistence.enabled | bool | `false` | Enable persistent storage for data and plugins |
| persistence.storageClass | string | `""` | Storage class of backing PVC |
| persistence.existingClaim | string | `""` | Existing PersistentVolumeClaim name, evaluated as a template |
| persistence.accessMode | string | `"ReadWriteOnce"` | PVC Access Mode for volume |
| persistence.size | string | `"20Mi"` | PVC Storage Request for rekuiper volume |
| resources | object | `{}` | Pod resource requests and limits |
| service.annotations | object | `{}` | Provide any additional annotations which may be required. Evaluated as a template |
| service.nodePorts | object | `{"ekuiper":null,"restapi":null,"prometheus":null}` | Specify nodePort(s) for LoadBalancer and NodePort service types |
| service.ports | object | `{"ekuiper":{"name":"ekuiper","port":20498},"restapi":{"name":"restapi","port":9081},"prometheus":{"name":"prometheus","port":20499}}` | Service ports |
| service.ports.ekuiper.name | string | `"ekuiper"` | CLI port name |
| service.ports.ekuiper.port | int | `20498` | CLI port |
| service.ports.restapi.name | string | `"restapi"` | REST API port name |
| service.ports.restapi.port | int | `9081` | REST API port |
| service.ports.prometheus.name | string | `"prometheus"` | Prometheus metrics port name |
| service.ports.prometheus.port | int | `20499` | Prometheus metrics port |
| service.type | string | `"ClusterIP"` | Service type |
| serviceAccount.annotations | object | `{}` | |
| serviceAccount.create | bool | `true` | |
| serviceAccount.name | string | `""` | |
| tls | object | `{"autoGenerated":false,"caCertificate":"","enabled":false,"existingSecret":"","existingSecretFullChain":false,"serverCertificate":"","serverKey":""}` | Enable encryption to eKuiper |
| tls.autoGenerated | bool | `false` | tls.autoGenerated Generate automatically self-signed TLS certificates |
| tls.caCertificate | string | `""` | tls.caCertificate Certificate Authority (CA) bundle content |
| tls.enabled | bool | `false` | tls.enabled Enable TLS support on eKuiper |
| tolerations | list | `[]` | |
Loading
Loading