diff --git a/client/admin/brewUtils/brewCleanup/brewCleanup.jsx b/client/admin/brewUtils/brewCleanup/brewCleanup.jsx
index 721ec1e00..85d77ba85 100644
--- a/client/admin/brewUtils/brewCleanup/brewCleanup.jsx
+++ b/client/admin/brewUtils/brewCleanup/brewCleanup.jsx
@@ -1,8 +1,10 @@
import React, { useState } from 'react';
import request from 'superagent';
+import Moment from 'moment';
const BrewCleanup = ({})=>{
const [count, setCount] = useState(0);
+ const [brewCollection, setBrewCollection] = useState([]);
const [pending, setPending] = useState(false);
const [primed, setPrimed] = useState(false);
const [error, setError] = useState(null);
@@ -14,6 +16,7 @@ const BrewCleanup = ({})=>{
const res = await request.get('/admin/cleanup');
setCount(res.body.count);
+ setBrewCollection(res.body.brewCollection);
setPrimed(true);
} catch (err) {
setError(err);
@@ -36,6 +39,43 @@ const BrewCleanup = ({})=>{
setPrimed(false);
}
};
+ const renderBrewList = ()=>{
+ if(!brewCollection) {
+ console.log(brewCollection)
+ return null;
+ }
+
+ return <>
+
{`Results - ${brewCollection.length} brews` }
+
+
+
+ | Title |
+ Share |
+ Last Update |
+ Created |
+ Storage |
+
+
+
+ {brewCollection
+ .sort((a, b)=>{ // Sort brews from most recently updated
+ if(a.updatedAt > b.updatedAt) return -1;
+ return 1;
+ })
+ .map((brew, idx)=>{
+ return
+ | {brew.title || 'No Title'} |
+ {brew.shareId} |
+ {Moment(brew.updatedAt).fromNow()} |
+ {brew.createdAt ? Moment(brew.createdAt).fromNow() : 'No creation date'} |
+ {brew.googleId ? 'Google' : 'Homebrewery'} |
+
;
+ })}
+
+
+ >;
+ };
const renderPrimed = ()=>{
if(!primed) return;
@@ -49,6 +89,7 @@ const BrewCleanup = ({})=>{
}
Found {count} Brews that could be removed.
+ {renderBrewList()}
;
};
diff --git a/server/admin.api.js b/server/admin.api.js
index f55eefdf2..60582b75f 100644
--- a/server/admin.api.js
+++ b/server/admin.api.js
@@ -41,12 +41,13 @@ export default function createAdminApi(vite) {
const junkBrewPipeline = [
{ $match : {
- updatedAt : { $lt: Moment().subtract(30, 'days').toDate() },
- lastViewed : { $lt: Moment().subtract(30, 'days').toDate() }
- } },
- { $project: { textBinSize: { $binarySize: '$textBin' } } },
- { $match: { textBinSize: { $lt: 140 } } },
- { $limit: 100 }
+ updatedAt : { $lt: Moment().subtract(365, 'days').toDate() },
+ lastViewed : { $lt: Moment().subtract(365, 'days').toDate() }
+ }},
+ { $match: {
+ authors : [],
+ }},
+ { $limit: 300 }
];
/* Search for brews that aren't compressed (missing the compressed text field) */
@@ -54,10 +55,10 @@ export default function createAdminApi(vite) {
'text' : { '$exists': true }
}).lean().limit(10000).select('_id');
- // Search for up to 100 brews that have not been viewed or updated in 30 days and are shorter than 140 bytes
+ // Search for up to 100 brews that have not been viewed or updated in a year
router.get('/admin/cleanup', mw.adminOnly, (req, res)=>{
HomebrewModel.aggregate(junkBrewPipeline).option({ maxTimeMS: 60000 })
- .then((objs)=>res.json({ count: objs.length }))
+ .then((objs)=>res.json({ count: objs.length, brewCollection : objs }))
.catch((error)=>{
console.error(error);
res.status(500).json({ error: 'Internal Server Error' });