Skip to main content

Fast MySQL driver build in Cython (Sync and Async).

Project description

Fast MySQL driver build in Cython (Sync and Async).

Created to be used in a project, this package is published to github for ease of management and installation across different modules.

Installation

Install from PyPi

pip install sqlcycli

Install from github

pip install git+https://github.com/AresJef/SQLCyCli.git

For Linux systems, if you encounter the following error when installing the SQLCyCli dependency mysqlclient:

Exception: Can not find valid pkg-config name.
Specify MYSQLCLIENT_CFLAGS and MYSQLCLIENT_LDFLAGS env vars manually

Try the following to fix dependency issue (source: Stack Overflow):

sudo apt-get install pkg-config python3-dev default-libmysqlclient-dev build-essential

Requirements

  • Python 3.10 or higher.
  • MySQL 5.5 or higher.

Features

  • Written in Cython for optimal performance (especially for SELECT/INSERT query).
  • All classes and methods are well documented and static typed.
  • Supports both Sync and Async connection to the server.
  • API Compatiable with PyMySQL and aiomysql.
  • Support conversion (escape) for most of the native python types, and objects from libaray numpy and pandas. Does NOT support custom conversion (escape).

Benchmark

The following result comes from benchmark:

  • Device: MacbookPro M1Pro(2E8P) 32GB
  • Python: 3.12.4
  • MySQL: 8.3.0
  • mysqlclient: 2.2.4
  • PyMySQL: 1.1.1
  • aiomysql: 0.2.0
  • asyncmy: 0.2.9
# Unit: second | Lower is better
name        type    rows    insert-per-row  insert-bulk select-per-row  select-all
mysqlclient sync    50000   1.730551        0.417242    1.738128        0.119030
SQLCyCli    sync    50000   2.342858        0.291653    2.491601        0.063667
PyMySQL     sync    50000   2.759374        0.424672    4.538553        0.328897
SQLCyCli    async   50000   3.619818        0.292900    4.608713        0.143482
aiomysql    async   50000   3.762054        0.404407    5.547093        0.331927
asyncmy     async   50000   4.026993        0.416270    5.996335        0.324749
# Unit: second | Lower is better
name        type    rows    update-per-row  update-all  delete-per-row  delete-all
mysqlclient sync    50000   1.823490        0.349495    1.585233        0.108128
SQLCyCli    sync    50000   2.478617        0.357437    2.240017        0.111638
PyMySQL     sync    50000   2.845172        0.358968    2.533066        0.111986
SQLCyCli    async   50000   3.651250        0.363093    3.625302        0.110497
aiomysql    async   50000   3.880559        0.358837    3.671028        0.105743
asyncmy     async   50000   3.999616        0.361256    3.801010        0.106062

Usage

Use connect() to create one connection (Sync or Async) to the server.

import asyncio
import sqlcycli

HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "password"

# Synchronous Connection
def test_sync_connection() -> None:
    with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:
        with conn.cursor() as cur:
            cur.execute("SELECT 1")
            res = cur.fetchone()
            assert res == (1,)
    # Connection closed
    assert conn.closed()

# Asynchronous Connection
async def test_async_connection() -> None:
    async with sqlcycli.connect(HOST, PORT, USER, PSWD) as conn:
        async with conn.cursor() as cur:
            await cur.execute("SELECT 1")
            res = await cur.fetchone()
            assert res == (1,)
    # Connection closed
    assert conn.closed()

if __name__ == "__main__":
    test_sync_connection()
    asyncio.run(test_async_connection())

Use create_pool() to create a Pool for managing and maintaining Async connections to the server.

import asyncio
import sqlcycli

HOST = "localhost"
PORT = 3306
USER = "root"
PSWD = "password"

# Pool (Context Manager: Connected)
async def test_pool_context_connected() -> None:
    async with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:
        # Pool is connected: 1 free connection (min_size=1)
        assert not pool.closed() and pool.free == 1
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute("SELECT 1")
                res = await cur.fetchone()
                assert res == (1,)
    # Pool closed
    assert pool.closed() and pool.total == 0

# Pool (Context Manager: Disconnected)
async def test_pool_context_disconnected() -> None:
    with sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1) as pool:
        # Pool is not connected: 0 free connection (min_size=1)
        assert pool.closed() and pool.free == 0
        # Connect automatically
        async with pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute("SELECT 1")
                res = await cur.fetchone()
                assert res == (1,)
        # 1 free connection
        assert pool.free == 1
    # Pool closed
    assert pool.closed() and pool.total == 0

# Pool (Create Directly: Connected)
async def test_pool_direct_connected() -> None:
    pool = await sqlcycli.create_pool(HOST, PORT, USER, PSWD, min_size=1)
    # Pool is connected: 1 free connection (min_size=1)
    assert not pool.closed() and pool.free == 1
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute("SELECT 1")
            res = await cur.fetchone()
            assert res == (1,)
    # Close pool manually
    await pool.close()
    assert pool.closed() and pool.total == 0

