dont build webring redundantly and set flag when new post or change setting on unlisted board, or new board created or existing listed board deleted

merge-requests/208/head
fatchan 5 years ago
parent 0920fa9de4
commit 89d1c7aa16
  1. 2
      controllers/forms/deleteboard.js
  2. 1
      db/boards.js
  3. 7
      db/posts.js
  4. 13
      models/forms/changeboardsettings.js
  5. 6
      models/forms/deleteboard.js
  6. 55
      schedules/webring.js

@ -43,7 +43,7 @@ module.exports = async (req, res, next) => {
} }
try { try {
await deleteBoard(req.body.uri); await deleteBoard(board._id, board);
} catch (err) { } catch (err) {
return next(err); return next(err);
} }

@ -50,6 +50,7 @@ module.exports = {
insertOne: (data) => { insertOne: (data) => {
cache.del(`board_${data._id}`); //removing cached no_exist cache.del(`board_${data._id}`); //removing cached no_exist
cache.set('webring_update', 1);
return db.insertOne(data); return db.insertOne(data);
}, },

@ -4,6 +4,7 @@ const Mongo = require(__dirname+'/db.js')
, Boards = require(__dirname+'/boards.js') , Boards = require(__dirname+'/boards.js')
, Stats = require(__dirname+'/stats.js') , Stats = require(__dirname+'/stats.js')
, db = Mongo.client.db('jschan').collection('posts') , db = Mongo.client.db('jschan').collection('posts')
, cache = require(__dirname+'/../redis.js')
, { quoteLimit } = require(__dirname+'/../configs/main.json'); , { quoteLimit } = require(__dirname+'/../configs/main.json');
module.exports = { module.exports = {
@ -322,6 +323,11 @@ module.exports = {
data.bumped = new Date() data.bumped = new Date()
} }
if (!saged && !board.unlisted) {
//mark webring as needing update for schedule to reduce redundant webring builds
cache.set('webring_update', 1);
}
//get the postId and add it to the post //get the postId and add it to the post
const postId = await Boards.getNextId(board._id, saged); const postId = await Boards.getNextId(board._id, saged);
data.postId = postId; data.postId = postId;
@ -343,6 +349,7 @@ module.exports = {
} }
}); });
} }
return postId; return postId;
}, },

