Skip to content

Instantly share code, notes, and snippets.

@adambankin
Last active March 2, 2021 17:33
Show Gist options
  • Save adambankin/598fe55e5576f55483b46e4c0e4a4223 to your computer and use it in GitHub Desktop.
Save adambankin/598fe55e5576f55483b46e4c0e4a4223 to your computer and use it in GitHub Desktop.
const MongoClient = require("mongodb").MongoClient;
const tracer = require("dd-trace").init();
const StatsD = require("hot-shots");
const dogstatsd = new StatsD();
function getRandomInt(max, skews = 1) {
let result = max;
for (let i = 0; i < skews; i++) {
result = Math.random() * result;
}
return Math.floor(result);
}
function getRandomArrayItem(arr, skews) {
const position = getRandomInt(arr.length, skews);
return arr[position];
}
async function wasteTime(fakeServerLogs, data, action) {
let result;
switch (action) {
case "write":
result = await fakeServerLogs.insertOne(data);
break;
case "read":
result = await fakeServerLogs.find(data);
break;
case "delete":
result = await fakeServerLogs.deleteMany(data);
console.log("Deleted " + result.deletedCount)
break;
default: break;
}
return new Promise((resolve) => setTimeout(resolve, 100));
}
async function run() {
const client = new MongoClient("mongodb://localhost:27017");
let isNow = false;
const currentTime = new Date().getTime();
let prevTime = new Date("2021-02-25T03:24:00").getTime();
const endpointArray = ["/index", "/cart", "/checkout", "/contact_us"];
const responseTypeArray = ["200", "404", "500"];
try {
await client.connect();
const db = client.db("admin");
const fakeServerLogs = db.collection("fake_server_logs");
while (!isNow) {
prevTime = new Date(prevTime + getRandomInt(1000000, 4)).getTime();
if (prevTime > currentTime) {
isNow = true;
} else {
const responseTime = getRandomInt(1000);
// create new data object
const writeableDocument = {
path: getRandomArrayItem(endpointArray, 2),
received_timestamp: new Date(prevTime).toISOString(),
response_timestamp: new Date(prevTime + responseTime).toISOString(),
response_time: responseTime,
response_code: getRandomArrayItem(responseTypeArray, 3),
};
const readableData = {
path: getRandomArrayItem(endpointArray, 2),
}
await wasteTime(fakeServerLogs, writeableDocument, "write");
await wasteTime(fakeServerLogs, readableData, "read");
if ((getRandomInt(1000) % 5) === 0) {
const deletableData = { path: endpointArray[0]}
await wasteTime(fakeServerLogs, deletableData, "delete")
}
}
}
} finally {
await client.close();
}
}
run().catch(console.dir);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment