Skip to main content

Fast Python bindings for AIS-catcher's NMEA-to-JSON AIS decoder

Project description

aiscat

A fast, complete Python library for decoding AIS NMEA into structured dicts. Built on the AIS-catcher decoder; messages come out compatible with the AIS-catcher JSON format.

Why

Python has two established AIS decoders: pyais (pure-Python, MIT) and libais (C extension, Apache 2.0). Both have gaps:

  • pyais is ~20× slower than what's achievable in C.
  • libais's stream layer does not reassemble multi-part AIVDM — it silently drops every type-5 message (and other multi-part types).

aiscat closes both gaps by exposing AIS-catcher's mature decoder as a Python extension: full multi-part handling, lookup-table text fields (status_text, shiptype_text, …), country-code resolution, message 6/8 ASMs — everything AIS-catcher decodes — at C++ speed, in a dict shape that matches what AIS-catcher itself emits.

For live decode of a single station (~50 msg/s) any of these libraries is fast enough. aiscat earns its keep when throughput matters: replay of historical recordings, multi-receiver fan-in, batch analysis, and research workloads on millions to billions of messages.

Tradeoffs. aiscat is a C++ extension, so pip install either picks up a pre-built wheel for your platform or falls back to a source build that needs CMake and a C++11 compiler. The API is deliberately small — feed bytes, get dicts — without the configuration knobs, custom output formats, or filter chains pyais offers. And the licence is GPLv3 (inherited from AIS-catcher), so linking aiscat into a closed-source application makes that application GPL too. If any of those matter more to you than throughput, pyais is the right choice; aiscat is the right choice when you want the AIS-catcher JSON format produced quickly and reliably from Python.

Quickstart

pip install aiscat
import aiscat

dec = aiscat.Decoder()
dec.feed(b"!AIVDM,1,1,,A,15MgK45P3@G?fl0E`JbR0OwT0@MS,0*4E\r\n")
print(dec.next())
# {'type': 1, 'mmsi': 366730000, 'channel': 'A', 'rxuxtime': 1777739134.027,
#  'lat': 37.803802, 'lon': -122.392532, 'speed': 20.8, 'course': 51.3,
#  'status': 5, 'status_text': 'Moored', ...}

Benchmark

2,000,000 AIS messages (mixed types 1–4), Apple M-series, single thread:

Tool Time msg/s µs/msg vs fastest
AIS-catcher CLI (-r txt -o 5) 1.04s 1,922,000 0.52 1.00×
aiscat (this library) 1.05s 1,906,000 0.52 1.01×
gpsdecode (gpsd, BSD-2) — CLI 3.14s 636,000 1.57 3.02×
libais 0.17 (C, Apache 2.0) 5.33s 375,000 2.67 5.12×
pyais 3.0.0 (pure Python, MIT) 22.36s 89,000 11.18 21.49×

aiscat sits within 1% of the native AIS-catcher CLI despite producing rich Python dict objects (the CLI just stringifies JSON to stdout). It's 3× faster than gpsdecode, 5× faster than libais, and 21× faster than pyais.

The full benchmark — including the test-fixture generator — is in benchmarks/. Types 1–4 (single-line position reports / base station reports) are used because libais's stream API does not reassemble multi-part AIVDM groups; on a mixed corpus including type 5 (multi-part static data), libais silently drops every type-5 message. AIS-catcher, gpsdecode, and pyais handle multi-part correctly.

For perspective: a busy AIS shore station produces ~50 msg/s. Throughput matters when you're replaying recordings or aggregating dozens of receivers, not for live decode of a single antenna.

API

class Decoder:
    def __init__(self) -> None: ...
    def feed(self, data: bytes | bytearray | str) -> int: ...
    def next(self) -> dict | None: ...
    def pending(self) -> int: ...

def iter_decode(chunks: Iterable[bytes | str]) -> Iterator[dict]: ...
  • feed(data) parses NMEA AIVDM/AIVDO sentences out of the buffer. Multipart messages are reassembled internally; partial chunks are buffered until completed. Returns the number of decoded messages waiting.
  • next() pops one decoded message as a dict, or None if the queue is empty. Pop in a loop after each feed().
  • The queue is unbounded — drain it after each feed, or memory grows.
