diff --git a/app.js b/app.js index f0b3c98..9fcf38e 100644 --- a/app.js +++ b/app.js @@ -14,6 +14,7 @@ var blocksRouter = require("./routes/blocks"); var mempoolRouter = require("./routes/mempool"); var searchCommitmentsRouter = require("./routes/search_commitments"); var searchKernelsRouter = require("./routes/search_kernels"); +var healthz = require("./routes/healthz"); var assetsRouter = require("./routes/assets"); @@ -97,6 +98,7 @@ app.use("/assets", assetsRouter); app.use("/mempool", mempoolRouter); app.use("/search_commitments", searchCommitmentsRouter); app.use("/search_kernels", searchKernelsRouter); +app.use("/healthz", healthz); // catch 404 and forward to error handler app.use(function (req, res, next) { diff --git a/routes/healthz.js b/routes/healthz.js new file mode 100644 index 0000000..e5744a1 --- /dev/null +++ b/routes/healthz.js @@ -0,0 +1,50 @@ +// Copyright 2021. The Tari Project +// +// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the +// following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following +// disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the +// following disclaimer in the documentation and/or other materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote +// products derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +var { createClient } = require("../baseNodeClient"); + +var express = require("express"); +var router = express.Router(); + +router.get("/", async function (req, res) { + let client = createClient(); + let result; + try { + result = await client.getVersion({}); + } catch (error) { + res.status(404); + if (req.query.json !== undefined) { + res.json({ error: error }); + } else { + res.render("error", { error: error }); + } + return; + } + let json = { version: result.value }; + if (req.query.json !== undefined) { + res.json(json); + } else { + res.render("healthz", json); + } +}); + +module.exports = router; diff --git a/views/healthz.hbs b/views/healthz.hbs new file mode 100644 index 0000000..09eca2b --- /dev/null +++ b/views/healthz.hbs @@ -0,0 +1,5 @@ +Home +