Skip to main content

A powerful yet lightweight Python package to calculate and analyze the Word Error Rate (WER).

Project description

werpy-logo-word-error-rate

Word Error Rate for Python Tweet

Meta Python Version   Black Code Style   Documentation Status   Analytics in Motion
License werpy License   FOSSA Status   REUSE status
Security CodeQL   Codacy Security Scan   Bandit
Testing CodeFactor   CircleCI   codecov
Package Pypi   PyPI Downloads   Downloads   PyPI - Trusted Publisher

What is werpy?

werpy is an ultra-fast, lightweight Python package for calculating and analyzing Word Error Rate (WER) between two sets of text.

Built for flexibility and ease of use, it supports multiple input types such as strings, lists, and NumPy arrays. This makes it ideal for everything from quick experiments to large-scale evaluations.

With speed in mind at every scale, werpy harnesses the efficiency of C optimizations to accelerate processing, delivering ultra-fast results from small datasets to enterprise-level workloads.

It also comes packed with powerful features, including:

  • 🔤 Built-in text normalization to handle data inconsistencies
  • ⚙️ Customizable error penalties for insertions, deletions, and substitutions
  • 📋 A detailed summary output for in-depth error analysis

werpy is a quality-focused package, built to production-grade standards for reliability and robustness.

Functions available in werpy

The following table provides an overview of the functions that can be used in werpy.

Function Description
normalize(text) Preprocess input text to remove punctuation, remove duplicated spaces, leading/trailing blanks and convert all words to lowercase.
wer(reference, hypothesis) Calculate the overall Word Error Rate for the entire reference and hypothesis texts.
wers(reference, hypothesis) Calculates a list of the Word Error Rates for each of the reference and hypothesis texts.
werp(reference, hypothesis) Calculates a weighted Word Error Rate for the entire reference and hypothesis texts.
werps(reference, hypothesis) Calculates a list of weighted Word Error Rates for each of the reference and hypothesis texts.
summary(reference, hypothesis) Provides a comprehensive breakdown of the calculated results including the WER, Levenshtein Distance and all the insertion, deletion and substitution errors.
summaryp(reference, hypothesis) Delivers an in-depth breakdown of the results, covering metrics like WER, Levenshtein Distance, and a detailed account of insertion, deletion, and substitution errors, inclusive of the weighted WER.

Installation

You can install the latest werpy release with Python's pip package manager:

# Install werpy from PyPi
pip install werpy

Usage

Import the werpy package

Python Code:

import werpy

Example 1 - Normalize a list of text

Python Code:

input_data = ["It's very popular in Antarctica.","The Sugar Bear character"]
reference = werpy.normalize(input_data)
print(reference)

Results Output:

['its very popular in antarctica', 'the sugar bear character']

Example 2 - Calculate the overall Word Error Rate on a set of strings

Python Code:

wer = werpy.wer('i love cold pizza', 'i love pizza')
print(wer)

Results Output:

0.25

Example 3 - Calculate the overall Word Error Rate on a set of lists

Python Code:

ref = ['i love cold pizza','the sugar bear character was popular']
hyp = ['i love pizza','the sugar bare character was popular']
wer = werpy.wer(ref, hyp)
print(wer)

Results Output:

0.2

Example 4 - Calculate the Word Error Rates for each set of texts

Python Code:

ref = ['no one else could claim that','she cited multiple reasons why']
hyp = ['no one else could claim that','she sighted multiple reasons why']
wers = werpy.wers(ref, hyp)
print(wers)

Results Output:

[0.0, 0.2]

Example 5 - Calculate the weighted Word Error Rates for the entire set of text

Python Code:

ref = ['it was beautiful and sunny today']
hyp = ['it was a beautiful and sunny day']
werp = werpy.werp(ref, hyp, insertions_weight=0.5, deletions_weight=0.5, substitutions_weight=1)
print(werp)

Results Output:

0.25

Example 6 - Calculate a list of weighted Word Error Rates for each of the reference and hypothesis texts

Python Code:

ref = ['it blocked sight lines of central park', 'her father was an alderman in the city government']
hyp = ['it blocked sightlines of central park', 'our father was an elder man in the city government']
werps = werpy.werps(ref, hyp, insertions_weight = 0.5, deletions_weight = 0.5, substitutions_weight = 1)
print(werps)

Results Output:

[0.21428571428571427, 0.2777777777777778]

Example 7 - Provide a complete breakdown of the Word Error Rate calculations for each of the reference and hypothesis texts

Python Code:

