Skip to main content

Fast linestring simplification using RDP or Visvalingam-Whyatt and a Rust binary

Project description

Build Status Coverage Status DownloadsDOI

Simplification

Simplify a LineString using the Ramer–Douglas–Peucker or Visvalingam-Whyatt algorithms

Line

Installation

pip install simplification

Installing for local development

  1. Ensure you have a copy of librdp from https://github.com/urschrei/rdp/releases, and it's in the src/simplification subdir
  2. run pip install -e .[test] --use-pep517
  3. run pytest .

Supported Python Versions (Linux x86_64 + aarch64, macOS x86_64 + arm64, Windows amd64)

  • Python 3.8
  • Python 3.9
  • Python 3.10
  • Python 3.11

Supported Platforms

  • Linux (manylinux-compatible) x86_64 and aarch64
  • macOS Darwin x86_64 and arm64
  • Windows 64-bit

Usage

from simplification.cutil import (
    simplify_coords,
    simplify_coords_idx,
    simplify_coords_vw,
    simplify_coords_vw_idx,
    simplify_coords_vwp,
)

# Using Ramer–Douglas–Peucker
coords = [
    [0.0, 0.0],
    [5.0, 4.0],
    [11.0, 5.5],
    [17.3, 3.2],
    [27.8, 0.1]
]

# For RDP, Try an epsilon of 1.0 to start with. Other sensible values include 0.01, 0.001
simplified = simplify_coords(coords, 1.0)

# simplified is [[0.0, 0.0], [5.0, 4.0], [11.0, 5.5], [27.8, 0.1]]

# Using Visvalingam-Whyatt
# You can also pass numpy arrays, in which case you'll get numpy arrays back
import numpy as np
coords_vw = np.array([
    [5.0, 2.0],
    [3.0, 8.0],
    [6.0, 20.0],
    [7.0, 25.0],
    [10.0, 10.0]
])
simplified_vw = simplify_coords_vw(coords_vw, 30.0)

# simplified_vw is [[5.0, 2.0], [7.0, 25.0], [10.0, 10.0]]

Passing empty and/or 1-element lists will return them unaltered.

But I only want the simplified Indices

simplification now has:

  • cutil.simplify_coords_idx
  • cutil.simplify_coords_vw_idx

The values returned by these functions are the retained indices. In order to use them as e.g. a masked array in Numpy, something like the following will work:

import numpy as np
from simplification.cutil import simplify_coords_idx

# assume an array of coordinates: orig
simplified = simplify_coords_idx(orig, 1.0)
# build new geometry using only retained coordinates
orig_simplified = orig[simplified]

But I need to ensure that the resulting geometries are valid

You can use the topology-preserving variant of VW for this: simplify_coords_vwp. It's slower, but has a far greater likelihood of producing a valid geometry.

But I Want to Simplify Polylines

No problem; Decode them to LineStrings first.

# pip install pypolyline before you do this
from pypolyline.cutil import decode_polyline
# an iterable of Google-encoded Polylines, so precision is 5. For OSRM &c., it's 6
decoded = (decode_polyline(line, 5) for line in polylines)
simplified = [simplify_coords(line, 1.0) for line in decoded]

How it Works

FFI and a Rust binary

Is It Fast

I should think so.

What does that mean

Using numpy arrays for input and output, the library can be reasonably expected to process around 2500 1000-point LineStrings per second on a Core i7 or equivalent, for a 98%+ reduction in size.
A larger LineString, containing 200k+ points can be reduced to around 3k points (98.5%+) in around 50ms using RDP.

This is based on a test harness available here.

Disclaimer

All benchmarks are subjective, and pathological input will greatly increase processing time. Error-checking is non-existent at this point.

License

MIT

Citing Simplification

If Simplification has been significant in your research, and you would like to acknowledge the project in your academic publication, we suggest citing it as follows (example in APA style, 7th edition):

Hügel, S. (2021). Simplification (Version X.Y.Z) [Computer software]. https://doi.org/10.5281/zenodo.5774852

In Bibtex format:

