{"id":15142653,"url":"https://github.com/ddeutils/ddeutil-observe","last_synced_at":"2025-10-23T20:30:22.728Z","repository":{"id":252381694,"uuid":"833500871","full_name":"ddeutils/ddeutil-observe","owner":"ddeutils","description":"Lightweight observation application with FastAPI","archived":false,"fork":false,"pushed_at":"2024-09-25T06:20:26.000Z","size":275,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2024-09-27T09:43:23.514Z","etag":null,"topics":["fastapi","observability"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ddeutils.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-25T07:22:54.000Z","updated_at":"2024-09-25T06:20:29.000Z","dependencies_parsed_at":"2024-08-09T12:14:13.468Z","dependency_job_id":"40fa0802-1fc3-485e-9c65-eb20eb478084","html_url":"https://github.com/ddeutils/ddeutil-observe","commit_stats":null,"previous_names":["ddeutils/ddeutil-observe"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddeutils%2Fddeutil-observe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddeutils%2Fddeutil-observe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddeutils%2Fddeutil-observe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddeutils%2Fddeutil-observe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ddeutils","download_url":"https://codeload.github.com/ddeutils/ddeutil-observe/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219867932,"owners_count":16555811,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastapi","observability"],"created_at":"2024-09-26T09:43:23.803Z","updated_at":"2025-10-23T20:30:22.722Z","avatar_url":"https://github.com/ddeutils.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Observe Application\n\n[![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)\n[![pypi version](https://img.shields.io/pypi/v/ddeutil-observe)](https://pypi.org/project/ddeutil-observe/)\n[![python support version](https://img.shields.io/pypi/pyversions/ddeutil-observe)](https://pypi.org/project/ddeutil-observe/)\n[![size](https://img.shields.io/github/languages/code-size/ddeutils/ddeutil-observe)](https://github.com/ddeutils/ddeutil-observe)\n[![gh license](https://img.shields.io/github/license/ddeutils/ddeutil-observe)](https://github.com/ddeutils/ddeutil-observe/blob/main/LICENSE)\n[![code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nThe **Lightweight Observe Application** project was created for easy to\nmake an observe application that getting logs, audits, or trigger status\nfrom any data framework storage and endpoint APIs.\nThis project focuses on the `ddeutil-workflow` tool first :dart:.\n\n\u003e [!WARNING]\n\u003e This project is the best fit integration with `ddeutil-workflow` package.\n\u003e The first propose is monitor and observe from worker nodes that deploy the\n\u003e workflow application on a target self-hosted.\n\n\u003e [!NOTE]\n\u003e I will use this project to be the base Frontend learning path for me.\n\u003e **The frontend stacks** that I use on this project:\n\u003e - [**HTMX**](https://htmx.org): For Server interactivity\n\u003e - [**Alpine.js**](https://alpinejs.dev/start-here): For Client interactivity\n\n## 📦 Installation\n\n```shell\npip install -U ddeutil-observe\n```\n\n\u003e :egg: **Docker Images** supported:\n\u003e\n\u003e | Docker Image                | Python Version | Support |\n\u003e |:----------------------------|:--------------:|:-------:|\n\u003e | ddeutil-observe:latest      |     `3.9`      |   :x:   |\n\u003e | ddeutil-observe:python3.10  |     `3.10`     |   :x:   |\n\u003e | ddeutil-observe:python3.11  |     `3.11`     |   :x:   |\n\u003e | ddeutil-observe:python3.12  |     `3.12`     |   :x:   |\n\u003e | ddeutil-observe:python3.12  |     `3.13`     |   :x:   |\n\n\u003e [!NOTE]\n\u003e If you want to increase this application performance, you can install the\n\u003e performance option, `pip install ddeutil-observe[perf]` (It does not edit\n\u003e code, it's just routing other faster packages).\n\n## :beers: Getting Started\n\nFor the first phase, I will use the SQLite be a backend database that keep\nauthentication and workflows data.\n\n### Login Page\n\n![Login Page](./docs/img/login-page.png?raw=true)\n\n### Main Page\n\n![Workflow Page](./docs/img/workflow-page.png?raw=true)\n\n![Workflow Detail Page](./docs/img/workflow-detail-page.png?raw=true)\n\n![Workflow Trace Page](./docs/img/workflow-trace-page.png?raw=true)\n\n## :cookie: Configuration\n\n\u003e [!IMPORTANT]\n\u003e The config value that you will set on the environment should combine with\n\u003e prefix, component, and name which is `OBSERVE_{component}_{name}` (Upper case).\n\n| Environment                      | Component | Default                            | Description                                                                                    |\n|:---------------------------------|:---------:|:-----------------------------------|:-----------------------------------------------------------------------------------------------|\n| **TIMEZONE**                     |   Core    | `UTC`                              | A timezone that use on all components of this application                                      |\n| **SQLALCHEMY_DB_ASYNC_URL**      |   Core    | `sqlite+aiosqlite:///./observe.db` | A database url of the application backend side                                                 |\n| **ACCESS_SECRET_KEY**            |   Core    | `secrets.token_urlsafe(32)`        | A secret key that use to hash the access token with jwt package                                |\n| **ACCESS_TOKEN_EXPIRE_MINUTES**  |   Core    | `30`                               | Expire period of the access token in minute unit                                               |\n| **REFRESH_SECRET_KEY**           |   Core    | `secrets.token_urlsafe(32)`        | A secret key that use to hash the refresh token with jwt package                               |\n| **REFRESH_TOKEN_EXPIRE_MINUTES** |   Core    | `60 * 24 * 8`                      | Expire period of the refresh token in minute unit                                              |\n| **ADMIN_USER**                   |    Web    | `observe`                          | An username of superuser                                                                       |\n| **ADMIN_PASS**                   |    Web    | `observe`                          | A password of superuser                                                                        |\n| **ADMIN_EMAIL**                  |    Web    | `observe@mail.com`                 | An email of superuser                                                                          |\n| **DEBUG_MODE**                   |    Log    | `true`                             | Logging mode                                                                                   |\n| **SQLALCHEMY_DEBUG_MODE**        |    Log    | `true`                             | Database Logging mode that will logging every execution statement before and after connection  |\n\n## :rocket: Deployment\n\n```shell\n(env) $ uvicorn src.ddeutil.observe.app:app \\\n  --host 127.0.0.1 \\\n  --port 88 \\\n  --no-access-log\n```\n\n\u003e [!NOTE]\n\u003e If this package already deploy, it is able to use\n\u003e ```shell\n\u003e (env) $ uvicorn ddeutil.workflow.api:app \\\n\u003e   --host 127.0.0.1 \\\n\u003e   --port 88 \\\n\u003e   --workers 4 \\\n\u003e   --no-access-log\n\u003e ```\n\n## :speech_balloon: Contribute\n\nI do not think this project will go around the world because it has specific propose,\nand you can create by your coding without this project dependency for long term\nsolution. So, on this time, you can open [the GitHub issue on this project :raised_hands:](https://github.com/ddeutils/ddeutil-observe/issues)\nfor fix bug or request new feature if you want it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddeutils%2Fddeutil-observe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fddeutils%2Fddeutil-observe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddeutils%2Fddeutil-observe/lists"}