@ -3,6 +3,7 @@
const { Boards, Posts, Accounts } = require(__dirname+'/../../db/') const { Boards, Posts, Accounts } = require(__dirname+'/../../db/')
, uploadDirectory = require(__dirname+'/../../helpers/files/uploadDirectory.js') , uploadDirectory = require(__dirname+'/../../helpers/files/uploadDirectory.js')
, buildQueue = require(__dirname+'/../../queue.js') , buildQueue = require(__dirname+'/../../queue.js')
, cache = require(__dirname+'/../../redis.js')
, { remove } = require('fs-extra') , { remove } = require('fs-extra')
, deletePosts = require(__dirname+'/deletepost.js') , deletePosts = require(__dirname+'/deletepost.js')
, linkQuotes = require(__dirname+'/../../helpers/posting/quotes.js') , linkQuotes = require(__dirname+'/../../helpers/posting/quotes.js')
@ -102,6 +103,16 @@ module.exports = async (req, res, next) => {
, rebuildCatalog = false , rebuildCatalog = false
, rebuildOther = false; , rebuildOther = false;
//name, description, sfw, unlisted, tags changed need webring update
if ((!oldSettings.unlisted && !newSettings.unlisted) //if not unlisted or is changing unlisted status (thus will be added or removed from webring list)
&& (oldSettings.name != newSettings.name //and changing something that needs to be shown in webring
|| oldSettings.description != newSettings.description
|| oldSettings.unlisted != newSettings.unlisted
|| oldSettings.sfw != newSettings.sfw
|| oldSettings.tags != newSettings.tags)) {
cache.set('webring_update', 1);
}
if (newSettings.captchaMode > oldSettings.captchaMode) { if (newSettings.captchaMode > oldSettings.captchaMode) {
rebuildBoard = true; rebuildBoard = true;
if (newSettings.captchaMode == 2) { if (newSettings.captchaMode == 2) {
@ -156,13 +167,13 @@ module.exports = async (req, res, next) => {
}); });
} }
if (rebuildOther) { if (rebuildOther) {
//NOTE does not rebuild individual log pages they are stuck on old theme for now
buildQueue.push({ buildQueue.push({
'task': 'buildModLogList', 'task': 'buildModLogList',
'options': { 'options': {
'board': res.locals.board, 'board': res.locals.board,
} }
}); });
//NOTE does not rebuild individual log pages they are stuck on old theme for now
buildQueue.push({ buildQueue.push({
'task': 'buildBanners', 'task': 'buildBanners',
'options': { 'options': {

@ -1,11 +1,12 @@
'use strict'; 'use strict';
const { Boards, Stats, Posts, Bans, Modlogs } = require(__dirname+'/../../db/') const { Boards, Stats, Posts, Bans, Modlogs } = require(__dirname+'/../../db/')
, cache = require(__dirname+'/../../redis.js')
, deletePosts = require(__dirname+'/deletepost.js') , deletePosts = require(__dirname+'/deletepost.js')
, uploadDirectory = require(__dirname+'/../../helpers/files/uploadDirectory.js') , uploadDirectory = require(__dirname+'/../../helpers/files/uploadDirectory.js')
, { remove } = require('fs-extra'); , { remove } = require('fs-extra');
module.exports = async (uri) => { module.exports = async (uri, board) => {
//delete board //delete board
await Boards.deleteOne(uri); await Boards.deleteOne(uri);
@ -23,5 +24,8 @@ module.exports = async (uri) => {
remove(`${uploadDirectory}/json/${uri}/`), //json remove(`${uploadDirectory}/json/${uri}/`), //json
remove(`${uploadDirectory}/banners/${uri}/`) //banners remove(`${uploadDirectory}/banners/${uri}/`) //banners
]); ]);
if (!board.unlisted) {
cache.set('webring_update', 1);
}
} }

@ -10,7 +10,7 @@ const fetch = require('node-fetch')
, timeDiffString = require(__dirname+'/../helpers/timediffstring.js'); , timeDiffString = require(__dirname+'/../helpers/timediffstring.js');
module.exports = async () => { module.exports = async () => {
const label = `/webring.json`; const label = `updating webring`;
const start = process.hrtime(); const start = process.hrtime();
//fetch stuff from others //fetch stuff from others
@ -56,32 +56,35 @@ module.exports = async () => {
await Webring.db.insertMany(webringBoards); await Webring.db.insertMany(webringBoards);
//output our own webring json //output our own webring json
const boards = await Boards.boardSort(0, 0); const needsUpdate = await cache.del('webring_update'); //returns 1 if somethign was deleted, 0 if not exist
const json = { if (needsUpdate) {
name: meta.siteName, const boards = await Boards.boardSort(0, 0);
url: meta.url, const json = {
endpoint: `${meta.url}/webring.json`, name: meta.siteName,
logos, url: meta.url,
following, endpoint: `${meta.url}/webring.json`,
blacklist, logos,
known, following,
boards: boards.map(b => { blacklist,
//map local boards to webring format known,
return { boards: boards.map(b => {
uri: b._id, //map local boards to webring format
title: b.settings.name, return {
subtitle: b.settings.description, uri: b._id,
path: `${meta.url}/${b._id}/`, title: b.settings.name,
postsPerHour: b.pph, subtitle: b.settings.description,
totalPosts: b.sequence_value-1, path: `${meta.url}/${b._id}/`,
uniqueUsers: b.ips, postsPerHour: b.pph,
nsfw: !b.settings.sfw, totalPosts: b.sequence_value-1,
tags: b.settings.tags, uniqueUsers: b.ips,
lastPostTimestamp: b.lastPostTimestamp, nsfw: !b.settings.sfw,
}; tags: b.settings.tags,
}), lastPostTimestamp: b.lastPostTimestamp,
};
}),
}
await outputFile(`${uploadDirectory}/json/webring.json`, JSON.stringify(json));
} }
await outputFile(`${uploadDirectory}/json/webring.json`, JSON.stringify(json));
const end = process.hrtime(start); const end = process.hrtime(start);
console.log(timeDiffString(label, end)); console.log(timeDiffString(label, end));

Loading…
Cancel
Save