skelion 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- skelion-1.0.0/PKG-INFO +79 -0
- skelion-1.0.0/README.md +54 -0
- skelion-1.0.0/pyproject.toml +36 -0
- skelion-1.0.0/setup.cfg +4 -0
- skelion-1.0.0/skelion.egg-info/PKG-INFO +79 -0
- skelion-1.0.0/skelion.egg-info/SOURCES.txt +8 -0
- skelion-1.0.0/skelion.egg-info/dependency_links.txt +1 -0
- skelion-1.0.0/skelion.egg-info/requires.txt +2 -0
- skelion-1.0.0/skelion.egg-info/top_level.txt +1 -0
- skelion-1.0.0/skelion.py +85 -0
skelion-1.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: skelion
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Drop-in Python fail-open resilience middleware for FastAPI, Starlette, and ASGI backends
|
|
5
|
+
Author-email: Skelion Team <team@skelion.dev>
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://skelion.dev
|
|
8
|
+
Project-URL: Repository, https://github.com/adity/helios
|
|
9
|
+
Project-URL: Documentation, https://skelion.dev/docs
|
|
10
|
+
Project-URL: Issues, https://github.com/adity/helios/issues
|
|
11
|
+
Keywords: skelion,resilience,telemetry,fail-open,fastapi,asgi,observability,zero-pii
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
15
|
+
Classifier: Topic :: System :: Monitoring
|
|
16
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
Requires-Dist: httpx>=0.24.0
|
|
24
|
+
Requires-Dist: starlette>=0.28.0
|
|
25
|
+
|
|
26
|
+
# skelion
|
|
27
|
+
|
|
28
|
+
> Official Drop-in Fail-Open Resilience & Telemetry Middleware for FastAPI, Starlette, and ASGI
|
|
29
|
+
|
|
30
|
+
Intercepts unhandled edge crashes fail-open, scrubs PII, and streams sanitized telemetry to **Skelion SaaS** for autonomous AST patch generation and replay verification.
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install skelion
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quickstart
|
|
39
|
+
|
|
40
|
+
Add 2 lines to your FastAPI / ASGI application:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from fastapi import FastAPI
|
|
44
|
+
from skelion import SkelionMiddleware
|
|
45
|
+
|
|
46
|
+
app = FastAPI()
|
|
47
|
+
|
|
48
|
+
# Mount Skelion Resilience Middleware
|
|
49
|
+
app.add_middleware(
|
|
50
|
+
SkelionMiddleware,
|
|
51
|
+
api_key="skl_live_...", # Or pass via SKELION_API_KEY env var
|
|
52
|
+
fail_open=True # Returns buffered 200 OK so users never see 500 downtime
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
@app.get("/api/checkout")
|
|
56
|
+
def checkout():
|
|
57
|
+
# If an unexpected crash occurs:
|
|
58
|
+
raise RuntimeError("Payment gateway network partition")
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Features
|
|
62
|
+
|
|
63
|
+
- **Guaranteed Fail-Open:** Never crashes or blocks user traffic. Buffers failed requests with synthetic fallbacks.
|
|
64
|
+
- **Zero-PII Scrubbing:** Authorization headers, cookies, passwords, and credit card patterns are masked client-side before dispatch.
|
|
65
|
+
- **Deterministic Error Fingerprinting:** Crash groups are deduplicated automatically in the Skelion dashboard.
|
|
66
|
+
- **Autonomous Patch Synthesis:** Integrates with Skelion GitHub bot to open 0-regression pull requests for verified fixes.
|
|
67
|
+
|
|
68
|
+
## Configuration Options
|
|
69
|
+
|
|
70
|
+
| Option | Type | Default | Description |
|
|
71
|
+
| :--- | :--- | :--- | :--- |
|
|
72
|
+
| `api_key` | `str` | `os.getenv("SKELION_API_KEY")` | Scoped API key (`skl_live_...`) |
|
|
73
|
+
| `endpoint` | `str` | `http://127.0.0.1:8003` | Skelion SaaS Ingress URL |
|
|
74
|
+
| `fail_open` | `bool` | `True` | Return buffered 200 instead of unhandled 500 |
|
|
75
|
+
| `debug` | `bool` | `False` | Enable console telemetry logging |
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
Apache-2.0
|
skelion-1.0.0/README.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# skelion
|
|
2
|
+
|
|
3
|
+
> Official Drop-in Fail-Open Resilience & Telemetry Middleware for FastAPI, Starlette, and ASGI
|
|
4
|
+
|
|
5
|
+
Intercepts unhandled edge crashes fail-open, scrubs PII, and streams sanitized telemetry to **Skelion SaaS** for autonomous AST patch generation and replay verification.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pip install skelion
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quickstart
|
|
14
|
+
|
|
15
|
+
Add 2 lines to your FastAPI / ASGI application:
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
from fastapi import FastAPI
|
|
19
|
+
from skelion import SkelionMiddleware
|
|
20
|
+
|
|
21
|
+
app = FastAPI()
|
|
22
|
+
|
|
23
|
+
# Mount Skelion Resilience Middleware
|
|
24
|
+
app.add_middleware(
|
|
25
|
+
SkelionMiddleware,
|
|
26
|
+
api_key="skl_live_...", # Or pass via SKELION_API_KEY env var
|
|
27
|
+
fail_open=True # Returns buffered 200 OK so users never see 500 downtime
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
@app.get("/api/checkout")
|
|
31
|
+
def checkout():
|
|
32
|
+
# If an unexpected crash occurs:
|
|
33
|
+
raise RuntimeError("Payment gateway network partition")
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Features
|
|
37
|
+
|
|
38
|
+
- **Guaranteed Fail-Open:** Never crashes or blocks user traffic. Buffers failed requests with synthetic fallbacks.
|
|
39
|
+
- **Zero-PII Scrubbing:** Authorization headers, cookies, passwords, and credit card patterns are masked client-side before dispatch.
|
|
40
|
+
- **Deterministic Error Fingerprinting:** Crash groups are deduplicated automatically in the Skelion dashboard.
|
|
41
|
+
- **Autonomous Patch Synthesis:** Integrates with Skelion GitHub bot to open 0-regression pull requests for verified fixes.
|
|
42
|
+
|
|
43
|
+
## Configuration Options
|
|
44
|
+
|
|
45
|
+
| Option | Type | Default | Description |
|
|
46
|
+
| :--- | :--- | :--- | :--- |
|
|
47
|
+
| `api_key` | `str` | `os.getenv("SKELION_API_KEY")` | Scoped API key (`skl_live_...`) |
|
|
48
|
+
| `endpoint` | `str` | `http://127.0.0.1:8003` | Skelion SaaS Ingress URL |
|
|
49
|
+
| `fail_open` | `bool` | `True` | Return buffered 200 instead of unhandled 500 |
|
|
50
|
+
| `debug` | `bool` | `False` | Enable console telemetry logging |
|
|
51
|
+
|
|
52
|
+
## License
|
|
53
|
+
|
|
54
|
+
Apache-2.0
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "skelion"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Drop-in Python fail-open resilience middleware for FastAPI, Starlette, and ASGI backends"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
authors = [
|
|
11
|
+
{ name = "Skelion Team", email = "team@skelion.dev" },
|
|
12
|
+
]
|
|
13
|
+
license = { text = "Apache-2.0" }
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 5 - Production/Stable",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"Topic :: Software Development :: Quality Assurance",
|
|
18
|
+
"Topic :: System :: Monitoring",
|
|
19
|
+
"License :: OSI Approved :: Apache Software License",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.9",
|
|
22
|
+
"Programming Language :: Python :: 3.10",
|
|
23
|
+
"Programming Language :: Python :: 3.11",
|
|
24
|
+
"Programming Language :: Python :: 3.12",
|
|
25
|
+
]
|
|
26
|
+
keywords = ["skelion", "resilience", "telemetry", "fail-open", "fastapi", "asgi", "observability", "zero-pii"]
|
|
27
|
+
dependencies = [
|
|
28
|
+
"httpx>=0.24.0",
|
|
29
|
+
"starlette>=0.28.0",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.urls]
|
|
33
|
+
Homepage = "https://skelion.dev"
|
|
34
|
+
Repository = "https://github.com/adity/helios"
|
|
35
|
+
Documentation = "https://skelion.dev/docs"
|
|
36
|
+
Issues = "https://github.com/adity/helios/issues"
|
skelion-1.0.0/setup.cfg
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: skelion
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Drop-in Python fail-open resilience middleware for FastAPI, Starlette, and ASGI backends
|
|
5
|
+
Author-email: Skelion Team <team@skelion.dev>
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://skelion.dev
|
|
8
|
+
Project-URL: Repository, https://github.com/adity/helios
|
|
9
|
+
Project-URL: Documentation, https://skelion.dev/docs
|
|
10
|
+
Project-URL: Issues, https://github.com/adity/helios/issues
|
|
11
|
+
Keywords: skelion,resilience,telemetry,fail-open,fastapi,asgi,observability,zero-pii
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
15
|
+
Classifier: Topic :: System :: Monitoring
|
|
16
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
Requires-Dist: httpx>=0.24.0
|
|
24
|
+
Requires-Dist: starlette>=0.28.0
|
|
25
|
+
|
|
26
|
+
# skelion
|
|
27
|
+
|
|
28
|
+
> Official Drop-in Fail-Open Resilience & Telemetry Middleware for FastAPI, Starlette, and ASGI
|
|
29
|
+
|
|
30
|
+
Intercepts unhandled edge crashes fail-open, scrubs PII, and streams sanitized telemetry to **Skelion SaaS** for autonomous AST patch generation and replay verification.
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install skelion
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Quickstart
|
|
39
|
+
|
|
40
|
+
Add 2 lines to your FastAPI / ASGI application:
|
|
41
|
+
|
|
42
|
+
```python
|
|
43
|
+
from fastapi import FastAPI
|
|
44
|
+
from skelion import SkelionMiddleware
|
|
45
|
+
|
|
46
|
+
app = FastAPI()
|
|
47
|
+
|
|
48
|
+
# Mount Skelion Resilience Middleware
|
|
49
|
+
app.add_middleware(
|
|
50
|
+
SkelionMiddleware,
|
|
51
|
+
api_key="skl_live_...", # Or pass via SKELION_API_KEY env var
|
|
52
|
+
fail_open=True # Returns buffered 200 OK so users never see 500 downtime
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
@app.get("/api/checkout")
|
|
56
|
+
def checkout():
|
|
57
|
+
# If an unexpected crash occurs:
|
|
58
|
+
raise RuntimeError("Payment gateway network partition")
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Features
|
|
62
|
+
|
|
63
|
+
- **Guaranteed Fail-Open:** Never crashes or blocks user traffic. Buffers failed requests with synthetic fallbacks.
|
|
64
|
+
- **Zero-PII Scrubbing:** Authorization headers, cookies, passwords, and credit card patterns are masked client-side before dispatch.
|
|
65
|
+
- **Deterministic Error Fingerprinting:** Crash groups are deduplicated automatically in the Skelion dashboard.
|
|
66
|
+
- **Autonomous Patch Synthesis:** Integrates with Skelion GitHub bot to open 0-regression pull requests for verified fixes.
|
|
67
|
+
|
|
68
|
+
## Configuration Options
|
|
69
|
+
|
|
70
|
+
| Option | Type | Default | Description |
|
|
71
|
+
| :--- | :--- | :--- | :--- |
|
|
72
|
+
| `api_key` | `str` | `os.getenv("SKELION_API_KEY")` | Scoped API key (`skl_live_...`) |
|
|
73
|
+
| `endpoint` | `str` | `http://127.0.0.1:8003` | Skelion SaaS Ingress URL |
|
|
74
|
+
| `fail_open` | `bool` | `True` | Return buffered 200 instead of unhandled 500 |
|
|
75
|
+
| `debug` | `bool` | `False` | Enable console telemetry logging |
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
Apache-2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
skelion
|
skelion-1.0.0/skelion.py
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# skelion-python — Official Python Drop-in Resilience Middleware (FastAPI / Starlette / ASGI)
|
|
2
|
+
# Intercepts unhandled edge crashes fail-open, scrubs PII, and reports to Skelion SaaS
|
|
3
|
+
|
|
4
|
+
import time
|
|
5
|
+
import json
|
|
6
|
+
import logging
|
|
7
|
+
from typing import Optional
|
|
8
|
+
from starlette.middleware.base import BaseHTTPMiddleware
|
|
9
|
+
from starlette.requests import Request
|
|
10
|
+
from starlette.responses import JSONResponse, Response
|
|
11
|
+
import httpx
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger("skelion.sdk")
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class SkelionMiddleware(BaseHTTPMiddleware):
|
|
17
|
+
"""
|
|
18
|
+
Skelion Python Middleware:
|
|
19
|
+
1. Intercepts unhandled 5xx exceptions.
|
|
20
|
+
2. Sends sanitized telemetry to Skelion Control Plane asynchronously.
|
|
21
|
+
3. Guarantees Fail-Open: returns synthetic fallback instead of 500 downtime.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
def __init__(
|
|
25
|
+
self,
|
|
26
|
+
app,
|
|
27
|
+
api_key: Optional[str] = None,
|
|
28
|
+
endpoint: str = "http://127.0.0.1:8003",
|
|
29
|
+
fail_open: bool = True,
|
|
30
|
+
debug: bool = False,
|
|
31
|
+
):
|
|
32
|
+
super().__init__(app)
|
|
33
|
+
self.api_key = api_key
|
|
34
|
+
self.endpoint = endpoint.rstrip("/")
|
|
35
|
+
self.fail_open = fail_open
|
|
36
|
+
self.debug = debug
|
|
37
|
+
|
|
38
|
+
async def dispatch(self, request: Request, call_next):
|
|
39
|
+
start_time = time.time()
|
|
40
|
+
try:
|
|
41
|
+
response = await call_next(request)
|
|
42
|
+
return response
|
|
43
|
+
except Exception as exc:
|
|
44
|
+
duration_ms = round((time.time() - start_time) * 1000, 2)
|
|
45
|
+
if self.debug:
|
|
46
|
+
logger.error(f"[Skelion SDK] Intercepted error on {request.method} {request.url.path}: {exc}")
|
|
47
|
+
|
|
48
|
+
# 1. Asynchronously send telemetry to Skelion SaaS
|
|
49
|
+
if self.api_key:
|
|
50
|
+
try:
|
|
51
|
+
payload = {
|
|
52
|
+
"http_method": request.method,
|
|
53
|
+
"route_path": request.url.path,
|
|
54
|
+
"status_code": 500,
|
|
55
|
+
"error_summary": str(exc) or "Unhandled server exception",
|
|
56
|
+
"captured_headers": dict(request.headers),
|
|
57
|
+
"captured_payload": "",
|
|
58
|
+
"latency_ms": duration_ms,
|
|
59
|
+
}
|
|
60
|
+
async with httpx.AsyncClient(timeout=3.0) as client:
|
|
61
|
+
await client.post(
|
|
62
|
+
f"{self.endpoint}/v1/ingest/incident",
|
|
63
|
+
headers={
|
|
64
|
+
"Authorization": f"Bearer {self.api_key}",
|
|
65
|
+
"Content-Type": "application/json",
|
|
66
|
+
},
|
|
67
|
+
json=payload,
|
|
68
|
+
)
|
|
69
|
+
except Exception as e:
|
|
70
|
+
# Fail-open guarantee: never crash on telemetry failure
|
|
71
|
+
if self.debug:
|
|
72
|
+
logger.warning(f"[Skelion SDK] Telemetry dispatch failed: {e}")
|
|
73
|
+
|
|
74
|
+
# 2. Fail-Open Response Boundary
|
|
75
|
+
if self.fail_open:
|
|
76
|
+
return JSONResponse(
|
|
77
|
+
status_code=200,
|
|
78
|
+
content={
|
|
79
|
+
"status": "fail_open_buffered",
|
|
80
|
+
"incident_route": request.url.path,
|
|
81
|
+
"message": "Your request was buffered safely by Skelion Edge Resilience and will be reconciled automatically.",
|
|
82
|
+
},
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
raise exc
|