Skip to main content

Rust-powered WRF post-processing — fixes CAPE, SRH, adds 65+ variables, 5-30x faster than wrf-python

Project description

wrf-rust

Rust-powered WRF post-processing with Python bindings. 83 diagnostic variables, built-in plotting, and parallel computation.

Install

pip install wrf-rust

Pre-built wheels for Python 3.10-3.13 on Linux, macOS, and Windows. No Rust toolchain, no system libraries, no conda required.

Usage

from wrf import WrfFile, getvar

f = WrfFile("wrfout_d01_2024-06-01_00:00:00")

# Basic fields
temp = getvar(f, "temp", units="degC")
slp  = getvar(f, "slp",  units="hPa")
wspd = getvar(f, "wspd", units="knots")

# CAPE with parcel selection
sbcape = getvar(f, "sbcape")
mlcape = getvar(f, "mlcape")
mucape = getvar(f, "mucape")
sb3cap = getvar(f, "sbcape", top_m=3000)           # 0-3 km CAPE

# Custom parcel
cape = getvar(f, "cape", parcel_pressure=850,
              parcel_temperature=20, parcel_dewpoint=15)

# SRH with Bunkers storm motion
srh1 = getvar(f, "srh1")                            # 0-1 km
srh3 = getvar(f, "srh3")                            # 0-3 km
srh  = getvar(f, "srh", depth_m=1500, storm_motion=(12, 8))

# Effective inflow layer
eff_srh  = getvar(f, "effective_srh")
eff_cape = getvar(f, "effective_cape")

# Severe composites
stp     = getvar(f, "stp")                           # fixed-layer
stp_eff = getvar(f, "stp", layer_type="effective")   # effective-layer
scp     = getvar(f, "scp")
ehi     = getvar(f, "ehi", depth_m=3000)             # 0-3 km EHI

# Configurable layers
shear = getvar(f, "bulk_shear", bottom_m=1000, top_m=6000)
mw    = getvar(f, "mean_wind",  bottom_m=0, top_m=6000)
lr    = getvar(f, "lapse_rate", bottom_p=700, top_p=500)
lr_v  = getvar(f, "lapse_rate", bottom_m=0, top_m=3000, use_virtual=True)

# Lake interpolation (removes 2m artifacts over water bodies)
cape = getvar(f, "sbcape", lake_interp=1000)         # interp lakes < 1000 km2

# All timesteps
slp_all = getvar(f, "slp", timeidx=None)             # shape (nt, ny, nx)

Also accepts netCDF4.Dataset directly:

from netCDF4 import Dataset
slp = getvar(Dataset("wrfout_d01..."), "slp")

Plotting

from wrf import plot_field, plot_wind, plot_skewt, panel

plot_field(f, "sbcape")                               # auto colormap + cartopy
plot_field(f, "sbcape", style="solar7")               # Solarpower07 colormaps
plot_wind(f)                                           # wind barbs
plot_skewt(f, point=(35.0, -97.5))                    # Skew-T with hodograph
panel(f, ["sbcape", "srh1", "stp", "shear_0_6km"])   # multi-panel

# Multi-timestep with consistent scale + GIF
from wrf.plot import render_timesteps
render_timesteps(f, "sbcape", timesteps=[0,1,2,3],
                 gif=True, fixed_scale=True)

CLI

python -m wrf info  wrfout_d01_2024-06-01_00:00:00
python -m wrf stats wrfout_d01_2024-06-01_00:00:00 sbcape slp temp
python -m wrf plot  wrfout_d01_2024-06-01_00:00:00 slp -o slp.png
python -m wrf panel wrfout_d01_2024-06-01_00:00:00 sbcape srh1 stp -o severe.png

Benchmark vs wrf-python

Tested on a 199x199x79 WRF grid. All values match exactly (rel_err=0.00).