if __name__ == "__main__":
    asyncio.run(test_pool_context_connected())
    asyncio.run(test_pool_context_disconnected())
    asyncio.run(test_pool_direct_connected())

Acknowledgements

SQLCyCli is build on top of the following open-source repositories:

SQLCyCli is based on the following open-source 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

sqlcycli-1.0.4.tar.gz (2.6 MB view details)

Uploaded Source

Built Distributions

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

sqlcycli-1.0.4-cp312-cp312-win_arm64.whl (3.7 MB view details)

Uploaded CPython 3.12Windows ARM64

sqlcycli-1.0.4-cp312-cp312-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.12Windows x86-64

sqlcycli-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.12musllinux: musl 1.1+ x86-64

sqlcycli-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.4-cp312-cp312-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

sqlcycli-1.0.4-cp312-cp312-macosx_10_9_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

sqlcycli-1.0.4-cp312-cp312-macosx_10_9_universal2.whl (5.5 MB view details)

Uploaded CPython 3.12macOS 10.9+ universal2 (ARM64, x86-64)

sqlcycli-1.0.4-cp311-cp311-win_arm64.whl (3.7 MB view details)

Uploaded CPython 3.11Windows ARM64

sqlcycli-1.0.4-cp311-cp311-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.11Windows x86-64

sqlcycli-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl (11.6 MB view details)

Uploaded CPython 3.11musllinux: musl 1.1+ x86-64

sqlcycli-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.4-cp311-cp311-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

sqlcycli-1.0.4-cp311-cp311-macosx_10_9_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

sqlcycli-1.0.4-cp311-cp311-macosx_10_9_universal2.whl (5.5 MB view details)

Uploaded CPython 3.11macOS 10.9+ universal2 (ARM64, x86-64)

sqlcycli-1.0.4-cp310-cp310-win_arm64.whl (3.7 MB view details)

Uploaded CPython 3.10Windows ARM64

sqlcycli-1.0.4-cp310-cp310-win_amd64.whl (3.9 MB view details)

Uploaded CPython 3.10Windows x86-64

sqlcycli-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl (10.8 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

sqlcycli-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

sqlcycli-1.0.4-cp310-cp310-macosx_11_0_arm64.whl (4.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

sqlcycli-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl (4.1 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

sqlcycli-1.0.4-cp310-cp310-macosx_10_9_universal2.whl (5.5 MB view details)

Uploaded CPython 3.10macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file sqlcycli-1.0.4.tar.gz.

File metadata

  • Download URL: sqlcycli-1.0.4.tar.gz
  • Upload date:
  • Size: 2.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.4.tar.gz
Algorithm Hash digest
SHA256 291d2f7867cb43326fafdc0a4c5cacba7251d3bbb15e60637abbf8e057235187
MD5 91bb6ef750494a2885d9d313a8bd0ccb
BLAKE2b-256 cf9aeb630e5c35501b18d8c405b6a9c66086dec41f3f303347f527e73dcd947d

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp312-cp312-win_arm64.whl.

File metadata

  • Download URL: sqlcycli-1.0.4-cp312-cp312-win_arm64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.12, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.4-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 00430a61e7aee024b0654cfb29826f5def65086b9381943864d3d210f6161eea
MD5 cd4602b445c360ad401d4453c27ec8d7
BLAKE2b-256 c804a6d86fac63b272b88cccb9b7bb563bd32b9558559f1cb749c87ac78d24bf

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: sqlcycli-1.0.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 696365bad43baa7cd637a0c84c16f8f4aa0609ba427b772a08ee3ec0ee0b74bd
MD5 d3141be77faeabdba35c5ba8f6ec1d58
BLAKE2b-256 246a30c8754b9c047f3e636ec91f652986d90b5b455e9fd9504a29554bf8e863

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp312-cp312-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 271d8e26f7242b930f643b44689b4dcee139d813ffc960687bc91887258cf2d4
MD5 346c5394794812458d0e22809dee4a7b
BLAKE2b-256 a901c286cf1a42fad84dc03bbc8d6e945820d43349365346f1804533e1f5d51e

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 28ed1b0160f6b15985f5b478a6f48bab1f175e9e492491dfafc9b33e30314922
MD5 6233eb727966bae3af13c6f9f6fdf014
BLAKE2b-256 1d078958a4d35f558eb8cdf81bc635f0c7b2e0560d2ea4df4e8f81b106bc04de

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b4815a301a65f102455373b069e76d74e7254839046a7f84d3635cd82f4203d
MD5 00de9c630fea7e16c12b11f6e06d89b7
BLAKE2b-256 f99f7958d6d351e847c5c06c2dde9235daef4388a66273d690e1c69ae21fa848

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 dd64bb21c891564bd481467b26353302a4c9572f6caf4290cdb24b3c1b6accab
MD5 544420490b94f7046b94691ba12039d7
BLAKE2b-256 37e0618456fbd8b268948481ea4b09d7671c3ae69bbb96c95035322d712e5fef

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp312-cp312-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp312-cp312-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 b5abed5094981280fe462899e421f66b11ac6b099dc1b0d88abe369901865450
MD5 0937cdea12b5940009ca200b4562f23c
BLAKE2b-256 9766c329eaf34620c484ea62b1b59ac6062482d18e7c6acc49a6483087c26e3e

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp311-cp311-win_arm64.whl.

File metadata

  • Download URL: sqlcycli-1.0.4-cp311-cp311-win_arm64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.11, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.4-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 42c291ca5c6b6eec0425e49524d13a08479d4ba18d9cbc80e3834e7dc4ef6203
MD5 d3951d447784bd3250d57017d8e8094d
BLAKE2b-256 da303f57f87a81521d777ce9bea88f1a2145de9d43f610b1c8d344ad8a149402

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: sqlcycli-1.0.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 7a2b11bb255727baf188e9685c2cec1a21669b022a9f88a4eb2dd5f8fb54ff22
MD5 f97874d7e8d125cc0767a50c6d728c0f
BLAKE2b-256 4b4e6943e39bd30b70b2d058799cb59d4dc233f3daeed52ee402a846f1dec6ad

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 86f575bd7ae03f875c3b514fe4b328496eee1573a270bd7d64b4c4bd7b3e0303
MD5 c35b036842eca7135ca7ce13ad4135f2
BLAKE2b-256 59c7f5aa811cd038cef4ed74759a03c02fc9f444b4d5720f91a7c64ccb965906

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c8aef85d06a23778bd51f049d0f48b586f4cfe0805ba0dd3349f2eebe02b30a
MD5 a798005853dd094fc6889c7200789f73
BLAKE2b-256 d81db06c6d5f0f3789e054ddbf885be2db3eb9e52783bc7393a62472bf25f0b9

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5656866b9b0a77ae16cf7641a1fa219e69a22b2195775f54cd05514b87504baf
MD5 397308075611e9e8348dbf649db040e4
BLAKE2b-256 dc45f6a5b4dc8204360c5a4f3e7220ca00bf39740cd1c0a963d0ea6e72373239

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4bd2bd2678f7976f2daaa3e2f4509656c3d55d51f64811505c5b9c35a37fe82e
MD5 424adfa1500c1d7c31b4478f4e96fd01
BLAKE2b-256 6b28034990ea396b7567d86ecd3482d816fc0ef5b0efcb1647713d29050ad744

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c41137b473a91769ad1f1aa467afc78a295210de51020373ad665a3f2f145ef7
MD5 a7597ca015f22e3187c2eb4715a6c8b7
BLAKE2b-256 77aca24ea757b5e69a84dd052cd9599ea4ad690c48c66d3919ab396828e543a3

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp310-cp310-win_arm64.whl.

File metadata

  • Download URL: sqlcycli-1.0.4-cp310-cp310-win_arm64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.10, Windows ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.4-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 308ad5ab736a80b97c6572c258bbd0f6bf85c983277e5c68767809c0a68b93fd
MD5 e87215873d00b581aa1534c39b287380
BLAKE2b-256 222b7dd78796bad5e838cd8c011ed22965f60275abc54e5729f4a78fa4d07df3

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: sqlcycli-1.0.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.9 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for sqlcycli-1.0.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 85fd09fbf26ec1dc06b36dd72634e32ae8ac0a944819fb0b0d2783f2b202a447
MD5 d3dcbd4d3a879ba9fe8d9b1276b256c2
BLAKE2b-256 0a55313237226247fb1880061881eddcb7e6f724dc12a981fb092d79195a41b8

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 90cf3c3412e670494eef5122400d4fa443274967c69596bd2000aa27bbf29c86
MD5 8106ac3376f864c44d09cd69586aaa57
BLAKE2b-256 1b9a7a7a7fb8903a95946c75e7e59b1778df99b3c4d4092f36553124ee4a5bb9

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 34d543f6df1cb48c24cedf5f51ae5164a2a44f5bf1070315e96fc88caa60625d
MD5 f758e7cc446a872ea02a45b86529ca35
BLAKE2b-256 1f7e25f4b512f50321fc2bebb4db5d4736fd5df9e6c32bbf24a9fbd956655249

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ac04f9d6ac369d26c4a8fdb3f8e1892b88227233fef43a88eb2a014076645d90
MD5 b04b109df649f112d4d735e22c4a231f
BLAKE2b-256 14af4975a2d0519522f85ee6291f7cba6ca8fb2667d0a770a114ddc73860b435

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1aed17367a834a12fd33ebff37f231d291953c49d623f18aa1922940a7c460f9
MD5 e3c43689047b9de2724c73490dad8f1a
BLAKE2b-256 f6c78b075e83d6d4732d0a1d44c4ccd521fc37e3152587ecff0b77ef90f85b73

See more details on using hashes here.

File details

Details for the file sqlcycli-1.0.4-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for sqlcycli-1.0.4-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 54b04241743d48eb63d9978c85866cdea5b0758cba7493c2ea74e290c7e658a1
MD5 3d52e4f493d1a5ce6c928ac088105be1
BLAKE2b-256 788dbceb887aaed03b8417c6c186a7f098fbac24c0f0c5c12edce55f3ae5f962

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