Skip to main content

kmp_util

kmp_util is a Python C extension module that provides efficient substring search functionality using the Knuth-Morris-Pratt (KMP) algorithm. It supports almost all Python 3 versions from 3.5 to 3.14.

Installation

pip install kmp-util

Example Usage

The kmp_util module supports searching for patterns in both byte sequences and Unicode strings.

import kmp_util

result = kmp_util.find_bytes(b'111', b'2', 1)
print(result)  # Output: -1 (pattern not found)

result = kmp_util.find_str('abc中文', '文')
print(result)  # Output: 4 (pattern found at index 4)

Functions

find_bytes(text: bytes, pattern: bytes, start: int = 0) -> int

Searches for the first occurrence of the byte pattern in the byte sequence.

  • Parameters:

    • text (bytes): The byte sequence to search in.

    • pattern (bytes): The byte pattern to search for.

    • start (int): The index to start the search from. Defaults to 0 if not provided.

  • Returns:

    • The starting index of the first occurrence of the pattern in the text, or -1 if the pattern is not found.

find_str(text: str, pattern: str, start: int = 0) -> int

Searches for the first occurrence of the substring in the Unicode string.

  • Parameters:

    • text (str): The Unicode string to search in.

    • pattern (str): The substring to search for.

    • start (int): The index to start the search from. Defaults to 0 if not provided.

  • Returns:

    • The starting index of the first occurrence of the pattern in the text, or -1 if the pattern is not found.

License

This module is open-source and available under the MIT License.

Metadata

Release files for kmp-util 1.0.3

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

Source distribution (sdist)

Source distribution for kmp-util 1.0.3
File Size Uploaded Provenance
kmp_util-1.0.3.tar.gz 4.0 kB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for kmp-util 1.0.3
File
kmp_util-1.0.3-pp311-pypy311_pp73-win_amd64.whl PyPy 3.11 PyPy 3.11 7.3 Windows x86-64 Details
kmp_util-1.0.3-pp310-pypy310_pp73-win_amd64.whl PyPy 3.10 PyPy 3.10 7.3 Windows x86-64 Details
kmp_util-1.0.3-pp38-pypy38_pp73-win_amd64.whl PyPy 3.8 PyPy 3.8 7.3 Windows x86-64 Details
kmp_util-1.0.3-graalpy311-graalpy241_311_native-win_amd64.whl graalpy311 graalpy241 311 native Windows x86-64 Details
kmp_util-1.0.3-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
kmp_util-1.0.3-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
kmp_util-1.0.3-cp314-cp314-win32.whl CPython 3.14 CPython 3.14 Windows x86-32 Details
kmp_util-1.0.3-cp313-cp313t-win_amd64.whl CPython 3.13 CPython 3.13 free-threading Windows x86-64 Details
kmp_util-1.0.3-cp313-cp313t-win32.whl CPython 3.13 CPython 3.13 free-threading Windows x86-32 Details
kmp_util-1.0.3-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
kmp_util-1.0.3-cp313-cp313-win32.whl CPython 3.13 CPython 3.13 Windows x86-32 Details
kmp_util-1.0.3-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
kmp_util-1.0.3-cp312-cp312-win32.whl CPython 3.12 CPython 3.12 Windows x86-32 Details
kmp_util-1.0.3-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
kmp_util-1.0.3-cp311-cp311-win32.whl CPython 3.11 CPython 3.11 Windows x86-32 Details
kmp_util-1.0.3-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
kmp_util-1.0.3-cp310-cp310-win32.whl CPython 3.10 CPython 3.10 Windows x86-32 Details
kmp_util-1.0.3-cp39-cp39-win_amd64.whl CPython 3.9 CPython 3.9 Windows x86-64 Details
kmp_util-1.0.3-cp39-cp39-win32.whl CPython 3.9 CPython 3.9 Windows x86-32 Details
kmp_util-1.0.3-cp38-cp38-win_amd64.whl CPython 3.8 CPython 3.8 Windows x86-64 Details
kmp_util-1.0.3-cp38-cp38-win32.whl CPython 3.8 CPython 3.8 Windows x86-32 Details
kmp_util-1.0.3-cp37-cp37m-win_amd64.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-64 Details
kmp_util-1.0.3-cp37-cp37m-win32.whl CPython 3.7 CPython 3.7 pymalloc Windows x86-32 Details
kmp_util-1.0.3-cp36-cp36m-win_amd64.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-64 Details
kmp_util-1.0.3-cp36-cp36m-win32.whl CPython 3.6 CPython 3.6 pymalloc Windows x86-32 Details
kmp_util-1.0.3-cp35-cp35m-win_amd64.whl CPython 3.5 CPython 3.5 pymalloc Windows x86-64 Details

