Skip to main content

No project description provided

Project description

farm-ng-core

farm-ng-core

Foundational library for robotics and machine sensing application under active development


for c++, python and soon rust - under active development


👟Getting Started

Check out the getting-started docs:

here

or

here

Core layer

Convenient macros such as FARM_ENUM, FARM_ASSERT_* and FARM_UNWRAP.

Standard Library-like genera purpose utilities.

farm-ng-core only has a small set of dependencies: libfmt, expected (both being targeted for c++ standardization) and Protocol Buffers / GRPC.

Sophus 2: Building Blocks for 2D and 3D Geometry

Sophus started as a c++ implementation of Lie Groups / Manifolds. It evolved to a collection of types and functions commonly used or 2d and 3d geometric problems especially in the domain of robotics, computer vision annd graphics.

🌐Lie Groups

tldr: rotations, translations and scaling in 2d and 3d

Lie groups are generalizations of the Euclidean vector spaces R^N. A little more formally, a Manifold which is also an abstract group.

Okay, and what is a Manifold?

Manifold are generalizations of the Euclidean vector spaces R^N. In particular, they behave locally like a Euclidean vector space, but globally can have a very different structures. In particular there can be wrap-around. The circle group SO(2) is the simplest example for such wrap around. Assume, we have a dial pointing North. If you turn the dial 90 degree to the left, it points West. If you turn it another 90 degrees it turns South. Now, if you turn it again 90 degrees is points East. And you turn it left again for 90 degrees it points North again. It wrapped around: 90 "+" 90 "+" 90 "+" 90 = 0.

3d rotation example using the SO(3) type

  // The following demonstrates the group multiplication of rotation matrices

  // Create rotation matrices from rotations around the x and y and z axes:
  double const kPi = sophus::kPi<double>;
  sophus::Rotation3F64 R1 = sophus::Rotation3F64::fromRx(kPi / 4);
  sophus::Rotation3F64 R2 = sophus::Rotation3F64::fromRy(kPi / 6);
  sophus::Rotation3F64 R3 = sophus::Rotation3F64::fromRz(-kPi / 3);

  std::cout << "The rotation matrices are" << std::endl;
  std::cout << "R1:\n" << R1.matrix() << std::endl;
  std::cout << "R2:\n" << R2.matrix() << std::endl;
  std::cout << "R3:\n" << R3.matrix() << std::endl;
  std::cout << "Their product R1*R2*R3:\n"
            << (R1 * R2 * R3).matrix() << std::endl;
  std::cout << std::endl;

  // Rotation matrices can act on vectors
  Eigen::Vector3d x;
  x << 0.0, 0.0, 1.0;
  std::cout << "Rotation matrices can act on 3-vectors" << std::endl;
  std::cout << "x\n" << x << std::endl;
  std::cout << "R2*x\n" << R2 * x << std::endl;
  std::cout << "R1*(R2*x)\n" << R1 * (R2 * x) << std::endl;
  std::cout << "(R1*R2)*x\n" << (R1 * R2) * x << std::endl;
  std::cout << std::endl;

  // SO(3) are internally represented as unit quaternions.
  std::cout << "R1 in matrix form:\n" << R1.matrix() << std::endl;
  std::cout << "R1 in unit quaternion form:\n"
            << R1.unitQuaternion().coeffs() << std::endl;
  // Note that the order of coefficients of Eigen's quaternion class is
  // (imag0, imag1, imag2, real)
  std::cout << std::endl;

3d rotation + translation example using the SE(3) type

  // Example of create a rigid transformation from an SO(3) = 3D rotation and a
  // translation 3-vector:

  // Let use assume there is a camera in the world. First we describe its
  // orientation in the world reference frame.
  sophus::Rotation3F64 world_from_camera_rotation =
      sophus::Rotation3F64::fromRx(sophus::kPi<double> / 4);
  // Then the position of the camera in the world.
  Eigen::Vector3d camera_in_world(0.0, 0.0, 1.0);

  // The pose (position and orientation) of the camera in the world is
  // constructed by its orientation ``world_from_camera_rotation`` as well as
  // its position ``camera_in_world``.
  sophus::Isometry3F64 world_anchored_camera_pose(
      world_from_camera_rotation, camera_in_world);

  // SE(3) naturally representation is a 4x4 matrix which can be accessed using
  // the .matrix() method:
  std::cout << "world_anchored_camera_pose:\n"
            << world_anchored_camera_pose.matrix() << std::endl;

Table of Lie Groups

The following table gives an overview of all Lie Groups in Sophus.

c++ type Lie group name Description
Rotation2<T> Special Orthogonal Group in 2D, SO(2) rotations in 2d, also called Circle Group, or just "angle"
Rotation3<T> Special Orthogonal Group in 3D, SO(3) rotations in 3d, 3D orientations
Isometry2<T> Special Euclidean Group in 2D, SE(3) rotations and translations in 2D, also called 2D rigid body transformations, 2d poses, plane isometries
Isometry3<T> Special Euclidean Group in 3D, SE(3) rotations and translations in 3D, also called rigid body transformations,6 DoF poses, Euclidean isometries
RxSo2<T> Direct product of SO(3) and scalar matrix, R x SO(2) scaling and rotations in 2D
RxSo3<T> Direct product of SO(3) and scalar matrix R x SO(3) scaling and rotations in 3D
Similarity2<T> Similarity Group in 2D, Sim(2) scaling, rotations and translation in 2D
Similarity3<T> Similarity Group in 3D, Sim(3) scaling, rotations and translation in 3D
Cartesian2<T> 2D Euclidean Vector Space, R^2 all vector spaces are trivial Lie groups, also called 2d translation group, the translation part of SE(2)
Cartesian3<T> 3D Euclidean Vector Space, R^3 all vector spaces are trivial Lie groups, also called 3d translation group, the translation part of SE(2)

Supported advanced features on Lie groups:

  • ✅ (linear) interpolation
  • ✅ Spline interpolation
  • ✅ Averaging (of more than two elements)

🌁Image classes, Sensor Models and more

Image Classes: Image, MutImage, DynImage, MutDynImage and view classes.

Collection of camera models (pinhole, brown-conrady aka opencv, kannala-brandt and orthographic), IMU mode and more.

Component Pipeline

C++ Component pipeline (aka actor framework) for easy parallelization of data processing pipelines.

Logging/Serialization Infrastructure

  • Text Logging

  • Protobuf Logging

  • RPCs

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

farm_ng_core-2.3.2.tar.gz (60.3 kB view details)

Uploaded Source

Built Distributions

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

farm_ng_core-2.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (436.6 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

farm_ng_core-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (574.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

farm_ng_core-2.3.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (600.0 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ i686

farm_ng_core-2.3.2-cp312-cp312-macosx_11_0_x86_64.whl (354.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ x86-64

farm_ng_core-2.3.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (437.7 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

farm_ng_core-2.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (574.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

farm_ng_core-2.3.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (607.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ i686

farm_ng_core-2.3.2-cp311-cp311-macosx_11_0_x86_64.whl (351.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ x86-64

farm_ng_core-2.3.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (436.5 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

farm_ng_core-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (572.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

farm_ng_core-2.3.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (606.7 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ i686

farm_ng_core-2.3.2-cp310-cp310-macosx_11_0_x86_64.whl (350.2 kB view details)

Uploaded CPython 3.10macOS 11.0+ x86-64

farm_ng_core-2.3.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (436.7 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

farm_ng_core-2.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (573.1 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

farm_ng_core-2.3.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (607.0 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ i686

farm_ng_core-2.3.2-cp39-cp39-macosx_11_0_x86_64.whl (350.3 kB view details)

Uploaded CPython 3.9macOS 11.0+ x86-64

farm_ng_core-2.3.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl (435.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.27+ ARM64manylinux: glibc 2.28+ ARM64

farm_ng_core-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (572.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

farm_ng_core-2.3.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (606.6 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ i686

farm_ng_core-2.3.2-cp38-cp38-macosx_11_0_x86_64.whl (350.0 kB view details)

Uploaded CPython 3.8macOS 11.0+ x86-64

File details

Details for the file farm_ng_core-2.3.2.tar.gz.

File metadata

  • Download URL: farm_ng_core-2.3.2.tar.gz
  • Upload date:
  • Size: 60.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for farm_ng_core-2.3.2.tar.gz
Algorithm Hash digest
SHA256 40fa7aea04ecdbba869bfc224f0c74fa6f4b60b2341d7795e0a67de8e1dffd27
MD5 41bf74a0e3b567163b84b162964c6a21
BLAKE2b-256 f28cc6b9f52cf59a7ce1ec465e50e65ef7b32e6f515aef4d9901b034476c3a82

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4ee99982913b47a8355c2926e30f08b0c71bd10071e63233f7fdba0f74bd8919
MD5 19eb4df06b2b8a35ea39f5cf818b7975
BLAKE2b-256 c42c7fd73bd17656dbf53b2e492bfc7972112f67b192e220885cd0dc7b238806

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4afdf1abeb2e439d257b149621876bf70e1bf11f5dc51c3aa1a8dc56c3c10668
MD5 92dc91840ba1f62832c78fb93164da9c
BLAKE2b-256 70d54e72aeaeb646ef61378143b6c674dfe349277e983a5109c1e81e5bbfe685

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 86304c108cf93ae5a58193b768af78a0960b404282af2992bd6c5730d8fedcbd
MD5 52b002bfcc286c4fdc3c483c8c2042b8
BLAKE2b-256 706e9460df4fd5ea6d20536f39466380710387d66bdec067c387debc141eda9b

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp312-cp312-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp312-cp312-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 840181c20420f55c9894581eecfd5ae3cb625e225a5e7f6c09a04f962ac27244
MD5 dedbd518d04d3c0917423bdd0ba1b106
BLAKE2b-256 6a8e762e11c63c8a8a3a121146227f057606155e24d0d4b19111890b8d7bc3ef

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f6ae0aafecc459fabb5409ee9d5da49e5452867ab170a675c94deea0431cb7ae
MD5 e59791be3eee152d515a2bcc54e3742d
BLAKE2b-256 01beb2a17cd0bd888b19d135b11057cc0ed373246959e8750def795cbf877095

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 81bc6a430a9546fa93fbfd2c2a485d977f58b1c314caa2a5b55476c29f86571d
MD5 ad6966b68332561ccb02b7dbdcde2dcd
BLAKE2b-256 ba775a605b77c7a77b3505eef3082efc7e1c6e73e056adc49e924a01ad8f12fc

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a38243e581ac07d8ec6c29bf79c82d0424be28312a07e412f479b663eeaa8f27
MD5 cc498754cf601ec33e2a90cd7a456b9f
BLAKE2b-256 7154271928df7515b356f2421053572cffb83a581c3aefdd72afcb12b3655374

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp311-cp311-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp311-cp311-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 254eff862440544f11e8532e956a10f9e67844d121dc606f50b1e00ab85965b3
MD5 deae73b7cb324f2d0b1dcf0d3b57a128
BLAKE2b-256 84d18450b6fffb194e454732ab2bd6a343480cf2a5c73bcf6e6336429bd86d93

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 67662887501e21f0d447bcca920183bc129d9921e10739e8a3ddb7ed4a360daf
MD5 09103487351bdc1ef7aee7524e4a7643
BLAKE2b-256 214de7a7847023124efde168f9ae84bc357626f9a600c3cd774fcb0b971ff688

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7d7ad89282b0861d056a761c43f4f26e0751f34a5cfb015dd2a1ce635e0da2e5
MD5 c4fa40bebf9526b8c217b1e8d9d710d4
BLAKE2b-256 9577fa0d3853af30717de85945b60505f018d52c3921bee5e02ee4be9bb0dba4

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6a1581419ed64a7b6ec6a73d241f8435c7a1929e4690af8614b92df0ba802ef7
MD5 674dde57f0ead1bff3cdc1f48e53a27c
BLAKE2b-256 63922b9a0debee193d09e77136bc3f83ee11f3469f03667a7fc041151326cb0f

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp310-cp310-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp310-cp310-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 1d1f66cd4922c9caa9cd5aa83d1b3d0afe98a7ee310f53383e9bb3f4fb10beb7
MD5 e50243c278834bf66a622bdb700416e0
BLAKE2b-256 ae13b9283a8770a3b513598293421e5b67e5cc62c5d3d4e5e64fca8f36498781

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 2bad8e6c0cf8dbfabfa34d04972decee2e20b46459168af5283ff986767ba8b4
MD5 4e3b57faea66ee1ba8d08625ced1d8b9
BLAKE2b-256 325525a8644ccf94961b7b359a35a217ae06100f17122efcaed0682009897134

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 20672d5bd40b9de615406bc99f02ded1aa92046ad9ab0ef6d4ce1135c5f766c9
MD5 f8113a1771b0b1b1d09b392ac4311209
BLAKE2b-256 6d302b1fee84f4523b022328f0dd342008124402f33058e976c9c9b5f354f35f

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3f0abd4faa098cdc88634f39114b5c21feac8cafe99005b3a4103502f5b4eeef
MD5 d91f4228964423f5e38f4783a0801530
BLAKE2b-256 e0833f6c8fec089d42adbdf0672b180b3c8580900a5f9801e3940f13411bedbd

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d5b9de362d8f7a1b1f2b2981d1fac70c5dc8e39bea6bdad1e6866faa43c2f9ee
MD5 41992132b0fe7453d0d359f66b63425c
BLAKE2b-256 5c09f6ba81ea047ddf749412e3ce09418ea3ba20789297e51201c49e1bd09661

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b68f2023135804f854f3e605c604c806bbfbc5faaf8f400c7506c14abaa5d885
MD5 3cbdb79e7575cd35b7255476fd98b2f4
BLAKE2b-256 2b130d44cc1627bb6e5c2ffa07c187c4fd2532c65a0acea13801d85f68aff68b

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 62a97f61d931fe76b4c3b885c3489d0784a5d4ed6736927c84452f766ce979b8
MD5 7cb215d1f8a1b5a9dbafc43ac1d75872
BLAKE2b-256 98e4e5a241fff6c7e763d653ae4134e167d8a5794389b8ed9d53e0feb1fefbed

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 f8afb0b9e09560cbcb75e9942bd35c4014a84211e3bbfa111bc7995b54d2fb16
MD5 1dcd713c0424beb9feeb7260298e5ac7
BLAKE2b-256 a0e8a6df7dd33151040ec94d34c72c7d59fffe7bb8c14ef008f5c795e98a7cbd

See more details on using hashes here.

File details

Details for the file farm_ng_core-2.3.2-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for farm_ng_core-2.3.2-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 6bb4df376deed96fe56961b5c7649f32a4b5415cb4c4a87f2d3ccb3d21f95354
MD5 8684699ce8ba3e04c2b563b0a40164eb
BLAKE2b-256 3b659bc02ca9c5b3bdffdd5b352233b703ae1da17baad3cd9c3501c0398d088b

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