Skip to main content

ASE-compatible Python bindings for the QUIP and GAP codes

Project description

QUIP - QUantum mechanics and Interatomic Potentials

Build Status build Docker Pulls

The QUIP package is a collection of software tools to carry out molecular dynamics simulations. It implements a variety of interatomic potentials and tight binding quantum mechanics, and is also able to call external packages, and serve as plugins to other software such as LAMMPS, CP2K and also the python framework ASE. Various hybrid combinations are also supported in the style of QM/MM, with a particular focus on materials systems such as metals and semiconductors.

For more details, see the online documentation. There is separate documentation for SOAP and GAP.

Long term support of the package is ensured by:

  • Noam Bernstein (@bernstei, Naval Research Laboratory)
  • Gabor Csanyi (@gabor1, University of Cambridge)
  • James Kermode (@jameskermode, University of Warwick)

Portions of this code were written by: Albert Bartok-Partay, Livia Bartok-Partay, Federico Bianchini, Anke Butenuth, Marco Caccin, Silvia Cereda, Gabor Csanyi, Alessio Comisso, Tom Daff, ST John, Chiara Gattinoni, Gianpietro Moras, James Kermode, Letif Mones, Alan Nichol, David Packwood, Lars Pastewka, Giovanni Peralta, Ivan Solt, Oliver Strickson, Wojciech Szlachta, Csilla Varnai, Steven Winfield, Tamas K Stenczel, Adam Fekete.

Copyright 2006-2021.

Most of the publicly available version is released under the GNU General Public license, version 2, with some portions in the public domain. The GAP code, included as a submodule, is distributed under a non-commerical academic source license

Citing QUIP, quippy and GAP

Please cite the following publication if you use QUIP:

@ARTICLE{Csanyi2007-py,
  title   = "Expressive Programming for Computational Physics in Fortran 95+",
  author  = "Cs{\'a}nyi, G{\'a}bor and Winfield, Steven and Kermode, J R and De
             Vita, A and Comisso, Alessio and Bernstein, Noam and Payne,
             Michael C",
  journal = "IoP Comput. Phys. Newsletter",
  pages   = "Spring 2007",
  year    =  2007
}

If you use the quippy Python interface, please cite:

@ARTICLE{Kermode2020-wu,
  title    = "f90wrap: an automated tool for constructing deep Python
              interfaces to modern Fortran codes",
  author   = "Kermode, James R",
  journal  = "J. Phys. Condens. Matter",
  month    =  mar,
  year     =  2020,
  keywords = "Fortran; Interfacing; Interoperability; Python; Wrapping codes;
              f2py",
  language = "en",
  issn     = "0953-8984, 1361-648X",
  pmid     = "32209737",
  doi      = "10.1088/1361-648X/ab82d2"
}

If you use the GAP code please cite

@ARTICLE{Bartok2010-pw,
  title    = "Gaussian approximation potentials: the accuracy of quantum
              mechanics, without the electrons",
  author   = "Bart{\'o}k, Albert P and Payne, Mike C and Kondor, Risi and
              Cs{\'a}nyi, G{\'a}bor",
  journal  = "Phys. Rev. Lett.",
  volume   =  104,
  number   =  13,
  pages    = "136403",
  month    =  apr,
  year     =  2010,
  issn     = "0031-9007, 1079-7114",
  pmid     = "20481899",
  doi      = "10.1103/PhysRevLett.104.136403"
}

Features

The following interatomic potentials are presently coded or linked in QUIP:

  • BKS (van Beest, Kremer and van Santen) (silica)
  • EAM (fcc metals)
  • Fanourgakis-Xantheas (water)
  • Finnis-Sinclair (bcc metals)
  • Flikkema-Bromley
  • GAP (Gaussian Approximation Potentials) with (growing...) online documentation
  • Guggenheim-McGlashan
  • Brenner (carbon)
  • OpenKIM (general interface)
  • Lennard-Jones
  • MBD (many-body dispersion correction)
  • Morse
  • Partridge-Schwenke (water monomer)
  • Stillinger-Weber (carbon, silicon, germanium)
  • SiMEAM (silicon)
  • Sutton-Chen
  • Tangney-Scandolo (silica, titania etc)
  • Tersoff (silicon, carbon)
  • Tkatchenko-Sheffler pairwise dispersion correction

The following tight-binding functional forms and parametrisations are implemented:

  • Bowler
  • DFTB
  • GSP
  • NRL-TB

The following external packages can be called:

  • CASTEP
  • VASP
  • CP2K
  • ASAP
  • Molpro
  • ASE (required if using quippy Python interface; latest version recommended)

Code philosophy and goals

QUIP was born because of the need to efficiently tie together a wide variety of different models, both empirical and quantum mechanical. It will not be competitive in terms of performance with codes such as LAMMPS and Gromacs. The Atomic Simulation Environment also does this, and is much more widely used, but QUIP has a number of unique features:

  • Access to Fortran types and routines from Python via the quippy package
  • Support for Gaussian Approximation Potentials (GAP) - online docs
  • Does not assume minimum image convention, so interatomic potentials can have cutoffs that are larger than the periodic unit cell size

Binary Installation of QUIP and quippy

Binary for QUIP and the associated quippy Python bindings that provide interopability with the Atomic Simulation Environment (ASE) are available from the Python package index (PyPI) under the package name quippy-ase. This means you can install the latest release with:

pip install quippy-ase

Installing via pip also makes the quip and gap_fit command line programs available (providing the directory that pip installs scripts to is on your PATH).

Currently, wheels are available for x86_64 architectures with Python 3.6+ on macOS and glibc-based Linux distributions (e.g. Ubuntu, CentOS) and for macOS arm64. The wheels are updated periodically using GitHub Actions CI. Please open issues here if you have problems installing with pip.

Precompiled Containers

If you have access to Docker or Singularity, you can try one of the precompiled images to get up and running quickly.

Compilation Instructions

  1. To compile QUIP the minimum requirements are:

    • A working Fortran compiler. QUIP is tested with gfortran 4.4 and later, and ifort 11.1.

    • Linear algebra libraries BLAS and LAPACK. QUIP is tested with reference versions libblas-dev and liblapack-dev on Ubuntu 12.04, and mkl 11.1 with ifort.

    • MPI: To use the MPI parallelisatin of gap_fit, you need a ScaLAPACK library, e.g. libscalapack-openmpi on Ubuntu, or as part of the MKL.

  2. Clone the QUIP repository from GitHub. The --recursive option brings in submodules automatically (If you don't do this, then you will need to run git submodule update --init --recursive from the top-level QUIP directory after cloning) ::

    git clone --recursive https://github.com/libAtoms/QUIP.git
    

    One submodule is the GAP code, which can be found in src/GAP. Note that GAP is distributed under a diferent license.

    GAP is a machine learning method that uses Gaussian process regression, and needs large data files to run. You can find potentials that have been published as well as training data in our data repository, see also the online docs.

  3. Decide your architecture by looking in the arch/ directory, and define an environmental variable QUIP_ARCH, e.g.::

    export QUIP_ARCH=linux_x86_64_gfortran
    

    for standard gfortran on Linux. Here is where you can adjust which compiler is being used, if you do not like the defaults. You may need to create your own arch/Makefile.${QUIP_ARCH} file based on an existing file for more exotic systems.

    MPI: Some arch files already include adjustments for MPI use. Those usually have mpi in their name, e.g. linux_x86_64_gfortran_openmpi+openmp.

  4. Customise QUIP, set the maths libraries and provide linking options::

    make config
    

    Makefile.config will create a build directory, build/${QUIP_ARCH}, and all the building happen there. First it will ask you some questions about where you keep libraries and other stuff, if you don't use something it is asking for, just leave it blank. The answers will be stored in Makefile.inc in the build/${QUIP_ARCH} directory, and you can edit them later (e.g. to change compiler, optimisation or debug options).

    If you later make significant changes to the configuration such as enabling or disabling tight-binding support you should force a full rebuild by doing a make deepclean; make.

    MPI: To use the MPI parallelisation of gap_fit, you have to add your system library to the linking options, e.g. -lscalapack or -lscalapack-openmpi, enable GAP support, enable QR decomposition, and enable ScaLAPACK.

  5. Compile all programs, modules and libraries::

    make
    

    From the top-level QUIP directory. All programs are built in build/${QUIP_ARCH}/. You can also find compiled object files and libraries (libquip.a) in that directory. Programs can be called directly from that directory.

    Other useful make targets include:

    • make install : copies all compiled programs it can find to QUIP_INSTALLDIR, if it's defined and is a directory (full path required), and copies bundled structures to QUIP_STRUCTS_DIR if it is defined.

    • make libquip: Compile QUIP as a library and link to it. This will make all the various libraries and combine them into one: build/${QUIP_ARCH}/libquip.a, which is what you need to link with (as well as LAPACK).

  6. A good starting point is to use the quip program, which can calculate the properties of an atomic configuration using a variety of models. For example::

    quip atoms_filename=test.xyz init_args='IP LJ' \
        param_filename=share/Parameters/ip.parms.LJ.xml E
    

    assuming that you have a file called test.xyz with the following data in it representing Cu atoms in a cubic fcc lattice::

    4
    Lattice="3.61 0 0 0 3.61 0 0 0 3.61" Properties=species:S:1:pos:R:3
    Cu     0.000 0.000 0.000
    Cu     0.000 1.805 1.805
    Cu     1.805 0.000 1.805
    Cu     1.805 1.805 0.000
    

    The Lennard-Jones parameters in the above example are defined in the ip.parms.LJ.xml file under share/Parameters (ensure the path to this file is correct). The format of the atomic configuration is given in Extended XYZ format, in which the first line is the number of atoms, the second line is a series of key=value pairs, which must at least contain the Lattice key giving the periodic bounding box and the Properties key that describes the remaining lines. The value of Properties is a sequence of triplets separated by a colon (:), that give the name, type and number of columns, with the type given by I for integers, R for reals, S for strings.

    Most string arguments can be replaced by --help and QUIP programs will then print a list of allowable keywords with brief help messages as to their usage, so e.g. init_args=--help will give a list of potential model types (and some combinations). The parsing is recursive, so init_args="IP --help" will then proceed to list the types of interatomic potentials (IP) that are available.

  7. To compile the Python wrappers (quippy), the minimum requirements are as follows. f90wrap will be installed automatically by the build process, but you might need to check that the directory where pip installs executuable scripts to is on your path (e.g. by setting PATH=~/.local/bin:$PATH).

    Note: If you are using a Python virtual environment (virtualenv) and would like to install quippy into it, ensure the environment is activated (source <env_dir>/bin/activate, where <env_dir> is the root of your virtual environment) before building quippy (otherwise library versions may cause unexpected conflicts).

  8. To compile the Python wrappers (quippy), run::

    make quippy
    

    Quippy can be used by adding the lib directory in quippy/build/${QUIP_ARCH} to your $PYTHONPATH, however it can be more convenient to install into a specific Python distribution::

    make install-quippy
    

    will either install into the current virtualenv or attempt to install systemwide (usually fails without sudo). To install only for the current user (into ~/.local), execute the command QUIPPY_INSTALL_OPTS=--user make install-quippy, or use QUIPPY_INSTALL_OPTS=--prefix=<directory> to install into a specific directory. QUIPPY_INSTALL_OPTS can also be set in the file build/${QUIP_ARCH}/Makefile.inc.

  9. More details on the quippy installation process and troubleshooting for common build problems are available in the online documentation.

  10. To run the unit and regression tests, which depend on quippy:: bash make test

  11. To get back to a state near to a fresh clone, use bash make distclean

  12. Some functionality is only available if you check out other modules within the QUIP/src/ directories, e.g. the ThirdParty (DFTB parameters, TTM3f water model).

  13. In order to run QUIP potentials via LAMMPS, make libquip to get QUIP into library form, and then follow the instructions in the LAMMPS documentation. You need at least 11 Aug 2017 version or later.

Developer notes:

Fixing/updating the version of GAP:

cd src/GAP
git checkout <commit>

OR

git checkout main

Updating the version in the QUIP repository:

cd ../..
git add src/GAP
git commit -m "updating the version of GAP"

Mac OS

We do not recommend Apple-shipped compilers and python, and we do not test compatibility with them. Either use MacPorts or Homebrew to obtain GNU compilers, and also use the python from there or Anaconda. As of this edit, gcc-8.1 produces as internal compiler error, but gcc-4.6 through to gcc-7 is fine.

Triggering the wheel build

Wheels are built on push and pull requests to public using cibuildwheel with this workflow.

To make a release candidate create a tag with a suffix such as -rc1 for the first attempt, push to trigger the build:

git commit -m 'release v0.x.z-rc1'
git tag v0.x.y-rc1
git push --tags

If all goes well, the .whl files will show up as assets within a new GitHub release. The installation process can now be tested locally.

Release wheels to PyPI

Once everything works correctly, make a full release (i.e. create a tag named just v0.x.y without the -rc1 suffix). This will trigger the upload of wheels and source distribution to PyPI.

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

quippy_ase-0.9.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.0 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

quippy_ase-0.9.12-cp310-cp310-macosx_11_0_arm64.whl (26.9 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

quippy_ase-0.9.12-cp310-cp310-macosx_10_9_x86_64.whl (33.4 MB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

quippy_ase-0.9.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.9 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

quippy_ase-0.9.12-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (30.1 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

quippy_ase-0.9.12-cp39-cp39-macosx_11_0_arm64.whl (26.9 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

quippy_ase-0.9.12-cp39-cp39-macosx_10_9_x86_64.whl (33.4 MB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

quippy_ase-0.9.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31.0 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

quippy_ase-0.9.12-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (30.1 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

quippy_ase-0.9.12-cp38-cp38-macosx_11_0_arm64.whl (26.9 MB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

quippy_ase-0.9.12-cp38-cp38-macosx_10_9_x86_64.whl (33.4 MB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

quippy_ase-0.9.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30.9 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

quippy_ase-0.9.12-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (30.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

quippy_ase-0.9.12-cp37-cp37m-macosx_10_9_x86_64.whl (33.4 MB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

Details for the file quippy_ase-0.9.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6b68e43442f61148418b31a93857d986f7be9c36a333344d7610fb2d5c3d900d
MD5 ceaa3d46e717383082ae8ad2dcc64405
BLAKE2b-256 34ae158a97740b5cb76ff106381654c515e46b8b9b87f8c42edd50bedc93b254

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 89e3c5e7e362c1efe150aa2704dd5f8ca0a946a43d9bf629e8b79b37dfa4c65f
MD5 6c33f8a1718e6ab89e0700fcf099b6c9
BLAKE2b-256 d43e1048caee69d46b3049179a7f3941ddf5a27d76867c3810be415c82262949

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 e05add6da1a7f501b08a5d19425479471cee2cd5ff96735e66e9e610bd43b606
MD5 9ea9e1d3f1855c63ee8160132d8c8a74
BLAKE2b-256 b6b5949c0df572333c51ee74ff60e8c2abb2efcc3b9d9bb3ec440bfbd2e589bb

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3b0876f7476cc221f1e4de5faa67834ef2b2b473889ff629f4072edcba2b713f
MD5 33e36ac748590233072aa49bb18e1f92
BLAKE2b-256 b9fe934d1563e931fe4ad2525fc550c3363feb175e9d22a43f53597e850dadcf

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 1c8e516186625f0f30eb48ca0c07b664a23c4c75dd46fd2484c9cafa4f736ad1
MD5 722593bbd963b136c108e41222c97bc4
BLAKE2b-256 4b31e0dcd64a3d22dc97080bd5e9370b54838c7159a2388e3b813743483ea3b4

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 175f17fc779ff44c09232729f904a997c76aa50781780855d20b62bc0415c6df
MD5 6fcb1524a79e808c89035a4b4a57494b
BLAKE2b-256 1e086864bdc2c405d54734abf8ce29a51b7d54919a15d27bbd215513f18e0dfd

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 ae896d5c76ada1034d90699d98911f500d9316545e955f484dced8b9a114ae95
MD5 c4d4f3980b16ddf9dcb6bf9a3a250476
BLAKE2b-256 4f04ac9c8759dc5a84d5a987505796c727cb4059874c83c24c2697cd691b0e45

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b52fd1ed436323d75a1f941ce5840097e895062a69ad6f96410d597a6445a25f
MD5 0cc9308240ce8e6aa588b901ed600cb9
BLAKE2b-256 c7d35893a086c20d9c8719a15d1b9520cf79c569c7653805781ae4a91f0b06b3

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 0a0a1df5885153410d054afceea7371000074c1a2d3f9cba92855cbc35ee9119
MD5 b8c8d20d11736866a1ecd519fb0d739b
BLAKE2b-256 88e03f0e66b138d2cfd003acd8c614fd11716855274db90a2189d7b2d6ee1e3f

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 885317d1e52adb40f2ee0996ff10a6d89b5ce7e7a0b6bb9e20ed27d138205965
MD5 5ba86a343310b004c4b43bed9a651b1e
BLAKE2b-256 4144943bd90b54bb9fb6d83d931e89323608054384f58ad2fbac86fdec88547c

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 617ded924072bcb206f948d3a8708c8cdc6143f03fc618447b79b42ab4beafd6
MD5 9259d916f3dc33c8648d04eed9e721d1
BLAKE2b-256 39c3145c5d1a5fc2ccd489281d904bfa6b543a2fcc4c7c98a5d43ca01373d698

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fea099c1e083fb004a8dd655f27ed80594059d253edb5e1d3adff4478b9c76e7
MD5 f3f71892226352ed9c485207cbd73450
BLAKE2b-256 a78e78bdadf85ebbcfc976a7b862e5326e6a58b2d5efff96ae1ff4ea9f0b487a

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 982f69cfd32821545f0d7ad300d1a75ddc5b4f7b29f22970c803d7ad0231bdd3
MD5 728374870b95a2bbde30d6a438f2a741
BLAKE2b-256 57c4ec90b8bf22a73c3479417aeeea69ee2fdf841d53370085ca33bc87a05dec

See more details on using hashes here.

File details

Details for the file quippy_ase-0.9.12-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for quippy_ase-0.9.12-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6044f6640f8e43b7d859af10d5c153c419fd37325322b44f598d95d494daee4b
MD5 74d085a66dd6d57ce58645511918eab0
BLAKE2b-256 140414e9d432b6aab2da6fbb074559ddf7a49dcbaf6fb456e0133dc6ba7d0d95

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page