From 1f8cbda73f082cc3a0cf93afaf63f7ca955a28fa Mon Sep 17 00:00:00 2001 From: Ladd Date: Tue, 31 Dec 2024 12:28:24 -0600 Subject: [PATCH] prefix log messages with peer id --- __tests__/lossless.ts | 7 +++++-- __tests__/lossy.ts | 4 +++- examples/app.ts | 12 ++++++------ package.json | 3 +-- src/collection.ts | 2 +- src/deltas.ts | 2 +- src/http/api.ts | 6 +++--- src/http/html.ts | 7 +++++-- src/http/index.ts | 4 ++-- src/lossless.ts | 10 ++++++---- src/lossy.ts | 41 +++++++++++++++++++++-------------------- src/node.ts | 4 ++-- src/peers.ts | 26 +++++++++++++------------- src/pub-sub.ts | 27 ++++++++++++++------------- src/request-reply.ts | 14 +++++++++----- src/transactions.ts | 5 ++++- src/util/md-files.ts | 9 ++++++--- 17 files changed, 102 insertions(+), 81 deletions(-) diff --git a/__tests__/lossless.ts b/__tests__/lossless.ts index fe9f861..25a5b20 100644 --- a/__tests__/lossless.ts +++ b/__tests__/lossless.ts @@ -1,7 +1,10 @@ import {Delta, DeltaFilter} from '../src/delta.js'; import {Lossless} from '../src/lossless.js'; +import {RhizomeNode} from '../src/node.js'; describe('Lossless', () => { + const node = new RhizomeNode(); + it('creates a lossless view of keanu as neo in the matrix', () => { const delta = new Delta({ creator: 'a', @@ -27,7 +30,7 @@ describe('Lossless', () => { }] }); - const lossless = new Lossless(); + const lossless = new Lossless(node); lossless.ingestDelta(delta); @@ -84,7 +87,7 @@ describe('Lossless', () => { }); describe('can filter deltas', () => { - const lossless = new Lossless(); + const lossless = new Lossless(node); beforeAll(() => { lossless.ingestDelta(new Delta({ diff --git a/__tests__/lossy.ts b/__tests__/lossy.ts index fbe05ab..1e29c14 100644 --- a/__tests__/lossy.ts +++ b/__tests__/lossy.ts @@ -1,10 +1,12 @@ +import {RhizomeNode} from "../src/node.js"; import {Delta, PointerTarget} from "../src/delta.js"; import {Lossless, LosslessViewMany} from "../src/lossless.js"; import {Lossy, lastValueFromLosslessViewOne, valueFromCollapsedDelta } from "../src/lossy.js"; describe('Lossy', () => { describe('se a provided function to resolve entity views', () => { - const lossless = new Lossless(); + const node = new RhizomeNode(); + const lossless = new Lossless(node); const lossy = new Lossy(lossless); beforeAll(() => { diff --git a/examples/app.ts b/examples/app.ts index e9186e3..e2cd75a 100644 --- a/examples/app.ts +++ b/examples/app.ts @@ -27,11 +27,11 @@ type User = { users.rhizomeConnect(rhizomeNode); users.onUpdate((u: Entity) => { - debug('User updated:', u); + debug(`[${rhizomeNode.config.peerId}]`, 'User updated:', u); }); users.onCreate((u: Entity) => { - debug('New user!:', u); + debug(`[${rhizomeNode.config.peerId}]`, 'New user!:', u); }); await rhizomeNode.start(); @@ -64,9 +64,9 @@ type User = { const expected = JSON.stringify(taliesinData); if (result === expected) { - debug('Put result matches expected: ' + expected); + debug(`[${rhizomeNode.config.peerId}]`, 'Put result matches expected: ' + expected); } else { - debug(`Put result does not match expected.` + + debug(`[${rhizomeNode.config.peerId}]`, `Put result does not match expected.` + `\n\nExpected \n${expected}` + `\nReceived\n${result}`); } @@ -87,9 +87,9 @@ type User = { const expected = JSON.stringify(taliesinData); if (result === expected) { - debug('Get result matches expected: ' + expected); + debug(`[${rhizomeNode.config.peerId}]`, 'Get result matches expected: ' + expected); } else { - debug(`Get result does not match expected.` + + debug(`[${rhizomeNode.config.peerId}]`, `Get result does not match expected.` + `\n\nExpected \n${expected}` + `\nReceived\n${result}`); } diff --git a/package.json b/package.json index 57b9ea1..35dc333 100644 --- a/package.json +++ b/package.json @@ -20,9 +20,8 @@ "testMatch": [ "**/__tests__/**/*" ], - "verbose": true, "transform": { - "^.+\\.ts?$": [ + "^.+\\.ts$": [ "ts-jest", { "useESM": true diff --git a/src/collection.ts b/src/collection.ts index c40c174..87edbc4 100644 --- a/src/collection.ts +++ b/src/collection.ts @@ -45,7 +45,7 @@ export class Collection { rhizomeNode.httpServer.httpApi.serveCollection(this); - debug(`connected ${this.name} to rhizome`); + debug(`[${this.rhizomeNode.config.peerId}]`, `connected ${this.name} to rhizome`); } // Applies the javascript rules for updating object values, diff --git a/src/deltas.ts b/src/deltas.ts index 0b823cc..047ae9e 100644 --- a/src/deltas.ts +++ b/src/deltas.ts @@ -86,7 +86,7 @@ export class DeltaStream { } async publishDelta(delta: Delta) { - debug(`Publishing delta: ${JSON.stringify(delta)}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `Publishing delta: ${JSON.stringify(delta)}`); await this.rhizomeNode.pubSub.publish( this.rhizomeNode.config.pubSubTopic, this.serializeDelta(delta) diff --git a/src/http/api.ts b/src/http/api.ts index 4861f30..0ff7f4e 100644 --- a/src/http/api.ts +++ b/src/http/api.ts @@ -1,7 +1,7 @@ import express, {Router} from "express"; -import {Collection} from "src/collection"; -import {Delta} from "src/delta"; -import {RhizomeNode} from "src/node"; +import {Collection} from "../collection.js"; +import {Delta} from "../delta.js"; +import {RhizomeNode} from "../node.js"; export class HttpApi { router = Router(); diff --git a/src/http/html.ts b/src/http/html.ts index a16bc6b..aeea65c 100644 --- a/src/http/html.ts +++ b/src/http/html.ts @@ -1,11 +1,14 @@ import express, {Router} from "express"; +import {RhizomeNode} from "../node.js"; import {htmlDocFromMarkdown, MDFiles} from "../util/md-files.js"; export class HttpHtml { router = Router(); - mdFiles = new MDFiles(); + mdFiles: MDFiles; + + constructor(readonly rhizomeNode: RhizomeNode) { + this.mdFiles = new MDFiles(this.rhizomeNode); - constructor() { // Scan and watch for markdown files this.mdFiles.readDir(); this.mdFiles.readReadme(); diff --git a/src/http/index.ts b/src/http/index.ts index c064040..9c726b9 100644 --- a/src/http/index.ts +++ b/src/http/index.ts @@ -13,7 +13,7 @@ export class HttpServer { server?: Server; constructor(readonly rhizomeNode: RhizomeNode) { - this.httpHtml = new HttpHtml(); + this.httpHtml = new HttpHtml(this.rhizomeNode); this.httpApi = new HttpApi(this.rhizomeNode); this.app.use(express.json()); @@ -28,7 +28,7 @@ export class HttpServer { host: httpAddr, exclusive: true }, () => { - debug(`HTTP API bound to ${httpAddr}:${httpPort}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `HTTP API bound to ${httpAddr}:${httpPort}`); }); } diff --git a/src/lossless.ts b/src/lossless.ts index e32d5e7..6352bc4 100644 --- a/src/lossless.ts +++ b/src/lossless.ts @@ -6,6 +6,7 @@ import EventEmitter from 'events'; import {Delta, DeltaFilter, DeltaNetworkImage} from './delta.js'; import {Transactions} from './transactions.js'; import {DomainEntityID, PropertyID, PropertyTypes, TransactionID, ViewMany} from "./types.js"; +import {RhizomeNode} from './node.js'; const debug = Debug('lossless'); export type CollapsedPointer = {[key: PropertyID]: PropertyTypes}; @@ -64,13 +65,14 @@ class LosslessEntity { export class Lossless { domainEntities = new LosslessEntityMap(); - transactions = new Transactions(); + transactions: Transactions; referencedAs = new Map>(); eventStream = new EventEmitter(); - constructor() { + constructor(readonly rhizomeNode: RhizomeNode) { + this.transactions = new Transactions(this); this.transactions.eventStream.on("completed", (transactionId) => { - debug(`completed transaction ${transactionId}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `completed transaction ${transactionId}`); const transaction = this.transactions.get(transactionId); if (!transaction) return; for (const id of transaction.entityIds) { @@ -141,7 +143,7 @@ export class Lossless { if (delta.transactionId) { if (!this.transactions.isComplete(delta.transactionId)) { // TODO: Test this condition - debug(`excluding delta ${delta.id} because transaction ${delta.transactionId} is not completed`); + debug(`[${this.rhizomeNode.config.peerId}]`, `excluding delta ${delta.id} because transaction ${delta.transactionId} is not completed`); continue; } } diff --git a/src/lossy.ts b/src/lossy.ts index 203bc5d..2fd7bf5 100644 --- a/src/lossy.ts +++ b/src/lossy.ts @@ -5,11 +5,11 @@ // We can achieve this via functional expression, encoded as JSON-Logic. // Fields in the output can be described as transformations -import Debug from 'debug'; +// import Debug from 'debug'; import {DeltaFilter} from "./delta.js"; import {CollapsedDelta, Lossless, LosslessViewMany, LosslessViewOne} from "./lossless.js"; import {DomainEntityID, PropertyID, PropertyTypes, Timestamp, ViewMany} from "./types.js"; -const debug = Debug('lossy'); +// const debug = Debug('lossy'); type TimestampedProperty = { value: PropertyTypes, @@ -74,23 +74,6 @@ export function lastValueFromLosslessViewOne( return res; } -function defaultResolver(losslessView: LosslessViewMany): ResolvedViewMany { - const resolved: ResolvedViewMany = {}; - - debug('default resolver, lossless view', JSON.stringify(losslessView)); - for (const [id, ent] of Object.entries(losslessView)) { - resolved[id] = {id, properties: {}}; - - for (const key of Object.keys(ent.properties)) { - const {value} = lastValueFromLosslessViewOne(ent, key) || {}; - - debug(`[ ${key} ] = ${value}`); - resolved[id].properties[key] = value; - } - } - return resolved; -}; - // TODO: Incremental updates of lossy models. For example, with last-write-wins, // we keep the timeUpdated for each field. A second stage resolver can rearrange // the data structure to a preferred shape and may discard the timeUpdated info. @@ -108,11 +91,29 @@ export class Lossy { // TODO: Cache things! resolve(fn?: Resolver | Resolver, entityIds?: DomainEntityID[], deltaFilter?: DeltaFilter): T { if (!fn) { - fn = defaultResolver; + fn = (v) => this.defaultResolver(v); } const losslessView = this.lossless.view(entityIds, deltaFilter); return fn(losslessView) as T; } + + defaultResolver(losslessView: LosslessViewMany): ResolvedViewMany { + const resolved: ResolvedViewMany = {}; + + // debug(`[${this.lossless.rhizomeNode.config.peerId}]`, 'default resolver, lossless view', JSON.stringify(losslessView)); + for (const [id, ent] of Object.entries(losslessView)) { + resolved[id] = {id, properties: {}}; + + for (const key of Object.keys(ent.properties)) { + const {value} = lastValueFromLosslessViewOne(ent, key) || {}; + + // debug(`[${this.lossless.rhizomeNode.config.peerId}]`, `[ ${key} ] = ${value}`); + resolved[id].properties[key] = value; + } + } + return resolved; + }; + } // Generate a rule diff --git a/src/node.ts b/src/node.ts index 31b1540..c6e976e 100644 --- a/src/node.ts +++ b/src/node.ts @@ -54,7 +54,7 @@ export class RhizomeNode { pubSubTopic: PUB_SUB_TOPIC, ...config }; - debug('config', this.config); + debug(`[${this.config.peerId}]`, 'config', this.config); this.myRequestAddr = new PeerAddress( this.config.requestBindHost, this.config.requestBindPort @@ -68,7 +68,7 @@ export class RhizomeNode { this.httpServer = new HttpServer(this); this.deltaStream = new DeltaStream(this); this.peers = new Peers(this); - this.lossless = new Lossless(); + this.lossless = new Lossless(this); } async start() { diff --git a/src/peers.ts b/src/peers.ts index 2712b87..997f0d2 100644 --- a/src/peers.ts +++ b/src/peers.ts @@ -31,17 +31,17 @@ class Peer { async request(method: RequestMethods): Promise { if (!this.reqSock) { - this.reqSock = new RequestSocket(this.reqAddr); + this.reqSock = this.rhizomeNode.requestReply.createRequestSocket(this.reqAddr); } return this.reqSock.request(method); } async subscribeDeltas() { if (!this.publishAddr) { - debug(`requesting publish addr from peer ${this.reqAddr.toAddrString()}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `requesting publish addr from peer ${this.reqAddr.toAddrString()}`); const res = await this.request(RequestMethods.GetPublishAddress); this.publishAddr = PeerAddress.fromString(res.toString()); - debug(`received publish addr ${this.publishAddr.toAddrString()} from peer ${this.reqAddr.toAddrString()}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `received publish addr ${this.publishAddr.toAddrString()} from peer ${this.reqAddr.toAddrString()}`); } this.subscription = this.rhizomeNode.pubSub.subscribe( @@ -50,7 +50,7 @@ class Peer { (sender, msg) => { const delta = this.rhizomeNode.deltaStream.deserializeDelta(msg); delta.receivedFrom = sender; - debug(`Received delta: ${JSON.stringify(delta)}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `Received delta: ${JSON.stringify(delta)}`); this.rhizomeNode.deltaStream.ingestDelta(delta); }); @@ -81,19 +81,19 @@ export class Peers { this.addPeer(this.rhizomeNode.myRequestAddr); this.rhizomeNode.requestReply.registerRequestHandler(async (req: PeerRequest, res: ResponseSocket) => { - debug('inspecting peer request'); + debug(`[${this.rhizomeNode.config.peerId}]`, 'inspecting peer request'); switch (req.method) { case RequestMethods.GetPublishAddress: { - debug('it\'s a request for our publish address'); + debug(`[${this.rhizomeNode.config.peerId}]`, 'it\'s a request for our publish address'); await res.send(this.rhizomeNode.myPublishAddr.toAddrString()); break; } case RequestMethods.AskForDeltas: { - debug('it\'s a request for deltas'); + debug(`[${this.rhizomeNode.config.peerId}]`, 'it\'s a request for deltas'); // TODO: stream these rather than // trying to write them all in one message const deltas = this.rhizomeNode.deltaStream.deltasAccepted; - debug(`sending ${deltas.length} deltas`); + debug(`[${this.rhizomeNode.config.peerId}]`, `sending ${deltas.length} deltas`); await res.send(JSON.stringify(deltas)); break; } @@ -107,7 +107,7 @@ export class Peers { (sender, msg) => { const delta = this.rhizomeNode.deltaStream.deserializeDelta(msg); delta.receivedFrom = sender; - debug(`Received delta: ${JSON.stringify(delta)}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `Received delta: ${JSON.stringify(delta)}`); this.rhizomeNode.deltaStream.ingestDelta(delta); } ); @@ -116,13 +116,13 @@ export class Peers { addPeer(addr: PeerAddress): Peer { const peer = new Peer(this.rhizomeNode, addr); this.peers.push(peer); - debug('added peer', addr); + debug(`[${this.rhizomeNode.config.peerId}]`, 'added peer', addr); return peer; } async subscribeToSeeds() { SEED_PEERS.forEach(async (addr, idx) => { - debug(`SEED PEERS[${idx}]=${addr.toAddrString()}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `SEED PEERS[${idx}]=${addr.toAddrString()}`); const peer = this.addPeer(addr); await peer.subscribeDeltas(); }); @@ -132,9 +132,9 @@ export class Peers { async askAllPeersForDeltas() { this.peers.filter(({isSelf}) => !isSelf) .forEach(async (peer, idx) => { - debug(`Asking peer ${idx} for deltas`); + debug(`[${this.rhizomeNode.config.peerId}]`, `Asking peer ${idx} for deltas`); const deltas = await peer.askForDeltas(); - debug(`received ${deltas.length} deltas from ${peer.reqAddr.toAddrString()}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `received ${deltas.length} deltas from ${peer.reqAddr.toAddrString()}`); for (const delta of deltas) { delta.receivedFrom = peer.reqAddr; this.rhizomeNode.deltaStream.receiveDelta(delta); diff --git a/src/pub-sub.ts b/src/pub-sub.ts index c34ccaa..418b762 100644 --- a/src/pub-sub.ts +++ b/src/pub-sub.ts @@ -24,6 +24,7 @@ export class Subscription { libp2p?: Libp2p; constructor( + readonly pubSub: PubSub, publishAddr: PeerAddress, topic: string, cb: SubscribedMessageHandler, @@ -39,14 +40,14 @@ export class Subscription { async start() { this.sock.connect(this.publishAddrStr); this.sock.subscribe(this.topic); - debug(`Subscribing to ${this.topic} topic on ZeroMQ ${this.publishAddrStr}`); + debug(`[${this.pubSub.rhizomeNode.config.peerId}]`, `Subscribing to ${this.topic} topic on ZeroMQ ${this.publishAddrStr}`); // Wait for ZeroMQ messages. // This will block indefinitely. for await (const [, sender, msg] of this.sock) { const senderStr = PeerAddress.fromString(sender.toString()); const msgStr = msg.toString(); - debug(`ZeroMQ subscribtion received msg: ${msgStr}`); + debug(`[${this.pubSub.rhizomeNode.config.peerId}]`, `ZeroMQ subscribtion received msg: ${msgStr}`); this.cb(senderStr, msgStr); } } @@ -69,7 +70,7 @@ export class PubSub { async start() { await this.publishSock.bind(this.publishAddrStr); - debug(`ZeroMQ publishing socket bound to ${this.publishAddrStr}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `ZeroMQ publishing socket bound to ${this.publishAddrStr}`); this.libp2p = await createLibp2p({ addresses: { @@ -88,18 +89,18 @@ export class PubSub { }); this.libp2p.addEventListener("peer:discovery", (event) => { - debug(`found peer: ${JSON.stringify(event.detail, null, 2)}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `found peer: ${JSON.stringify(event.detail, null, 2)}`); this.libp2p?.dial(event.detail.multiaddrs); }); this.libp2p.addEventListener("peer:connect", (event) => { - debug(`connected to peer: ${JSON.stringify(event.detail, null, 2)}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `connected to peer: ${JSON.stringify(event.detail, null, 2)}`); // TODO: Subscribe }); } async publish(topic: string, msg: string) { - debug(`publishing to ZeroMQ, msg: ${msg}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `publishing to ZeroMQ, msg: ${msg}`); await this.publishSock.send([ topic, this.rhizomeNode.myRequestAddr.toAddrString(), @@ -108,11 +109,11 @@ export class PubSub { if (this.libp2p) { const pubsub = this.libp2p.services.pubsub as GossipSub; - debug(`publishing to Libp2p, msg: ${msg}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `publishing to Libp2p, msg: ${msg}`); try { await pubsub.publish(topic, Buffer.from(msg)); } catch (e: unknown) { - debug('Libp2p publish:', (e as Error).message); + debug(`[${this.rhizomeNode.config.peerId}]`, 'Libp2p publish:', (e as Error).message); } } } @@ -126,7 +127,7 @@ export class PubSub { // TODO: If we subscribe to multiple topics this callback will be duplicated pubsub.addEventListener("message", (event) => { const msg = Buffer.from(event.detail.data).toString(); - debug(`Libp2p subscribtion received msg: ${msg}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `Libp2p subscribtion received msg: ${msg}`); cb(new PeerAddress('libp2p', 0), msg); }); @@ -135,7 +136,7 @@ export class PubSub { if (!this.subscribedTopics.has(topic)) { pubsub.subscribe(topic); this.subscribedTopics.add(topic); - debug('subscribed topics:', Array.from(this.subscribedTopics.keys())); + debug(`[${this.rhizomeNode.config.peerId}]`, 'subscribed topics:', Array.from(this.subscribedTopics.keys())); } } @@ -144,7 +145,7 @@ export class PubSub { topic: string, cb: SubscribedMessageHandler ): Subscription { - const subscription = new Subscription(publishAddr, topic, cb, this.libp2p); + const subscription = new Subscription(this, publishAddr, topic, cb, this.libp2p); this.subscriptions.push(subscription); return subscription; } @@ -164,11 +165,11 @@ export class PubSub { pubsub.removeEventListener("message"); for (const topic of this.subscribedTopics) { - debug(`unsubscribing Libp2p topic ${topic}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `unsubscribing Libp2p topic ${topic}`); pubsub.unsubscribe(topic) } - debug('stopping gossipsub'); + debug(`[${this.rhizomeNode.config.peerId}]`, 'stopping gossipsub'); await pubsub.stop(); diff --git a/src/request-reply.ts b/src/request-reply.ts index 93a0ad3..176d986 100644 --- a/src/request-reply.ts +++ b/src/request-reply.ts @@ -16,10 +16,10 @@ export type RequestHandler = (req: PeerRequest, res: ResponseSocket) => void; export class RequestSocket { sock = new Request(); - constructor(addr: PeerAddress) { + constructor(readonly requestReply: RequestReply, addr: PeerAddress) { const addrStr = `tcp://${addr.addr}:${addr.port}`; this.sock.connect(addrStr); - debug(`Request socket connecting to ${addrStr}`); + debug(`[${this.requestReply.rhizomeNode.config.peerId}]`, `Request socket connecting to ${addrStr}`); } async request(method: RequestMethods): Promise { @@ -55,7 +55,7 @@ function peerRequestFromMsg(msg: Message): PeerRequest | null { const obj = JSON.parse(msg.toString()); req = {...obj}; } catch (e) { - debug('error receiving command', e); + console.error('error receiving command', e); } return req; } @@ -76,10 +76,10 @@ export class RequestReply { async start() { await this.replySock.bind(this.requestBindAddrStr); - debug(`Reply socket bound to ${this.requestBindAddrStr}`); + debug(`[${this.rhizomeNode.config.peerId}]`, `Reply socket bound to ${this.requestBindAddrStr}`); for await (const [msg] of this.replySock) { - debug(`Received message`, {msg: msg.toString()}); + debug(`[${this.rhizomeNode.config.peerId}]`, `Received message`, {msg: msg.toString()}); const req = peerRequestFromMsg(msg); this.requestStream.emit('request', req); } @@ -94,6 +94,10 @@ export class RequestReply { }); } + createRequestSocket(addr: PeerAddress) { + return new RequestSocket(this, addr); + } + async stop() { await this.replySock.unbind(this.requestBindAddrStr); this.replySock.close(); diff --git a/src/transactions.ts b/src/transactions.ts index 4b7a4a8..4046311 100644 --- a/src/transactions.ts +++ b/src/transactions.ts @@ -2,6 +2,7 @@ import Debug from "debug"; import EventEmitter from "events"; import {Delta, DeltaID} from "./delta.js"; import {DomainEntityID, TransactionID} from "./types.js"; +import {Lossless} from "./lossless.js"; const debug = Debug("transactions"); function getDeltaTransactionId(delta: Delta): TransactionID | undefined { @@ -58,6 +59,8 @@ export class Transactions { transactions = new Map(); eventStream = new EventEmitter(); + constructor(readonly lossless: Lossless) {} + get(id: TransactionID): Transaction | undefined { return this.transactions.get(id); } @@ -101,7 +104,7 @@ export class Transactions { if (transactionId && size) { // This delta describes a transaction - debug(`transaction ${transactionId} has size ${size}`); + debug(`[${this.lossless.rhizomeNode.config.peerId}]`, `transaction ${transactionId} has size ${size}`); this.setSize(transactionId, size as number); diff --git a/src/util/md-files.ts b/src/util/md-files.ts index f6ee014..f84b7c5 100644 --- a/src/util/md-files.ts +++ b/src/util/md-files.ts @@ -2,6 +2,7 @@ import Debug from "debug"; import {FSWatcher, readdirSync, readFileSync, watch} from "fs"; import path, {join} from "path"; import showdown from "showdown"; +import {RhizomeNode} from "../node.js"; const {Converter} = showdown; const debug = Debug('md-files'); @@ -30,6 +31,8 @@ export class MDFiles { readmeWatcher?: FSWatcher; latestIndexHtml?: Html; + constructor(readonly rhizomeNode: RhizomeNode) {} + readFile(name: string) { const md = readFileSync(join('./markdown', `${name}.md`)).toString(); let m = ""; @@ -96,14 +99,14 @@ export class MDFiles { switch (eventType) { case 'rename': { - debug(`file ${name} renamed`); + debug(`[${this.rhizomeNode.config.peerId}]`, `file ${name} renamed`); // Remove it from memory and re-scan everything this.files.delete(name); this.readDir(); break; } case 'change': { - debug(`file ${name} changed`); + debug(`[${this.rhizomeNode.config.peerId}]`, `file ${name} changed`); // Re-read this file this.readFile(name) break; @@ -118,7 +121,7 @@ export class MDFiles { switch (eventType) { case 'change': { - debug(`README file changed`); + debug(`[${this.rhizomeNode.config.peerId}]`, `README file changed`); // Re-read this file this.readReadme() break;