From 71efa599d49ceddd7a0e097ccebb5635e76d9649 Mon Sep 17 00:00:00 2001 From: hatskier Date: Thu, 7 Jul 2022 17:59:09 +0200 Subject: [PATCH] Revert "chore: disabled metrics endpoint" This reverts commit 833a964337fe091fc8bcfef98a334717371c93d1. --- routes/index.ts | 4 +++- routes/metrics.ts | 20 ++++++++++++++++++++ test/routes/metrics.test.ts | 29 +++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 routes/metrics.ts create mode 100644 test/routes/metrics.test.ts diff --git a/routes/index.ts b/routes/index.ts index 0d68ebc..c57cf3f 100644 --- a/routes/index.ts +++ b/routes/index.ts @@ -1,13 +1,14 @@ import express from "express"; import { prices } from "./prices"; import { packages } from "./packages"; +import { metrics } from "./metrics"; import { errors } from "./errors"; import { configs } from "./configs"; import { providers } from "./providers"; import { enableLiteMode } from "../config"; export const getRouter = () => { - const router = express.Router(); + const router = express.Router(); prices(router); packages(router); @@ -15,6 +16,7 @@ export const getRouter = () => { providers(router); if (!enableLiteMode) { + metrics(router); errors(router); } diff --git a/routes/metrics.ts b/routes/metrics.ts new file mode 100644 index 0000000..13e7a2b --- /dev/null +++ b/routes/metrics.ts @@ -0,0 +1,20 @@ +import { Router } from "express"; +import asyncHandler from "express-async-handler"; +import { saveMetric } from "../helpers/cloudwatch"; + +export const metrics = (router: Router) => { + + /** + * This endpoint is used for saving metric values in AWS Cloudwatch. + * Thanks to them we can analyse redstone-node performance and build + * nice charts + */ + router.post("/metrics", asyncHandler(async (req, res) => { + const { label, value } = req.body; + await saveMetric({ label, value }); + + return res.json({ + msg: "Metric saved", + }); + })); +}; diff --git a/test/routes/metrics.test.ts b/test/routes/metrics.test.ts new file mode 100644 index 0000000..c3f9715 --- /dev/null +++ b/test/routes/metrics.test.ts @@ -0,0 +1,29 @@ +process.env.LIGHT_MODE = "false"; +import request from "supertest"; +import { app } from "../../app"; +import { connect, closeDatabase } from "../helpers/test-db"; +import * as cloudwatch from "../../helpers/cloudwatch"; + +describe("Testing metrics route", () => { + beforeAll(async () => await connect()); + afterAll(async () => await closeDatabase()); + + const testMetricValue = { + label: "test-metric", + value: 42, + }; + + test("Should post a test metric", async () => { + // Given + const spy = jest.spyOn(cloudwatch, "saveMetric"); + + // When + await request(app) + .post("/metrics") + .send(testMetricValue) + .expect(200); + + // Then + expect(spy).toHaveBeenCalledWith(testMetricValue); + }); +});