Skip to content

Commit 9dd30c8

Browse files
committed
feat: add debug mode
1 parent 848fa6d commit 9dd30c8

File tree

11 files changed

+3730
-4048
lines changed

11 files changed

+3730
-4048
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
"publish": "nr prepublishOnly && esno scripts/publish.ts",
4848
"release": "esno scripts/release.ts",
4949
"start": "esno src/index.ts",
50-
"test": "vitest",
50+
"test": "DEBUG=ora-stack:* vitest",
5151
"typecheck": "tsc --noEmit"
5252
},
5353
"devDependencies": {

packages/orap/src/debug.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { debug as debugFn } from '@ora-io/utils'
2+
3+
export function debug(formatter: any, ...args: any[]) {
4+
return debugFn('orap')(formatter, ...args)
5+
}

packages/orap/src/flow/orap.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { Fn } from '@ora-io/utils'
33
import type { Interface, InterfaceAbi } from 'ethers'
44
import { OrapVerse } from '../verse/orap'
55
import type { EventSignalRegisterParams } from '../signal'
6+
import { debug } from '../debug'
67
import { EventFlow } from './event'
78
import type { Flow, HandleFn } from './interface'
89

@@ -35,6 +36,7 @@ export class OrapFlow implements Flow {
3536

3637
const eventFlow = new EventFlow(this, params, handler)
3738
this.subflows.event.push(eventFlow)
39+
debug('The event %s is registered, address: %s', params.eventName, params.address)
3840
return eventFlow
3941
}
4042

packages/reku/src/debug.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { debug as debugFn } from '@ora-io/utils'
2+
3+
export function debug(formatter: any, ...args: any[]) {
4+
return debugFn('reku')(formatter, ...args)
5+
}

packages/reku/src/event/crosschecker/autochecker.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { ethers } from 'ethers'
22
import { polling, sleep, timeoutWithRetry } from '@ora-io/utils'
33
import { ETH_BLOCK_INTERVAL } from '../../constants'
44
import type { Providers } from '../../types/w3'
5+
import { debug } from '../../debug'
56
import { CrossCheckerCacheManager } from './cache/manager'
67
import type { AutoCrossCheckParam, CrossCheckRangeParam, SimpleLog } from './interface'
78
import { BaseCrossChecker } from './basechecker'
@@ -113,9 +114,13 @@ export class AutoCrossChecker extends BaseCrossChecker {
113114
// never ends if options.toBlock is not provided
114115
: () => false
115116

117+
debug('crosscheck running')
118+
116119
// TODO: replace polling with schedule cron
117120
await polling(async () => {
118-
if (await waitOrUpdateToBlock()) {
121+
const wait = await waitOrUpdateToBlock()
122+
debug('polling interval: %d, wait: %s', pollingInterval, wait)
123+
if (wait) {
119124
await this.crossCheckRange(ccrOptions)
120125
// only update options after cc succ
121126
await updateCCROptions(ccrOptions)

packages/reku/src/event/crosschecker/basechecker.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { ethers } from 'ethers'
22
import { timeoutWithRetry } from '@ora-io/utils'
33
import { ETH_BLOCK_COUNT_ONE_HOUR } from '../../constants'
44
import type { Providers } from '../../types/w3'
5+
import { debug } from '../../debug'
56
import type { CrossCheckFromParam, CrossCheckRangeParam, CrossCheckRetroParam, SimpleLog } from './interface'
67

78
export class BaseCrossChecker {
@@ -77,6 +78,13 @@ export class BaseCrossChecker {
7778
return block.number
7879
}
7980

81+
/**
82+
* @deprecated
83+
* @param logs
84+
* @param txHashList
85+
* @param logIndexList
86+
* @returns
87+
*/
8088
async diff_old(logs: ethers.Log[], txHashList: string[], logIndexList: number[][]): Promise<ethers.Log[]> {
8189
const missing = (log: ethers.Log) => {
8290
const txIndex = txHashList?.indexOf(log.transactionHash) || -1
@@ -105,6 +113,7 @@ export class BaseCrossChecker {
105113
async _crossCheck(options: CrossCheckRangeParam) {
106114
// get period logs
107115
const { fromBlock, toBlock, address, topics } = options
116+
debug('start crosscheck from %d to %d', fromBlock, toBlock)
108117
const params = {
109118
fromBlock,
110119
toBlock,
@@ -120,8 +129,10 @@ export class BaseCrossChecker {
120129
const missingLogs = ignoreLogs ? await this.diff(logs, ignoreLogs) : logs
121130

122131
// callback on missing logs
123-
for (const log of missingLogs)
132+
for (const log of missingLogs) {
133+
debug('missing tx hash: %s', log.transactionHash)
124134
await options.onMissingLog(log)
135+
}
125136
}
126137
}
127138
}

packages/reku/src/provider/provider.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { EventEmitter } from 'node:events'
22
import type { InterfaceAbi } from 'ethers'
33
import { Interface, WebSocketProvider, ethers } from 'ethers'
44
import type { ErrorEvent, WebSocket } from 'ws'
5+
import { debug } from '../debug'
56
import { ContractManager } from './contract'
67

78
export interface RekuProviderManagerOptions {
@@ -127,6 +128,7 @@ export class RekuProviderManager {
127128
}
128129

129130
reconnect() {
131+
debug('reconnect provider running...')
130132
// destroy heartbeat
131133
this._clearHeartbeat()
132134
this._heartbeatTimer = undefined
@@ -142,11 +144,13 @@ export class RekuProviderManager {
142144
const socket = this._provider.websocket as WebSocket
143145
socket.removeAllListeners()
144146
socket.onerror = null
147+
debug('remove all listeners of websocket provider')
145148
}
146149
this._provider?.destroy()
147150
this._provider = undefined
148151

149152
setTimeout(() => {
153+
debug('reconnect provider start')
150154
// reconnect provider
151155
this.connect()
152156
// reset contracts
@@ -164,15 +168,19 @@ export class RekuProviderManager {
164168
this._contracts = contracts
165169
// resend heartbeat
166170
this._sendHeartbeat()
171+
debug('reconnect provider end')
167172
}, 100)
168173
}
169174

170175
private _sendHeartbeat() {
171176
if (this._options?.disabledHeartbeat)
172177
return
178+
debug('start heartbeat')
173179
this._heartbeatTimer = setInterval(() => {
174180
this._provider?.send('net_version', [])
175-
.then()
181+
.then((res) => {
182+
debug('heartbeat response: %s', res)
183+
})
176184
.catch((err) => {
177185
this.reconnect()
178186
this._event?.emit('error', err)
@@ -181,30 +189,36 @@ export class RekuProviderManager {
181189
}
182190

183191
private _clearHeartbeat() {
184-
if (this._heartbeatTimer)
192+
if (this._heartbeatTimer) {
193+
debug('clear heartbeat')
185194
clearInterval(this._heartbeatTimer)
195+
}
186196
}
187197

188198
private _handleError() {
189199
this._provider?.on('error', () => {
200+
debug('provider error event emitted')
190201
this.reconnect()
191202
this._event?.emit('error', new Error('provider error'))
192203
})
193204

194205
if (this._provider instanceof ethers.WebSocketProvider) {
195206
const websocket = this._provider.websocket as WebSocket
196207
websocket.onerror = (event: ErrorEvent) => {
208+
debug('websocket error event emitted')
197209
this.reconnect()
198210
this._event?.emit('error', new Error('websocket error'), event)
199211
}
200212
websocket.on?.('close', (code: number, reason: string) => {
213+
debug('websocket close event emitted')
201214
this.reconnect()
202215
this._event?.emit('close', code, reason)
203216
})
204217
}
205218
}
206219

207220
destroy() {
221+
debug('destroy provider running...')
208222
this._clearHeartbeat()
209223
this._provider?.removeAllListeners()
210224
this._provider?.destroy()
@@ -215,5 +229,6 @@ export class RekuProviderManager {
215229
this._contracts.clear()
216230
this._event?.removeAllListeners()
217231
this._event = undefined
232+
debug('destroy provider end')
218233
}
219234
}

packages/utils/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,15 @@
4646
"@murongg/utils": "^0.1.28",
4747
"cache-manager": "^5.7.6",
4848
"cache-manager-ioredis-yet": "^2.1.1",
49+
"debug": "^4.3.7",
4950
"ioredis": "^5.4.1",
5051
"lodash.clonedeep": "^4.5.0",
5152
"lru-cache": "^11.0.1",
5253
"picocolors": "^1.0.1",
5354
"telejson": "^7.2.0"
5455
},
5556
"devDependencies": {
57+
"@types/debug": "^4.1.12",
5658
"@types/lodash.clonedeep": "^4.5.9"
5759
}
5860
}

packages/utils/src/common/debug.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import debugFn from 'debug'
2+
3+
export function debug(workspace: string) {
4+
return debugFn(`ora-stack:${workspace}`)
5+
}

packages/utils/src/common/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from './retry'
33
export * from './type'
44
export * from './basic'
55
export * from './fn'
6+
export * from './debug'

0 commit comments

Comments
 (0)