Skip to main content

iri-client

Rust client + Python bindings for the NERSC IRI API OpenAPI 3.1 spec in openapi/openapi.json.

Python Bindings

Install from PyPI:

pip install iri-client

or build the extension module locally:

# Use maturin >= 1.9.4
maturin develop --features python

Python operation examples

import json
from iri_client import Client

client = Client(base_url="https://api.iri.nersc.gov")

# List operation ids
operations = Client.operations()
print(f"Loaded {len(operations)} operations from generated catalog")
print("First 10 operations:")
for operation in operations[:10]:
    print(f"  - {operation.operation_id} ({operation.method} {operation.path_template})")

# Public operation
print(client.call_operation("getFacility"))

# Path params
print(
    client.call_operation(
        "getSite",
        path_params_json=json.dumps({"site_id": "dd7f822a-3ad2-54ae-bddb-796ee07bd206"}),
    )
)

# Auth-required operation
# access_token = "<token from GlobusAuth>"
# auth_client = Client(base_url="https://api.iri.nersc.gov", access_token=access_token)
# print(auth_client.call_operation("getProjects"))

Full runnable Python operation script:

  • examples/python_module_example.py
  • examples/python_async_module_example.py (async with AsyncClient)
  • examples/submit_job.py (submit a job to IRI api and monitor status)

Authentication Model

This API uses header Authorization with the raw access token value:

Authorization: <access_token>

This client follows that behavior when you call with_authorization_token(...) or pass access_token=... to the client's constructor in Python.

Runnable Cargo Examples

These are checked-in Rust examples you can run directly:

# Lists generated operation ids/methods/paths (no network calls)
cargo run --example blocking_list_operations

# Calls getResources with query parameters
cargo run --example blocking_get_resources

# Same example with custom base URL and limit
IRI_BASE_URL=https://api.iri.nersc.gov IRI_RESOURCE_LIMIT=10 \
  cargo run --example blocking_get_resources

# Calls auth-required getProjects
IRI_ACCESS_TOKEN=<access-token> cargo run --example blocking_get_projects

# Async IriClient examples
cargo run --example async_get_resources
IRI_ACCESS_TOKEN=<access-token> cargo run --example async_get_projects

# Async ApiClient example (raw path + query)
cargo run --example async_api_client_sites

CLI Tool

A small CLI binary iri-cli is included. One can install it through cargo. It is currently not distributed in the python package.

cargo install iri-client --features cli

Here are a few examples on how to use the cli client.

# Show generated operations
iri-cli operations

# Filter operation ids
iri-cli operations --filter Job

# Call by OpenAPI operation id with query params
iri-cli call getResources --query group=perlmutter --query resource_type=compute

# Call operation with path params
iri-cli call getSite --path-param site_id=<site-id>

# Raw method/path request
iri-cli request GET /api/v1/facility/sites --query limit=5

# Authenticated operation
IRI_ACCESS_TOKEN=<access-token> \
  iri-cli call getProjects

Rust Examples (OpenAPI Operation Client)

Use IriClient when calling by OpenAPI operationId.

Public endpoint: getFacility

use iri_client::IriClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = IriClient::from_openapi_default_server()?;

    let facility = client
        .call_operation("getFacility", &[], &[], None)
        .await?;

    println!("{facility}");
    Ok(())
}

Query parameters: getResources

use iri_client::IriClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = IriClient::new("https://api.iri.nersc.gov")?;

    let resources = client
        .call_operation(
            "getResources",
            &[],
            &[("limit", "10"), ("offset", "0"), ("resource_type", "compute")],
            None,
        )
        .await?;

    println!("{resources}");
    Ok(())
}

Path parameter: getSite

use iri_client::IriClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = IriClient::new("https://api.iri.nersc.gov")?;

    let site = client
        .call_operation("getSite", &[("site_id", "dd7f822a-3ad2-54ae-bddb-796ee07bd206")], &[], None)
        .await?;

    println!("{site}");
    Ok(())
}

Auth-required endpoint: getProjects

use iri_client::IriClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let access_token = std::env::var("IRI_ACCESS_TOKEN")?;
    let client = IriClient::new("https://api.iri.nersc.gov")?
        .with_authorization_token(access_token);

    let projects = client
        .call_operation("getProjects", &[], &[], None)
        .await?;

    println!("{projects}");
    Ok(())
}

Rust Examples (Generic REST Client)

Use ApiClient when you want direct method/path control.

use iri_client::ApiClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = ApiClient::new("https://api.iri.nersc.gov")?;

    let sites = client
        .get_json_with_query("/api/v1/facility/sites", &[("limit", "5"), ("offset", "0")])
        .await?;

    println!("{sites}");
    Ok(())
}

