Skip to main content

Async http client/server framework (asyncio)

Project description

Async http client/server framework

aiohttp logo

Travis status for master branch AppVeyor status for master branch codecov.io status for master branch Latest PyPI package version Latest Read The Docs Chat on Gitter

Key Features

  • Supports both client and server side of HTTP protocol.

  • Supports both client and server Web-Sockets out-of-the-box and avoids Callback Hell.

  • Provides Web-server with middlewares and pluggable routing.

Getting started

Client

To get something from the web:

import aiohttp
import asyncio

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        html = await fetch(session, 'http://python.org')
        print(html)

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Server

An example using a simple server:

# examples/server_simple.py
from aiohttp import web

async def handle(request):
    name = request.match_info.get('name', "Anonymous")
    text = "Hello, " + name
    return web.Response(text=text)

async def wshandle(request):
    ws = web.WebSocketResponse()
    await ws.prepare(request)

    async for msg in ws:
        if msg.type == web.WSMsgType.text:
            await ws.send_str("Hello, {}".format(msg.data))
        elif msg.type == web.WSMsgType.binary:
            await ws.send_bytes(msg.data)
        elif msg.type == web.WSMsgType.close:
            break

    return ws


app = web.Application()
app.add_routes([web.get('/', handle),
                web.get('/echo', wshandle),
                web.get('/{name}', handle)])

if __name__ == '__main__':
    web.run_app(app)

Documentation

https://aiohttp.readthedocs.io/

Demos

https://github.com/aio-libs/aiohttp-demos

Communication channels

aio-libs google group: https://groups.google.com/forum/#!forum/aio-libs

Feel free to post your questions and ideas here.

gitter chat https://gitter.im/aio-libs/Lobby

We support Stack Overflow. Please add aiohttp tag to your question there.

Requirements

Optionally you may install the cChardet and aiodns libraries (highly recommended for sake of speed).

License

aiohttp is offered under the Apache 2 license.

Keepsafe

