Skip to main content

MIPS instruction decoder

Project description

rabbitizer

PyPI - Downloads GitHub GitHub release (latest SemVer) PyPI crate.io GitHub contributors

MIPS instruction decoder API.

Features

  • Should produce matching assembly.
  • Fully written in C for fast decoding.
    • The library is completely allocation-less, in other words rabbitizer doesn't allocate in anything in the heap by itself.
  • Other language bindings supported in this repo:
    • Python bindings
      • The minimal Python version is 3.9, older versions are not guaranteed to work.
    • C++ bindings
    • Rust bindings
  • Simple per-word instruction decoding.
    • The library doesn't try to be too smart by processing multiple instructions at a time.
  • Can perform validation checks for instructions.
  • Provides many examination/grouping functions for instructions, allowing to simplify checking characteristics of an instruction and minimizing the need to check for specific instructions in a hardcoded way.
  • Includes some minor tools to build your own pointer/symbol detection.
  • Configurable, many features can be turned on and off.
  • MIPS instructions features:
    • Configurable behavior for the jalr instruction, allowing to disassemble that instruction using an implicit or explicit rd register depending if that register is $ra or not.
    • Named registers for MIPS VR4300's coprocessors.
    • Support for many pseudo-instructions.
    • Properly handle move to/from coprocessor instructions.
    • Support for numeric, o32, n32 and n64 ABI register names.
  • Some workarounds for some specific compilers/assemblers:
    • SN64:
      • div/divu fix: tweaks a bit the produced div, divu and break instructions.
  • Multiple MIPS architectures are supported:
    • Main focus on MIPS I, II and III architectures. Partial support for MIPS IV too.
    • N64 RSP instruction decoding support.
      • RSP decoding has been tested to build back to matching assemblies with armips.
    • R3000 GTE (PSX's CPU) decoding support.
    • R4000 ALLEGREX (PSP's CPU) decoding support.
    • R5900 (PS2's Emotion Engine processor) decoding support.

Non-features

In order to keep it simple and fast the following features will not be added:

  • Pseudo-instructions which expands to more than one instruction.

Installing

Python bindings

The recommended way to install is using from the PyPi release, via pip:

python3 -m pip install -U rabbitizer

If you use a requirements.txt file in your repository, then you can add this library with the following line:

rabbitizer>=1.15.0,<2.0.0

Development version

The development version is located at the 1.x branch.

Note that building the Python bindings from source require the Python development package. Under Ubuntu/Debian based distros it can be installed with:

apt install python3-dev

In case you want to mess with the latest development version without wanting to clone the repository, you could use the following command:

python3 -m pip uninstall rabbitizer
python3 -m pip install git+https://github.com/Decompollaborate/rabbitizer.git@1.x

NOTE: Installing the development version is not recommended. Proceed at your own risk.

See this package at https://pypi.org/project/rabbitizer/.

Rust bindings

Add this crate to your project with Cargo:

cargo add rabbitizer

Or you can add it manually to your Cargo.toml:

rabbitizer = "1.15"

See this crate at https://crates.io/crates/rabbitizer.

References

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

rabbitizer-1.15.0-cp314-cp314t-win_arm64.whl (121.5 kB view details)

Uploaded CPython 3.14tWindows ARM64

rabbitizer-1.15.0-cp314-cp314t-win_amd64.whl (128.2 kB view details)

Uploaded CPython 3.14tWindows x86-64

rabbitizer-1.15.0-cp314-cp314t-win32.whl (127.7 kB view details)

Uploaded CPython 3.14tWindows x86

rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl (394.1 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl (395.4 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

rabbitizer-1.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (440.5 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

rabbitizer-1.15.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (438.1 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

rabbitizer-1.15.0-cp314-cp314t-macosx_11_0_arm64.whl (145.1 kB view details)

Uploaded CPython 3.14tmacOS 11.0+ ARM64

rabbitizer-1.15.0-cp314-cp314t-macosx_10_15_x86_64.whl (144.5 kB view details)

Uploaded CPython 3.14tmacOS 10.15+ x86-64

rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_x86_64.whl (368.5 kB view details)

Uploaded CPython 3.4+musllinux: musl 1.2+ x86-64

rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_aarch64.whl (370.4 kB view details)

Uploaded CPython 3.4+musllinux: musl 1.2+ ARM64

rabbitizer-1.15.0-cp34-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (419.7 kB view details)

Uploaded CPython 3.4+manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

rabbitizer-1.15.0-cp34-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (416.9 kB view details)

Uploaded CPython 3.4+manylinux: glibc 2.28+ x86-64manylinux: glibc 2.5+ x86-64

rabbitizer-1.15.0-cp34-abi3-macosx_11_0_arm64.whl (144.6 kB view details)

Uploaded CPython 3.4+macOS 11.0+ ARM64

rabbitizer-1.15.0-cp34-abi3-macosx_10_9_x86_64.whl (143.8 kB view details)

Uploaded CPython 3.4+macOS 10.9+ x86-64

rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphonesimulator.whl (144.1 kB view details)

Uploaded CPython 3.4+iOS 13.0+ ARM64 Simulator

rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphoneos.whl (139.9 kB view details)

Uploaded CPython 3.4+iOS 13.0+ ARM64 Device

rabbitizer-1.15.0-cp34-abi3-android_21_x86_64.whl (415.5 kB view details)

Uploaded Android API level 21+ x86-64CPython 3.4+

rabbitizer-1.15.0-cp34-abi3-android_21_arm64_v8a.whl (409.6 kB view details)

Uploaded Android API level 21+ ARM64 v8aCPython 3.4+

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-win_arm64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-win_arm64.whl
Algorithm Hash digest
SHA256 ab616b3b118d224dc8e24aa077b82add5cb58a15521a54db94095b9461549689
MD5 6af85f4909b3b3a0465a833719ebef85
BLAKE2b-256 a0fbfb124673e8a36e79440e8aede458232376ce2812bdda38e0403b12875712

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-win_arm64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-win_amd64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 e6a7a8ee6c517ba4c51dc1fb481bb53c9ce09825918c32544b165b70c8d419ee
MD5 47a4e195a63d3b7f803c1eb4bfe0b93e
BLAKE2b-256 4c17568701a035a998127176326911cc7473c8f3aab71a668fcc9d17e581b7f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-win_amd64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-win32.whl.

File metadata

  • Download URL: rabbitizer-1.15.0-cp314-cp314t-win32.whl
  • Upload date:
  • Size: 127.7 kB
  • Tags: CPython 3.14t, Windows x86
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-win32.whl
Algorithm Hash digest
SHA256 0d0a3aae9c898c1944ee1ff8ed167914ad03059227a5cbe1478a129ec2833b3a
MD5 f6c067aaa545c5490ead6c9d1e0be1f3
BLAKE2b-256 3a4513b87cfa5791ab2975db93f27ca270b1197e77e42b26b5910f5ed297754b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-win32.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a02a9fc864a1eca7e90bb4e5f772be035fa4852a7ba4151bc2b364b74e4db8e6
MD5 4262f35880666f7244ad7c1bd4cb1579
BLAKE2b-256 9aac41ec988b313e0319e283cb6132e3b628b0eb6dd81a1ec21a9cf977cbe6ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 a697ae12f12376ed48025d0916db4b31a940b43300f3b76c8d4a63f6a7ab201a
MD5 4d17802769f30153ac83b99ec447c218
BLAKE2b-256 d664d385784b181005a6920f56d3d24a927643cd0c9ce10a4fb260e0b1905563

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dbb1ce5af59f425c93b888c11a0a43bdd44e1e00f0088f506c2b5f494faf864e
MD5 d6f652ac037b8578d3c9c9d5d9b1187e
BLAKE2b-256 26a2b00993716a545adf4de40bfc0db506b6dd97e51f1ee3e1eefcec9d192ab0

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 a8b0cb37074088a06b9007d0e778cdaa01d8943f517605dbcac01e7c8b21ef97
MD5 8f8b67a8ecb0303f29af3205ec55fcff
BLAKE2b-256 c9426a0b15bc2d011f72e415187b67590e28b9e9e1210c030f991ec725714bab

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9697a5c595587544a2826f08d5fc713d2cdd9d6d2987ffe95820c4585ecfd1ac
MD5 5625b71e2da000e3a0b49dc3bd9282bc
BLAKE2b-256 589c779184ff3619a0e93c226aea06b24ccc017f307847ca03fcadb6250f19db

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-macosx_11_0_arm64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp314-cp314t-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp314-cp314t-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 4a80247ff7f2e7bcc9960e226da35b2c674969a3f80b5e7cb5f740bf7cf0cfef
MD5 7f34944359eeb8f109bca533a6ec4063
BLAKE2b-256 9eeb7970f7761dc048324b4f6bb1a2ff9c198d768b835d243c72280ca7996dbf

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp314-cp314t-macosx_10_15_x86_64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 85bb34c8e8629ca8254f7ccf6fd84c21fc50b67762110f551a9c6546caf293e5
MD5 33db499c0337dfd1502b7cc55afc1636
BLAKE2b-256 eef2ebc95e9af0a214e04fc0f3514e1a2089c5cab11643d4b5f856a6c8eab74f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_x86_64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 77417e4e65adf546cefadb3adbfe07433ecdb36c19e621e7c86b76f9de7e5777
MD5 edd5ff88b275c1d9d9c5089af8dd7754
BLAKE2b-256 26b23ce9b444482bd95580258a01333fa63267cc7ff37e1cafdf0c9e7c44e430

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-musllinux_1_2_aarch64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5c5a4343638122ae35f122451611bf0205a0e49878ce6329d1033ca18a8b0934
MD5 9c9ebc700c6931caad440cb34fe3c5b5
BLAKE2b-256 24e3482158c503a73c1094e512d927c27a04dd224b762d827d301505b1cb894b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 775e2a1c89747302198ee754464ce523b1144b7400c8a28180559458c55347b3
MD5 6d0c538e06bd6ff1376f0b753046216d
BLAKE2b-256 dcb1d49e87005f9c90dc332301548b513337e4611a2b65567d40839fd6c1b8fa

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 400617514163b04323b2c6b59852dbc4366ce8f70cca4b2bcc3fb3375b298fe5
MD5 a42ace9f8160ad750c47467f336d584e
BLAKE2b-256 c05abff7512f63d5741d4ebedb5e6c3852c03288a619d0a1bbf4ab818ea000d8

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-macosx_11_0_arm64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 72463a4b0b36ec98012813dcada467ce5f41ff843bd75c6be150013613008952
MD5 4a4bdfc29ea2bc6c3352c6c05acd5211
BLAKE2b-256 c2f3f3624e36d30772092fff16be66aa09bab941a57b78d46cecb691ce2abd0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-macosx_10_9_x86_64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphonesimulator.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphonesimulator.whl
Algorithm Hash digest
SHA256 4e29de2c6dc73f8316ddecbe399fb0f02494b4754cd45b0c39a1d8726fcf25ae
MD5 14d53b76509d62c292555b71345a3218
BLAKE2b-256 6dd006c076a3c75482e33c02abfe3cdc6f4eac7f726314c5f319e1607fcc6dba

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphonesimulator.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphoneos.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphoneos.whl
Algorithm Hash digest
SHA256 1ade5aa4c80cdf78179bb15651c6653a25e75ce2a98876cab69edeedc773acfc
MD5 91ef4b49378dc48f1c5782c4ca1e4365
BLAKE2b-256 c1a9b2d8fb63c4480da17ad0dbc5b45a4e9d95eb9699e55957ac2669b916205a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-ios_13_0_arm64_iphoneos.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-android_21_x86_64.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-android_21_x86_64.whl
Algorithm Hash digest
SHA256 290d92c207e5171bbd671a830e1250532abb1a2dab156d15618947940093e459
MD5 b4214a285bca19b8adc86813db2bfbcb
BLAKE2b-256 bfee073744535d488823bbba11a6766d81ea983d51c54f587f3a0fec64409a6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-android_21_x86_64.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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

File details

Details for the file rabbitizer-1.15.0-cp34-abi3-android_21_arm64_v8a.whl.

File metadata

File hashes

Hashes for rabbitizer-1.15.0-cp34-abi3-android_21_arm64_v8a.whl
Algorithm Hash digest
SHA256 f080fa980292c2bcaa725b7d6de15c9a5c01bbdb3e81ef53b6c636729a47cbca
MD5 68cfa6107347fa090834b2cb0bdcbf1d
BLAKE2b-256 bc6b2c9f6fd8f1faadb6741a21821ac131f5222da5cbf8b171ccf590ab2dbf7f

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitizer-1.15.0-cp34-abi3-android_21_arm64_v8a.whl:

Publisher: pypi_upload.yml on Decompollaborate/rabbitizer

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