Skip to main content

Geographic system transformations with helper functions

Project description

transforms84

PyPI - Version PyPI - Python Version PyPI - Downloads workflow-status

Python library for geographic system transformations with additional helper functions.

This package focuses on:

  1. Performance
  2. Support for different matrix shapes:
    • Ideal point shape of (3,1), (nPoints,3,1) (as well as (3,) and (nPoints,3))
    • Separate input array for each axis in the coordinate system of size (nPoints,)
  3. Functions that adapt to differing input matrices shapes: one-to-one, many-to-many and one-to-many points. See below for an example.

Installation

pip install transforms84

Operations

Coordinate Transformations

The following coordinate transformations have been implemented:

Velocity Transformations

The following velocity transformations have been implemented:

  • ECEF โ†’ NED
  • NED โ†’ ECEF
  • ENU โ†’ ECEF
  • ECEF โ†’ ENU

Distances

The following distance formulae have been implemented:

Additional Functions

The following functions have been implemented:

  • Angular difference (smallest and largest)
  • [rad, rad, X] โ†’ [deg, deg, X]
  • [deg, deg, X] โ†’ [rad, rad, X]

Examples

See the Jupyter notebooks in examples to see how to use the transform84. Run pip install transforms84[examples] to run the examples locally.

Many-to-many & one-to-many

The transforms.ECEF2ENU transformation accepts same and differing matrix shape sizes. Below showcases the many-to-many method where three target points, rrm_target, in the geodetic coordinate system are transformed to the local ENU coordinate system about the point rrm_local, where both matrices are of shape (3, 3, 1):

>> import numpy as np
>> from transforms84.systems import WGS84
>> from transforms84.helpers import DDM2RRM
>> from transforms84.transforms import ECEF2ENU, geodetic2ECEF
>>
>> rrm_local = DDM2RRM(
>>     np.array(
>>         [[[30], [31], [0]], [[30], [31], [0]], [[30], [31], [0]]], dtype=np.float64
>>     )
>> )  # convert each point from [deg, deg, X] to [rad, rad, X]
>> rrm_target = DDM2RRM(
>>     np.array(
>>         [[[31], [32], [0]], [[31], [32], [0]], [[31], [32], [0]]], dtype=np.float64
>>     )
>> )
>> ECEF2ENU(
>>     rrm_local, geodetic2ECEF(rrm_target, WGS84.a, WGS84.b), WGS84.a, WGS84.b
>> )  # geodetic2ECEF -> ECEF2ENU
array(
    [
        [[95499.41373564], [111272.00245298], [-1689.19916788]],
        [[95499.41373564], [111272.00245298], [-1689.19916788]],
        [[95499.41373564], [111272.00245298], [-1689.19916788]],
    ]
)

We can achieve the same result using the one-to-many method with a single local point of shape (3, 1):

>> rrm_local_one_point = DDM2RRM(np.array([[30], [31], [0]], dtype=np.float64))
>> ECEF2ENU(rrm_local_one_point, geodetic2ECEF(rrm_target, WGS84.a, WGS84.b), WGS84.a, WGS84.b)
array(
    [
        [[95499.41373564], [111272.00245298], [-1689.19916788]],
        [[95499.41373564], [111272.00245298], [-1689.19916788]],
        [[95499.41373564], [111272.00245298], [-1689.19916788]],
    ]
)

Again, we can achieve the same result by splitting the arrays over each coordiante system axis:

>> rad_lat_target = np.deg2rad(np.array([31, 31, 31], dtype=np.float64))
>> rad_lon_target = np.deg2rad(np.array([32, 32, 32], dtype=np.float64))
>> m_alt_target = np.array([0, 0, 0], dtype=np.float64)
>> rad_lat_origin = np.deg2rad(np.array([30, 30, 30], dtype=np.float64))
>> rad_lon_origin = np.deg2rad(np.array([31, 31, 31], dtype=np.float64))
>> m_alt_origin = np.array([0, 0, 0], dtype=np.float64)
>> ECEF2ENU(
      rad_lat_origin,
      rad_lon_origin,
      m_alt_origin,
      *geodetic2ECEF(rad_lat_target, rad_lon_target, m_alt_target, WGS84.a, WGS84.b),
      WGS84.a,
      WGS84.b,
  )
(
    array([95499.41373564, 95499.41373564, 95499.41373564]),
    array([111272.00245298, 111272.00245298, 111272.00245298]),
    array([-1689.19916788, -1689.19916788, -1689.19916788]),
)

World Geodetic Systems Standards

transforms84.systems includes the WGS84 class, which is the WGS 84 version of the standard. Other standards can be created:

>> from transforms84.systems import WGS, WGS72
>> WGS72 == WGS(6378135.0, 6356750.520016094)
True

Helpful Resources

...in no particular order:

Contributing

PRs are always welcome and appreciated!

After forking the repo install the dev requirements: pip install -e .[dev].

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

transforms84-1.0.0-cp313-cp313-win_amd64.whl (74.0 kB view details)

Uploaded CPython 3.13Windows x86-64

transforms84-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl (409.2 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

transforms84-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (330.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

transforms84-1.0.0-cp312-cp312-win_amd64.whl (74.0 kB view details)

Uploaded CPython 3.12Windows x86-64

transforms84-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl (409.1 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

transforms84-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (331.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

transforms84-1.0.0-cp311-cp311-win_amd64.whl (73.5 kB view details)

Uploaded CPython 3.11Windows x86-64

transforms84-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (403.2 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

transforms84-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (324.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

transforms84-1.0.0-cp310-cp310-win_amd64.whl (73.5 kB view details)

Uploaded CPython 3.10Windows x86-64

transforms84-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl (402.4 kB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

transforms84-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (323.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

transforms84-1.0.0-cp39-cp39-win_amd64.whl (73.5 kB view details)

Uploaded CPython 3.9Windows x86-64

transforms84-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl (401.0 kB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

transforms84-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (322.3 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

transforms84-1.0.0-cp38-cp38-win_amd64.whl (73.3 kB view details)

Uploaded CPython 3.8Windows x86-64

transforms84-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl (358.2 kB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

transforms84-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (279.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

File details

Details for the file transforms84-1.0.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e3fb107edf7b96659429dbd49f3789379404bd8162b838cc952fb1cacf682169
MD5 d5f0496f19a6304cfe0f1367c58f28e0
BLAKE2b-256 04fe7f63cfccfcf07e52ef79c8437ed690d6bc27b6976de33691a10421aba24e

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp313-cp313-win_amd64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5e1865fe025c63f7b90c1f3fe371d143138f3e65cee551f3ef416681051a5e52
MD5 81a483f146eb90fd02a973674787d31e
BLAKE2b-256 e67fb35c55a2bb1e0c97e233e6889e7f01a23ce1e169777ed980d035b3464551

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 49fc83449ce20ff9ccd94b6dcc555f0c943f9c92a78d37bb38b05fb4a687b883
MD5 276273542934221d008cdf731e86e9fd
BLAKE2b-256 69e8f978612bc006ff2873da2fd821b838bb6080610e40a7a3508933ef203c0d

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ec520b3091225d54af22a83ccf63d9040da532890bc703e4b8dbfe34691346ae
MD5 938cc136cecfa0b91c51b4adadee6456
BLAKE2b-256 60e350725afaefd342b48c2a279efd7f3780341f97c8ca3e40739619ace77f9e

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp312-cp312-win_amd64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 99bcd7f759acb8dceed936599d71996e5a9e38076e8dbfc57e9a1802b78658c8
MD5 0365e32e0fb2eb3fcd2508e370bbeff3
BLAKE2b-256 8a20ba30800a728aa1456b28ed13a5e35c90c2e667ee343e4e88e9ea47f234c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0025f6d6d5bba25b1b22b8007088f69f23616852736272b3a742d13cc7452de1
MD5 5e3e93a207e434e3c71c07e0bf11b443
BLAKE2b-256 f546a61e986d59e5c1910d36a467da888200d5ba381a4014b4f29f4df4bfeb92

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ad76951a1f9af5da92836e84ed3220327c780a1f0e23b490ddce5250a8db8ab2
MD5 ddc82ab2281008ccb9161c80480d5f68
BLAKE2b-256 34adaba148c7df350e35137de0ae14414ebd25b0abc4288d40935c698795e428

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp311-cp311-win_amd64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 251694ee9bd4c6f136080b2f5b705a91c0cef1e095ff3396ab5521979aef988b
MD5 ac0466b7e8675cc74389bcdd84bb4d6d
BLAKE2b-256 e46b80e82df44cd8a8d89c98c711591b6fea4b506748283c532fa5f1bf0f8a0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 035c9948618d112c02b668e0fe92c5332d1f57b802d5dca2cc8edb7fadf2ae6c
MD5 0987a5eb93b589d61617ccb8b674bb3f
BLAKE2b-256 55a46c55353c09904b7f7f5cbfceb6dad35bbd2d6f3f3be7789607e5695cd0cf

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 0c35868153c074c295d39a81a10dddfbd0fd17185daae3f426f964a0ee419e09
MD5 bf9a9bc04ec71058bf76840ffc4a2936
BLAKE2b-256 2d6c2256e3afcafec8084db6232263a37f0c3ad8d903a4d191f48e1f1854cd62

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp310-cp310-win_amd64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 b14234bf10b79d75f4d40a80f5cfcae59b7aaec7a079a5272b6b6acd5cf96564
MD5 fde5b1e6273ddad1d2241e71b4ab4826
BLAKE2b-256 c048540ae2eb61da65b49516babb3c7c9e75e9b26c2b0c9b7d18d5e8c905d98a

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1aeedee09a97efd267aa2adbe0392c7ac147c02b928544d45e5ae248b3f9c5f7
MD5 8e0aa828fe70e7995af87478a7a74bc7
BLAKE2b-256 ce8aa43d9a5b8ffafe87b010a2b1e5db5f84a8a16b223dc18f0199aae177d4ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: transforms84-1.0.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 73.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for transforms84-1.0.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 81509441dee80a932a2816822285edc443c1363ab12bdb91915bafafbad89ec5
MD5 0d2bd633a8623e47f8aa88a1cba4c77f
BLAKE2b-256 cf720453eefd0f9cb85bf00f6bac8fa02d8a87109f59ed650f0378ba3b85624d

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp39-cp39-win_amd64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a39971a453f984cd0de01ae43fee5a665a4b87213b12ae6f35d6eb57d7167e35
MD5 eb5d0fa56b233a8a36c96635e52c4351
BLAKE2b-256 7b6be4adff06b9e84e6df0dd05e7e3430a98eea4d929e3490c3a3f5572e39bd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 93e163c703da376aa6f54471c63c81d6ff25952c85cdb24723a638e30d7db72f
MD5 3b64efd1f70b628f631080eb29fbbee7
BLAKE2b-256 3a8991d8f8e69d4824590ec960ebc8bc3ef314c5ead61674543477d1eb4ac421

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: transforms84-1.0.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 73.3 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for transforms84-1.0.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e5d55e7a237a9f445c067b208189e5ca8caea4ea2a7594f7abd216e85cb866ce
MD5 5b2cbbb6bc98ba770e69fa111be20490
BLAKE2b-256 949a81fb9c9b81669b8fd3b35a53a07142cc2a01d40373af57c2eef514a80c1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp38-cp38-win_amd64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 dbcc6a367e4b3984203e0b9ed78a00abf8acaef4c3dfe13f831f0f5c071495a5
MD5 d277e8ed04d38bfd8317f36ead8c2445
BLAKE2b-256 ae62f6996f879cfedc36c28eaacd2dbf02f8da62af0fc2e640f72627d939cf1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp38-cp38-musllinux_1_2_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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

File details

Details for the file transforms84-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for transforms84-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3fc0470e3bd486446b04b9f1883bea7cc15d0471da1a8c1bb0ee024516c1f33f
MD5 cfad38b04747143f3a63f84f5a0265a6
BLAKE2b-256 63e711b633347216fbfc81ae59803176b0f3265b45d0127e046c6e8f1fc69024

See more details on using hashes here.

Provenance

The following attestation bundles were made for transforms84-1.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-to-pypi.yml on Stoops-ML/transforms84

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