social-butterfly
Version:
Incorporate federated social network protocols easily. Used with Hello, world federated blog.
64 lines (50 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = updateFeeds;
var _feeds = require("./util/feeds");
var _winstonDailyRotateFile = _interopRequireDefault(require("winston-daily-rotate-file"));
var _path = _interopRequireDefault(require("path"));
var _winston = _interopRequireDefault(require("winston"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const updateFeedsLogger = _winston.default.createLogger({
format: _winston.default.format.combine(_winston.default.format.timestamp(), _winston.default.format.json()),
transports: [new _winstonDailyRotateFile.default({
name: 'update-feeds',
filename: _path.default.resolve(process.cwd(), 'logs', 'update-feeds-%DATE%.log'),
zippedArchive: true
})]
});
async function updateFeeds(options) {
await pruneOlderContent(options);
await getFreshContent(options);
}
async function pruneOlderContent(options) {
try {
const rowsDeletedCount = await options.removeOldRemoteContent();
updateFeedsLogger.info(`pruned ${rowsDeletedCount} entries.`);
} catch (ex) {
updateFeedsLogger.error(`pruning db error.\n${ex}`);
}
}
async function getFreshContent(options) {
let usersRemote;
try {
usersRemote = await options.getRemoteAllUsers();
} catch (ex) {
updateFeedsLogger.error(`FAILED to get remote users from db.\n${ex}`);
return;
}
for (const userRemote of usersRemote) {
let feedResponseText;
try {
feedResponseText = await (0, _feeds.retrieveFeed)(userRemote.feed_url);
updateFeedsLogger.info(`${userRemote.local_username} - ${userRemote.profile_url}: fetched feed.`);
} catch (ex) {
updateFeedsLogger.error(`${userRemote.local_username} - ${userRemote.profile_url}: fetch FAILED.\n${ex}`);
continue;
}
await (0, _feeds.parseFeedAndInsertIntoDb)(options, userRemote, feedResponseText, updateFeedsLogger);
}
}