ref = ['it is consumed domestically and exported to other countries', 'rufino street in makati right inside the makati central business district', 'its estuary is considered to have abnormally low rates of dissolved oxygen', 'he later cited his first wife anita as the inspiration for the song', 'no one else could claim that']
hyp = ['it is consumed domestically and exported to other countries', 'rofino street in mccauti right inside the macasi central business district', 'its estiary is considered to have a normally low rates of dissolved oxygen', 'he later sighted his first wife anita as the inspiration for the song', 'no one else could claim that']
summary = werpy.summary(ref, hyp)
print(summary)

Results Output:

werpy-example-summary-results-word-error-rate-breakdown


Example 8 - Provide a complete breakdown of the Weighted Word Error Rate for each of the input texts

Python Code:

ref = ['the tower caused minor discontent because it blocked sight lines of central park', 'her father was an alderman in the city government', 'he was commonly referred to as the blacksmith of ballinalee']
hyp = ['the tower caused minor discontent because it blocked sightlines of central park', 'our father was an alderman in the city government', 'he was commonly referred to as the blacksmith of balen alley']
weighted_summary = werpy.summaryp(ref, hyp, insertions_weight = 0.5, deletions_weight = 0.5, substitutions_weight = 1)
print(weighted_summary)

Results Output:

werpy-example-summaryp-results-word-error-rate-breakdown


Dependencies

  • NumPy - Provides an assortment of routines for fast operations on arrays
  • Pandas - Powerful data structures for data analysis, time series, and statistics

Licensing

werpy is released under the terms of the BSD 3-Clause License. Please refer to the LICENSE file for full details.

This project uses standard scientific Python libraries including NumPy and Pandas. For license details, please refer to their official repositories:

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

werpy-3.3.0.tar.gz (219.6 kB view details)

Uploaded Source

Built Distributions

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

werpy-3.3.0-cp313-cp313-win_amd64.whl (137.1 kB view details)

Uploaded CPython 3.13Windows x86-64