Metadata

Release files for iri-client 0.1.4

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

Source distribution (sdist)

Source distribution for iri-client 0.1.4
File Size Uploaded
iri_client-0.1.4.tar.gz 46.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for iri-client 0.1.4
File
iri_client-0.1.4-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details
iri_client-0.1.4-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
iri_client-0.1.4-cp39-abi3-win32.whl CPython 3.9 abi3 Windows x86-32 Details
iri_client-0.1.4-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details
iri_client-0.1.4-cp39-abi3-musllinux_1_2_i686.whl CPython 3.9 abi3 Linux musl 1.2+ x86-32 Details
iri_client-0.1.4-cp39-abi3-musllinux_1_2_armv7l.whl CPython 3.9 abi3 Linux musl 1.2+ ARMv7l Details
iri_client-0.1.4-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details
iri_client-0.1.4-cp39-abi3-manylinux_2_28_x86_64.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-64 Details
iri_client-0.1.4-cp39-abi3-manylinux_2_28_s390x.whl CPython 3.9 abi3 Linux glibc 2.28+ IBM System/390x Details
iri_client-0.1.4-cp39-abi3-manylinux_2_28_ppc64le.whl CPython 3.9 abi3 Linux glibc 2.28+ PowerPC 64-le Details
iri_client-0.1.4-cp39-abi3-manylinux_2_28_i686.whl CPython 3.9 abi3 Linux glibc 2.28+ x86-32 Details
iri_client-0.1.4-cp39-abi3-manylinux_2_28_armv7l.whl CPython 3.9 abi3 Linux glibc 2.28+ ARMv7l Details
iri_client-0.1.4-cp39-abi3-manylinux_2_28_aarch64.whl CPython 3.9 abi3 Linux glibc 2.28+ ARM64 Details
iri_client-0.1.4-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details
iri_client-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details

Total release size: 39.9 MB

Release files / iri_client-0.1.4.tar.gz

Download URL iri_client-0.1.4.tar.gz
Size 46.3 kB
Tags Source
SHA-256 checksum
How to use checksums
8196c49feb8e1689841f663501c7dacc45a6eea7c03dbf3e53a50235ab033a3c
BLAKE2b-256 checksum
How to use checksums
e568483b6ff804990320a04115c74b7e15040a20731422d05e79614dadb05d90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-win_arm64.whl

Download URL iri_client-0.1.4-cp39-abi3-win_arm64.whl
Size 2.3 MB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
24e569579f374331cedee7b119e32ddc3ad24ffa39629c19d62195df63d5ccb2
BLAKE2b-256 checksum
How to use checksums
0bf7eff3995492944df00f4854d9eb4ec16979227aa0c20eb32e156c40af4b06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-win_amd64.whl

Download URL iri_client-0.1.4-cp39-abi3-win_amd64.whl
Size 2.2 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
3b0909f9f750f9e6adeae27a8189179097d4efa49e45c5d10331a1f26797b4a5
BLAKE2b-256 checksum
How to use checksums
c3f05078bdcb788c4921ff1ad9acb2fe279841814774a3811f788aecf4b2863f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-win32.whl

Download URL iri_client-0.1.4-cp39-abi3-win32.whl
Size 1.8 MB
Tags CPython 3.9 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
80cf91fb5e0ad1c0270a2eb69b90b43bd4ad6abb9c220f88f430c91eefb1c472
BLAKE2b-256 checksum
How to use checksums
be010e8a0eb6a78100fa216485012441cb431c805b5e8ef7632bc5e2fe8784db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL iri_client-0.1.4-cp39-abi3-musllinux_1_2_x86_64.whl
Size 3.2 MB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
c229bbd7b4c03c9334b89d897206e7df026e68f0c964033a0694d1f77590ea8c
BLAKE2b-256 checksum
How to use checksums
77dc14237aab9f2861652a7c599b1ed42fe91a4fb9305239383026f5356682e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-musllinux_1_2_i686.whl

Download URL iri_client-0.1.4-cp39-abi3-musllinux_1_2_i686.whl
Size 2.8 MB
Tags CPython 3.9 Linux musl 1.2+ x86-32 abi3
SHA-256 checksum
How to use checksums
071d8d1b6271523f8fc05721da38eeb76297d88a05816851b33edec6868805fc
BLAKE2b-256 checksum
How to use checksums
380f52b3843453386862fce5414ff2e701a3d0084b05119cc9eacbe1a2910362
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-musllinux_1_2_armv7l.whl

