From 0a3b9b1c9c821b153cb07281b585feb006ec621e Mon Sep 17 00:00:00 2001 From: alvarius Date: Fri, 8 Dec 2023 19:18:40 +0100 Subject: [PATCH] chore(store-indexer, store-sync): add explicit error logs (#2045) --- .changeset/fast-pandas-explain.md | 8 ++++++++ packages/store-indexer/src/postgres/apiRoutes.ts | 16 ++++++++-------- packages/store-sync/src/postgres/setupTables.ts | 11 +++++++++-- .../src/postgres/shouldCleanDatabase.ts | 11 +++++++++-- 4 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 .changeset/fast-pandas-explain.md diff --git a/.changeset/fast-pandas-explain.md b/.changeset/fast-pandas-explain.md new file mode 100644 index 0000000000..4be8ed82ac --- /dev/null +++ b/.changeset/fast-pandas-explain.md @@ -0,0 +1,8 @@ +--- +"@latticexyz/store-indexer": patch +"@latticexyz/store-sync": patch +--- + +Added explicit error logs for unexpected situations. +Previously all `debug` logs were going to `stderr`, which made it hard to find the unexpected errors. +Now `debug` logs go to `stdout` and we can add explicit `stderr` logs. diff --git a/packages/store-indexer/src/postgres/apiRoutes.ts b/packages/store-indexer/src/postgres/apiRoutes.ts index 4f877086a5..92ca7e0b3d 100644 --- a/packages/store-indexer/src/postgres/apiRoutes.ts +++ b/packages/store-indexer/src/postgres/apiRoutes.ts @@ -6,7 +6,7 @@ import { input } from "@latticexyz/store-sync/indexer-client"; import { storeTables } from "@latticexyz/store-sync"; import { queryLogs } from "./queryLogs"; import { recordToLog } from "./recordToLog"; -import { debug } from "../debug"; +import { debug, error } from "../debug"; import { createBenchmark } from "@latticexyz/common"; import { compress } from "../compress"; @@ -19,10 +19,10 @@ export function apiRoutes(database: Sql): Middleware { try { options = input.parse(typeof ctx.query.input === "string" ? JSON.parse(ctx.query.input) : {}); - } catch (error) { + } catch (e) { ctx.status = 400; - ctx.body = JSON.stringify(error); - debug(error); + ctx.body = JSON.stringify(e); + debug(e); return; } @@ -36,17 +36,17 @@ export function apiRoutes(database: Sql): Middleware { if (records.length === 0) { ctx.status = 404; ctx.body = "no logs found"; - debug(`no logs found for chainId ${options.chainId}, address ${options.address}, filters ${options.filters}`); + error(`no logs found for chainId ${options.chainId}, address ${options.address}, filters ${options.filters}`); return; } const blockNumber = records[0].chainBlockNumber; ctx.body = JSON.stringify({ blockNumber, logs }); ctx.status = 200; - } catch (error) { + } catch (e) { ctx.status = 500; - ctx.body = JSON.stringify(error); - debug(error); + ctx.body = JSON.stringify(e); + error(e); } }); diff --git a/packages/store-sync/src/postgres/setupTables.ts b/packages/store-sync/src/postgres/setupTables.ts index 70f404bb50..9820c6c71c 100644 --- a/packages/store-sync/src/postgres/setupTables.ts +++ b/packages/store-sync/src/postgres/setupTables.ts @@ -6,6 +6,13 @@ import { debug as parentDebug } from "./debug"; import { pgDialect } from "./pgDialect"; const debug = parentDebug.extend("setupTables"); +const error = parentDebug.extend("setupTables"); + +// Pipe debug output to stdout instead of stderr +debug.log = console.debug.bind(console); + +// Pipe error output to stderr +error.log = console.error.bind(console); export async function setupTables( db: PgDatabase, @@ -73,8 +80,8 @@ export async function setupTables( try { debug(`dropping namespace ${schemaName} and all of its tables`); await db.execute(sql.raw(pgDialect.schema.dropSchema(schemaName).ifExists().cascade().compile().sql)); - } catch (error) { - debug(`failed to drop namespace ${schemaName}`, error); + } catch (e) { + error(`failed to drop namespace ${schemaName}`, e); } } }; diff --git a/packages/store-sync/src/postgres/shouldCleanDatabase.ts b/packages/store-sync/src/postgres/shouldCleanDatabase.ts index 5e96d11d0c..9dcb41a0df 100644 --- a/packages/store-sync/src/postgres/shouldCleanDatabase.ts +++ b/packages/store-sync/src/postgres/shouldCleanDatabase.ts @@ -4,6 +4,13 @@ import { debug as parentDebug } from "./debug"; import { version as expectedVersion } from "./version"; const debug = parentDebug.extend("shouldCleanDatabase"); +const error = parentDebug.extend("shouldCleanDatabase"); + +// Pipe debug output to stdout instead of stderr +debug.log = console.debug.bind(console); + +// Pipe error output to stderr +error.log = console.error.bind(console); /** * @internal @@ -28,8 +35,8 @@ export async function shouldCleanDatabase(db: PgDatabase, expectedChainId: } return false; - } catch (error) { - console.error(error); + } catch (e) { + error(e); debug("error while querying config table"); return true; }