Skip to main content

An implementation of QUIC and HTTP/3

Project description

License Version Python versions Tests Coverage Documentation

What is aioquic?

aioquic is a library for the QUIC network protocol in Python. It features a minimal TLS 1.3 implementation, a QUIC stack and an HTTP/3 stack.

aioquic is used by Python opensource projects such as dnspython, hypercorn, mitmproxy and the Web Platform Tests cross-browser test suite. It has also been used extensively in research papers about QUIC.

To learn more about aioquic please read the documentation.

Why should I use aioquic?

aioquic has been designed to be embedded into Python client and server libraries wishing to support QUIC and / or HTTP/3. The goal is to provide a common codebase for Python libraries in the hope of avoiding duplicated effort.

Both the QUIC and the HTTP/3 APIs follow the “bring your own I/O” pattern, leaving actual I/O operations to the API user. This approach has a number of advantages including making the code testable and allowing integration with different concurrency models.

A lot of effort has gone into writing an extensive test suite for the aioquic code to ensure best-in-class code quality, and it is regularly tested for interoperability against other QUIC implementations.

Features

  • minimal TLS 1.3 implementation conforming with RFC 8446

  • QUIC stack conforming with RFC 9000 (QUIC v1) and RFC 9369 (QUIC v2)
    • IPv4 and IPv6 support

    • connection migration and NAT rebinding

    • logging TLS traffic secrets

    • logging QUIC events in QLOG format

    • version negotiation conforming with RFC 9368

  • HTTP/3 stack conforming with RFC 9114
    • server push support

    • WebSocket bootstrapping conforming with RFC 9220

    • datagram support conforming with RFC 9297

Installing

The easiest way to install aioquic is to run:

pip install aioquic

Building from source

If there are no wheels for your system or if you wish to build aioquic from source you will need the OpenSSL development headers.

Linux

On Debian/Ubuntu run:

sudo apt install libssl-dev python3-dev

On Alpine Linux run:

sudo apk add openssl-dev python3-dev bsd-compat-headers libffi-dev

OS X

On OS X run:

brew install openssl

You will need to set some environment variables to link against OpenSSL:

export CFLAGS=-I$(brew --prefix openssl)/include
export LDFLAGS=-L$(brew --prefix openssl)/lib

Windows

On Windows the easiest way to install OpenSSL is to use Chocolatey.

choco install openssl

You will need to set some environment variables to link against OpenSSL:

$Env:INCLUDE = "C:\Progra~1\OpenSSL\include"
$Env:LIB = "C:\Progra~1\OpenSSL\lib"

Running the examples

aioquic comes with a number of examples illustrating various QUIC usecases.

You can browse these examples here: https://github.com/aiortc/aioquic/tree/main/examples

License

aioquic is released under the BSD license.

Project details


Download files

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

Source Distribution

aioquic-1.2.0.tar.gz (179.9 kB view details)

Uploaded Source

Built Distributions

aioquic-1.2.0-pp310-pypy310_pp73-win_amd64.whl (1.5 MB view details)

Uploaded PyPy Windows x86-64

aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

aioquic-1.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded PyPy macOS 11.0+ ARM64

aioquic-1.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (1.8 MB view details)

Uploaded PyPy macOS 10.15+ x86-64

aioquic-1.2.0-pp39-pypy39_pp73-win_amd64.whl (1.5 MB view details)

Uploaded PyPy Windows x86-64

aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

aioquic-1.2.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded PyPy macOS 11.0+ ARM64

aioquic-1.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (1.8 MB view details)

Uploaded PyPy macOS 10.15+ x86-64

aioquic-1.2.0-pp38-pypy38_pp73-win_amd64.whl (1.5 MB view details)

Uploaded PyPy Windows x86-64

aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ i686

aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.5 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

aioquic-1.2.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded PyPy macOS 11.0+ ARM64

aioquic-1.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (1.8 MB view details)

Uploaded PyPy macOS 10.9+ x86-64

aioquic-1.2.0-cp38-abi3-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.8+ Windows x86-64

aioquic-1.2.0-cp38-abi3-win32.whl (1.2 MB view details)

Uploaded CPython 3.8+ Windows x86

aioquic-1.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ x86-64

aioquic-1.2.0-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ i686

aioquic-1.2.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.6 MB view details)

Uploaded CPython 3.8+ manylinux: glibc 2.17+ ARM64

aioquic-1.2.0-cp38-abi3-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded CPython 3.8+ macOS 11.0+ ARM64

aioquic-1.2.0-cp38-abi3-macosx_10_9_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8+ macOS 10.9+ x86-64

