Skip to content
Open
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
2 changes: 1 addition & 1 deletion config.default.json5
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
multiAddr: '/ip4/109.123.240.102/tcp/4001/p2p/12D3KooWHTvrWSTCXZFR2vS8Cbw17b5peK2aSBr8CmkyA96CDqiU'
}
],
storeFolder: '.adm-ipfs',
storeFolder: './.adm-ipfs',
logLevel: 'debug',
peerDiscovery: {
bootstrap: [
Expand Down
33 changes: 21 additions & 12 deletions src/disk-usage.cron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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,
Expand Down
8 changes: 6 additions & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -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}`)

Expand Down Expand Up @@ -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.' })
})
Expand Down
11 changes: 4 additions & 7 deletions src/store.ts
Original file line number Diff line number Diff line change
@@ -1,13 +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')

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 })