@evanp/activitypub-bot 0.45.6 → 0.45.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/lib/app.js +26 -0
- package/lib/bots/followback.js +0 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,19 @@ and this project adheres to
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [0.45.8] - 2026-04-29
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- Log memory usage.
|
|
17
|
+
|
|
18
|
+
## [0.45.7] - 2026-04-27
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Remove `onIdle` call that stalled FollowbackBot
|
|
23
|
+
since no workers had started yet.
|
|
24
|
+
|
|
12
25
|
## [0.45.6] - 2026-04-27
|
|
13
26
|
|
|
14
27
|
### Fixed
|
package/lib/app.js
CHANGED
|
@@ -2,6 +2,7 @@ import http from 'node:http'
|
|
|
2
2
|
import { resolve, dirname } from 'node:path'
|
|
3
3
|
import { fileURLToPath } from 'node:url'
|
|
4
4
|
import { randomUUID } from 'node:crypto'
|
|
5
|
+
import v8 from 'node:v8'
|
|
5
6
|
|
|
6
7
|
import { Sequelize } from 'sequelize'
|
|
7
8
|
import express from 'express'
|
|
@@ -69,6 +70,19 @@ export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent',
|
|
|
69
70
|
level: logLevel
|
|
70
71
|
})
|
|
71
72
|
logger.debug('Logger initialized')
|
|
73
|
+
const memoryStatus = (message = 'memory', level = 'debug') => {
|
|
74
|
+
const mem = process.memoryUsage()
|
|
75
|
+
const heap = v8.getHeapStatistics()
|
|
76
|
+
logger[level]({
|
|
77
|
+
rss: mem.rss,
|
|
78
|
+
heapUsed: mem.heapUsed,
|
|
79
|
+
heapTotal: mem.heapTotal,
|
|
80
|
+
external: mem.external,
|
|
81
|
+
arrayBuffers: mem.arrayBuffers,
|
|
82
|
+
heapSizeLimit: heap.heap_size_limit
|
|
83
|
+
}, message)
|
|
84
|
+
}
|
|
85
|
+
memoryStatus('makeApp started')
|
|
72
86
|
const connection = databaseUrl === 'sqlite::memory:' || databaseUrl === 'sqlite::memory'
|
|
73
87
|
? new Sequelize({ dialect: 'sqlite', storage: ':memory:', logging: false })
|
|
74
88
|
: new Sequelize(databaseUrl, { logging: false })
|
|
@@ -132,6 +146,8 @@ export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent',
|
|
|
132
146
|
await redisClient.connect()
|
|
133
147
|
}
|
|
134
148
|
|
|
149
|
+
memoryStatus('services initialized')
|
|
150
|
+
|
|
135
151
|
await Promise.all(
|
|
136
152
|
Object.entries(bots).map(([key, bot]) => bot.initialize(
|
|
137
153
|
new BotContext(
|
|
@@ -169,6 +185,8 @@ export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent',
|
|
|
169
185
|
bots
|
|
170
186
|
))
|
|
171
187
|
|
|
188
|
+
memoryStatus('bots initialized')
|
|
189
|
+
|
|
172
190
|
const { workers: deliveryWorkers, runs: deliveryWorkerRuns } = createWorkers(logger, deliveryWorkerCount, DeliveryWorker, jobQueue, logger, { actorStorage, activityHandler, bots })
|
|
173
191
|
const { workers: distributionWorkers, runs: distributionWorkerRuns } = createWorkers(logger, distributionWorkerCount, DistributionWorker, jobQueue, logger, { client })
|
|
174
192
|
const { workers: fanoutWorkers, runs: fanoutWorkerRuns } = createWorkers(logger, fanoutWorkerCount, FanoutWorker, jobQueue, logger, { distributor })
|
|
@@ -179,6 +197,11 @@ export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent',
|
|
|
179
197
|
logger.error({ err }, 'unexpected error in job reaper')
|
|
180
198
|
})
|
|
181
199
|
|
|
200
|
+
memoryStatus('workers initialized')
|
|
201
|
+
|
|
202
|
+
const memInterval = setInterval(() => memoryStatus('memory', 'info'), 60_000)
|
|
203
|
+
memInterval.unref()
|
|
204
|
+
|
|
182
205
|
const app = express()
|
|
183
206
|
|
|
184
207
|
app.locals = {
|
|
@@ -415,8 +438,11 @@ export async function makeApp ({ databaseUrl, origin, bots, logLevel = 'silent',
|
|
|
415
438
|
}
|
|
416
439
|
logger.info('Closing database connection')
|
|
417
440
|
await connection.close()
|
|
441
|
+
clearInterval(memInterval)
|
|
418
442
|
logger.info('Done')
|
|
419
443
|
}
|
|
420
444
|
|
|
445
|
+
memoryStatus('app initialized', 'info')
|
|
446
|
+
|
|
421
447
|
return app
|
|
422
448
|
}
|
package/lib/bots/followback.js
CHANGED
|
@@ -27,8 +27,6 @@ export default class FollowBackBot extends Bot {
|
|
|
27
27
|
async initialize (context) {
|
|
28
28
|
await super.initialize(context)
|
|
29
29
|
await this.#undoStalePendingFollowing()
|
|
30
|
-
// Drain the queue so undos arrive before re-follows
|
|
31
|
-
await this._context.onIdle()
|
|
32
30
|
await this.#synchronizeFollowers()
|
|
33
31
|
}
|
|
34
32
|
|