A few threshold tweaks

This commit is contained in:
Essem 2022-06-11 14:30:04 -05:00
parent 242f81f721
commit 80d4204538
No known key found for this signature in database
GPG Key ID: 7D497397CC3A2A8C
3 changed files with 62 additions and 47 deletions

40
app.js
View File

@ -174,35 +174,31 @@ if (isMaster) {
}); });
} }
//process the threshold into bytes early // process the threshold into bytes early
if (process.env.TEMPDIR&&process.env.THRESHOLD) { if (process.env.TEMPDIR && process.env.THRESHOLD) {
const matched = process.env.THRESHOLD.match(/(\d+)([KMGT])/); const matched = process.env.THRESHOLD.match(/(\d+)([KMGT])/);
const sizes = { const sizes = {
"K":1024, K: 1024,
"M":1048576, M: 1048576,
"G":1073741824, G: 1073741824,
"T":1099511627776 T: 1099511627776
}; };
if (matched&&matched[1]&&matched[2]) { if (matched && matched[1] && matched[2]) {
process.env.THRESHOLD=matched[1]*sizes[matched[2]]; process.env.THRESHOLD = matched[1] * sizes[matched[2]];
} else { } else {
logger.error("Invalid THRESHOLD config."); logger.error("Invalid THRESHOLD config.");
process.env.THRESHOLD = undefined; process.env.THRESHOLD = undefined;
} }
let dirstat = (await promises.readdir(process.env.TEMPDIR)) const dirstat = (await promises.readdir(process.env.TEMPDIR)).map(async (file) => {
.map(async (file)=>{ return new Promise((resolve) => {
return new Promise((resolve,reject) =>{ promises.stat(`${process.env.TEMPDIR}/${file}`).then((stats) => {
promises.stat(`${process.env.TEMPDIR}/${file}`) resolve(stats.size);
.then((stats)=>{ });
resolve(stats.size)
})
})
}); });
Promise.all(dirstat) });
.then((size)=>{ const size = await Promise.all(dirstat);
process.env.DIRSIZECACHE = size.reduce((a,b)=>{ process.env.DIRSIZECACHE = size.reduce((a, b)=>{
return a+b return a + b;
},0) }, 0);
})
} }
} }

View File

@ -55,6 +55,30 @@ export default async (client, cluster, worker, ipc, interaction) => {
}, },
}] }]
}); });
if (process.env.THRESHOLD) {
process.env.DIRSIZECACHE += result.file.length;
if (process.env.DIRSIZECACHE > process.env.THRESHOLD) {
const files = (await promises.readdir(process.env.TEMPDIR)).map((file) => {
return new Promise((resolve, reject) => {
promises.stat(`${process.env.TEMPDIR}/${file}`).then((fstats)=>{
resolve({
name: file,
size: fstats.size,
ctime: fstats.ctime
});
}).catch(reject);
});
});
Promise.all(files).then((files) => {
process.env.DIRSIZECACHE = files.reduce((a, b)=>{
return a+b.size;
}, 0);
const oldestFile = files.sort((a, b) => a.ctime - b.ctime)[0].name;
promises.rm(`${process.env.TEMPDIR}/${oldestFile}`);
logger.log(`Removed oldest image file: ${oldestFile}`);
});
}
}
} else { } else {
await interaction[interaction.acknowledged ? "editOriginalMessage" : "createMessage"]("The resulting image was more than 8MB in size, so I can't upload it."); await interaction[interaction.acknowledged ? "editOriginalMessage" : "createMessage"]("The resulting image was more than 8MB in size, so I can't upload it.");
} }

View File

@ -4,7 +4,6 @@ import { log, error as _error } from "../utils/logger.js";
import { prefixCache, aliases, disabledCache, disabledCmdCache, commands } from "../utils/collections.js"; import { prefixCache, aliases, disabledCache, disabledCmdCache, commands } from "../utils/collections.js";
import parseCommand from "../utils/parseCommand.js"; import parseCommand from "../utils/parseCommand.js";
import { clean } from "../utils/misc.js"; import { clean } from "../utils/misc.js";
import { spawn } from "child_process";
// run when someone sends a message // run when someone sends a message
export default async (client, cluster, worker, ipc, message) => { export default async (client, cluster, worker, ipc, message) => {
@ -144,31 +143,27 @@ export default async (client, cluster, worker, ipc, message) => {
}] }]
}, reference)); }, reference));
if (process.env.THRESHOLD) { if (process.env.THRESHOLD) {
process.env.DIRSIZECACHE+=result.file.length; process.env.DIRSIZECACHE += result.file.length;
if (process.env.DIRSIZECACHE>process.env.THRESHOLD) { if (process.env.DIRSIZECACHE > process.env.THRESHOLD) {
const files = (await promises.readdir(process.env.TEMPDIR)) const files = (await promises.readdir(process.env.TEMPDIR)).map((file) => {
.map((file)=>{ return new Promise((resolve, reject) => {
return new Promise((resolve,reject) => { promises.stat(`${process.env.TEMPDIR}/${file}`).then((fstats)=>{
promises.stat(`${process.env.TEMPDIR}/${file}`) resolve({
.then((fstats)=>{ name: file,
resolve({ size: fstats.size,
name:file, ctime: fstats.ctime
size:fstats.size, });
ctime:fstats.ctime }).catch(reject);
});
})
.catch(reject);
});
});
Promise.all(files)
.then((files)=>{
process.env.DIRSIZECACHE = files.reduce((a,b)=>{
return a+b.size
},0)
const oldestFile = files.sort((a, b) => a.ctime - b.ctime)[0].name;
promises.rm(`${process.env.TEMPDIR}/${oldestFile}`);
log(`Removed oldest image file: ${oldestFile}`);
}); });
});
Promise.all(files).then((files) => {
process.env.DIRSIZECACHE = files.reduce((a, b)=>{
return a+b.size;
}, 0);
const oldestFile = files.sort((a, b) => a.ctime - b.ctime)[0].name;
promises.rm(`${process.env.TEMPDIR}/${oldestFile}`);
log(`Removed oldest image file: ${oldestFile}`);
});
} }
} }
} else { } else {