Skip to main content

pratmo

pratmo rewrites the original Fortran 77 model in Rust and exposes it through a command-line runner and a typed Python/NumPy interface. The project aims to preserve the original model structure while making the code easier to test, inspect, and embed. It also adds an experimental inorganic iodine mechanism that is not present in PRATMO v6.0.

Implementation tests and selected numerical comparisons with the compiled Fortran program are included, but these are software consistency checks—not scientific validation of the Rust rewrite, its inputs, or its predictions.

Features

  • Rust model core with structured CTM steady-state and full DIURN-cycle APIs.
  • Python package named pratmo, with typed configuration objects and NumPy arrays for profiles, grids, coordinates, time series, and diagnostics.
  • 40 implicit gas-phase species and 19 long-lived species or chemical families.
  • Experimental inorganic iodine chemistry, including ten iodine species, iodine photolysis, higher iodine oxides, and heterogeneous recycling.
  • Standard atmospheres, custom atmospheric profiles, configurable aerosol and sea-salt surface areas, and observation-constrained NO2 workflows.
  • Compatibility paths for the original fixed-format inputs and legacy CLI outputs, plus opt-in tooling for numerical comparisons with Fortran.
  • Runnable CTM, DIURN, iodine, custom-atmosphere, and OMPS batch examples.

The iodine mechanism's assumptions and known omissions are documented in Iodine chemistry.

Python quickstart

The published distribution and import name are both pratmo. To install a released wheel:

python -m pip install "pratmo[plot]"

For development, build the extension into the project environment:

uv sync --dev
uv run maturin develop --release

Run a CTM altitude profile with runnable, validated defaults:

from pratmo import Model
from pratmo.plotting import plot_profile

model = Model()
output = model.ctm(latitude=60.0, day="2026-03-16")

print(output.altitude_km)
print(output.species_profile("o3"))       # cm^-3
print(output.long_lived_profile("noy"))  # dimensionless mixing ratio
plot_profile(output, ["o3", "no2", "oh"]).show()

Atmosphere accepts pressure, temperature, altitude, ozone, and aerosol profiles with explicit units. Helpers such as ppmv(5), ppbv(300), pressure(values, "Pa"), and number_density(values, "m-3") keep conversions visible. Suspicious values emit PratmoWarning; inconsistent profiles raise ValueError before integration.

The lower-level PratmoModel, CtmConfig, and DiurnConfig API remains available. The package also exposes IMPLICIT_SPECIES_NAMES, LONG_LIVED_NAMES, and JVALUE_NAMES for discovery. See the rendered Python guide and examples for CTM, DIURN, custom-atmosphere, and observation-constrained workflows.

Rust and CLI

cargo build --workspace
cargo run -p pratmo-cli -- --input-dir fortran

pratmo-core provides the structured Rust API. pratmo-cli preserves the original file-based workflow and writes Fortran-compatible output files into the selected input directory.

Development verification

These checks test software behavior and selected Fortran agreement. Passing them does not mean that the model is scientifically validated.

Run the normal development checks with:

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace
cargo test --workspace --all-features
uv run pytest
uv run sphinx-build -W --keep-going -b html docs docs/_build/html

GitHub Actions runs these Rust checks, the Python tests, a strict documentation build, and the complete cross-platform wheel build on every push and pull request. Built distributions are retained as workflow artifacts. The publish job runs only for release tags matching v* and uses PyPI Trusted Publishing. The extension uses PyO3's Python 3.9 stable ABI, so each platform build produces one cp39-abi3 wheel compatible with Python 3.9 and newer.

The clean-room compiled-Fortran differential is available separately:

scripts/fortran_differential.sh

The detailed numerical comparisons, parity policy, and unsupported legacy modes are tracked in STATUS.md and FORTRAN_PARITY.md. Release procedures and archived implementation notes are separated under developer documentation.

Current boundaries

  • DERIVS sensitivity mode and PZSTD conversion are rejected explicitly.
  • The original multi-case Fortran driver loop is not implemented.
  • Full CTM climatology-grid coverage remains broader than the comparison fixture.
  • The iodine extension has mechanism-level tests but no Fortran reference and has not been scientifically validated.

License

pratmo is available under the MIT License.

Metadata

Release files for pratmo 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pratmo 0.3.0
File Size Uploaded
pratmo-0.3.0.tar.gz 637.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pratmo 0.3.0
File
pratmo-0.3.0-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details
pratmo-0.3.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
pratmo-0.3.0-cp39-abi3-win32.whl CPython 3.9 abi3 Windows x86-32 Details
pratmo-0.3.0-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details
pratmo-0.3.0-cp39-abi3-musllinux_1_2_i686.whl CPython 3.9 abi3 Linux musl 1.2+ x86-32 Details
pratmo-0.3.0-cp39-abi3-musllinux_1_2_armv7l.whl CPython 3.9 abi3 Linux musl 1.2+ ARMv7l Details
pratmo-0.3.0-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details
pratmo-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
pratmo-0.3.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.9 abi3 Linux glibc 2.17+ IBM System/390x Details
pratmo-0.3.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.9 abi3 Linux glibc 2.17+ PowerPC 64-le Details
pratmo-0.3.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-32 Details
pratmo-0.3.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.9 abi3 Linux glibc 2.17+ ARMv7l Details
pratmo-0.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
pratmo-0.3.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
pratmo-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 17.0 MB

Release files / pratmo-0.3.0.tar.gz

Download URL pratmo-0.3.0.tar.gz
Size 637.7 kB
Tags Source
SHA-256 checksum
How to use checksums
dda022cc2a531b5e8a5b98065a58bd7428b6cabdc4708a357da20a814c21e8bb
BLAKE2b-256 checksum
How to use checksums
38b001895d89eb409aea516eef6d30f9d5e73eeaec70fde553e775bfb9647035
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-win_arm64.whl

Download URL pratmo-0.3.0-cp39-abi3-win_arm64.whl
Size 859.5 kB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
d2488a0b1ff3b3d80ae1b001306cba704b2da5f164e04fe9c41900d66db8b3c2
BLAKE2b-256 checksum
How to use checksums
011833df5a7f8fb56cbe24e57f80e9dd627e70b06f58f3491cfba0ad77e36bcc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-win_amd64.whl

Download URL pratmo-0.3.0-cp39-abi3-win_amd64.whl
Size 875.0 kB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
061508b8d777c63c26919495fdb8e6ae27bacbfdce5b2cc07e08d55eb9f9c272
BLAKE2b-256 checksum
How to use checksums
40de6de3e09735196a6e80be9a172c65d8f12bf329700a13589fb96438f107a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-win32.whl

Download URL pratmo-0.3.0-cp39-abi3-win32.whl
Size 836.4 kB
Tags CPython 3.9 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
adabd42a50c2f055e32738a6acd1ca7db0ac8e47b9394fd7e625270bb6f12715
BLAKE2b-256 checksum
How to use checksums
13e79e29997ad1752c8ce183a07db7b86b0c2aaeb1124dd1731049ab3eb4e037
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL pratmo-0.3.0-cp39-abi3-musllinux_1_2_x86_64.whl
Size 1.3 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
0ed2b8539eba999525f7321120fddac1af4e82c5f27945cbcec27151aec7d37a
BLAKE2b-256 checksum
How to use checksums
ad3a9118e9c8faa93a0c4a18b3e39363aae3caa49818a827c4f3fb04d101bcc2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-musllinux_1_2_i686.whl

Download URL pratmo-0.3.0-cp39-abi3-musllinux_1_2_i686.whl
Size 1.3 MB
Tags CPython 3.9 Linux musl 1.2+ x86-32 abi3
SHA-256 checksum
How to use checksums
d02ce6411b0bbe80ea344ca0a05e63c52ed008a2f13c7676d667d402853bdc5a
BLAKE2b-256 checksum
How to use checksums
7a4fdcf652616324de8d0cc25ca0f4bc44a29fa920b5a234df722b24bf254e4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-musllinux_1_2_armv7l.whl