File details

Details for the file aioquic-1.2.0.tar.gz.

File metadata

  • Download URL: aioquic-1.2.0.tar.gz
  • Upload date:
  • Size: 179.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for aioquic-1.2.0.tar.gz
Algorithm Hash digest
SHA256 f91263bb3f71948c5c8915b4d50ee370004f20a416f67fab3dcc90556c7e7199
MD5 bd18d37358cfe6c703e7988b5bd77d9a
BLAKE2b-256 4b1abf10b2c57c06c7452b685368cb1ac90565a6e686e84ec6f84465fb8f78f4

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 cbe7167b2faee887e115d83d25332c4b8fa4604d5175807d978cb4fe39b4e36e
MD5 e94b01afec14c5294cea67c9abde8ca7
BLAKE2b-256 fc40e946f3e28a803f2e553e710b0902dd8f2b6992801b1eec8d7c383f597715

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3976b75e82d83742c8b811e38d273eda2ca7f81394b6a85da33a02849c5f1d9d
MD5 23d385ebd054a4441249c7b4ed409441
BLAKE2b-256 d3de7bb51c7bcf8aceaba6b72656031708faf2eed8c5f237143a4a381f4dc1c8

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c22689c33fe4799624aed6faaba0af9e6ea7d31ac45047745828ee68d67fe1d9
MD5 7cd74f4a6d013b4b74ff4029ebf6987b
BLAKE2b-256 2963f17ce51381cdf75390d1d01f13cd7c4836c4dd8b75c0d4f7837cfabcafca

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6fe683943ea3439dd0aca05ff80e85a552d4b39f9f34858c76ac54c205990e88
MD5 b5529e97b85a20d4e5c4545ea7ac763a
BLAKE2b-256 9881e3c2e0f2a7e2380250490ed526851ebdfa0af825512fb30c2f2fe7bd6f04

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 358e2b9c1e0c24b9933094c3c2cf990faf44d03b64d6f8ff79b4b3f510c6c268
MD5 40f2cb200a444d3747848f076eb0e229
BLAKE2b-256 2dbdf1910e0d80b6acc3cc95a2daeaeb48fd07a1c83194b2c7791e9eaa1500a2

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 8e600da7aa7e4a7bc53ee8f45fd66808032127ae00938c119ac77d66633b8961
MD5 7a14dc0aa1b6e22615b45460037e9327
BLAKE2b-256 00ba023fb3f1476bc34b48e484a4ea866bfdef6454ff17d76ce5da7b02c4c6b7

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp39-pypy39_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp39-pypy39_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 f209ad5edbff8239e994c189dc74428420957448a190f4343faee4caedef4eee
MD5 9510ad5bb056b9c0dd907ee30316725e
BLAKE2b-256 a56e57e97a0c52d061150e84cb89d7d07efe323e7d5bcb9b98ede21e6cb12eff

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fcc1eb083ed9f8d903482e375281c8c26a5ed2b6bee5ee2be3f13275d8fdb146
MD5 48687ae27ec5628ee3d97581d54c9498
BLAKE2b-256 53501c7c6752e7492aa714b50b48430a625f13b0542a72e352be71719fc3000d

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c332cffa3c2124e5db82b2b9eb2662bd7c39ee2247606b74de689f6d3091b61a
MD5 5fac0e5d93d051ef1d4ff0433b16f3bf
BLAKE2b-256 dc2393f1363dba7f351fed9a7e1ed807685af14bd1d81c1ce637fc6bea10dd81

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6371c3afa1036294e1505fdbda8c147bc41c5b6709a47459e8c1b4eec41a86ef
MD5 a9412df2573abdefa45282dd0da0a60f
BLAKE2b-256 6a6659aed7ebf8701472cb89068ad9b873b8a24043994fe3ee127ea87e03a158

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 81650d59bef05c514af2cfdcb2946e9d13367b745e68b36881d43630ef563d38
MD5 99557815c255eb3c4cd8394944b3acff
BLAKE2b-256 aba50765c16e90d1b9847c03ff1740ebdc50b9a120a41ba7bf63871e1bfe7bcc

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 6e418c92898a0af306e6f1b6a55a0d3d2597001c57a7b1ba36cf5b47bf41233b
MD5 fb3a3e94fbdf76e39b9ba4cda4e876ed
BLAKE2b-256 24fc626d26b967446cdadb29e6f74e00b650a78ea6a2fb11bc6976215d3232e7

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp38-pypy38_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp38-pypy38_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 e7ce10198f8efa91986ad8ac83fa08e50972e0aacde45bdaf7b9365094e72c0c
MD5 18b31076dad92bdfebe4f6b03606edb1
BLAKE2b-256 bcab243b29dda190b287735a143ce748e8752e84c49d56ddef0c9a362a23c950

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7dcc212bb529900757d8e99a76198b42c2a978ce735a1bfca394033c16cfc33c
MD5 a03666489dba30e56b8142e1274d3f58
BLAKE2b-256 8c34d3c5327552617525baa4ab7a25512830aac3c99babe3905570b03309f231

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 1de513772fd04ff38028fdf748a9e2dec33d7aa2fbf67fda3011d9a85b620c54
MD5 360a12c9a28d80e3267a75a5f5ec15d2
BLAKE2b-256 abde8269cb6ab1789203ffcaa98653d7c0767adc0a9eba0f1ab0211db21aff0e

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bb917143e7a4de5beba1e695fa89f2b05ef080b450dea07338cc67a9c75e0a4d
MD5 ccb11ece278a31f486c445e75a5114d5
BLAKE2b-256 22f1691dc8d85aeeca249ac9d661bb69c262f97ea17eb1a7dfb6a2e9456f61b0

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e2c3c127cc3d9eac7a6d05142036bf4b2c593d750a115a2fa42c1f86cbe8c0a0
MD5 15ad5eac25e45913f63cd993d3295964
BLAKE2b-256 d54e0bb2929413024855281b076056f0aba23fd577c4915ffebee92413917a95

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f81e7946f09501a7c27e3f71b84a455e6bf92346fb5a28ef2d73c9d564463c63
MD5 4ca5b9b5f1fba97471181bddb98a9379
BLAKE2b-256 e47dffd7c68b32076880cff123ffec11ad2bd30880f0a7170e9d3891e6cd0d87

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-cp38-abi3-win_amd64.whl.