# Streaming pattern
import aiscat
dec = aiscat.Decoder()
with open("session.nmea", "rb") as f:
    while chunk := f.read(65536):
        dec.feed(chunk)
        while (msg := dec.next()) is not None:
            handle(msg)

Output format

Each decoded message is a dict containing the AIS protocol fields plus a small reception envelope. AIS-catcher's internal "meta" fields that don't apply to a Python decoder (SDR signal levels, decoder version, the original NMEA echo, etc.) are suppressed.

Lookup-table values are decoded for you — status comes through as both the raw integer and status_text ("Moored", "Under way using engine", …); same for shiptype_text, aid_type_text, etc.

For the full field reference — every key, its unit, and the lookup tables — see the AIS-catcher JSON decoding documentation.

Type hints

Decoded messages are plain dicts at runtime — zero overhead. For static type-checking and IDE autocomplete, aiscat.types provides one TypedDict per AIS message type (1–28) plus an AISMessage union:

from aiscat import Decoder, AISMessage

def handle(msg: AISMessage) -> None:
    if msg["type"] == 1:
        # mypy narrows to Type1; knows msg["lat"] is float
        print(msg["mmsi"], msg["lat"], msg["lon"])

Licence

GPLv3, inherited from AIS-catcher. Linking aiscat into a closed-source application makes that application GPLv3.

If you need a permissive licence (BSD/MIT/Apache), use one of:

  • pyais — pure-Python, MIT, the de facto standard for Python AIS work
  • libais — older C extension, Apache 2.0

aiscat exists for users who want AIS-catcher's decoding (multipart handling, lookup tables, channel A/B disambiguation, country tables, message-type 6/8 ASMs) and can live with the licence.

Building from source

Requires CMake ≥ 3.15, a C++11 compiler, and Python ≥ 3.9 with development headers.

git clone https://github.com/jvde-github/AIS-catcher
cd AIS-catcher/python
pip install -e .

The build pulls a curated subset of AIS-catcher's source (Marine/, JSON/, Library/, Utilities/) — about 8K lines of C++ — and compiles them together with the binding into _core.cpython-*.so. Build takes ~10 seconds.

Status

Pre-1.0. The decoder itself is mature — it's the AIS-catcher decoder, battle-tested in shore-station and SDR deployments. The Python surface is new and may evolve — feedback welcome.

Versioning tracks AIS-catcher's: 0.68.x uses AIS-catcher v0.68's decoder. Patch releases bump independently for binding-only changes.

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

