Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions change/apibara-17aa4aa8-e6bb-419c-9c4a-65bee8c749cd.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "cli: use default logger that includes indexer name",
"packageName": "apibara",
"email": "francesco@ceccon.me",
"dependentChangeType": "patch"
}
4 changes: 3 additions & 1 deletion examples/cli/indexers/1-evm.indexer.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { EvmStream } from "@apibara/evm";
import { defineIndexer } from "@apibara/indexer";
import { useLogger } from "@apibara/indexer/plugins/logger";

export default defineIndexer(EvmStream)({
streamUrl: "https://ethereum.preview.apibara.org",
Expand All @@ -12,6 +13,7 @@ export default defineIndexer(EvmStream)({
transactions: [{}],
},
async transform({ endCursor }) {
console.log({ endCursor });
const logger = useLogger();
logger.info("Transforming block ", endCursor?.orderKey);
},
});
2 changes: 1 addition & 1 deletion examples/cli/indexers/2-starknet.indexer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export default function (runtimeConfig: ApibaraRuntimeConfig) {
},
async transform({ endCursor, block: { header }, context }) {
const logger = useLogger();
logger.info("Transforming block ", endCursor);
logger.info("Transforming block ", endCursor?.orderKey);
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codebase verification

Inconsistent logging patterns found across indexers

The verification reveals inconsistencies in block logging patterns:

  • examples/cli/indexers/*: Uses endCursor?.orderKey
  • examples/starknet-indexer/src/indexer.ts and examples/indexer/src/indexer.ts: Uses header?.blockNumber

Additionally, there are minor format inconsistencies:

  • Some use a space after "block" (, )
  • Others don't use a space (,)
🔗 Analysis chain

LGTM! Verify logging format consistency.

The change to log only the orderKey instead of the entire endCursor object makes the logs more concise and focused.

Let's verify the logging format consistency across other indexers:

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check logging patterns in other indexer files
# Expected: Similar logging patterns using orderKey

# Search for similar logging patterns in other indexer files
rg -A 2 "Transforming block" --type ts

Length of output: 889

const { writer } = useSink({ context });

// writer.insert([{
Expand Down
2 changes: 0 additions & 2 deletions packages/cli/src/core/apibara.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@ export async function createApibara(
opts: LoadConfigOptions = {},
dev = false,
): Promise<Apibara> {
// load options
const options = await loadOptions(config, opts, dev);

// create apibara context
const apibara: Apibara = {
options,
indexers: [],
Expand Down
4 changes: 3 additions & 1 deletion packages/cli/src/rollup/plugins/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import type { Apibara } from "apibara/types";
export function appConfig(apibara: Apibara) {
return virtual({
"#apibara-internal-virtual/config": `
export const config = ${JSON.stringify(apibara.options, null, 2)};
import * as projectConfig from '${apibara.options._c12.configFile}';

export const config = projectConfig.default;
`,
});
}
1 change: 1 addition & 0 deletions packages/cli/src/runtime/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export { createIndexer } from "./internal/app";
export { createLogger } from "./internal/logger";
23 changes: 21 additions & 2 deletions packages/cli/src/runtime/internal/app.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import { createIndexer as _createIndexer } from "@apibara/indexer";
import { logger } from "@apibara/indexer/plugins/logger";
import { type ConsolaReporter, logger } from "@apibara/indexer/plugins/logger";

import { config } from "#apibara-internal-virtual/config";
import { indexers } from "#apibara-internal-virtual/indexers";

import { createLogger } from "./logger";

export const availableIndexers = indexers.map((i) => i.name);

export function createIndexer(indexerName: string, preset?: string) {
Expand Down Expand Up @@ -39,7 +41,24 @@ export function createIndexer(indexerName: string, preset?: string) {
? indexerDefinition.indexer(runtimeConfig)
: indexerDefinition.indexer;

definition.plugins = [...(definition.plugins ?? []), logger()];
let reporter: ConsolaReporter = createLogger({
indexer: indexerName,
preset,
indexers: availableIndexers,
});

if (config.logger) {
reporter = config.logger({
indexer: indexerName,
preset,
indexers: availableIndexers,
});
}

definition.plugins = [
...(definition.plugins ?? []),
logger({ logger: reporter }),
];

return _createIndexer(definition);
}
70 changes: 70 additions & 0 deletions packages/cli/src/runtime/internal/logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import type {
ConsolaOptions,
ConsolaReporter,
LogLevel,
LogObject,
LogType,
} from "consola";
import { type ColorName, colors, getColor } from "consola/utils";
import { murmurHash } from "ohash";

const INDEXER_COLOR_MAP = [
colors.red,
colors.green,
colors.yellow,
colors.blue,
colors.magenta,
colors.cyan,
];

const TYPE_COLOR_MAP: { [k in LogType]?: string } = {
info: "cyan",
fail: "red",
success: "green",
ready: "green",
start: "magenta",
};

const LEVEL_COLOR_MAP: { [k in LogLevel]?: string } = {
0: "red",
1: "yellow",
};

const MAX_INDEXER_NAME_LENGTH = 20;

class DefaultReporter implements ConsolaReporter {
private tag: string;

constructor(indexer: string, indexers: string[], preset?: string) {
const color =
INDEXER_COLOR_MAP[murmurHash(indexer) % INDEXER_COLOR_MAP.length];

const presetLength = preset ? preset.length : 0;

const longestIndexerName =
Math.max(...indexers.map((i) => i.length), indexer.length) + presetLength;

const paddedIndexer = `${indexer}${preset ? `:${preset} ` : ""}`
.padEnd(longestIndexerName, " ")
.slice(0, Math.min(longestIndexerName, MAX_INDEXER_NAME_LENGTH));

this.tag = color(`${paddedIndexer} |`);
}

log(logObj: LogObject, ctx: { options: ConsolaOptions }) {
const { args } = logObj;
const typeColor =
TYPE_COLOR_MAP[logObj.type] || LEVEL_COLOR_MAP[logObj.level] || "gray";

const type = getColor(typeColor as ColorName, "white")(logObj.type);
console.log(`${this.tag} ${type}`, ...args);
}
}

export function createLogger({
indexer,
indexers,
preset,
}: { indexer: string; indexers: string[]; preset?: string }) {
return new DefaultReporter(indexer, indexers, preset);
}
10 changes: 10 additions & 0 deletions packages/cli/src/types/config.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { ConsolaReporter } from "@apibara/indexer/plugins/logger";
import type { RollupCommonJSOptions } from "@rollup/plugin-commonjs";
import type {
C12InputConfig,
Expand All @@ -11,6 +12,11 @@ import type { DeepPartial } from "./_utils";
import type { ApibaraHooks } from "./hooks";
import type { RollupConfig } from "./rollup";

export type LoggerFactory = ({
indexer,
preset,
}: { indexer: string; indexers: string[]; preset?: string }) => ConsolaReporter;

/**
* Apibara Config type (apibara.config)
*/
Expand All @@ -25,6 +31,7 @@ export interface ApibaraConfig<
runtimeConfig?: R;
presets?: T;
preset?: keyof T;
logger?: LoggerFactory;
}

export type ApibaraDynamicConfig = Pick<ApibaraConfig, "runtimeConfig">;
Expand Down Expand Up @@ -69,6 +76,9 @@ export interface ApibaraOptions<
// Hooks
hooks: NestedHooks<ApibaraHooks>;

// Logging
logger?: LoggerFactory;

// Rollup
rollupConfig?: RollupConfig;
sourceMap?: boolean;
Expand Down