From c343eac9c5ce09e994ee26fcb952b9b1cedef089 Mon Sep 17 00:00:00 2001 From: Andrei Krivenko Date: Wed, 11 Jun 2025 17:46:33 +0300 Subject: [PATCH 1/2] chore: allow arbitrary storage dir --- config.default.json5 | 2 +- src/store.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config.default.json5 b/config.default.json5 index ebfa126..bcb5208 100644 --- a/config.default.json5 +++ b/config.default.json5 @@ -13,7 +13,7 @@ multiAddr: '/ip4/109.123.240.102/tcp/4001/p2p/12D3KooWHTvrWSTCXZFR2vS8Cbw17b5peK2aSBr8CmkyA96CDqiU' } ], - storeFolder: '.adm-ipfs', + storeFolder: './.adm-ipfs', logLevel: 'debug', peerDiscovery: { bootstrap: [ diff --git a/src/store.ts b/src/store.ts index c5bdd42..e3eb144 100644 --- a/src/store.ts +++ b/src/store.ts @@ -1,10 +1,10 @@ import { FsBlockstore } from 'blockstore-fs' import { FsDatastore } from 'datastore-fs' -import { homedir } from 'os' import { join } from 'path' import { config } from './config.js' -const userHomeDir = homedir() +export const blockstorePath = join(config.storeFolder, 'blockstore') +export const datastorePath = join(config.storeFolder, 'datastore') export const blockstorePath = join(userHomeDir, config.storeFolder, 'blockstore') export const datastorePath = join(userHomeDir, config.storeFolder, 'datastore') From cb3ef4106e995733dceb47e2f0f3f3b8a5522d97 Mon Sep 17 00:00:00 2001 From: Andrei Krivenko Date: Wed, 11 Jun 2025 17:48:09 +0300 Subject: [PATCH 2/2] chore: update cron --- src/disk-usage.cron.ts | 33 +++++++++++++++++++++------------ src/index.ts | 8 ++++++-- src/store.ts | 7 ++----- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/disk-usage.cron.ts b/src/disk-usage.cron.ts index 404f8e6..0d7e764 100644 --- a/src/disk-usage.cron.ts +++ b/src/disk-usage.cron.ts @@ -10,18 +10,29 @@ let blockstoreSizeMb = 0 let datastoreSizeMb = 0 let availableSizeInMb = 0 -let started = false -export const diskUsageCron = new CronJob(config.diskUsageScanPeriod, () => { - if (!started) { - started = true - scan() - .catch((err) => pino.logger.error(`${err.message}\n${err.stack}`)) - .finally(() => (started = false)) - } +let isRunning = false +export const diskUsageCron = CronJob.from({ + cronTime: config.diskUsageScanPeriod, + onTick: async () => { + try { + if (!isRunning) { + isRunning = true + pino.logger.info('[Cron] Running "diskUsage" cronjob.') + const duration = await scan() + pino.logger.info(`[Cron] "diskUsage" cronjob took ${duration} ms.`) + isRunning = false + } + } catch (error) { + pino.logger.error(`${error.message}\n${error.stack}`) + } finally { + isRunning = false + } + }, + start: false, + name: 'diskUsage' }) async function scan() { - pino.logger.info('[Cron] Running "diskUsage" cronjob.') const start = Date.now() const blockstoreSize = await dirSize(blockstorePath) @@ -35,11 +46,9 @@ async function scan() { } availableSizeInMb = Number((await availableStorageSize()) / BigInt(oneMb)) - pino.logger.info(`Check folder size took ${Date.now() - start} ms.`) + return Date.now() - start } -scan().catch((err) => pino.logger.error(`${err.message}\n${err.stack}`)) - export function getDiskUsageStats() { return { blockstoreSizeMb, diff --git a/src/index.ts b/src/index.ts index dd520c6..7574d8f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,10 +1,14 @@ -import express, { NextFunction } from 'express' +import express from 'express' import { Request, Response } from 'express' import { pino } from './utils/logger.js' import { config, CONFIG_FILE_NAME } from './config.js' import { diskUsageCron } from './disk-usage.cron.js' import cors from 'cors' import * as routers from './api/index.js' +import { datastore, blockstore } from './store.js' + +await datastore.open() +await blockstore.open() pino.logger.info(`Using config file: ${CONFIG_FILE_NAME}`) @@ -33,7 +37,7 @@ app.use('/api/helia', routers.helia) app.use('/api/libp2p', routers.libp2p) app.use('/api/debug', routers.debug) -app.use((err: Error, req: Request, res: Response, next: NextFunction) => { +app.use((err: Error, req: Request, res: Response) => { pino.logger.error(`${err.message}\n${err.stack}`) res.status(500).send({ error: 'Internal Server Error. See logs.' }) }) diff --git a/src/store.ts b/src/store.ts index e3eb144..30e18a5 100644 --- a/src/store.ts +++ b/src/store.ts @@ -6,8 +6,5 @@ import { config } from './config.js' export const blockstorePath = join(config.storeFolder, 'blockstore') export const datastorePath = join(config.storeFolder, 'datastore') -export const blockstorePath = join(userHomeDir, config.storeFolder, 'blockstore') -export const datastorePath = join(userHomeDir, config.storeFolder, 'datastore') - -export const blockstore = new FsBlockstore(blockstorePath) -export const datastore = new FsDatastore(datastorePath) +export const blockstore = new FsBlockstore(blockstorePath, { createIfMissing: true }) +export const datastore = new FsDatastore(datastorePath, { createIfMissing: true })