Metadata-Version: 2.4
Name: snakemake-logger-plugin-flowo
Version: 1.2.1
Summary: A unified PostgreSQL-based logging plugin and backend for Snakemake
Author-email: Haomiao Zhang <zhanghm@iregene.com>, Jingmin Zhang <zhangjm@iregene.com>
License: MIT
License-File: LICENSE
Requires-Python: >=3.12
Requires-Dist: httpx>=0.28.1
Requires-Dist: pydantic-settings>=2.9.1
Requires-Dist: pydantic>=2.11.5
Requires-Dist: snakemake
Requires-Dist: snakemake-interface-logger-plugins
Requires-Dist: sqlalchemy>=2.0.41
Provides-Extra: dev
Requires-Dist: black>=23.0.0; extra == 'dev'
Requires-Dist: mypy>=1.0.0; extra == 'dev'
Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: ruff>=0.1.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material>=9.5.0; extra == 'docs'
Requires-Dist: mkdocs>=1.6.0; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.25.0; extra == 'docs'
Provides-Extra: server
Requires-Dist: alembic>=1.16.1; extra == 'server'
Requires-Dist: anytree>=2.13.0; extra == 'server'
Requires-Dist: asyncpg>=0.30.0; extra == 'server'
Requires-Dist: fastapi-users[sqlalchemy]>=15.0.3; extra == 'server'
Requires-Dist: fastapi[standard]>=0.115.12; extra == 'server'
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == 'server'
Requires-Dist: psutil>=7.0.0; extra == 'server'
Requires-Dist: psycopg2-binary>=2.9.9; extra == 'server'
Requires-Dist: sse-starlette>=3.1.2; extra == 'server'
Description-Content-Type: text/markdown

# Flowo 🚀

Welcome to **Flowo** – your real-time Snakemake workflow dashboard!

**Demo page: [flowo online](https://zhanghaomiao.github.io/flowo)**

**Documentation: [flowo docs](https://flowo-docs.pages.dev/)**

---

## ✨ Features

- ⚡ **Real-time Monitoring:** Instant workflow updates via SSE.
- 🔐 **Authentication:** Secure JWT-based registration and login.
- 🚀 **Efficient:** Smart polling and debouncing for low network overhead.
- 🔍 **Search & Filter:** Find workflows by name, tags, or user.
- 🧩 **Rule Focus:** Filter jobs and update execution timeline by rule.
- 🖼️ **Result Preview:** Preview output files directly in the browser.
- 📋 **Detailed Logs:** Access comprehensive workflow and job logs.

---

### 🛠️ Workflows

![Workflow](docs/assets/images/workflow.png)

### 📊 Dashboard

![Dashboard](docs/assets/images/dashboard.png)

### 🕹️ Jobs

| ![DAG](docs/assets/images/dag.png) | ![Jobs](docs/assets/images/jobs.png) |
| ---------------------------------- | ------------------------------------ |

---

## 🚦 Installation

### 1️⃣ Install the Snakemake Logger Plugin

```sh
pip install snakemake-logger-plugin-flowo
```

### 2️⃣ Install the Flowo web server (Single Image)

This method uses pre-built Docker images. For detailed instructions, please refer to the [Quick Start](https://flowo-docs.pages.dev/getting-started/) guide.

Clone the repo and start the service:

```sh
git clone https://github.com/zhanghaomiao/flowo.git
cd flowo
cp env.example .env
# Edit .env and set FLOWO_WORKING_PATH
docker compose -f docker/compose.yml up -d
```

![login](docs/assets/images/login.png)
Open [http://localhost:3100](http://localhost:3100) to create your account.

![token](docs/assets/images/token.png)
Generate a token in your profile settings to configure the logger plugin.

![cli](docs/assets/images/cli.png)
Copy and run the CLI config snippet from the dashboard to finish setup.

---

## 🚀 Usage

```sh
cd /path/to/flowo_project_dir
mkdir demo                # Create a demo project folder
cd demo
wget https://raw.githubusercontent.com/zhanghaomiao/flowo/refs/heads/main/tests/demos/Snakefile
# Run snakemake with flowo logger
snakemake \
    --logger flowo \
    --logger-flowo-name=your_project_name \
    --logger-flowo-tags="tagA,tagB,tagC"
```

---

## 👩‍💻 Developer Guide

If you want to contribute or build from source:

```bash
docker compose -f docker-compose.dev.yml up --build
```

- **Gateway**: `http://localhost:3100` (Accesses both Frontend and Backend)
- **Backend API**: `http://localhost:8000`
- **Frontend**: `http://localhost:5173`
