Skip to content

Instantly share code, notes, and snippets.

@karan9
Created September 8, 2020 06:45
Show Gist options
  • Save karan9/a27295e8755f8983ad0a79802906b5c7 to your computer and use it in GitHub Desktop.
Save karan9/a27295e8755f8983ad0a79802906b5c7 to your computer and use it in GitHub Desktop.
Load testing script Atlas
const MongoClient = require("mongodb").MongoClient;
const { LoremIpsum } = require("lorem-ipsum");
const cluster = require('cluster');
const MONGOURI = "MONGO_URI";
const DB = "test_db";
const COLL = "test_coll";
/* Lorem Ipsum Generator */
/* USAGE - lorem.generateWords */
const lorem = new LoremIpsum({
sentencesPerParagraph: {
max: 8,
min: 4
},
wordsPerSentence: {
max: 16,
min: 4
}
});
function generateSampleDocument(batchSize, docLength) {
const types = ["string", "date"];
const wBatch = [];
const doc = {
field1: lorem.generateWords(),
field2: lorem.generateWords(),
field3: lorem.generateWords(),
field4: lorem.generateWords(),
cdt: new Date(),
udt: new Date()
}
return doc;
}
async function main(pid) {
// setup client
const client = new MongoClient(MONGOURI, { minPoolSize: 2999, maxPoolSize: 3000, useNewUrlParser: true });
// Connect to the mongodb client
await client.connect().catch(console.error);
console.log("Connection Created", new Date().getTime())
// Setup collection
const collection = client.db(DB).collection(COLL);
collection.insertOne(generateSampleDocument()).then(() => {
console.log("Sample Inserted");
})
// run the load
for (let counter = 0; counter < 100000; counter++) {
collection.insertOne(generateSampleDocument()).then(_ => {});
}
console.log("Function Completed = " + pid + " = " + new Date().getTime());
}
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < 2; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
main(process.pid).catch(e => {
console.error(e);
})
console.log(`Worker ${process.pid} started`);
}
// const client = new MongoClient(MONGOURI, { useNewUrlParser: true, useUnifiedTopology: true });
// client.connect(err => {
// if (err) {
// console.error(err);
// return;
// }
// /* Client Collection */
// const coll = client.db(DB).collection(COLL);
// /* Generate Sample Document */
// for (let i = 0; i < 10000000; i++) {
// coll.insertOne(generateSampleDocument());
// }
// });
{
"name": "poc-tool-node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"lorem-ipsum": "^2.0.3",
"mongodb": "^3.6.1"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment