Commit 7a57ebfd authored by Grant's avatar Grant
Browse files

Drop pixels.log support

parent dc680c32
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -123,9 +123,6 @@ ENV PORT 3000
ENV NODE_ENV production
ENV SERVE_CLIENT /home/node/app/packages/client
ENV SERVE_ADMIN /home/node/app/packages/admin
ENV PIXEL_LOG_PATH /home/node/app/pixel.log

VOLUME /home/node/app/pixel.log

EXPOSE 3000
# profiler port, only used if profiler is explicity running
+12 −13
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ import { Router } from "express";
import { CanvasController } from "../controllers/CanvasController";
import { SocketController } from "../controllers/SocketController";
import { getLogger } from "../lib/Logger";
import { LogMan } from "../lib/LogMan";
import { prisma } from "../lib/prisma";
import { RateLimiter } from "../lib/RateLimiter";
import { AuditLog } from "../models/AuditLog";
@@ -91,7 +90,7 @@ app.post("/canvas/size", async (req, res) => {

  // we log this here because Canvas#setSize is ran at launch
  // this is currently the only way the size is changed is via the API
  LogMan.log("canvas_size", { width, height });
  // LogMan.log("canvas_size", { width, height });

  const user = (await User.fromAuthSession(req.session.user!))!;
  const auditLog = AuditLog.Factory(user.sub)
@@ -119,7 +118,7 @@ app.post("/canvas/freeze", async (req, res) => {
  await CanvasController.get().setFrozen(true);

  // same reason as canvas size changes, we log this here because #setFrozen is ran at startup
  LogMan.log("canvas_freeze", {});
  // LogMan.log("canvas_freeze", {});

  const user = (await User.fromAuthSession(req.session.user!))!;
  const auditLog = AuditLog.Factory(user.sub)
@@ -140,7 +139,7 @@ app.delete("/canvas/freeze", async (req, res) => {
  await CanvasController.get().setFrozen(false);

  // same reason as canvas size changes, we log this here because #setFrozen is ran at startup
  LogMan.log("canvas_unfreeze", {});
  // LogMan.log("canvas_unfreeze", {});

  const user = (await User.fromAuthSession(req.session.user!))!;
  const auditLog = AuditLog.Factory(user.sub)
@@ -268,10 +267,10 @@ app.put("/canvas/undo", async (req, res) => {
    return;
  }

  const user_sub =
    req.session.user!.user.username +
    "@" +
    req.session.user!.service.instance.hostname;
  // const user_sub =
  //   req.session.user!.user.username +
  //   "@" +
  //   req.session.user!.service.instance.hostname;
  const start_position: [x: number, y: number] = [
    req.body.start.x,
    req.body.start.y,
@@ -301,11 +300,11 @@ app.put("/canvas/undo", async (req, res) => {
        });

        // TODO: this spams the log, it would be nicer if it combined
        LogMan.log("mod_rollback", user_sub, {
          x: pixel.pixel.x,
          y: pixel.pixel.y,
          hex: coveredPixel?.color,
        });
        // LogMan.log("mod_rollback", user_sub, {
        //   x: pixel.pixel.x,
        //   y: pixel.pixel.y,
        //   hex: coveredPixel?.color,
        // });
        break;
      }
      case "rejected":
+11 −12
Original line number Diff line number Diff line
@@ -7,7 +7,6 @@ import {
import { Socket } from "socket.io";

import { getLogger } from "../lib/Logger";
import { LogMan } from "../lib/LogMan";
import { prisma } from "../lib/prisma";
import { Settings } from "../lib/Settings";
import { callCacheWorker, getCacheWorkerIdForCoords } from "../workers/worker";
@@ -262,11 +261,11 @@ export class CanvasController {
      });
    }

    LogMan.log("pixel_undo", pixel.userId, {
      x: pixel.x,
      y: pixel.y,
      hex: coveringPixel?.color,
    });
    // LogMan.log("pixel_undo", pixel.userId, {
    //   x: pixel.x,
    //   y: pixel.y,
    //   hex: coveringPixel?.color,
    // });
    return coveringPixel;
  }

@@ -450,7 +449,7 @@ export class CanvasController {
      }))
    );

    LogMan.log("mod_fill", user.sub, { from: start, to: end, hex });
    // LogMan.log("mod_fill", user.sub, { from: start, to: end, hex });
  }

  async setPixel(
@@ -484,11 +483,11 @@ export class CanvasController {
    await this.updateCanvasRedisAtPos(x, y);

    Logger.info(`${user.sub} placed pixel at (${x}, ${y})`);
    LogMan.log(isModAction ? "mod_override" : "pixel_place", user.sub, {
      x,
      y,
      hex,
    });
    // LogMan.log(isModAction ? "mod_override" : "pixel_place", user.sub, {
    //   x,
    //   y,
    //   hex,
    // });
  }

  /**

packages/server/src/lib/LogMan.ts

deleted100644 → 0
+0 −86
Original line number Diff line number Diff line
import { PixelLogger } from "./Logger";

interface UserEvents {
  pixel_place: { x: number; y: number; hex: string };
  pixel_undo: { x: number; y: number; hex?: string };
  mod_fill: {
    from: [x: number, y: number];
    to: [x: number, y: number];
    hex: string;
  };
  mod_override: { x: number; y: number; hex: string };
  mod_rollback: { x: number; y: number; hex?: string };
  mod_rollback_undo: { x: number; y: number; hex?: string };
}

interface SystemEvents {
  canvas_size: { width: number; height: number };
  canvas_freeze: object;
  canvas_unfreeze: object;
}

/**
 * Handle logs that should be written to a text file
 *
 * This could be used as an EventEmitter in the future, but as of right now
 * it just adds typing to logging of these events
 *
 * TODO: better name, this one is not it
 *
 * @see #57
 */
class LogMan_ {
  log<EventName extends keyof SystemEvents>(
    event: EventName,
    data: SystemEvents[EventName]
  ): void;
  log<EventName extends keyof UserEvents>(
    event: EventName,
    user: string,
    data: UserEvents[EventName]
  ): void;
  log<EventName extends keyof UserEvents | keyof SystemEvents>(
    event: EventName,
    ...params: EventName extends keyof UserEvents
      ? [user: string, data: UserEvents[EventName]]
      : EventName extends keyof SystemEvents
        ? [data: SystemEvents[EventName]]
        : never
  ): void {
    const parts: string[] = [];

    if (params.length === 2) {
      // user event
      const user = params[0] as string;
      parts.push(user, event);

      if (event === "mod_fill") {
        // this event format has a different line format
        const data: UserEvents["mod_fill"] = params[1] as any;

        parts.push(data.from.join(","), data.to.join(","), data.hex);
      } else {
        const data: UserEvents[Exclude<keyof UserEvents, "mod_fill">] =
          params[1] as any;
        parts.push(...[data.x, data.y, data.hex || "unset"].map((a) => a + ""));
      }
    } else {
      // system event

      parts.push("system", event);

      switch (event) {
        case "canvas_size": {
          const data: SystemEvents["canvas_size"] = params[0] as any;
          const { width, height } = data;
          parts.push(width + "", height + "");
          break;
        }
      }
    }

    PixelLogger.info(parts.join("\t"));
  }
}

export const LogMan = new LogMan_();
+0 −18
Original line number Diff line number Diff line
import path from "node:path";

import winston, { format } from "winston";

import { createEnum } from "./utils";

// if PIXEL_LOG_PATH is defined, use that, otherwise default to packages/server root
const PIXEL_LOG_PATH =
  process.env.PIXEL_LOG_PATH || path.join(__dirname, "..", "..", "pixels.log");

const formatter = format.printf((options) => {
  let maxModuleWidth = 0;
  for (const module of Object.values(LoggerType)) {
@@ -62,18 +56,6 @@ const Winston = winston.createLogger({
  transports: [new winston.transports.Console()],
});

// Used by LogMan for writing to pixels.log
export const PixelLogger = winston.createLogger({
  format: format.printf((options) => {
    return [new Date().toISOString(), options.message].join("\t");
  }),
  transports: [
    new winston.transports.File({
      filename: PIXEL_LOG_PATH,
    }),
  ],
});

export const LoggerType = createEnum([
  "MAIN",
  "SETTINGS",