forked from tsai/budibase
committed by
GitHub
10 changed files with 196 additions and 53 deletions
@ -0,0 +1,97 @@ |
|||||
|
// get the JWT secret etc
|
||||
|
require("../../src/environment") |
||||
|
require("@budibase/backend-core").init() |
||||
|
const { |
||||
|
getProdAppID, |
||||
|
generateGlobalUserID, |
||||
|
} = require("@budibase/backend-core/db") |
||||
|
const { doInTenant, getGlobalDB } = require("@budibase/backend-core/tenancy") |
||||
|
const { internalSaveUser } = require("@budibase/backend-core/utils") |
||||
|
const { publicApiUserFix } = require("../../src/utilities/users") |
||||
|
const { hash } = require("@budibase/backend-core/utils") |
||||
|
|
||||
|
const USER_LOAD_NUMBER = 10000 |
||||
|
const BATCH_SIZE = 200 |
||||
|
const PASSWORD = "test" |
||||
|
const TENANT_ID = "default" |
||||
|
|
||||
|
const APP_ID = process.argv[2] |
||||
|
|
||||
|
const words = [ |
||||
|
"test", |
||||
|
"testing", |
||||
|
"budi", |
||||
|
"mail", |
||||
|
"age", |
||||
|
"risk", |
||||
|
"load", |
||||
|
"uno", |
||||
|
"arm", |
||||
|
"leg", |
||||
|
"pen", |
||||
|
"glass", |
||||
|
"box", |
||||
|
"chicken", |
||||
|
"bottle", |
||||
|
] |
||||
|
|
||||
|
if (!APP_ID) { |
||||
|
console.error("Must supply app ID as first CLI option!") |
||||
|
process.exit(-1) |
||||
|
} |
||||
|
|
||||
|
const WORD_1 = words[Math.floor(Math.random() * words.length)] |
||||
|
const WORD_2 = words[Math.floor(Math.random() * words.length)] |
||||
|
let HASHED_PASSWORD |
||||
|
|
||||
|
function generateUser(count) { |
||||
|
return { |
||||
|
_id: generateGlobalUserID(), |
||||
|
password: HASHED_PASSWORD, |
||||
|
email: `${WORD_1}${count}@${WORD_2}.com`, |
||||
|
roles: { |
||||
|
[getProdAppID(APP_ID)]: "BASIC", |
||||
|
}, |
||||
|
status: "active", |
||||
|
forceResetPassword: false, |
||||
|
firstName: "John", |
||||
|
lastName: "Smith", |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async function run() { |
||||
|
HASHED_PASSWORD = await hash(PASSWORD) |
||||
|
return doInTenant(TENANT_ID, async () => { |
||||
|
const db = getGlobalDB() |
||||
|
for (let i = 0; i < USER_LOAD_NUMBER; i += BATCH_SIZE) { |
||||
|
let userSavePromises = [] |
||||
|
for (let j = 0; j < BATCH_SIZE; j++) { |
||||
|
// like the public API
|
||||
|
const ctx = publicApiUserFix({ |
||||
|
request: { |
||||
|
body: generateUser(i + j), |
||||
|
}, |
||||
|
}) |
||||
|
userSavePromises.push( |
||||
|
internalSaveUser(ctx.request.body, TENANT_ID, { |
||||
|
hashPassword: false, |
||||
|
requirePassword: true, |
||||
|
bulkCreate: true, |
||||
|
}) |
||||
|
) |
||||
|
} |
||||
|
const users = await Promise.all(userSavePromises) |
||||
|
await db.bulkDocs(users) |
||||
|
console.log(`${i + BATCH_SIZE} users have been created.`) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
run() |
||||
|
.then(() => { |
||||
|
console.log(`Generated ${USER_LOAD_NUMBER} users!`) |
||||
|
}) |
||||
|
.catch(err => { |
||||
|
console.error("Failed for reason: ", err) |
||||
|
process.exit(-1) |
||||
|
}) |
||||
Loading…
Reference in new issue