Created
September 8, 2020 06:45
-
-
Save karan9/a27295e8755f8983ad0a79802906b5c7 to your computer and use it in GitHub Desktop.
Load testing script Atlas
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()); | |
// } | |
// }); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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