File metadata

  • Download URL: aioquic-1.2.0-cp38-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.8+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for aioquic-1.2.0-cp38-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 e3dcfb941004333d477225a6689b55fc7f905af5ee6a556eb5083be0354e653a
MD5 5ab203b41f9d3c1eb1a2ca4b2a5bca91
BLAKE2b-256 ddaae8a8a75c93dee0ab229df3c2d17f63cd44d0ad5ee8540e2ec42779ce3a39

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-cp38-abi3-win32.whl.

File metadata

  • Download URL: aioquic-1.2.0-cp38-abi3-win32.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: CPython 3.8+, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for aioquic-1.2.0-cp38-abi3-win32.whl
Algorithm Hash digest
SHA256 910d8c91da86bba003d491d15deaeac3087d1b9d690b9edc1375905d8867b742
MD5 d138974567ad51ea9ac8a191e55d39fc
BLAKE2b-256 d26ba6a1d1762ce06f13b68f524bb9c5f4d6ca7cda9b072d7e744626b89b77be

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 43ae3b11d43400a620ca0b4b4885d12b76a599c2cbddba755f74bebfa65fe587
MD5 b9ae30807ebb90da61fd27c7396ee9b7
BLAKE2b-256 b00f4a280923313b831892caaa45348abea89e7dd2e4422a86699bb0e506b1dd

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 cd75015462ca5070a888110dc201f35a9f4c7459f9201b77adc3c06013611bb8
MD5 90f6d3ae2ac1b6ea35f17785d2bc6332
BLAKE2b-256 0f93fa4c981a8a8a903648d4cd6e12c0fca7f44e3ef4ba15a8b99a26af05b868

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2466499759b31ea4f1d17f4aeb1f8d4297169e05e3c1216d618c9757f4dd740d
MD5 b4e6553f951a5937e11fdacd29de0f74
BLAKE2b-256 154856a8c9083d1deea4ccaf1cbf5a91a396b838b4a0f8650f4e9f45c7879a38

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-cp38-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-cp38-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 84d733332927b76218a3b246216104116f766f5a9b2308ec306cd017b3049660
MD5 b392f91c8fca7edea22996d5fd646364
BLAKE2b-256 6a1f4d1c40714db65be828e1a1e2cce7f8f4b252be67d89f2942f86a1951826c

See more details on using hashes here.

File details

Details for the file aioquic-1.2.0-cp38-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for aioquic-1.2.0-cp38-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 3e23964dfb04526ade6e66f5b7cd0c830421b8138303ab60ba6e204015e7cb0b
MD5 95cca36540ea2d56ce7dd19181f61abc
BLAKE2b-256 19031c385739e504c70ab2a66a4bc0e7cd95cee084b374dcd4dc97896378400b

See more details on using hashes here.

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