@software{Hugel_Simplification_2021,
author = {Hügel, Stephan},
doi = {10.5281/zenodo.5774852},
license = {MIT},
month = {12},
title = {{Simplification}},
url = {https://github.com/urschrei/simplification},
version = {X.Y.Z},
year = {2021}
}

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

simplification-0.7.9.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

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

simplification-0.7.9-cp312-cp312-win_amd64.whl (190.9 kB view details)

Uploaded CPython 3.12Windows x86-64

simplification-0.7.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (745.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

simplification-0.7.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (723.7 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

simplification-0.7.9-cp312-cp312-macosx_11_0_arm64.whl (258.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

simplification-0.7.9-cp312-cp312-macosx_10_9_x86_64.whl (277.9 kB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

simplification-0.7.9-cp311-cp311-win_amd64.whl (192.0 kB view details)

Uploaded CPython 3.11Windows x86-64

simplification-0.7.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (757.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

simplification-0.7.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (736.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

simplification-0.7.9-cp311-cp311-macosx_11_0_arm64.whl (258.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

simplification-0.7.9-cp311-cp311-macosx_10_9_x86_64.whl (278.0 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

simplification-0.7.9-cp310-cp310-win_amd64.whl (191.8 kB view details)

Uploaded CPython 3.10Windows x86-64

simplification-0.7.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (709.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

simplification-0.7.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (689.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

simplification-0.7.9-cp310-cp310-macosx_11_0_arm64.whl (258.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

simplification-0.7.9-cp310-cp310-macosx_10_9_x86_64.whl (277.9 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

simplification-0.7.9-cp39-cp39-win_amd64.whl (192.3 kB view details)

Uploaded CPython 3.9Windows x86-64

simplification-0.7.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (712.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

simplification-0.7.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (691.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

simplification-0.7.9-cp39-cp39-macosx_11_0_arm64.whl (258.9 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

simplification-0.7.9-cp39-cp39-macosx_10_9_x86_64.whl (278.5 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

simplification-0.7.9-cp38-cp38-win_amd64.whl (192.3 kB view details)

Uploaded CPython 3.8Windows x86-64

simplification-0.7.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (723.2 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

simplification-0.7.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (703.3 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

simplification-0.7.9-cp38-cp38-macosx_11_0_arm64.whl (258.7 kB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

simplification-0.7.9-cp38-cp38-macosx_10_9_x86_64.whl (278.4 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file simplification-0.7.9.tar.gz.

File metadata

  • Download URL: simplification-0.7.9.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.6

File hashes

Hashes for simplification-0.7.9.tar.gz
Algorithm Hash digest
SHA256 9964d4553d601df48b691a474592ab1c0b0cb7f7f33f6a35b51c689bb6188ef1
MD5 18f65d736acf3f6d5853d0bc13179e5a
BLAKE2b-256 e48329eed915cdf9cb3d0e266acef1ff79b5a4a103e15c372987b8a45b3242c1

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 04c28353ae5ac9c961b163f1ba0380912a05785e59af6327634bb18c92968fb3
MD5 f632cdfb0742daa14eb2bb81c7c006a1
BLAKE2b-256 3380b25e5494f2d03966585ec99eb7cb860deadc93abbd8b3de1712ae7b2c3ed

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4b2474db33cbd68a6ae7c4845e3106c033658e3053441c07cccd3673b4717119
MD5 c5e1ddff98932668af1c0d7f7f31da1e
BLAKE2b-256 b940103e89a5b375ff171a13a8c1152055988c64ab4ddea0f19489d313f06bf4

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 fefdee11184a768870caa87723f89648a88ba07815eb29164bd23bc1db16643a
MD5 b14dac715fe4bd83825a8b83e364a441
BLAKE2b-256 4381645b357e1c728ab157bdc5e4f9e0fe939813829af9b287227db56fd0d98e

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7cea1f43f2760cc3408ce4724ad4c50e4d7e8219b697d8e763162900ed7283e9
MD5 d1d58648ef4582cf6a7e377cf65fc42b
BLAKE2b-256 3426af8d04f4d0149df6e66ca4d3f6eb19d9bf26c5270bc26026a69f97a86a0e

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b02ce22627cbedada6e9ae28b04f2f0de577fb5747712379ed0c89172efa3119
MD5 d64141fed209040a3c002c227b3836e0
BLAKE2b-256 5a349117e1aece5d6e0e6efc30476f690d36aad5675c03ee759a0564111fb98b

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 405b6d44f05c79f0e0c2fd285b5563badb335e57a7e08999e74040c6f650d2f2
MD5 d170863091d52d5da3171db869969575
BLAKE2b-256 8bda7fbe9102e3cecd1232b33d13a9532e4f39cb0b4190f88c679a5a8a8aed86

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d63fbe29980dd27c839364e05961dac7941a6bc562c8df07f3c0ce3967059fd
MD5 73163d0023b2ed29d7eb4c678f39ec90
BLAKE2b-256 17beebd97c4cfeaa96371e87f33006eb9bf38a99243d4ff92678863956a11b4a

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f7aab4834a6c888783029b8a48ebcc1ae246f516216df07ce89c8be0e63723b0
MD5 9e89b723fec72e04ca14c34334d00077
BLAKE2b-256 9bd63fc2bd8633807d5bf44eb248e3ab26859e1e119a367946afc1769f93b221

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 43fa01ac035270b28b91245b2694dbf3f3af83afd4ac6f05f21210eab065782c
MD5 016d898938ff84a93325c04b62c5e6df
BLAKE2b-256 0ddd91418a4c6a6ca211c5b37a67a90f6893dd5ab7e00170500253e4612a106c

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 441c697994265ed427a569aa1f1ba3dff53b93caa6c055b3e4ac5a7f8df3e08d
MD5 3763e56a74d2e60d8f106cc67b9d696a
BLAKE2b-256 bfc9627be5e2d398ca91eace648f16257916e4e8bb70429c8f27f5c57cca97cd

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a5e143370c62a987ec5dc87cfacb0d45b345ed9f734cfd23444eca6e5b67edc9
MD5 f5b0c32659d24a8200e037e13113a0d2
BLAKE2b-256 d20acb4082e0d71d3696ba8546dec0ab620ae08ed139a68314af233827e13d93

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f72ccb94cac27702df36a8e1b48f0fc8e46bf59b7e760901547018dfb2c1cc8
MD5 f2de7aede9093bf3122797d7c9e4a2e0
BLAKE2b-256 a88f04a315b96297413e961c40526c04801153b370cb9956644b54b67a6dc41d

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e6c04e1dc86da3f44e07b368278fa6994c7d6a962b3c4ccc7b35bde36c2ee0cd
MD5 99184c8372be62e96ed420b37949229f
BLAKE2b-256 78851216e69397d3b382b32d44d93b2013082969475630f9d6d3109c85b691da

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 abbeae69b1072f84a27909931e6bd05b9b1896c972a5ae990bf84b988cd62744
MD5 f70ef07969c960af1a3aef217c6b1a16
BLAKE2b-256 552fa44de9c2a7ea3ef2749ca0a0780e8025c6ce66f5874b0391427880071c7b

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 51e02cbe906dcbaad8ed7c7e42d85375118264bcc9c2c1ededc8ddf0f5048b2a
MD5 a5be75abb97c299f948879d5b8c36864
BLAKE2b-256 9f345cab822495baaf6305f0c7ee94f52e81a98ac80bbba2658f776cce865696

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5c9d62c5e01f6790b46b56dfa3bc639ae97789b676b9d41107a7fce4cf2d643d
MD5 b0982a28853dd6ed7ab83852b44ec599
BLAKE2b-256 65a98af9f16becc2fca3546f2f4c3ec07cec8743060b7228ba6b92dfca2516b9

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d3833c77b1ec3f40926e9b3ee953240984a85ccd13c23669a7cb088f4121e5c
MD5 77be4bd068db74ae8932783e27bc02d1
BLAKE2b-256 4946af45e021d63d6bf59cac3d211145ad161ebcd3bf046c1450c2ecc5150b07

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec3853f87de93aa5d71a72f2e7a5810c60bdd9e0ea6799e8136c09cd8ed11348
MD5 4dcc1171d587271df93c56be35f5b44f
BLAKE2b-256 f2d22de705fb8b5c08545f1c0e70018dd2e30440b981736e892a586e219b8658

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 738bc31a6294d895276fb819e085aa00ca845799de2559452b62725b927cd038
MD5 3dd783b68343c4b5b4ee6acb1b5edab5
BLAKE2b-256 bbc05e58319e77d0f5d6e13a58791341d6747dd6ecb3388573156e489f713592

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 f4ff013cad2e24ed9f2fbe4242e52a394b364ddee270cdfdb13654003a526767
MD5 3fa324314fdd8e5d5dd00a3ab64d6c4c
BLAKE2b-256 9ecb61231afe0f07d874738bae52a82b7dcaa37669a241b43e28690c6fcfd9f6

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 d4436bea15f059b179884465603e9e3f9e1a1fe1c56ecf52c4cbc985bc33be40
MD5 c5bab3eb7837ccff2a9d8f538c240ad1
BLAKE2b-256 a8ab6c639b7418066abd6056d95f34dc8b80e04048f972d0ea8b19f8c5418998

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 baf7d942b7d2ce1b754fe4e18fb902a8659fcc49de7d0933a50d5759a3c10778
MD5 02dc7e7bfbd8a9f556a61326f19bf10c
BLAKE2b-256 8725d01e8be3ba4d7a25f8c8742d3a6b191848bbf2b86d76d681f12df8cc7d24

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 14ce810d55d0de907ce790f40e89fa2473a55b30321f62f322207b28470addcb
MD5 21ea4fc5c20a764d09b2c93bd28b5d88
BLAKE2b-256 33b1ef9d977a54ecf50fbb20f0544fd09d2a47d497c4ae48ea51bd87da46a396

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 02d2fe44991fe5bf1c70bd5b613fcd7a0e50ef9cabd538ce1bbf1134d39de2ce
MD5 20ae215b03b24126ce2b56e45f78a8aa
BLAKE2b-256 a40d4a1bd368762a66ca1aeeca81fc00d81564f227b5e7c836e32dfbda7ccd91

See more details on using hashes here.

File details

Details for the file simplification-0.7.9-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for simplification-0.7.9-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 5d6d2d928dcea8abe9d0b87cad00e23bb6dc35660d7d8d022968fc624b081910
MD5 8caff51872f4c2a7f83626b6b1a422fc
BLAKE2b-256 3a3f907bbe747847d76c0e6800eb6003e6a8abb673b2bb93a067bf686202f780

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