Download URL iri_client-0.1.4-cp39-abi3-musllinux_1_2_armv7l.whl
Size 2.6 MB
Tags CPython 3.9 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
8b38f288b988a48e545c6cd2c2411949d0e03a37915f255024530e149e6f2a2b
BLAKE2b-256 checksum
How to use checksums
ee8100037e193949f9021013bbea1e8aea000ba6d9ee25df04a230b9960b9ff8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL iri_client-0.1.4-cp39-abi3-musllinux_1_2_aarch64.whl
Size 3.0 MB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
fd8de5096f91ad6b3dbdcc0213772ff1bee410b77adab14cfcd028c307ddd50b
BLAKE2b-256 checksum
How to use checksums
d765db13f6179e8a2f6c805f33a826e7ddea58c9ab6b199249a287307e316962
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-manylinux_2_28_x86_64.whl

Download URL iri_client-0.1.4-cp39-abi3-manylinux_2_28_x86_64.whl
Size 3.0 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
3eb09729becb3e8c48d29e0449fd45a4c1948be0f080e1fef9c6aa14fe387664
BLAKE2b-256 checksum
How to use checksums
92f3d9d3083fe918d6f124e8c418b3a9f14d86ee6a348ac54f7689d23c1d5f99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-manylinux_2_28_s390x.whl

Download URL iri_client-0.1.4-cp39-abi3-manylinux_2_28_s390x.whl
Size 2.5 MB
Tags CPython 3.9 Linux glibc 2.28+ IBM System/390x abi3
SHA-256 checksum
How to use checksums
fabc41bca8f1aeb072e11e583b5f73f1baaecab61eac76bac292423459c4e7ee
BLAKE2b-256 checksum
How to use checksums
00b2825a300edea509058696f2f2517db09022c8757834405c808b54f28103e1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-manylinux_2_28_ppc64le.whl

Download URL iri_client-0.1.4-cp39-abi3-manylinux_2_28_ppc64le.whl
Size 3.1 MB
Tags CPython 3.9 Linux glibc 2.28+ PowerPC 64-le abi3
SHA-256 checksum
How to use checksums
50b1da689cb0ae5a357cd8cb1cb89c00460c73675c445c7b1deffde6a998a4bd
BLAKE2b-256 checksum
How to use checksums
4af954cf02902dd3d315261c2f77145cb9040ec3f2b3c019202ccec7c09f642b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-manylinux_2_28_i686.whl

Download URL iri_client-0.1.4-cp39-abi3-manylinux_2_28_i686.whl
Size 2.7 MB
Tags CPython 3.9 Linux glibc 2.28+ x86-32 abi3
SHA-256 checksum
How to use checksums
c4d914e794557290af6a42f393e1df94f5bfc5f9879dd0d97cd3f433c490c9da
BLAKE2b-256 checksum
How to use checksums
319b0e049f59f7051c35c25bf9fa3d9d87c588bbfaa43bf10e48b8f652167186
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-manylinux_2_28_armv7l.whl

Download URL iri_client-0.1.4-cp39-abi3-manylinux_2_28_armv7l.whl
Size 2.4 MB
Tags CPython 3.9 Linux glibc 2.28+ ARMv7l abi3
SHA-256 checksum
How to use checksums
19eb7fee7b590b36b52694c4e30d8476afc1af8e83f5be3b0d8a45bf6e2ee063
BLAKE2b-256 checksum
How to use checksums
ab61cc741bed43e4ace882457b104faa75d1aa2efe4ae38cbab4176b0250a74a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-manylinux_2_28_aarch64.whl

Download URL iri_client-0.1.4-cp39-abi3-manylinux_2_28_aarch64.whl
Size 2.8 MB
Tags CPython 3.9 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
38a3c4a2142b72694f6741e1168067c9f34d4f9835a695c0a9c0d8cc062add72
BLAKE2b-256 checksum
How to use checksums
550cf8436514ac3685d8fc7bad8477e14e03c1a60bbe0704dde969b5cff5cf50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-macosx_11_0_arm64.whl

Download URL iri_client-0.1.4-cp39-abi3-macosx_11_0_arm64.whl
Size 2.7 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
eaf6e0535ea852d93f54997149c75e710d3891cb79e49dcb2a7de80afafbb53e
BLAKE2b-256 checksum
How to use checksums
2a2655989d3f378f6d09aa9612046a443f496e245f402d2b54adb40572389c70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / iri_client-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl

Download URL iri_client-0.1.4-cp39-abi3-macosx_10_12_x86_64.whl
Size 2.8 MB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
6a82b9dbc1e6ad3bd9dea4d239e6703ab27d264eb97ca91328a998c7df546404
BLAKE2b-256 checksum
How to use checksums
534178c5205d04623f7b376f1af04951909fde7eb7a1e94a9a6d2fe57618b580
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.4 This release

16 release files

0.1.3

16 release files

0.1.2

16 release files

0.1.1

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