Download URL pratmo-0.3.0-cp39-abi3-musllinux_1_2_armv7l.whl
Size 1.3 MB
Tags CPython 3.9 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
1424ee3e5cff35efd16f5fb8258e85bc0b3824cf6b4dbade2fca02510fbf93fa
BLAKE2b-256 checksum
How to use checksums
39f200c8a31041a681ee3b9b7dfaaf76f23dfabc66f05a7f854d47e3d12e39a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL pratmo-0.3.0-cp39-abi3-musllinux_1_2_aarch64.whl
Size 1.2 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
3edf4d13f4d3f46fc7f41c60fc3eaeeaa90b7592a0dc44c3c41f5b1f4a3dce27
BLAKE2b-256 checksum
How to use checksums
8c540c14830557369685660b2ae02dd9d3d26ea5f479313f27e9a0e3b9cb2124
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pratmo-0.3.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 1.1 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
c16cde5e6faddc4b0f439fe923e66629016307bb91467ce3dd99182eafaff89e
BLAKE2b-256 checksum
How to use checksums
9a89e939104863f2f16a43b1fcf779a727323114664077cd4048b27e356049c7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL pratmo-0.3.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 1.1 MB
Tags CPython 3.9 Linux glibc 2.17+ IBM System/390x abi3
SHA-256 checksum
How to use checksums
1d23beca12256127b66d84fb943f39b335f7d22f001e28b9e25664d6efe9c7b3
BLAKE2b-256 checksum
How to use checksums
63d7d2308567501b398b58a93219405d9f0d31db164da37c862b874f05722ea4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL pratmo-0.3.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 1.2 MB
Tags CPython 3.9 Linux glibc 2.17+ PowerPC 64-le abi3
SHA-256 checksum
How to use checksums
32114e66b36778d10f0e8994bc01bc76bad72099e9f5a90ab274651ed73ac428
BLAKE2b-256 checksum
How to use checksums
0a6311d5af1d477153762e5c56cbfe27fc9d8b317135bbd216158c95b6128d37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl

Download URL pratmo-0.3.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Size 1.1 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-32 abi3
SHA-256 checksum
How to use checksums
c8cce2ff194bd4796480fc00a3cd02e9c1190c06d0ef4cfd6b5fa79b7dbf88d8
BLAKE2b-256 checksum
How to use checksums
b6046c5bacce78f48ded1409d87af6679431096921074e3d8b8b208284067129
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL pratmo-0.3.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 1.1 MB
Tags CPython 3.9 Linux glibc 2.17+ ARMv7l abi3
SHA-256 checksum
How to use checksums
0aa86b54400b16c431573b5778b89f896a3b962c209fe83586d3d586b33ff6e4
BLAKE2b-256 checksum
How to use checksums
70dd4732b10c63d1be2507aedc8a8c8a0b3867a6db217407e3e9f17e3c30643a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL pratmo-0.3.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 1.1 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
e153f456eda431b1e7cfc08a10013a36f4d1a72fb47e61c33ba19c0e8d0455ad
BLAKE2b-256 checksum
How to use checksums
1b5685f41d722814243b1c7700cf34150c660884248cdb1c4d5f0809c914e469
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL pratmo-0.3.0-cp39-abi3-macosx_11_0_arm64.whl
Size 1.0 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8941205d0d770007488fa2b79f7d76109d4a6fd3a4b962774210711c21894543
BLAKE2b-256 checksum
How to use checksums
7c1b1d69dcc014d1daab80a32becfc4a3463ca49c4e7f02fa71e70ee4a9ef346
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / pratmo-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl

Download URL pratmo-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl
Size 989.6 kB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
32e86ba3c1446db191967df35f15473f3149e74a405c87a3b926e8fcec43ac13
BLAKE2b-256 checksum
How to use checksums
435954deb669fb4f6a070d42f5f919532ff53060fa7216fd4650444c0b7a0179
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.0

16 release files

This release

0.3.0 This release

16 release files

0.1.0

16 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page