Total release size: 223.8 kB

Release files / kmp_util-1.0.3.tar.gz

Download URL kmp_util-1.0.3.tar.gz
Size 4.0 kB
Tags Source
SHA-256 checksum
How to use checksums
5dae6448411c0ff056dd1eee9eaadfd99e37b84e86e629d207c1594b38738531
BLAKE2b-256 checksum
How to use checksums
2a37ee96eac945574b35afeec1f41cd1c6bf65748b86aa55e7885bc90ba6afd6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-pp311-pypy311_pp73-win_amd64.whl

Download URL kmp_util-1.0.3-pp311-pypy311_pp73-win_amd64.whl
Size 8.4 kB
Tags PyPy 3.11 PyPy 3.11 7.3 Windows x86-64
SHA-256 checksum
How to use checksums
e95fc8839d14adc5e7414e0421b1fa46b3c9dd1c19fca595e9e14788d178df8d
BLAKE2b-256 checksum
How to use checksums
f1eaa8c66dddb4570a2bc54404b2cc516cc559cc097d6c19f3b5b9e80278bffe
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-pp310-pypy310_pp73-win_amd64.whl

Download URL kmp_util-1.0.3-pp310-pypy310_pp73-win_amd64.whl
Size 8.4 kB
Tags PyPy 3.10 PyPy 3.10 7.3 Windows x86-64
SHA-256 checksum
How to use checksums
a0c05ea6093617f9002c66a8ba6e103c6fc10a5c7d78ab270090afd9387a5ae3
BLAKE2b-256 checksum
How to use checksums
16a85a91ec72d05e1a601e755e3dda24493b15d45fdf4c6dfa8e224e6a82764d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-pp38-pypy38_pp73-win_amd64.whl

Download URL kmp_util-1.0.3-pp38-pypy38_pp73-win_amd64.whl
Size 8.5 kB
Tags PyPy 3.8 PyPy 3.8 7.3 Windows x86-64
SHA-256 checksum
How to use checksums
b84b8195173b9a28e7b68d74b3a5103fca57bf9fc598c2f7ef33fd7480f04d39
BLAKE2b-256 checksum
How to use checksums
64df0801ee01bb0814a2eb8b290d30dd56bdeebce7d1c7f67d795f5ac67c4559
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-graalpy311-graalpy241_311_native-win_amd64.whl

Download URL kmp_util-1.0.3-graalpy311-graalpy241_311_native-win_amd64.whl
Size 8.5 kB
Tags Windows x86-64 graalpy241 311 native graalpy311
SHA-256 checksum
How to use checksums
7ce7b852d0e4dc420452b93587618d82e0b0db1f9c51a4bc5e876ecca975b9cc
BLAKE2b-256 checksum
How to use checksums
27e0d86ba53bba5ba88f15b68e2d31e8200ab66091025ac235f5e9a13a293396
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp314-cp314t-win_amd64.whl

Download URL kmp_util-1.0.3-cp314-cp314t-win_amd64.whl
Size 8.4 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
58757a1668e2691c0a5da67b198be724f3d388d2b59aa69fdf87123c0159112f
BLAKE2b-256 checksum
How to use checksums
1bdc88dd7abb45e398a7621ac0a4a8712c3a8c089307b3c4497a95942ea66570
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp314-cp314-win_amd64.whl

Download URL kmp_util-1.0.3-cp314-cp314-win_amd64.whl
Size 8.4 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
294ab16c1aae8d3397d0a21c1a863f25e3905f89fbe5cfc1a4d795bd75e17b5c
BLAKE2b-256 checksum
How to use checksums
03de39b3515478f7f30e239a5043ecb2861ba5c223807fb1caf2505be8202157
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp314-cp314-win32.whl

Download URL kmp_util-1.0.3-cp314-cp314-win32.whl
Size 8.1 kB
Tags CPython 3.14 Windows x86-32
SHA-256 checksum
How to use checksums
2e0c7ee41c0a837ffa1603eec60b23c4a4cd212d0a762009bc7bdd6cceea6a1f
BLAKE2b-256 checksum
How to use checksums
f9130c5945c2d579a540d71ffabbffca10bba7eec4468997e555937a223509fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp313-cp313t-win_amd64.whl

