This commit is contained in:
boufni95 2025-02-05 15:57:02 +00:00
parent 531947a497
commit ea28cbc1b5
3 changed files with 13 additions and 13 deletions

View file

@ -9,9 +9,9 @@ export default class {
last24hCache: { ts: number, ok: number, fail: number }[] = [] last24hCache: { ts: number, ok: number, fail: number }[] = []
lastPersistedCache: number = 0 lastPersistedCache: number = 0
constructor(settings: StorageSettings) { constructor(settings: StorageSettings) {
const metricsPath = [settings.dataDir, "metric_events"].join("/") const metricsPath = [settings.dataDir, "metric_events"].filter(s => !!s).join("/")
this.tlvStorage = new TlvFilesStorage(metricsPath) this.tlvStorage = new TlvFilesStorage(metricsPath)
this.cachePath = [settings.dataDir, "metric_cache"].join("/") this.cachePath = [settings.dataDir, "metric_cache"].filter(s => !!s).join("/")
if (!fs.existsSync(this.cachePath)) { if (!fs.existsSync(this.cachePath)) {
fs.mkdirSync(this.cachePath, { recursive: true }); fs.mkdirSync(this.cachePath, { recursive: true });
} }
@ -60,12 +60,12 @@ export default class {
} }
persistCache = () => { persistCache = () => {
const last24CachePath = [this.cachePath, "last24hSF.json"].join("/") const last24CachePath = [this.cachePath, "last24hSF.json"].filter(s => !!s).filter(s => !!s).join("/")
fs.writeFileSync(last24CachePath, JSON.stringify(this.last24hCache), {}) fs.writeFileSync(last24CachePath, JSON.stringify(this.last24hCache), {})
} }
loadCache = () => { loadCache = () => {
const last24CachePath = [this.cachePath, "last24hSF.json"].join("/") const last24CachePath = [this.cachePath, "last24hSF.json"].filter(s => !!s).filter(s => !!s).join("/")
if (fs.existsSync(last24CachePath)) { if (fs.existsSync(last24CachePath)) {
this.last24hCache = JSON.parse(fs.readFileSync(last24CachePath, 'utf-8')) this.last24hCache = JSON.parse(fs.readFileSync(last24CachePath, 'utf-8'))
this.rotateCache(Math.floor(Date.now() / 1000)) this.rotateCache(Math.floor(Date.now() / 1000))

View file

@ -32,7 +32,7 @@ export class StateBundler {
tlvStorage: TlvFilesStorage tlvStorage: TlvFilesStorage
reportLog = getLogger({ component: 'stateBundlerReport' }) reportLog = getLogger({ component: 'stateBundlerReport' })
constructor(settings: StorageSettings) { constructor(settings: StorageSettings) {
const bundlerPath = [settings.dataDir, "bundler_events"].join("/") const bundlerPath = [settings.dataDir, "bundler_events"].filter(s => !!s).join("/")
this.tlvStorage = new TlvFilesStorage(bundlerPath) this.tlvStorage = new TlvFilesStorage(bundlerPath)
this.tlvStorage.initMeta() this.tlvStorage.initMeta()
} }

View file

@ -28,7 +28,7 @@ export class TlvFilesStorage {
if (!this.metaReady || !this.meta[app] || !this.meta[app][dataName] || !this.meta[app][dataName].chunks.includes(chunk)) { if (!this.metaReady || !this.meta[app] || !this.meta[app][dataName] || !this.meta[app][dataName].chunks.includes(chunk)) {
throw new Error("metrics not found") throw new Error("metrics not found")
} }
const fullPath = [this.storagePath, app, dataName, `${chunk}.mtlv`].join("/") const fullPath = [this.storagePath, app, dataName, `${chunk}.mtlv`].filter(s => !!s).join("/")
const fileData = fs.readFileSync(fullPath) const fileData = fs.readFileSync(fullPath)
return { fileData, chunks: this.meta[app][dataName].chunks } return { fileData, chunks: this.meta[app][dataName].chunks }
} }
@ -51,9 +51,9 @@ export class TlvFilesStorage {
const data: LatestData = {} const data: LatestData = {}
this.foreachFile((app, dataName, tlvFiles) => { this.foreachFile((app, dataName, tlvFiles) => {
if (tlvFiles.length === 0) { return } if (tlvFiles.length === 0) { return }
const methodPath = [this.storagePath, app, dataName].join("/") const methodPath = [this.storagePath, app, dataName].filter(s => !!s).join("/")
const latest = tlvFiles[tlvFiles.length - 1] const latest = tlvFiles[tlvFiles.length - 1]
const tlvFile = [methodPath, `${latest}.mtlv`].join("/") const tlvFile = [methodPath, `${latest}.mtlv`].filter(s => !!s).join("/")
const tlv = fs.readFileSync(tlvFile) const tlv = fs.readFileSync(tlvFile)
const decoded = decodeListTLV(parseTLV(tlv)) const decoded = decodeListTLV(parseTLV(tlv))
if (!data[app]) { if (!data[app]) {
@ -80,13 +80,13 @@ export class TlvFilesStorage {
this.pending = {} this.pending = {}
const apps = Object.keys(tosync) const apps = Object.keys(tosync)
apps.map(app => { apps.map(app => {
const appPath = [this.storagePath, app].join("/") const appPath = [this.storagePath, app].filter(s => !!s).join("/")
if (!fs.existsSync(appPath)) { if (!fs.existsSync(appPath)) {
fs.mkdirSync(appPath, { recursive: true }); fs.mkdirSync(appPath, { recursive: true });
} }
const dataNames = Object.keys(tosync[app]) const dataNames = Object.keys(tosync[app])
dataNames.map(dataName => { dataNames.map(dataName => {
const dataPath = [appPath, dataName].join("/") const dataPath = [appPath, dataName].filter(s => !!s).join("/")
if (!fs.existsSync(dataPath)) { if (!fs.existsSync(dataPath)) {
fs.mkdirSync(dataPath, { recursive: true }); fs.mkdirSync(dataPath, { recursive: true });
} }
@ -95,7 +95,7 @@ export class TlvFilesStorage {
const chunks = meta.chunks.length > 0 ? meta.chunks : [0] const chunks = meta.chunks.length > 0 ? meta.chunks : [0]
const latest = chunks[chunks.length - 1] const latest = chunks[chunks.length - 1]
const tlv = encodeTLV(encodeListTLV(data.tlvs)) const tlv = encodeTLV(encodeListTLV(data.tlvs))
const tlvFile = [dataPath, `${latest}.mtlv`].join("/") const tlvFile = [dataPath, `${latest}.mtlv`].filter(s => !!s).join("/")
fs.appendFileSync(tlvFile, Buffer.from(tlv)) fs.appendFileSync(tlvFile, Buffer.from(tlv))
if (fs.lstatSync(tlvFile).size > chunkSizeBytes) { if (fs.lstatSync(tlvFile).size > chunkSizeBytes) {
this.updateMeta(app, dataName, [...chunks, latest + 1]) this.updateMeta(app, dataName, [...chunks, latest + 1])
@ -131,13 +131,13 @@ export class TlvFilesStorage {
} }
const apps = fs.readdirSync(this.storagePath) const apps = fs.readdirSync(this.storagePath)
apps.forEach(appDir => { apps.forEach(appDir => {
const appPath = [this.storagePath, appDir].join("/") const appPath = [this.storagePath, appDir].filter(s => !!s).join("/")
if (!fs.lstatSync(appPath).isDirectory()) { if (!fs.lstatSync(appPath).isDirectory()) {
return return
} }
const dataNames = fs.readdirSync(appPath) const dataNames = fs.readdirSync(appPath)
dataNames.forEach(dataName => { dataNames.forEach(dataName => {
const dataPath = [appPath, dataName].join("/") const dataPath = [appPath, dataName].filter(s => !!s).join("/")
if (!fs.lstatSync(dataPath).isDirectory()) { if (!fs.lstatSync(dataPath).isDirectory()) {
return return
} }