mirror of
https://codeberg.org/tacerus/teddit.git
synced 2024-11-21 22:39:23 +01:00
introduce a cache control: a way of keeping the cache directory under certain size (should fix #229)
This commit is contained in:
parent
e311ce717c
commit
e0b5cc6e40
3
app.js
3
app.js
@ -153,6 +153,9 @@ redis.on('error', (error) => {
|
||||
}
|
||||
})
|
||||
|
||||
const cacheControl = require('./cacheControl.js')
|
||||
cacheControl.removeCacheFiles()
|
||||
|
||||
if(config.https_enabled) {
|
||||
https.listen(config.ssl_port, config.listen_address, () => console.log(`Teddit running on https://${config.domain}:${config.ssl_port}`))
|
||||
}
|
||||
|
58
cacheControl.js
Normal file
58
cacheControl.js
Normal file
@ -0,0 +1,58 @@
|
||||
module.exports.removeCacheFiles = function() {
|
||||
const fs = require('fs')
|
||||
const config = require('./config')
|
||||
const pics = './static/pics'
|
||||
const flairs = './static/pics/flairs'
|
||||
const icons = './static/pics/icons'
|
||||
const thumbs = './static/pics/thumbs'
|
||||
const vids = './static/vids'
|
||||
let util = require('util')
|
||||
let spawn = require('child_process').spawn
|
||||
|
||||
let usage
|
||||
const limit = config.cache_max_size
|
||||
|
||||
function getUsage() {
|
||||
return new Promise((resolve, reject) => {
|
||||
let size = spawn('du', ['-sBM', './static/'])
|
||||
size.stdout.on('data', function (data) {
|
||||
usage = parseInt(data)
|
||||
resolve(usage)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function deleteFiles() {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
usage = await getUsage()
|
||||
if(usage > limit) {
|
||||
const { exec } = require('child_process')
|
||||
exec(`cd ${pics} && ls -1btr -Iflairs -Iicons -Ithumbs -I.gitignore | head -50 | xargs rm -f --`)
|
||||
exec(`cd ${flairs} && ls -1btr -I.gitignore | head -50 | xargs rm -f --`)
|
||||
exec(`cd ${icons} && ls -1btr -I.gitignore | head -50 | xargs rm -f --`)
|
||||
exec(`cd ${thumbs} && ls -1btr -I.gitignore | head -50 | xargs rm -f --`)
|
||||
exec(`cd ${vids} && ls -1btr -I.gitignore | head -30 | xargs rm -f --`)
|
||||
}
|
||||
resolve(1)
|
||||
})
|
||||
}
|
||||
|
||||
async function main() {
|
||||
usage = await getUsage()
|
||||
if(usage > limit) {
|
||||
console.log('Started removeCacheFiles()')
|
||||
while(usage > limit) {
|
||||
await deleteFiles()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(config.cache_control) {
|
||||
main()
|
||||
|
||||
const interval_ms = config.cache_control_interval
|
||||
setInterval(() => {
|
||||
main()
|
||||
}, interval_ms)
|
||||
}
|
||||
}
|
@ -32,6 +32,9 @@ const config = {
|
||||
domain_replacements: process.env.DOMAIN_REPLACEMENTS
|
||||
? (JSON.parse(process.env.DOMAIN_REPLACEMENTS).map(([p, r]) => [new RegExp(p, 'gm'), r]))
|
||||
: [], // Replacements for domains in outgoing links. Tuples with regular expressions to match, and replacement values. This is in addition to user-level configuration of privacyDomains.
|
||||
cache_control: process.env.CACHE_CONTROL !== 'true' || true, // If true, teddit will automatically try to keep the size of the cache directory (static) under config.cache_max_size. By default this is set to true.
|
||||
cache_max_size: process.env.CACHE_MAX_SIZE || 3000, // How much can we cache to the disk? Default is 3000 MB (~3 GB). Note: This is not perfectly exact limit.
|
||||
cache_control_interval: process.env.CACHE_CONTROL_INTERVAL || 1000 * 60 * 30, // How often the size of the cache directory (static/) is checked. Default is every 30 minutes.
|
||||
post_media_max_heights: {
|
||||
/**
|
||||
* Sets the max-height value for images and videos in posts.
|
||||
|
Loading…
Reference in New Issue
Block a user