Download URL kmp_util-1.0.3-cp313-cp313t-win_amd64.whl
Size 8.4 kB
Tags CPython 3.13 CPython 3.13 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
f2cba102f75f5efbd1b83aea800ffe81bba52d9bc23b9bb1a6c9c14e307eaffc
BLAKE2b-256 checksum
How to use checksums
6a749893421f63d913bea394692a7bde004303bea6650c7bd81e09c21be84f09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp313-cp313t-win32.whl

Download URL kmp_util-1.0.3-cp313-cp313t-win32.whl
Size 8.2 kB
Tags CPython 3.13 CPython 3.13 free-threading Windows x86-32
SHA-256 checksum
How to use checksums
fb071c313120e16a804d1f957e84d7f912007d4acce8bb6c6969b557b5777e4d
BLAKE2b-256 checksum
How to use checksums
0d4178c97bb1bff78985c4c3e6c6f2d3b77e46a8d90ccdfafc89669e70ae3a98
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp313-cp313-win_amd64.whl

Download URL kmp_util-1.0.3-cp313-cp313-win_amd64.whl
Size 8.4 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
507d7c5da1c55ce5496275fd09dddd79e380ecc88da2ccea3265874f8898814d
BLAKE2b-256 checksum
How to use checksums
95fac40cb4160f25931347b9ae3c23fed433c7ff5caa1c4507234a19e390aac8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp313-cp313-win32.whl

Download URL kmp_util-1.0.3-cp313-cp313-win32.whl
Size 8.1 kB
Tags CPython 3.13 Windows x86-32
SHA-256 checksum
How to use checksums
074eed66637724681567339a716995b8498ea9c9da9f667fa18f1fb0e704d59e
BLAKE2b-256 checksum
How to use checksums
0583d2f5bf975a33273ad00b5b0605b866d6f29d7e356c65dbbe695e96fe4d4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp312-cp312-win_amd64.whl

Download URL kmp_util-1.0.3-cp312-cp312-win_amd64.whl
Size 8.4 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
da03df68566ababbde2b9c407acde6cad11c30414b7a42dcbc706ed89f0bc49f
BLAKE2b-256 checksum
How to use checksums
7d83219dae54f17225bda8f1d55c358a43471b6a85320b15fa4140d6c4adb0e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp312-cp312-win32.whl

Download URL kmp_util-1.0.3-cp312-cp312-win32.whl
Size 8.2 kB
Tags CPython 3.12 Windows x86-32
SHA-256 checksum
How to use checksums
9d44210de5f4c31f40e38e3785a8ae81d7f2fe994049800086d520230afbbc52
BLAKE2b-256 checksum
How to use checksums
49202be077d500e0d8cb0217a30e17efbeb735ec958ce5fe876cf4041c501113
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp311-cp311-win_amd64.whl

Download URL kmp_util-1.0.3-cp311-cp311-win_amd64.whl
Size 8.4 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
edf1cb0671674cbbd002b8c45d4a7a344e1f87f6600538a3c81de864ceab0d4e
BLAKE2b-256 checksum
How to use checksums
819858234e80defa0447576a65a3dc3187b872e43c892add6b6eb85de4082633
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp311-cp311-win32.whl

Download URL kmp_util-1.0.3-cp311-cp311-win32.whl
Size 8.2 kB
Tags CPython 3.11 Windows x86-32
SHA-256 checksum
How to use checksums
d90b5a03a9b173e99830a846071059b0d01dc5db2e8b73469c728c1c2c48e434
BLAKE2b-256 checksum
How to use checksums
43c68c3ed81b8b889fb81a2d08a8f4c5c4a74e11d084c81b07524b46ecba69be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp310-cp310-win_amd64.whl

Download URL kmp_util-1.0.3-cp310-cp310-win_amd64.whl
Size 8.4 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
c9aa70832a0ae9adbd25ff085612b4a54366aa71d3685d5d593ef2c79228f0d5
BLAKE2b-256 checksum
How to use checksums
f027c1068e32f6c8eac532fa803f09e7b35fd49d3355d17fe747a89ce77753c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp310-cp310-win32.whl

Download URL kmp_util-1.0.3-cp310-cp310-win32.whl
Size 8.2 kB
Tags CPython 3.10 Windows x86-32
SHA-256 checksum
How to use checksums
ce3580c66a4c09df1ddecceef4182f4d56832072c5d69aba2b2208ed3a503f78
BLAKE2b-256 checksum
How to use checksums
33c132da5cddf6bb1eec52f72300a8f2f40e01ac8e9d457d964e630d14b473e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp39-cp39-win_amd64.whl

