# Observe Web App

[![test](https://github.com/ddeutils/ddeutil-observe/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/ddeutils/ddeutil-observe/actions/workflows/tests.yml)
[![pypi version](https://img.shields.io/pypi/v/ddeutil-observe)](https://pypi.org/project/ddeutil-observe/)
[![python support version](https://img.shields.io/pypi/pyversions/ddeutil-observe)](https://pypi.org/project/ddeutil-observe/)
[![size](https://img.shields.io/github/languages/code-size/ddeutils/ddeutil-observe)](https://github.com/ddeutils/ddeutil-observe)
[![gh license](https://img.shields.io/github/license/ddeutils/ddeutil-observe)](https://github.com/ddeutils/ddeutil-observe/blob/main/LICENSE)
[![code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

The **Lightweight observation web application** project was created for easy to
make a observation web application that getting log, or trigger status from any
data framework formats and endpoint APIs, this project focuses on the
`ddeutil-workflow` data orchestration tool first :dart:.

> [!WARNING]
> This project is the best fit integration with `ddeutil-workflow` package.
> The first propose is monitor and observe from worker nodes that deploy the
> workflow application on a target self-hosted.

## :round_pushpin: Installation

```shell
pip install ddeutil-observe
```

> I added this feature to the main milestone.
>
> :egg: **Docker Images** supported:
>
> | Docker Image               | Python Version | Support |
> |----------------------------|----------------|---------|
> | ddeutil-observe:latest     | `3.9`          | :x:     |
> | ddeutil-observe:python3.10 | `3.10`         | :x:     |
> | ddeutil-observe:python3.11 | `3.11`         | :x:     |
> | ddeutil-observe:python3.12 | `3.12`         | :x:     |
> | ddeutil-observe:python3.12 | `3.13`         | :x:     |

## :beers: Getting Started

This project implement the best scalable FastAPI web application structure.
For the first phase, I will use the SQLite be a backend database that keep
authentication and workflows data.

### Main Page

### Workflow Release Page

## :cookie: Configuration

| Environment                                 | Component | Default                          | Description                                                                                   |
|---------------------------------------------|-----------|----------------------------------|-----------------------------------------------------------------------------------------------|
| `OBSERVE_CORE_TIMEZONE`                     | Core      | UTC                              |                                                                                               |
| `OBSERVE_SQLALCHEMY_DB_ASYNC_URL`           | Core      | sqlite+aiosqlite:///./observe.db |                                                                                               |
| `OBSERVE_CORE_ACCESS_SECRET_KEY`            | Core      |                                  |                                                                                               |
| `OBSERVE_CORE_ACCESS_TOKEN_EXPIRE_MINUTES`  | Core      |                                  |                                                                                               |
| `OBSERVE_CORE_REFRESH_SECRET_KEY`           | Core      |                                  |                                                                                               |
| `OBSERVE_CORE_REFRESH_TOKEN_EXPIRE_MINUTES` | Core      |                                  |                                                                                               |
| `OBSERVE_WEB_ADMIN_USER`                    | Web       | observe                          | An username of superuser                                                                      |
| `OBSERVE_WEB_ADMIN_PASS`                    | Web       | observe                          | An password of superuser                                                                      |
| `OBSERVE_WEB_ADMIN_EMAIL`                   | Web       | observe@mail.com                 | An email of superuser                                                                         |
| `OBSERVE_LOG_DEBUG_MODE`                    | Log       | true                             | Logging mode                                                                                  |
| `OBSERVE_LOG_SQLALCHEMY_DEBUG_MODE`         | Log       | true                             | Database Logging mode that will logging every execution statement before and after connection |

## :rocket: Deployment

```shell
(env) $ uvicorn src.ddeutil.observe.app:app --host 127.0.0.1 --port 88
```

> [!NOTE]
> If this package already deploy, it able to use
> `uvicorn ddeutil.workflow.api:app --host 127.0.0.1 --port 88 --workers 4`
