Skip to content

Commit 02d9cb7

Browse files
feat: improve logging output
- add performance stats for rendering pages - add debug output for begin/end page rendering, this makes it easier to spot where errors occured during rendering albeit this is not a replacement for adding proper error handling down the road
1 parent d09ece1 commit 02d9cb7

File tree

5 files changed

+63
-51
lines changed

5 files changed

+63
-51
lines changed

src/ChildDatabaseRenderer.ts

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1-
import { Client } from "@notionhq/client/build/src";
2-
import { Page } from "@notionhq/client/build/src/api-types";
3-
4-
import { SyncConfig } from "./";
5-
import { lookupDatabaseConfig } from "./config";
6-
import { Database } from "./Database";
7-
import { DatabaseViewRenderer } from "./DatabaseViewRenderer";
8-
import { DeferredRenderer } from "./DeferredRenderer";
9-
import { RenderDatabasePageTask } from "./RenderDatabasePageTask";
10-
import { DatabaseConfig, DatabaseConfigRenderPages, DatabaseConfigRenderTable } from "./SyncConfig";
11-
import { DatabaseTableRenderer } from "./DatabaseTableRenderer";
1+
import { Client } from '@notionhq/client/build/src';
2+
import { Page } from '@notionhq/client/build/src/api-types';
3+
4+
import { SyncConfig } from './';
5+
import { lookupDatabaseConfig } from './config';
6+
import { Database } from './Database';
7+
import { DatabaseTableRenderer } from './DatabaseTableRenderer';
8+
import { DatabaseViewRenderer } from './DatabaseViewRenderer';
9+
import { DeferredRenderer } from './DeferredRenderer';
10+
import { RenderDatabasePageTask } from './RenderDatabasePageTask';
11+
import { DatabaseConfig, DatabaseConfigRenderPages, DatabaseConfigRenderTable } from './SyncConfig';
12+
13+
const debug = require("debug")("child-database");
1214

1315
export class ChildDatabaseRenderer {
1416
constructor(
@@ -17,16 +19,17 @@ export class ChildDatabaseRenderer {
1719
private readonly deferredRenderer: DeferredRenderer,
1820
private readonly tableRenderer: DatabaseTableRenderer,
1921
private readonly viewRenderer: DatabaseViewRenderer
20-
) {}
22+
) { }
2123

2224
async renderChildDatabase(databaseId: string): Promise<Database> {
2325
const dbConfig = lookupDatabaseConfig(this.config, databaseId);
2426

2527
// no view was defined for this database, render as a plain inline table
2628
const allPages = await this.fetchPages(databaseId, dbConfig);
2729

28-
const isCmsDb = this.config.cmsDatabaseId === databaseId;
29-
const renderPages = isCmsDb || dbConfig.renderAs === "pages+views"
30+
const renderPages = dbConfig.renderAs === "pages+views"
31+
32+
debug("rendering child database " + databaseId + " as " + dbConfig.renderAs);
3033

3134
if (renderPages) {
3235
const pageConfig = dbConfig as DatabaseConfigRenderPages;

src/DatabasePageRenderer.ts

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
import * as fsc from "fs";
1+
import * as fsc from 'fs';
2+
import { performance } from 'perf_hooks';
23

3-
import { Page } from "@notionhq/client/build/src/api-types";
4+
import { Page } from '@notionhq/client/build/src/api-types';
45

5-
import { AssetWriter } from "./AssetWriter";
6-
import { FrontmatterRenderer } from "./FrontmatterRenderer";
7-
import { logger } from "./logger";
8-
import { PropertiesParser } from "./PropertiesParser";
9-
import { RecursiveBodyRenderer } from "./RecursiveBodyRenderer";
10-
import { RenderDatabasePageTask as RenderDatabasePageTask } from "./RenderDatabasePageTask";
11-
import { slugify } from "./slugify";
12-
import { DatabaseConfigRenderPages } from "./SyncConfig";
6+
import { AssetWriter } from './AssetWriter';
7+
import { FrontmatterRenderer } from './FrontmatterRenderer';
8+
import { logger } from './logger';
9+
import { PropertiesParser } from './PropertiesParser';
10+
import { RecursiveBodyRenderer } from './RecursiveBodyRenderer';
11+
import { RenderDatabasePageTask as RenderDatabasePageTask } from './RenderDatabasePageTask';
12+
import { slugify } from './slugify';
13+
import { DatabaseConfigRenderPages } from './SyncConfig';
1314

1415
const fs = fsc.promises;
1516

@@ -45,6 +46,8 @@ export class DatabasePageRenderer {
4546
file,
4647
properties: props,
4748
render: async () => {
49+
const start = performance.now()
50+
4851
const assetWriter = new AssetWriter(destDir);
4952

5053
const frontmatter = this.frontmatterRenderer.renderFrontmatter(props);
@@ -53,7 +56,10 @@ export class DatabasePageRenderer {
5356
await fs.mkdir(destDir, { recursive: true });
5457
await fs.writeFile(file, frontmatter + body);
5558

56-
logger.info("wrote: " + file);
59+
// note: this is excluding the time it takes to fetch properties
60+
const elapsed = performance.now() - start;
61+
62+
logger.info("rendered: " + file + " in " + Math.round(elapsed) + "ms.");
5763
},
5864
};
5965
}

src/DatabaseViewRenderer.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { LinkRenderer } from "./LinkRenderer";
2-
import * as markdownTable from "./markdown-table";
3-
import { PropertiesParser } from "./PropertiesParser";
4-
import { RenderDatabasePageTask } from "./RenderDatabasePageTask";
5-
import { DatabaseConfigRenderPages, DatabaseView } from "./SyncConfig";
6-
import { DatabaseTableRenderer } from "./DatabaseTableRenderer";
1+
import { DatabaseTableRenderer } from './DatabaseTableRenderer';
2+
import { LinkRenderer } from './LinkRenderer';
3+
import * as markdownTable from './markdown-table';
4+
import { PropertiesParser } from './PropertiesParser';
5+
import { RenderDatabasePageTask } from './RenderDatabasePageTask';
6+
import { DatabaseConfigRenderPages, DatabaseView } from './SyncConfig';
77

8-
const debug = require("debug")("database");
8+
const debug = require("debug")("database-views");
99

1010
// todo: name afte what it renders, not to where
1111
export class DatabaseViewRenderer {

src/DeferredRenderer.ts

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1-
import { Page } from "@notionhq/client/build/src/api-types";
2-
3-
import { ChildDatabaseRenderer } from "./ChildDatabaseRenderer";
4-
import { logger } from "./logger";
5-
import { DatabasePageRenderer } from "./DatabasePageRenderer";
6-
import { RenderedDatabaseEntry } from "./RenderedDatabaseEntry";
7-
import { RenderedDatabasePage } from "./RenderedDatabasePage";
8-
import { RenderDatabasePageTask as RenderDatabasePageTask } from "./RenderDatabasePageTask";
9-
import { RenderDatabaseEntryTask } from "./RenderDatabaseEntryTask";
10-
import {
11-
DatabaseConfigRenderPages,
12-
DatabaseConfigRenderTable,
13-
} from "./SyncConfig";
14-
import { Database } from "./Database";
15-
import { DatabaseEntryRenderer } from "./DatabaseEntryRenderer";
1+
import { Page } from '@notionhq/client/build/src/api-types';
2+
3+
import { ChildDatabaseRenderer } from './ChildDatabaseRenderer';
4+
import { Database } from './Database';
5+
import { DatabaseEntryRenderer } from './DatabaseEntryRenderer';
6+
import { DatabasePageRenderer } from './DatabasePageRenderer';
7+
import { logger } from './logger';
8+
import { RenderDatabaseEntryTask } from './RenderDatabaseEntryTask';
9+
import { RenderDatabasePageTask as RenderDatabasePageTask } from './RenderDatabasePageTask';
10+
import { RenderedDatabaseEntry } from './RenderedDatabaseEntry';
11+
import { RenderedDatabasePage } from './RenderedDatabasePage';
12+
import { DatabaseConfigRenderPages, DatabaseConfigRenderTable } from './SyncConfig';
1613

1714
const debug = require("debug")("rendering");
1815

src/RecursiveBodyRenderer.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { Client } from "@notionhq/client";
2-
import { Block, Page } from "@notionhq/client/build/src/api-types";
1+
import { Client } from '@notionhq/client';
2+
import { Block, Page } from '@notionhq/client/build/src/api-types';
33

4-
import { AssetWriter } from "./AssetWriter";
5-
import { BlockRenderer } from "./BlockRenderer";
4+
import { AssetWriter } from './AssetWriter';
5+
import { BlockRenderer } from './BlockRenderer';
6+
7+
const debug = require("debug")("body");
68

79
export class RecursiveBodyRenderer {
810
constructor(
@@ -14,6 +16,8 @@ export class RecursiveBodyRenderer {
1416
page: Page,
1517
assets: AssetWriter
1618
): Promise<string> {
19+
debug("begin rendering body of page " + page.id, page.properties);
20+
1721
const childs = await this.publicApi.blocks.children.list({
1822
block_id: page.id,
1923
});
@@ -25,6 +29,8 @@ export class RecursiveBodyRenderer {
2529
const blocks = await Promise.all(renderChilds);
2630
const body = blocks.join("\n\n");
2731

32+
debug("completed rendering body of page " + page.id);
33+
2834
return body;
2935
}
3036

0 commit comments

Comments
 (0)