The aiohttp community would like to thank Keepsafe (https://www.getkeepsafe.com) for its support in the early days of the project.

Source code

The latest developer version is available in a GitHub repository: https://github.com/aio-libs/aiohttp

Benchmarks

If you are interested in efficiency, the AsyncIO community maintains a list of benchmarks on the official wiki: https://github.com/python/asyncio/wiki/Benchmarks

Changelog

3.5.4 (2019-01-12)

Bugfixes

  • Fix stream .read() / .readany() / .iter_any() which used to return a partial content only in case of compressed content #3525

3.5.3 (2019-01-10)

Bugfixes

  • Fix type stubs for aiohttp.web.run_app(access_log=True) and fix edge case of access_log=True and the event loop being in debug mode. #3504

  • Fix aiohttp.ClientTimeout type annotations to accept None for fields #3511

  • Send custom per-request cookies even if session jar is empty #3515

  • Restore Linux binary wheels publishing on PyPI


3.5.2 (2019-01-08)

Features

  • FileResponse from web_fileresponse.py uses a ThreadPoolExecutor to work with files asynchronously. I/O based payloads from payload.py uses a ThreadPoolExecutor to work with I/O objects asynchronously. #3313

  • Internal Server Errors in plain text if the browser does not support HTML. #3483

Bugfixes

  • Preserve MultipartWriter parts headers on write.

    Refactor the way how Payload.headers are handled. Payload instances now always have headers and Content-Type defined.

    Fix Payload Content-Disposition header reset after initial creation. #3035

  • Log suppressed exceptions in GunicornWebWorker. #3464

  • Remove wildcard imports. #3468

  • Use the same task for app initialization and web server handling in gunicorn workers. It allows to use Python3.7 context vars smoothly. #3471

  • Fix handling of chunked+gzipped response when first chunk does not give uncompressed data #3477

  • Replace collections.MutableMapping with collections.abc.MutableMapping to avoid a deprecation warning. #3480

  • Payload.size type annotation changed from Optional[float] to Optional[int]. #3484

  • Ignore done tasks when cancels pending activities on web.run_app finalization. #3497

Improved Documentation

  • Add documentation for aiohttp.web.HTTPException. #3490

Misc


3.5.1 (2018-12-24)

  • Fix a regression about ClientSession._requote_redirect_url modification in debug mode.

3.5.0 (2018-12-22)

Features

  • The library type annotations are checked in strict mode now.

  • Add support for setting cookies for individual request (#2387)

  • Application.add_domain implementation (#2809)

  • The default app in the request returned by test_utils.make_mocked_request can now have objects assigned to it and retrieved using the [] operator. (#3174)

  • Make request.url accessible when transport is closed. (#3177)

  • Add zlib_executor_size argument to Response constructor to allow compression to run in a background executor to avoid blocking the main thread and potentially triggering health check failures. (#3205)

  • Enable users to set ClientTimeout in aiohttp.request (#3213)

  • Don’t raise a warning if NETRC environment variable is not set and ~/.netrc file doesn’t exist. (#3267)

  • Add default logging handler to web.run_app

    If the Application.debug flag is set and the default logger aiohttp.access is used, access logs will now be output using a stderr StreamHandler if no handlers are attached. Furthermore, if the default logger has no log level set, the log level will be set to DEBUG. (#3324)

  • Add method argument to session.ws_connect().

    Sometimes server API requires a different HTTP method for WebSocket connection establishment.

    For example, Docker exec needs POST. (#3378)

  • Create a task per request handling. (#3406)

Bugfixes

  • Enable passing access_log_class via handler_args (#3158)

  • Return empty bytes with end-of-chunk marker in empty stream reader. (#3186)

  • Accept CIMultiDictProxy instances for headers argument in web.Response constructor. (#3207)

  • Don’t uppercase HTTP method in parser (#3233)

  • Make method match regexp RFC-7230 compliant (#3235)

  • Add app.pre_frozen state to properly handle startup signals in sub-applications. (#3237)

  • Enhanced parsing and validation of helpers.BasicAuth.decode. (#3239)

  • Change imports from collections module in preparation for 3.8. (#3258)

  • Ensure Host header is added first to ClientRequest to better replicate browser (#3265)

  • Fix forward compatibility with Python 3.8: importing ABCs directly from the collections module will not be supported anymore. (#3273)

  • Keep the query string by normalize_path_middleware. (#3278)

  • Fix missing parameter raise_for_status for aiohttp.request() (#3290)

  • Bracket IPv6 addresses in the HOST header (#3304)

  • Fix default message for server ping and pong frames. (#3308)

  • Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop def. (#3337)

  • Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function (#3361)

  • Release HTTP response before raising status exception (#3364)

  • Fix task cancellation when sendfile() syscall is used by static file handling. (#3383)

  • Fix stack trace for asyncio.TimeoutError which was not logged, when it is caught in the handler. (#3414)

Improved Documentation

  • Improve documentation of Application.make_handler parameters. (#3152)

  • Fix BaseRequest.raw_headers doc. (#3215)

  • Fix typo in TypeError exception reason in web.Application._handle (#3229)

  • Make server access log format placeholder %b documentation reflect behavior and docstring. (#3307)

Deprecations and Removals

  • Deprecate modification of session.requote_redirect_url (#2278)

  • Deprecate stream.unread_data() (#3260)

  • Deprecated use of boolean in resp.enable_compression() (#3318)

  • Encourage creation of aiohttp public objects inside a coroutine (#3331)

  • Drop dead Connection.detach() and Connection.writer. Both methods were broken for more than 2 years. (#3358)

  • Deprecate app.loop, request.loop, client.loop and connector.loop properties. (#3374)

  • Deprecate explicit debug argument. Use asyncio debug mode instead. (#3381)

  • Deprecate body parameter in HTTPException (and derived classes) constructor. (#3385)

  • Deprecate bare connector close, use async with connector: and await connector.close() instead. (#3417)

  • Deprecate obsolete read_timeout and conn_timeout in ClientSession constructor. (#3438)

Misc

  • #3341, #3351

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aiohttp-3.6.0a12.tar.gz (1.1 MB view details)

Uploaded Source

Built Distributions

aiohttp-3.6.0a12-py3-none-any.whl (189.5 kB view details)

Uploaded Python 3

aiohttp-3.6.0a12-cp37-cp37m-win_amd64.whl (615.8 kB view details)

Uploaded CPython 3.7m Windows x86-64

aiohttp-3.6.0a12-cp37-cp37m-win32.whl (588.1 kB view details)

Uploaded CPython 3.7m Windows x86

aiohttp-3.6.0a12-cp37-cp37m-manylinux1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.7m

aiohttp-3.6.0a12-cp37-cp37m-manylinux1_i686.whl (1.1 MB view details)

Uploaded CPython 3.7m

aiohttp-3.6.0a12-cp36-cp36m-win_amd64.whl (615.7 kB view details)

Uploaded CPython 3.6m Windows x86-64

aiohttp-3.6.0a12-cp36-cp36m-win32.whl (588.0 kB view details)

Uploaded CPython 3.6m Windows x86

aiohttp-3.6.0a12-cp36-cp36m-manylinux1_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.6m

aiohttp-3.6.0a12-cp36-cp36m-manylinux1_i686.whl (1.1 MB view details)

Uploaded CPython 3.6m

aiohttp-3.6.0a12-cp35-cp35m-win_amd64.whl (610.1 kB view details)

Uploaded CPython 3.5m Windows x86-64

aiohttp-3.6.0a12-cp35-cp35m-win32.whl (582.1 kB view details)

Uploaded CPython 3.5m Windows x86

aiohttp-3.6.0a12-cp35-cp35m-manylinux1_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.5m

aiohttp-3.6.0a12-cp35-cp35m-manylinux1_i686.whl (1.1 MB view details)

Uploaded CPython 3.5m

File details

Details for the file aiohttp-3.6.0a12.tar.gz.

File metadata

  • Download URL: aiohttp-3.6.0a12.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4

File hashes

Hashes for aiohttp-3.6.0a12.tar.gz
Algorithm Hash digest
SHA256 74c33b3952b5593c9f029cbf3e250a434d8a53c2ad2ef03cf0165ea3b7c20d39
MD5 31d4fd8960e3427ecaf335f9c857a24d
BLAKE2b-256 b827f8b6e9cf66189ac452a66b05aa387370a7c57edb38b7d4459cace126a585

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-py3-none-any.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-py3-none-any.whl
  • Upload date:
  • Size: 189.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.3

File hashes

Hashes for aiohttp-3.6.0a12-py3-none-any.whl
Algorithm Hash digest
SHA256 8c8ab1007db37fc21a268314298e217c356f563e62643895016b1fd386f652ea
MD5 effee662ea130c8d900e8fea3ce6987f
BLAKE2b-256 eb155aa7b56562cd6099e39965c520892af559ef82dabfee58dc03594117a6bb

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 615.8 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4

File hashes

Hashes for aiohttp-3.6.0a12-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 9f56b968648ccab736635a419db3610f622a9ef57cf23ff738e8f400bbccd195
MD5 a94e472e221664d5ae9acae4a2feec5e
BLAKE2b-256 368fc86c9a50280da758ea9d60124b828c1f8515e1de465ddd858c02071c04eb

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp37-cp37m-win32.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 588.1 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.4

File hashes

Hashes for aiohttp-3.6.0a12-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 8dc351b9d7fde0b28e98bbbe26af1283888cac40b85487d71cb9ab1a2782d11e
MD5 06c19a8fb39ccc27d03a40068fb1734c
BLAKE2b-256 63c98620091021b08ca11014d82f39001ab004a80c4a6e8defcdcb3477ed826a

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1

File hashes

Hashes for aiohttp-3.6.0a12-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 ae6e074cb535174b6e2a2d4577c3268357da6fb72a0213bb4cc3a5b19d27433a
MD5 833141d34ce8ae0618e4daf7da458daf
BLAKE2b-256 b5f9a03cb17c6d366c83c04afd1484cea88d4d37fd76f605ddcecfa492d9c8ab

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp37-cp37m-manylinux1_i686.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp37-cp37m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1

File hashes

Hashes for aiohttp-3.6.0a12-cp37-cp37m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 38810dabd6552108a10eae6fcdfd42bf65f6bf35d390a345bdba896f66317c96
MD5 9d3afedc30bae028b7cab8af3b7e864d
BLAKE2b-256 4f8c5a453c93c2fab5d31b6fd4ac38afe8e5b37886be48e91fbe9d8970a84031

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 615.7 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.8

File hashes

Hashes for aiohttp-3.6.0a12-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 d0d61938da1f6e7ebaa35bc4da266131c607e16404801ebba3d3c22059babdbe
MD5 6392d1178b4392b76365f8c41127d52a
BLAKE2b-256 7b74784194455be1199e2e0d3bc6f6eae1aed1002ba5ec3ae0ef72cd24529ecd

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp36-cp36m-win32.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 588.0 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.6.8

File hashes

Hashes for aiohttp-3.6.0a12-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 0bd57e084c5e4623793cabd75eff06abe543bb1a462796e71dc6eee99a761215
MD5 6e963502cf0f40e4b01831b21b52827a
BLAKE2b-256 dfccf8ce97e071688ed0fdbf579de4b7204381792d199cad66de6a013ef1c0ed

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1

File hashes

Hashes for aiohttp-3.6.0a12-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f18e7c4630f2dea0932c904470b07943e26c64584be6cc476ad9a0e60f2d4998
MD5 dfb48c97f6838974ad17d03f98d59e74
BLAKE2b-256 b5380a1db9f7c5ded27d18570129639d5169668514056a30cb3f7cb88a97fe4a

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp36-cp36m-manylinux1_i686.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp36-cp36m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1

File hashes

Hashes for aiohttp-3.6.0a12-cp36-cp36m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 e1a68dde3131eaddcb801aa987844091496c62d984a863ff50aa5bb6ff3ff181
MD5 8d02b525d9cb98c426505c761ecaecae
BLAKE2b-256 f847dd3e30f4b36ac84a8f197be38671023b929e9d11ea7f510e38ae927e85f0

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 610.1 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4

File hashes

Hashes for aiohttp-3.6.0a12-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 c1f5ecd39062e5b5a807f02a15136d87b19d647f5f3d0af92afc1dc4748ca396
MD5 763800061ca73b5a291491bfee70ea77
BLAKE2b-256 39f7c61600fd18aac22f9e0cc55f8055957610e2fbdbb671b3e3b8950468ad48

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp35-cp35m-win32.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 582.1 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.5.4

File hashes

Hashes for aiohttp-3.6.0a12-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 eb5603b7fd4b58b21604ff10de804e983698ee1f47d0760dfce327f12f511149
MD5 91cee11032108039e0b8ade37e5a30e4
BLAKE2b-256 0f7bd55eb379f4bc7224f414f024b5f2e103663f21ce9b375414d42908de5c05

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1

File hashes

Hashes for aiohttp-3.6.0a12-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b721433b628fa73689d6213c30014fd7e555e15654f0f2dcae7319b4840ef967
MD5 df84087aea50f6a60787671165fcf0bb
BLAKE2b-256 0935c5a2d06dca8e2d6fee00e47dc43a9328a2c1419ff5696a2ff0ad2ff5da21

See more details on using hashes here.

Provenance

File details

Details for the file aiohttp-3.6.0a12-cp35-cp35m-manylinux1_i686.whl.

File metadata

  • Download URL: aiohttp-3.6.0a12-cp35-cp35m-manylinux1_i686.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.1

File hashes

Hashes for aiohttp-3.6.0a12-cp35-cp35m-manylinux1_i686.whl
Algorithm Hash digest
SHA256 c629e0667136d988095b12a3471b292d684875a4d9dc1351f51fabec4bfb7444
MD5 dde1f52ad01a672934cb6c36b2115c84
BLAKE2b-256 0e8c42cd82738bf3e906601fe1f9859c0ead62ddb47eb8b7d39456afc6229585

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page