aiscat-0.68.0a6.tar.gz (95.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

aiscat-0.68.0a6-cp314-cp314-win_amd64.whl (166.3 kB view details)

Uploaded CPython 3.14Windows x86-64

aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (243.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (229.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

aiscat-0.68.0a6-cp314-cp314-macosx_11_0_arm64.whl (176.9 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

aiscat-0.68.0a6-cp313-cp313-win_amd64.whl (160.7 kB view details)

Uploaded CPython 3.13Windows x86-64

aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (243.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (229.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

aiscat-0.68.0a6-cp313-cp313-macosx_11_0_arm64.whl (177.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

aiscat-0.68.0a6-cp312-cp312-win_amd64.whl (160.7 kB view details)

Uploaded CPython 3.12Windows x86-64

aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (243.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (229.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

aiscat-0.68.0a6-cp312-cp312-macosx_11_0_arm64.whl (177.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

aiscat-0.68.0a6-cp311-cp311-win_amd64.whl (160.9 kB view details)

Uploaded CPython 3.11Windows x86-64

aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (243.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (229.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

aiscat-0.68.0a6-cp311-cp311-macosx_11_0_arm64.whl (176.9 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

aiscat-0.68.0a6-cp310-cp310-win_amd64.whl (160.9 kB view details)

Uploaded CPython 3.10Windows x86-64

aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (243.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (229.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

aiscat-0.68.0a6-cp310-cp310-macosx_11_0_arm64.whl (176.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

aiscat-0.68.0a6-cp39-cp39-win_amd64.whl (160.9 kB view details)

Uploaded CPython 3.9Windows x86-64

aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_x86_64.whl (1.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_aarch64.whl (1.2 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (243.6 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (229.2 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

aiscat-0.68.0a6-cp39-cp39-macosx_11_0_arm64.whl (177.0 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

File details

Details for the file aiscat-0.68.0a6.tar.gz.

File metadata

  • Download URL: aiscat-0.68.0a6.tar.gz
  • Upload date:
  • Size: 95.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aiscat-0.68.0a6.tar.gz
Algorithm Hash digest
SHA256 2321edf5e029622e7d1043192d13286eb17ec0163ba257bcda8e54b256d415ca
MD5 e2483c4b49258309eddc8d9322d64714
BLAKE2b-256 52fee4d6379bf22cd4648b89cb6be5dbebf8f805b8b8f44fddc75d8660e78c76

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6.tar.gz:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: aiscat-0.68.0a6-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 166.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aiscat-0.68.0a6-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 caaef9bd99248bc4275aea09d205f6981d5942c69edf580071308b4f15f9a3c6
MD5 dfb00de9d78ddfb0bb7a977d2e35b142
BLAKE2b-256 3eef1132f29718b66f38d6ffed3816bd5979bc1a61141e2346e1a7049fe6108e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp314-cp314-win_amd64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a76827805743417930eb485a0f999c4117984b67ded2d5ac71b3abf578df0678
MD5 483a54c5030f02764a697b499d81ff28
BLAKE2b-256 716537ddfe8a3d80672cfc2da402c17cbce0a11bf772f61eb88cf009f7125a3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 6985de14407c129550656cac7a70b23c6723f41a83b476cf59528d9804eb33d0
MD5 3359bc82395191447a894dff4dfc75ca
BLAKE2b-256 ad47a0af97fe3a70866d578983749c26fde271b1d2e555c5a7f7642d158952f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp314-cp314-musllinux_1_2_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5b740e48152ef5e28cb363b7f38103c93fcc47173cb19b1f3ce07683d85870cd
MD5 04e86ac8c0743a309294a4bbcde0f943
BLAKE2b-256 cc069bc38e888bbb44578138a6bcc8cc7e91e596bfe97e4115a5b7f9bbcc7e87

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 81bf06b64232dcc2d76b689006c9241d793f48408589adcd8761a12ec5170b4a
MD5 5af28d933ea22a02aaa7737a61bdb2d0
BLAKE2b-256 93464a351baa5411c51bb5c0fc69ee25d7d78a33f976f81d8b5290d918b35f8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7956d36c2d663b16f9536686bfd1dc0cafa2698848252140665387a92dec51db
MD5 dc093ccc1e24294bb2ecb46936cfc9a4
BLAKE2b-256 38345ded2691e44cc9e115618655216b3a098b6d0f0a2cdac8d7a0aba9986edf

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: aiscat-0.68.0a6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 160.7 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aiscat-0.68.0a6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 1d8c721f3fa53da04972b0b95524bf38cd3419461fbd2748dbcb989f68155ac4
MD5 63b6ad7a6e9d26808fbefafa809eb054
BLAKE2b-256 7bcee344fc31cd438b6d9a08b7def09f46d489b4c6f3b7d36ff4e16dd68faf7c

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp313-cp313-win_amd64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9dad4c65a4de35ee304dc9387a78dea42077217a4367a751a25c50a5be24953a
MD5 416b3009875571cb2b4ebbabfd0d73b5
BLAKE2b-256 eb8e325131c5b3f48da4d5f05ac81cfb703a80db420b3cf617553df97059aa0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 e19456b4d4a7e2b67548b05656c80f456d80d5966993434952dfd581de72989e
MD5 dab139fb9cdc00a05ef39a7b0ef0d3ed
BLAKE2b-256 8aecd90e4db5d8df5ed4e20d7a97cbf19158a98618c46a09a820e7e4b2f0533b

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp313-cp313-musllinux_1_2_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 55e5bfa17b3606bc2597a4d6d5c00f5059e00e6434c1e45b8c8f565b3af77ed7
MD5 505c6f6dd6cf410bfbf324679613fdfb
BLAKE2b-256 9195334485009fd8c0fb3679b21a1b1a3d10a5311de1723d2bf7806568ddb93d

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3afb955bb44d575d3a32c75195119c60f95989a8b33a65ee2139184a0906925a
MD5 549e61588e62929b1a02545abecf6830
BLAKE2b-256 4f08bbb4369c8aae275819d543f8756ac9da5b8cd6029d36580c060f9154850f

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7db99407ab93bd380f192eb839155fe869289094c2c1ffc939ee28527102774c
MD5 20198a18ea0edef89497ce527fc4671a
BLAKE2b-256 3494f4556d0ed8b6a5f5891b37557e1f502814a7ca307e8e11ff08cb2e555a09

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: aiscat-0.68.0a6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 160.7 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aiscat-0.68.0a6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dd3e965f57c57614fd402f5e922f51e98b49f44e2fa0b28f43bd7b0b5ba94f69
MD5 7550a04fc180e23e0b502a1bf6b64c68
BLAKE2b-256 ed7f3992d213f61b426136affe1a3b852d8a11fa01e44043f080e7c65b64735b

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp312-cp312-win_amd64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5f303821c52ceb4854f179a779e95b8a8230d61f298530b6acff6b76cb634b65
MD5 bc5191a19a0da713f23718b38e984a4b
BLAKE2b-256 9e94d7939d155c78dde029231ebe4e73f27a1c0eacfa1d543adec76add61e0ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 babb656deb54ede12bffaf94e4816cb51e720eff95524cc9644482e132b1581d
MD5 fb23242263179ca651200fc14f2cbde5
BLAKE2b-256 8948dc09879ac472e73c51ae1fcee40dc5a7b69b8a252e3b854a08530ddd98a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp312-cp312-musllinux_1_2_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d670dc9cd98b8e999d67aa0cf8cf2441a30afb2ddd4ba2cd5d6ff2fc14a1b7c9
MD5 b2d13abff1223bda9c3dcfbb5ab1d145
BLAKE2b-256 b4effc210dcd00375af20a243ac2e34996eff7a19dfa32347acaa033b5c242f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e3f948b8abf9dd2ee75bd1f273af0f0778a8e4ad1eef9fce392ac3bd53944681
MD5 f7e4324906475d0680bdfb79fa097132
BLAKE2b-256 870c057473aead8011f33236f346ea46b4380f7b52599e061dde8db493c1de9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6ea7d1c55c058925d38cf89a6ca1f25381762e6cb50d9f7a94e3e5db69f09ce7
MD5 f9f70f2270187913c7eb1eb006689ad4
BLAKE2b-256 1af4170698c7421ec2e3067e77766193ba0908523e7d54b4cbf40667f61f6b5a

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: aiscat-0.68.0a6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 160.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aiscat-0.68.0a6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2a1e26ce160271a656423a7488fab2bfb1b50dc934cd8e8601cdc075839e11ed
MD5 895bcc58d8b4189d0de0656b50589b21
BLAKE2b-256 91fb8727a2ef08111695cbb8f8911a090d85663afeaf81f2f7380bc92140367c

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp311-cp311-win_amd64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 80761f7e9c35554c8dd775792ec1cd658c4269aa348e30074e2f5773507feb3a
MD5 2f1caf0449f35bf407d7ab605fc597eb
BLAKE2b-256 4781b89616c7a54d0778385691f87172f0960c28204d1ea73cef18af063f7e93

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 66b0b44ca98aff467cdead9a9b86dd801fb9ac56c49e16b1b8736ec7ce82ed8c
MD5 2cee9d6445ee3fdd000a60440542ff3a
BLAKE2b-256 ab4bf6f8c78f70c47994f0dd83d7a2ee3e589597977542bf064da2f5821d0f3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp311-cp311-musllinux_1_2_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 82168bdd33940066f2ea3edfa6a771cd05a32937478dc4366a766fc0a1e47b59
MD5 48180a277726f26cd0cac49aeccce65a
BLAKE2b-256 9c7666446f90f1ee6749eabd4c0e6af0dffc7fc4687a6fa321346b8aeb941811

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f0a1549bea139e5f253e856998e7be4f12ebde573d10ac726314bbb0f57a70b0
MD5 b650b80f0e8e38bcdd88ec9d265429ef
BLAKE2b-256 3bff97057b9f0a8a635d0491a640bb9b09e0f716b7192c82a1c52dfa7a3a3e82

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7b07c9d3d05f25671e82e7f8c230c7477c742176ae3f707d83c850e0e90ce8f1
MD5 af8a7861b476b3abea69bb4dd4600e07
BLAKE2b-256 4bc631c4714b8cc9df826b536c08c5d4d8b4b79649fa7beac3acd6ce0176c230

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: aiscat-0.68.0a6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 160.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aiscat-0.68.0a6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 58cb6b632df296212b6085af280959e8541e7b55a4f3f24435291346335b8475
MD5 1c1b11ba01a58e2bffc02ffa72fe2ceb
BLAKE2b-256 2329a607ec88f4a042d30f0975cb45b18a156608166abafb3bc74057950d50ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp310-cp310-win_amd64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8b40b3d3d0214ad40c18d0662cbe617b9355821d4df22ad893051cbab5c84dc2
MD5 f14530813398dbae7cc24bebdf8e82e1
BLAKE2b-256 4c92835a005516f898b6eea742e831894f175cd2798ae8b57a56b91c4186d082

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7deee5207abd1aad893fb1781e5b05a0248d1deb85b4f74e350daef0990ad80b
MD5 77f3d3dab1fa090145ad49e204b8cbd0
BLAKE2b-256 512dbc2425f0231ccd13352efca43a8c1ddb1f6e3199cbe902a2bd93892b28ec

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp310-cp310-musllinux_1_2_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8bd9e81e46e76c01ebcacfc541c8da52cabecd67d6ed6f7c71d44659ce579593
MD5 ad33a2234c216e5d9fbf9d51b3148024
BLAKE2b-256 584e7ac7250fdb2df3b22c4b638f7bcfd94878cb80127fa9953af770a505e48b

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a805a0e4e17fb52833b55ef59441e03fd5c191836b74c68f32ae393186816cf6
MD5 c6afb767d4ea652e14a3f132faf94c43
BLAKE2b-256 0f570cc365d88550d6a0646dadeeb40875e5d9662db1a93d64192d5a4cd7c5f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02250e7411fb09b4babce6b6ac60415bdaf5a0a1fdd63664547c7d366335137c
MD5 54cb0b15f408194fae71e5c957f5c2cb
BLAKE2b-256 a2d34d3b0cbb6abcacec61754bab41c23a7139cd0d001bac02a6b28ffe5c8c9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: aiscat-0.68.0a6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 160.9 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for aiscat-0.68.0a6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 3fc388222cc74985cbe3712c3e72ce0ee6fb6ab2e672d85c8fd4b51da5b4cb2d
MD5 1f2fa5fe4e876fd611d3971b764096c1
BLAKE2b-256 4784cd56a29c3b06c58f5a2e90acdc09e13865b7575beff971fcd680cc4eb500

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp39-cp39-win_amd64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 80d9e6c362c7cd5dcac0dd11ea7191f04a310d3eb4cc4505989a29585ab18562
MD5 ad739f05fffc4971422ee592703d7cd7
BLAKE2b-256 68776a282d3fe6eb6453f10c12214d51f8e913b16463c247fe692e3d20f519b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3b23fbdd23e6743a48e6d868a966ea0a07ad4d725ab51cb22939d0a87739a074
MD5 4f27709c383641cb3bafada55829f779
BLAKE2b-256 4acca72a28bc3a78d316ff9b4f9a46441d2daf4b02f444bdc2368914adc8488a

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp39-cp39-musllinux_1_2_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6d1a36bd1712b7c74d1a2b4e6f36ee2122e93e33400f7704598cb30dc48a9b61
MD5 f16e16a93f09d19775f10f6114c055df
BLAKE2b-256 55bd539a2ab27636e2aab01dfdfb262319725fdd80a5b2ea0a2a22e6f7399631

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 283d89f9e454d99500ed2a67c453dc76bbdba28be46384732dfe3faf1bac56c1
MD5 e29ac09df6e661c8725638078f38dca0
BLAKE2b-256 f376d7a65ed1dfda9b72a18a98bddffb401fe0610cc556f7bde36976c50b01d7

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aiscat-0.68.0a6-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for aiscat-0.68.0a6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 19067c8f2d696f37a5da9800ed313f68bea7a7f5517325495fb696be051bb798
MD5 99d6dcf9fe196e89a38e66e89c38ba31
BLAKE2b-256 49a5c041b55e9bacb8431b6230b1ca1bd45d72072b96cd6017fa04e1e5515738

See more details on using hashes here.

Provenance

The following attestation bundles were made for aiscat-0.68.0a6-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: aiscat-release.yml on jvde-github/AIS-catcher

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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