Download URL kmp_util-1.0.3-cp39-cp39-win_amd64.whl
Size 8.4 kB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
e97dad39d463c22bcee9f9976c7acdaeedb4f38b9553b22e3a64bcdf85522980
BLAKE2b-256 checksum
How to use checksums
21f60c1b6b3ec48c3f3d4a87d66506ad2a2364d32c2b2813cfb6937a574f6aa1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp39-cp39-win32.whl

Download URL kmp_util-1.0.3-cp39-cp39-win32.whl
Size 8.2 kB
Tags CPython 3.9 Windows x86-32
SHA-256 checksum
How to use checksums
8bd725bc64973fe0facd3543e98916af608ec641e858f92ebdbe16e921c08758
BLAKE2b-256 checksum
How to use checksums
cb42542c397b17715b58f794a0236909d3f18c71191f44fba629734df93db9ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp38-cp38-win_amd64.whl

Download URL kmp_util-1.0.3-cp38-cp38-win_amd64.whl
Size 8.4 kB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
53870179e24efa905402a55189cb5903b8980a7f8e658389dc09fb504b7d48dc
BLAKE2b-256 checksum
How to use checksums
20ea76c72d70ee058ecb2b44deeab8eec7da5ed39484dfc65800c7f5ab8388df
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp38-cp38-win32.whl

Download URL kmp_util-1.0.3-cp38-cp38-win32.whl
Size 8.2 kB
Tags CPython 3.8 Windows x86-32
SHA-256 checksum
How to use checksums
3de8a530632986c1b01b38f8f9e462e87a45733a6fe1f9555a299961238c3b55
BLAKE2b-256 checksum
How to use checksums
0e0912ef880c916d75550d5435ed2cf9fd807fcfdf1c82fdc3cd0b8765b823b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp37-cp37m-win_amd64.whl

Download URL kmp_util-1.0.3-cp37-cp37m-win_amd64.whl
Size 8.4 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
e5c99ed93eac31c58111ac8fca72b11728bfcc82d546b5fb42eacb16fbb5219b
BLAKE2b-256 checksum
How to use checksums
e797f4683a86661ea546a3befc1dc08528cef8b3f38a1c8a612d0f97e30a71f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp37-cp37m-win32.whl

Download URL kmp_util-1.0.3-cp37-cp37m-win32.whl
Size 8.1 kB
Tags CPython 3.7 CPython 3.7 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
dc26b2af6713dd16d8e7304056090c28d616793b6f76a16a50b48644d9c324ea
BLAKE2b-256 checksum
How to use checksums
661462521ecf4a76f83fbe643480eb02198c2c1bc8ee4a24e3e0dfa4b7b2c28a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp36-cp36m-win_amd64.whl

Download URL kmp_util-1.0.3-cp36-cp36m-win_amd64.whl
Size 8.4 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
730cc61ab3e3845048ba2d99be9c2f23ce926432e89c08e07d42095740bcff13
BLAKE2b-256 checksum
How to use checksums
e20268008910ec41ec84857465753fac274016cc8d68cc4911e3c8d376d88e30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp36-cp36m-win32.whl

Download URL kmp_util-1.0.3-cp36-cp36m-win32.whl
Size 11.6 kB
Tags CPython 3.6 CPython 3.6 pymalloc Windows x86-32
SHA-256 checksum
How to use checksums
99f541f5f25d5ab7dd0695e5d4e389e7d01c6e323134543770df6a5b951cdf45
BLAKE2b-256 checksum
How to use checksums
ae38d55c512d7779d3c9febca4f6e8380c6ec5a650fe50605d9247ccd610c3aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / kmp_util-1.0.3-cp35-cp35m-win_amd64.whl

Download URL kmp_util-1.0.3-cp35-cp35m-win_amd64.whl
Size 8.4 kB
Tags CPython 3.5 CPython 3.5 pymalloc Windows x86-64
SHA-256 checksum
How to use checksums
4b7991620c9d29c14532661853feefc56634562ba0ce54bc8d458c225b2683a0
BLAKE2b-256 checksum
How to use checksums
d35d9ceeefcd73fb637d2d5c06c53a884b1d29f0653098c22904bd0aa7e72634
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Security for kmp-util 1.0.3

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.3 This release

27 release files No provenance

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