Variable wrf-python wrf-rust Speedup
Temperature 0.268s 0.004s 76x
Potential temp 0.088s 0.003s 26x
Abs. vorticity 0.173s 0.015s 11x
Relative humidity 0.353s 0.097s 4x
Precipitable water 0.224s 0.077s 3x
Reflectivity 0.494s 0.234s 2x
SLP 0.517s 0.497s 1x
Wind destagger 0.089s 0.081s 1x

Plus 17 variables wrf-python doesn't have (STP, SCP, EHI, critical angle, shear, Bunkers, lapse rates, fire indices, effective inflow layer).

Variables

83 diagnostic variables. All support units= parameter.

Thermodynamics

temp tc theta theta_e theta_w tv twb td rh

Pressure & height

pressure slp height height_agl terrain geopt omega

Moisture

pw rh2m dp2m mixing_ratio specific_humidity

CAPE & convection

sbcape sbcin mlcape mlcin mucape mucin cape cin lcl lfc el effective_cape effective_inflow cape2d cape3d

All CAPE variables support top_m for truncated integration (e.g. top_m=3000 for 3CAPE). Generic cape/cin accept parcel_type or custom parcel (parcel_pressure, parcel_temperature, parcel_dewpoint).

Wind

ua va wa wspd wdir wspd10 wdir10 uvmet uvmet10

SRH & shear

srh1 srh3 srh effective_srh shear_0_1km shear_0_6km bulk_shear mean_wind bunkers_rm bunkers_lm mean_wind_0_6km

SRH uses Bunkers Internal Dynamics method. All accept storm_motion=(u,v).

Severe composites

stp stp_fixed stp_effective scp ehi critical_angle ship bri

STP supports layer_type="effective" for the 5-term formula with MLCIN.

Radar & cloud

dbz maxdbz ctt cloudfrac uhel

Vorticity

avo pvo

Lapse rates & levels

lapse_rate_700_500 lapse_rate_0_3km lapse_rate freezing_level wet_bulb_0

Generic lapse_rate accepts bottom_m/top_m or bottom_p/top_p, plus use_virtual=True.

Fire weather

fosberg haines hdw

Parameters

Parameter Description
units Output unit conversion (every variable)
parcel_type "sb", "ml", "mu" for CAPE
parcel_pressure/temperature/dewpoint Custom parcel (hPa, degC, degC)
top_m / bottom_m Layer bounds in m AGL
top_p / bottom_p Layer bounds in hPa
depth_m SRH/EHI depth (m AGL)
storm_motion Custom (u, v) in m/s
layer_type "fixed" or "effective" for STP
use_virtual Virtual temperature for lapse rates
lake_interp Interpolate 2m fields over lakes < N km2

Building from source

Only needed for development. Users should pip install wrf-rust.

git clone https://github.com/FahrenheitResearch/wrf-rust.git
cd wrf-rust
pip install maturin
maturin develop --release

License

MIT

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

wrf_rust-0.2.1.tar.gz (110.2 kB view details)

Uploaded Source

Built Distributions

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

wrf_rust-0.2.1-cp313-cp313-win_amd64.whl (585.0 kB view details)

Uploaded CPython 3.13Windows x86-64

