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
86 changes: 5 additions & 81 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,88 +3,12 @@
[![Crate](https://img.shields.io/crates/v/code0-flow.svg)](https://crates.io/crates/code0-flow)
[![Documentation](https://docs.rs/code0-flow/badge.svg)](https://docs.rs/code0-flow)

code0-flow is a Rust library developed by Code0 for managing flows within the FlowQueue and FlowStore. This libray is only for the internal usage of the execution block services (Aquila, Draco & Tarurs) and is not intendet to get used elsewhere.
Internal Rust library for CodeZero execution services (Aquila, Draco, Taurus). It manages flow definitions, config helpers, and health checks.

## Features

- `flow_definition` update the Adapter & Runtime definitions
- `flow_config` base configuration for each service
- `flow_health` provide health checks including NATS connectivity for readiness probes
- `flow_definition` read flow definitions from a filesystem layout (per-feature folders with `data_type/`, `flow_type/`, `runtime_definition/` JSONs) with optional feature/version filtering
- `flow_service` push definitions to Aquila via gRPC (depends on `flow_definition`)
- `flow_config` env helpers and `.env` loading
- `flow_health` tonic health service with NATS readiness

## FlowStore

### Keys

The key in the FlowStore in a Store will always have the pattern:

`flow_id::project_id::flow_type_identifier::<any_flow_type_specific_data>`

E.g. for REST:

`1::1::REST::test.code0.tech::GET`

This would be a REST Flow identifier

## FlowDefinition

```rust
// Define FlowType
let flow_type = FlowType {
identifier: String::from("REST"),
settings: vec![],
input_type_identifier: Some(String::from("HTTP_REQUEST_OBJECT")),
return_type_identifier: Some(String::from("HTTP_RESPONSE_OBJECT")),
editable: true,
name: vec![Translation {
code: String::from("en-US"),
content: String::from("Rest Endpoint"),
}],
description: vec![Translation {
code: String::from("en-US"),
content: String::from("A REST API is a web service that lets clients interact with data on a server using standard HTTP methods like GET, POST, PUT, and DELETE, usually returning results in JSON format."),
}],
};

// Define DataTypes
let data_type = DataType {
variant: 5,
name: vec![Translation {
code: String::from("en-US"),
content: String::from("HTTP Headers"),
}],
identifier: String::from("HTTP_HEADER_MAP"),
input_types: vec![],
return_type: None,
parent_type_identifier: Some(String::from("ARRAY")),
rules: vec![DataTypeRule {
config: Some(Config::ContainsType(DataTypeContainsTypeRuleConfig {
data_type_identifier: String::from("HTTP_HEADER_ENTRY"),
})),
}],
}

// Send to get updated in Sagittarius
let update_client = code0_flow::flow_definition::FlowUpdateService::from_url(aquila_url)
.with_data_types(vec![data_type])
.with_flow_types(vec![flow_type]);

// Response --> true if successfull
update_client.send().await;
```

## FlowHealth

```rust
use code0_flow::flow_health::HealthService;
use tonic_health::pb::health_server::HealthServer;

// Create health service with NATS URL
let health_service = HealthService::new("nats://localhost:4222".to_string());

// Use with tonic gRPC server
let health_server = HealthServer::new(health_service);

// The service provides:
// - "liveness" check: Always returns Serving (application is running)
// - "readiness" check: Returns Serving only if NATS connection is healthy
```
2 changes: 1 addition & 1 deletion src/flow_service/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use tucana::{
shared::{DefinitionDataType as DataType, FlowType, RuntimeFunctionDefinition},
};

mod retry;
pub mod retry;

pub struct FlowUpdateService {
data_types: Vec<DataType>,
Expand Down
Loading