Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/simonw/asgi-log-to-sqlite
ASGI middleware for logging traffic to a SQLite database
https://github.com/simonw/asgi-log-to-sqlite
asgi datasette-io logging sqlite
Last synced: 27 days ago
JSON representation
ASGI middleware for logging traffic to a SQLite database
- Host: GitHub
- URL: https://github.com/simonw/asgi-log-to-sqlite
- Owner: simonw
- License: apache-2.0
- Created: 2019-12-16T20:27:04.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-02-24T20:15:50.000Z (over 4 years ago)
- Last Synced: 2024-10-06T20:30:50.135Z (about 1 month ago)
- Topics: asgi, datasette-io, logging, sqlite
- Language: Python
- Size: 11.7 KB
- Stars: 6
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# asgi-log-to-sqlite
[![PyPI](https://img.shields.io/pypi/v/asgi-log-to-sqlite.svg)](https://pypi.org/project/asgi-log-to-sqlite/)
[![CircleCI](https://circleci.com/gh/simonw/asgi-log-to-sqlite.svg?style=svg)](https://circleci.com/gh/simonw/asgi-log-to-sqlite)
[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/simonw/asgi-log-to-sqlite/blob/master/LICENSE)ASGI middleware for logging traffic to a SQLite database
See [Logging to SQLite using ASGI middleware](https://simonwillison.net/2019/Dec/16/logging-sqlite-asgi-middleware/) for background on this project.
## Installation
pip install asgi-log-to-sqlite
## Usage
```python
from asgi_log_to_sqlite import AsgiLogToSqlite
from my_asgi_app import appapp = AsgiLogToSqlite(app, "/tmp/log.db")
```Requests to your ASGI app will now be logged to the SQLite database file at `/tmp/log.db`.
## Schema
The database used to log requests has one key table - `requests` - and 6 lookup tables: `paths`, `user_agents`, `referers`, `accept_languages`, `content_types` and `query_strings`.
The full schema is as follows:
```sql
CREATE TABLE [paths] (
[id] INTEGER PRIMARY KEY,
[name] TEXT
);
CREATE UNIQUE INDEX idx_paths_name
ON paths (name);
CREATE TABLE [user_agents] (
[id] INTEGER PRIMARY KEY,
[name] TEXT
);
CREATE UNIQUE INDEX idx_user_agents_name
ON user_agents (name);
CREATE TABLE [referers] (
[id] INTEGER PRIMARY KEY,
[name] TEXT
);
CREATE UNIQUE INDEX idx_referers_name
ON referers (name);
CREATE TABLE [accept_languages] (
[id] INTEGER PRIMARY KEY,
[name] TEXT
);
CREATE UNIQUE INDEX idx_accept_languages_name
ON accept_languages (name);
CREATE TABLE [content_types] (
[id] INTEGER PRIMARY KEY,
[name] TEXT
);
CREATE UNIQUE INDEX idx_content_types_name
ON content_types (name);
CREATE TABLE [query_strings] (
[id] INTEGER PRIMARY KEY,
[name] TEXT
);
CREATE UNIQUE INDEX idx_query_strings_name
ON query_strings (name);
CREATE TABLE [requests] (
[start] FLOAT,
[method] TEXT,
[path] INTEGER REFERENCES [paths]([id]),
[query_string] INTEGER REFERENCES [query_strings]([id]),
[user_agent] INTEGER REFERENCES [user_agents]([id]),
[referer] INTEGER REFERENCES [referers]([id]),
[accept_language] INTEGER REFERENCES [accept_languages]([id]),
[http_status] INTEGER,
[content_type] INTEGER REFERENCES [content_types]([id]),
[client_ip] TEXT,
[duration] FLOAT,
[body_size] INTEGER
);
```