werpy-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl (133.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

werpy-3.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (123.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

werpy-3.3.0-cp313-cp313-macosx_11_0_arm64.whl (101.8 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

werpy-3.3.0-cp312-cp312-win_amd64.whl (138.3 kB view details)

Uploaded CPython 3.12Windows x86-64

werpy-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl (134.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

werpy-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (124.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

werpy-3.3.0-cp312-cp312-macosx_11_0_arm64.whl (102.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

werpy-3.3.0-cp311-cp311-win_amd64.whl (143.7 kB view details)

Uploaded CPython 3.11Windows x86-64

werpy-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl (139.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

werpy-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (131.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

werpy-3.3.0-cp311-cp311-macosx_11_0_arm64.whl (102.2 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

werpy-3.3.0-cp310-cp310-win_amd64.whl (144.6 kB view details)

Uploaded CPython 3.10Windows x86-64

werpy-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl (139.9 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

werpy-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (132.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

werpy-3.3.0-cp310-cp310-macosx_11_0_arm64.whl (103.0 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file werpy-3.3.0.tar.gz.

File metadata

  • Download URL: werpy-3.3.0.tar.gz
  • Upload date:
  • Size: 219.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for werpy-3.3.0.tar.gz
Algorithm Hash digest
SHA256 0639820807bdb15dbfa5fa8eb8321162069e24bd21f775f5a4095e58bc95a3aa
MD5 f3bd26e4a9fcc31e0f6a73d55094e715
BLAKE2b-256 858d53bda66aa5d6b541b187597b4009f91df56464018fc926001de6625e0c21

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0.tar.gz:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: werpy-3.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 137.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for werpy-3.3.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4fd78f63bb50fc2b281c88fb48c6fcc9c092e3fc09893c6c7c271e468fc12bd3
MD5 058fab4dbf23f7c039d7660e95e2c7a7
BLAKE2b-256 b990d99b3cb644314050c6d37547afe52db65a00fefe221da803eafb2291b6b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp313-cp313-win_amd64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 11bf2d76e3f85b9549d756b1cdb93f2663364c5aba5cad3cdf0000855e227d65
MD5 bc67a5c52db9b7ab1d1ddf2040dbfcd5
BLAKE2b-256 b52af999462a8cbaf473940106b6446945216196804a7dc46a04155ba8bc4ba3

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b334736d4127b7948c4653dd1e022b34f76735dda30ad01a1f813c09e081408a
MD5 45fe72c6c3fac7824a111bc016990b3d
BLAKE2b-256 929ec171f253bdb5abde9025e1321665d8ea33ded49fb7a10c7931989226b70e

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f841c42b1e03b9b00abe7b85c39b8eba582801f1e1bac2b78b2a5f20b2dba07
MD5 24dc238c40169846cd292ee793abc991
BLAKE2b-256 db6613ff1a740b767510abd013d9df215db0e29e21acea70555aef46408fcab4

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: werpy-3.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 138.3 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for werpy-3.3.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 e5b01f9e4d848fad53a7c7c877516f1c97dd1195c701f0bb0e55ea732215ebb0
MD5 20c53b70ad855d7211443278d3d7eca3
BLAKE2b-256 2a74c8e70cad6afb42e3eef78ef6bc842f0185cf83636ccf2af267aaccf8d090

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp312-cp312-win_amd64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ca66181092dbc7de752e43bedad846578700778fe52504e3d55cbc704f8ba3cb
MD5 008da25a0a6267d8f8c25d7ef706f85d
BLAKE2b-256 f7c45f48a1ff24d1e919d351fde68805137ee269df88f61308e948dc87b25dca

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8cc98334e7ad344085d8b352e2f2917490471e78d7c5a9d3e68f7957cbab7d40
MD5 019ca0502552cdaa3328aa43adebba1c
BLAKE2b-256 ef94f67a4d3c49d8346c2e4d46c01370e71b4a032a929ea3c3aa51b8cf738918

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8681fdf454ed8c0b41c500244dfb5c8ffb9ad9e3bf56b962656652859b0af9e3
MD5 b0833ca41d506b29d2b6692f820c1f51
BLAKE2b-256 fbe7bbbfa5100459a57c9082726fc70c07e710bcd53f5dadbc11dcaa3aee549f

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: werpy-3.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 143.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for werpy-3.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 9890e1b7c7aca1174e0350dadad252339c51df1f5e6321f58181523c532b8293
MD5 42dc4123590d7acd7142be18eda80519
BLAKE2b-256 07f8d5a7c35fde44faa36f8dd6bea1d2524ce5943b476ef19f6a6ecfcefb60bb

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp311-cp311-win_amd64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a20038a5d004e6da9d4291bf095eb7863e7df919060121fab8d099231bb1c9fb
MD5 e376ec0924f12b838d9610912d871dcd
BLAKE2b-256 8c47b769e665b5749574645f7b6d14054494530fdea7a7a68a32ffcfcfe72d6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12a327dbb10d8111de739783378c4cfebc2ad6c8aff2bd49ed223a0b5efacef7
MD5 57f61b50ec6ee09b18cf400eb9200e72
BLAKE2b-256 d8b096c766e7126c86608ad33c468ba78ead2e46aef4b44bd0cd77c3495d3ca6

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 78ce0c7bdf89346de78ff594967dc6e806e9248454cb4c462c03a848ab324e48
MD5 f9868ccb203ce2563fb6fd79a1531993
BLAKE2b-256 71765035c385920e583329bef313a5228582555f5a35e14879e7f09df5fe7959

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: werpy-3.3.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 144.6 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for werpy-3.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c850b330032dc252d32f4b3148948589764b50d6bf5042ff2162edec0909ef08
MD5 d1fb65f19e63de6d9369362ef642bf41
BLAKE2b-256 18cd6f38206fe55b5e689e94af44db5cc5b5e87d0edb441b94749e3c010fa9af

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp310-cp310-win_amd64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 69ba5ee61d1eb90743f485de6d40d02734b5b9eb1112b59b9957ead584a68560
MD5 289ee11865aeea8900dce56c53f05144
BLAKE2b-256 ed8891008f25adfdd785124b49607cabf3cda1101a6a0a0f77242e170c31cb85

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c9e1646a8bb6a95af85f1de1d8b03ecf81c669d48ee891dc967a41a7a06dd8c7
MD5 d4d640d27aad8149d11224d5bd265ef3
BLAKE2b-256 4397fd42b4dd3f5de6d10265c32de395e3463a0f7405005858b5622d1aa7b5d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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

File details

Details for the file werpy-3.3.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for werpy-3.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5639dad02cfb4e27790595aa20729d3ecfc92a775a78408b726268939cb0e7e4
MD5 ddf9bd462002c971976dd8f680f36e23
BLAKE2b-256 0c1c8a4884591cef87a4775d6d14628db8ea9494ac626af7ea25e95c37aeba59

See more details on using hashes here.

Provenance

The following attestation bundles were made for werpy-3.3.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: release.yml on analyticsinmotion/werpy

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