Browse Source

added reset-indexes to CLI

develop
Rob Colbert 11 months ago
parent
commit
72716e2833
  1. 29
      dtp-base-cli.js
  2. 38
      lib/site-runtime.js

29
dtp-base-cli.js

@ -32,20 +32,24 @@ class SiteTerminalApp extends SiteRuntime {
this.processors = { this.processors = {
'help': { 'help': {
handler: this.help.bind(this), handler: this.cmdHelp.bind(this),
help: 'help [command name]', help: 'help [command name]',
}, },
'create-account': { 'create-account': {
handler: this.createAccount.bind(this), handler: this.cmdCreateAccount.bind(this),
help: 'create-account email username [password]', help: 'create-account email username [password]',
}, },
'grant': { 'grant': {
handler: this.grant.bind(this), handler: this.cmdGrant.bind(this),
help: 'grant [admin|moderator] username', help: 'grant [admin|moderator] username',
}, },
'reset-indexes': {
handler: this.cmdResetIndexes.bind(this),
help: 'reset-indexes [modelname, modelname, ...]',
},
'revoke': { 'revoke': {
handler: this.revoke.bind(this), handler: this.cmdRevoke.bind(this),
help: 'revoke [admin|moderator] username', help: 'revoke [admin|moderator] username',
}, },
}; };
@ -67,7 +71,7 @@ class SiteTerminalApp extends SiteRuntime {
return processor.handler(args); return processor.handler(args);
} }
async help (args) { async cmdHelp (args) {
const commandName = args.shift(); const commandName = args.shift();
if (commandName) { if (commandName) {
const command = this.processors[commandName]; const command = this.processors[commandName];
@ -87,7 +91,7 @@ class SiteTerminalApp extends SiteRuntime {
} }
} }
async createAccount (args) { async cmdCreateAccount (args) {
const { user: userService } = this.services; const { user: userService } = this.services;
const email = args.shift(); const email = args.shift();
const username = args.shift(); const username = args.shift();
@ -96,7 +100,7 @@ class SiteTerminalApp extends SiteRuntime {
await userService.create({ email, username, password }); await userService.create({ email, username, password });
} }
async grant (args) { async cmdGrant (args) {
const User = mongoose.model('User'); const User = mongoose.model('User');
const privilege = args.shift(); const privilege = args.shift();
@ -119,7 +123,16 @@ class SiteTerminalApp extends SiteRuntime {
} }
} }
async revoke (args) { async cmdResetIndexes (args) {
try {
this.log.info('resetting MongoDB indexes...', { args });
await this.resetIndexes(args);
} catch (error) {
this.log.error('failed to reset database indexes', { error });
}
}
async cmdRevoke (args) {
const User = mongoose.model('User'); const User = mongoose.model('User');
const username_lc = args.shift(); const username_lc = args.shift();

38
lib/site-runtime.js

@ -142,36 +142,44 @@ export class SiteRuntime {
} }
} }
async resetIndexes (target) { async resetIndexes (args) {
if (target === 'all') { let target = args.shift();
for (const model of this.models) { if (!target || (target === 'all')) {
await this.resetIndex(model); for (const modelName in this.models) {
await this.resetIndex(this.models[modelName]);
} }
return; return;
} }
const model = this.models.find((model) => model.modelName === target); const targets = args.map((modelName) => {
if (!model) { return {
throw new Error(`requested Mongoose model does not exist: ${target}`); modelName,
model: this.models.find(modelName),
};
});
for (target of targets) {
if (!target.model) {
this.log.error('unknown model', { modelName: target.modelName });
continue;
}
await this.resetIndex(target.model);
} }
return this.resetIndex(model);
} }
async resetIndex (model) { async resetIndex (model) {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
this.log.info('dropping model indexes', { model: model.modelName }); this.log.info('dropping model indexes', { model: model.modelName });
model.collection.dropIndexes((err) => { model.collection.dropIndexes(async (err) => {
if (err) { if (err) {
return reject(err); return reject(err);
} }
this.log.info('creating model indexes', { model: model.modelName }); this.log.info('creating model indexes', { model: model.modelName });
model.ensureIndexes((err) => { try {
if (err) { await model.ensureIndexes();
return reject(err);
}
return resolve(model); return resolve(model);
}); } catch (error) {
return reject(err);
}
}); });
}); });
} }

Loading…
Cancel
Save