wrf_rust-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (744.8 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

wrf_rust-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (733.2 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

wrf_rust-0.2.1-cp313-cp313-macosx_11_0_arm64.whl (666.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

wrf_rust-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl (677.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

wrf_rust-0.2.1-cp312-cp312-win_amd64.whl (585.4 kB view details)

Uploaded CPython 3.12Windows x86-64

wrf_rust-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (745.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

wrf_rust-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (734.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

wrf_rust-0.2.1-cp312-cp312-macosx_11_0_arm64.whl (666.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

wrf_rust-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl (677.9 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

wrf_rust-0.2.1-cp311-cp311-win_amd64.whl (585.0 kB view details)

Uploaded CPython 3.11Windows x86-64

wrf_rust-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (745.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

wrf_rust-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (733.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

wrf_rust-0.2.1-cp311-cp311-macosx_11_0_arm64.whl (669.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

wrf_rust-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl (680.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

wrf_rust-0.2.1-cp310-cp310-win_amd64.whl (584.9 kB view details)

Uploaded CPython 3.10Windows x86-64

wrf_rust-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (745.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

wrf_rust-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (734.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

wrf_rust-0.2.1-cp310-cp310-macosx_11_0_arm64.whl (669.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

wrf_rust-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl (680.6 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file wrf_rust-0.2.1.tar.gz.

File metadata

  • Download URL: wrf_rust-0.2.1.tar.gz
  • Upload date:
  • Size: 110.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for wrf_rust-0.2.1.tar.gz
Algorithm Hash digest
SHA256 82acaadf8f4e596a71d73d5359014b11625440d7e6e3a121513564c8270f1937
MD5 4c8bb328c2e7496da14c15787cd64958
BLAKE2b-256 a4b607ad624f5d967296e2a4c4ab715783c76acf1b8217b096eee694df1f29ce

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: wrf_rust-0.2.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 585.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for wrf_rust-0.2.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4a238273ce067b11502b3fac1ac5e99bc8d5ab5cd9eae90bedb655d6508963a5
MD5 7503a3ded4e32e6f193d993e3f7dd0f4
BLAKE2b-256 b639536e01acfebe5c7a8472f235d23eb4cbd6d8f4cfe5f86f01a9810f8135c8

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a347f735d28b8cca1141e34ce87d2ec754a799ddcedf7e68d99c30f0e874163e
MD5 f80269cffcb0c5626e37b3c97c4ba987
BLAKE2b-256 e227fb16c143f410b013db82d4a3d89b6c325c83fc698ea2043a664594f52868

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f833c32a9eb391c6847cc8fc0a15e0d50508b4ecf23a92c92c201d5a64b331af
MD5 f6bc85c6b936c32dd30e4895e6644cca
BLAKE2b-256 09c9f5d4525594c3519043a9e0a5cba350a0ebb10ef59761405ad9d235837669

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b1f6ec9d0797e0ac60f5c083999a85f988ed4d674cde5d50075f43ef722e32a0
MD5 b80cf6fd2ccb9937830806f60a7453d5
BLAKE2b-256 75449135d334ac1fcfa8b07a8b6b367a1ded1a91a0c3933e55d530dcde858588

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f23e1ba4c4ea31a884462db1cd432285324fcce15fc939cd833658e3e8bd44b7
MD5 67040f5453e6a55e60125f880993a45d
BLAKE2b-256 6505ad3a8a36a3c35473ac26da0ac9ab74285b5c456b5143606b11ff5e10903d

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: wrf_rust-0.2.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 585.4 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for wrf_rust-0.2.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 40bfece72a380653c07c46c4bc9e7f8242a1a28fd7ffadcca932d1a44b24b5f8
MD5 33ba35354e627cbed3e45cff21a0a5af
BLAKE2b-256 192793c16c86dae22e4f3604ec3a17384cb57a48313ad5b9dd26c1b361cf5a9a

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 81a0790211a14a769decc00d44fed6b272a4aec83233605fe5cdb8a551a04e9f
MD5 6c74298944a4960a83ac37b4ab517fe3
BLAKE2b-256 c2d88929e925b21d9e651d51eeee08afd9b6e88e5ea9040a6fb94eefd9db7b5d

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 de9bad4d10b7aa312f4c1f3640a2f90cfa388ed4ee4f7d049c462f1f46aa8519
MD5 f5967d07d9accb54677cd63a6c1e79d3
BLAKE2b-256 aadc3d10fd3e1d7a1c07ec9b2d68ffdc9c0b373a9fb392c1073f416afb917821

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e39cd7984082a09bd66eabec3627a9d272205a957dbdce91215d03baa6fb979f
MD5 515572b550c26388a87fb17ef4423ac7
BLAKE2b-256 f9004571723ba33d76d956414a6a437eb37592ce6bb1148a8789261e5e452239

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b09e21a02558c680447e4bd7e4bf2f528b14a65a510955a24d19e9f36989aa11
MD5 68cca2461b5a707513b771148b572ae7
BLAKE2b-256 2cd43d59644d31eae69165f513525018586ece74d62941e0f27b8087ad05ac8f

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: wrf_rust-0.2.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 585.0 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for wrf_rust-0.2.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 83770b2e0b70d1790720257bfcdfd170927eca183f455bb5e60e19492b722b7e
MD5 fe3f6417508f93fed1cc213d7ac06ac7
BLAKE2b-256 a702e5ba881d33334212801dbde674332f935c72853c8d0984815ae169010e48

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8b3c62a99fb925266fb6d60a05b2078636baabee2a4f651c781bc7a500be8917
MD5 bc08c4aff430a2d1bc9191fbd1c771ef
BLAKE2b-256 a0b1f78b86824cfb0ffd955f41572996ac0aca3fadc9713508cf8c37422db2d3

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1eac3a0541d7d368c07b209696a6904a68dec56a4e0048a315d1289dde9d3c32
MD5 aa588f8ff78d7e2b1084f8878c525f5a
BLAKE2b-256 be97a1ec822ecb650763b9af839779484571a47a4eabc2f87e72e1bed69a34f6

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e8655ec388886e114c0a160ce3645b34570882cdff59f50de73dc25827c82180
MD5 cc0ed6c867f1329da1ad14e8a7851ab2
BLAKE2b-256 8f53e362f8280c5f0b1cdfa6e818f5c83666157c281e6e3d44d48bb1ad0d03ee

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 cf40fe14fd621748e660537a5dfbe4fb93365570f86d1fd5162a7869ddfaa7e6
MD5 d8a4a14ddce76ca550269de835bb0ad6
BLAKE2b-256 876a0546dd3027b7da1de1cdef12dfcd45bb0799df35495f9cfdeb1611c858ce

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: wrf_rust-0.2.1-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 584.9 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: maturin/1.12.6

File hashes

Hashes for wrf_rust-0.2.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d6231980eb4b0bed824a106c9fe478e27d0b0ce1a8ee4944548fc311eb479e74
MD5 f9dafb1712ae8006bfdea5d8758313dc
BLAKE2b-256 e32c957dd84ed24c78e528e81f0c6adcb626a714a9f13fd7425a8b3da43feb6d

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d33f170759930e9a10d6d40acb259cced097f4963c9522c0af800eaf86abbd0f
MD5 d8553dbff27a949710761d1ba45e3f5b
BLAKE2b-256 800174ba1a19f6eb0dc603c8e80f979bf2370ae79025ac1c2795986c115e4700

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 53ffa3ef2d1e2fefa4c5046781b484b9854742a0deb84957dd6571f0db1973fd
MD5 1a03cae7989acc816e98b3e436683307
BLAKE2b-256 1aa0c51286e56f85c239502d879857868f2e7a87d8d88ddfe47bca2f6903f75d

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 35ba25adbae33a8506d05b3721b536166db099fa61429a172e3f3623a95fb30e
MD5 fb22bd82e571775dcb8db508f807991b
BLAKE2b-256 c83d54cbfd39a66523aa701eb01aa8bcc0bc8c52c0218dde69a95f92a0d6b361

See more details on using hashes here.

File details

Details for the file wrf_rust-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for wrf_rust-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8b242e3cf1aadf2f8dae623c131f6fe2f925568d96461b7f18c17efb59eb4df5
MD5 258b8d99be717962d2f60d3dd86fc806
BLAKE2b-256 fa344224dd2c1cf8b2174600066c3eb00748c943e10d3ded8a1ecc999f75c731

See more details on using hashes here.

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