Commit be0f53c0 authored by Grant's avatar Grant
Browse files

add prometheus metrics (fixes #47)

parent 80eebe38
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -7453,6 +7453,11 @@
        "node": ">=8"
      }
    },
    "node_modules/bintrees": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz",
      "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw=="
    },
    "node_modules/bl": {
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
@@ -12428,6 +12433,18 @@
        "node": ">=0.4.0"
      }
    },
    "node_modules/prom-client": {
      "version": "15.1.2",
      "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.2.tgz",
      "integrity": "sha512-on3h1iXb04QFLLThrmVYg1SChBQ9N1c+nKAjebBjokBqipddH3uxmOUcEkTnzmJ8Jh/5TSUnUqS40i2QB2dJHQ==",
      "dependencies": {
        "@opentelemetry/api": "^1.4.0",
        "tdigest": "^0.1.1"
      },
      "engines": {
        "node": "^16 || ^18 || >=20"
      }
    },
    "node_modules/prompts": {
      "version": "2.4.2",
      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -14215,6 +14232,14 @@
        "node": ">=6"
      }
    },
    "node_modules/tdigest": {
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz",
      "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==",
      "dependencies": {
        "bintrees": "1.0.2"
      }
    },
    "node_modules/temp-dir": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
@@ -16298,6 +16323,7 @@
        "express-session": "^1.17.3",
        "openid-client": "^5.6.5",
        "prisma-dbml-generator": "^0.12.0",
        "prom-client": "^15.1.2",
        "rate-limit-redis": "^4.2.0",
        "redis": "^4.6.12",
        "socket.io": "^4.7.2",
+1 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@
    "express-session": "^1.17.3",
    "openid-client": "^5.6.5",
    "prisma-dbml-generator": "^0.12.0",
    "prom-client": "^15.1.2",
    "rate-limit-redis": "^4.2.0",
    "redis": "^4.6.12",
    "socket.io": "^4.7.2",
+12 −0
Original line number Diff line number Diff line
@@ -28,6 +28,18 @@ if (!process.env.SESSION_SECRET) {
  process.exit(1);
}

if (!process.env.NODE_APP_INSTANCE) {
  Logger.warn(
    "NODE_APP_INSTANCE is not defined, metrics will not include process label"
  );
}

if (!process.env.PROMETHEUS_TOKEN) {
  Logger.warn(
    "PROMETHEUS_TOKEN is not defined, /metrics will not be accessable"
  );
}

if (!process.env.REDIS_HOST) {
  Logger.error("REDIS_HOST is not defined");
  process.exit(1);
+17 −0
Original line number Diff line number Diff line
@@ -141,6 +141,23 @@ class Canvas {
    return await this.canvasToRedis();
  }

  /**
   * Get if a pixel is maybe empty
   * @param x
   * @param y
   * @returns
   */
  async isPixelEmpty(x: number, y: number) {
    const redis = await Redis.getClient();
    const pixelColor = await redis.get(Redis.key("pixelColor", x, y));

    if (pixelColor === null) {
      return true;
    }

    return pixelColor === "transparent";
  }

  async getPixel(x: number, y: number) {
    return (
      await prisma.pixel.findMany({
+2 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import APIRoutes_client from "../api/client";
import APIRoutes_admin from "../api/admin";
import { Logger } from "./Logger";
import bodyParser from "body-parser";
import { handleMetricsEndpoint } from "./Prometheus";

export const session = expressSession({
  secret: process.env.SESSION_SECRET,
@@ -93,6 +94,7 @@ export class ExpressServer {
    this.app.use(bodyParser.json());
    this.app.use("/api", APIRoutes_client);
    this.app.use("/api/admin", APIRoutes_admin);
    this.app.use("/metrics", handleMetricsEndpoint);

    this.httpServer.listen(parseInt(process.env.PORT), () => {
      Logger.info("Listening on :" + process.env.PORT);
Loading