mirror of
https://github.com/bluewave-labs/Checkmate.git
synced 2026-05-18 15:38:36 -05:00
178 lines
4.7 KiB
JavaScript
Executable File
178 lines
4.7 KiB
JavaScript
Executable File
import Monitor from "../../models/Monitor.js";
|
|
import Check from "../../models/Check.js";
|
|
import DistributedUptimeCheck from "../../models/DistributedUptimeCheck.js";
|
|
import logger from "../../../utils/logger.js";
|
|
|
|
const generateRandomUrl = () => {
|
|
const domains = ["example.com", "test.org", "demo.net", "sample.io", "mock.dev"];
|
|
const paths = ["api", "status", "health", "ping", "check"];
|
|
return `https://${domains[Math.floor(Math.random() * domains.length)]}/${paths[Math.floor(Math.random() * paths.length)]}`;
|
|
};
|
|
|
|
const generateChecks = (monitorId, teamId, count) => {
|
|
const checks = [];
|
|
const endTime = new Date(Date.now() - 10 * 60 * 1000); // 10 minutes ago
|
|
const startTime = new Date(endTime - count * 60 * 1000); // count minutes before endTime
|
|
|
|
for (let i = 0; i < count; i++) {
|
|
const timestamp = new Date(startTime.getTime() + i * 60 * 1000);
|
|
const status = Math.random() > 0.05; // 95% chance of being up
|
|
|
|
checks.push({
|
|
monitorId,
|
|
teamId,
|
|
status,
|
|
responseTime: Math.floor(Math.random() * 1000), // Random response time between 0-1000ms
|
|
createdAt: timestamp,
|
|
updatedAt: timestamp,
|
|
});
|
|
}
|
|
|
|
return checks;
|
|
};
|
|
|
|
const seedDb = async (userId, teamId) => {
|
|
try {
|
|
logger.info({
|
|
message: "Deleting all monitors and checks",
|
|
service: "seedDb",
|
|
method: "seedDb",
|
|
});
|
|
await Monitor.deleteMany({});
|
|
await Check.deleteMany({});
|
|
logger.info({
|
|
message: "Adding monitors",
|
|
service: "DB",
|
|
method: "seedDb",
|
|
});
|
|
for (let i = 0; i < 300; i++) {
|
|
const monitor = await Monitor.create({
|
|
name: `Monitor ${i}`,
|
|
url: generateRandomUrl(),
|
|
type: "http",
|
|
userId,
|
|
teamId,
|
|
interval: 60000,
|
|
active: false,
|
|
});
|
|
logger.info({
|
|
message: `Adding monitor and checks for monitor ${i}`,
|
|
service: "DB",
|
|
method: "seedDb",
|
|
});
|
|
const checks = generateChecks(monitor._id, teamId, 10000);
|
|
await Check.insertMany(checks);
|
|
}
|
|
} catch (error) {
|
|
logger.error({
|
|
message: "Error seeding DB",
|
|
service: "DB",
|
|
method: "seedDb",
|
|
stack: error.stack,
|
|
});
|
|
}
|
|
};
|
|
|
|
const generateDistributedChecks = (monitorId, teamId, count = 2880) => {
|
|
const checks = [];
|
|
const endTime = new Date();
|
|
const startTime = new Date(endTime - 48 * 60 * 60 * 1000);
|
|
|
|
// Sample locations for variety
|
|
const locations = [
|
|
{
|
|
city: "New York",
|
|
countryCode: "US",
|
|
continent: "NA",
|
|
location: { lat: 40.7128, lng: -74.006 },
|
|
},
|
|
{
|
|
city: "London",
|
|
countryCode: "GB",
|
|
continent: "EU",
|
|
location: { lat: 51.5074, lng: -0.1278 },
|
|
},
|
|
{
|
|
city: "Singapore",
|
|
countryCode: "SG",
|
|
continent: "AS",
|
|
location: { lat: 1.3521, lng: 103.8198 },
|
|
},
|
|
];
|
|
|
|
for (let i = 0; i < count; i++) {
|
|
const timestamp = new Date(startTime.getTime() + i * 60 * 1000);
|
|
const location = locations[Math.floor(Math.random() * locations.length)];
|
|
const status = Math.random() > 0.05; // 95% success rate
|
|
|
|
checks.push({
|
|
monitorId,
|
|
teamId,
|
|
status,
|
|
responseTime: Math.floor(Math.random() * 1000), // Random response time between 0-1000ms
|
|
first_byte_took: Math.floor(Math.random() * 300000), // 0-300ms
|
|
body_read_took: Math.floor(Math.random() * 100000), // 0-100ms
|
|
dns_took: Math.floor(Math.random() * 100000), // 0-100ms
|
|
conn_took: Math.floor(Math.random() * 200000), // 0-200ms
|
|
connect_took: Math.floor(Math.random() * 150000), // 0-150ms
|
|
tls_took: Math.floor(Math.random() * 200000), // 0-200ms
|
|
location: location.location,
|
|
continent: location.continent,
|
|
countryCode: location.countryCode,
|
|
city: location.city,
|
|
uptBurnt: "0.01", // Will be converted to Decimal128 by the schema
|
|
createdAt: timestamp,
|
|
updatedAt: timestamp,
|
|
});
|
|
}
|
|
|
|
return checks;
|
|
};
|
|
|
|
export const seedDistributedTest = async (userId, teamId) => {
|
|
try {
|
|
logger.info({
|
|
message: "Deleting all test monitors and checks",
|
|
service: "DB",
|
|
method: "seedDistributedTest",
|
|
});
|
|
|
|
const testMonitors = await Monitor.find({
|
|
type: "distributed_test",
|
|
});
|
|
|
|
testMonitors.forEach(async (monitor) => {
|
|
await DistributedUptimeCheck.deleteMany({ monitorId: monitor._id });
|
|
await Monitor.deleteOne({ _id: monitor._id });
|
|
});
|
|
|
|
logger.info({
|
|
message: "Adding test monitors and checks",
|
|
service: "DB",
|
|
method: "seedDistributedTest",
|
|
});
|
|
const monitor = await Monitor.create({
|
|
name: "Distributed Test",
|
|
url: "https://distributed-test.com",
|
|
type: "distributed_test",
|
|
userId,
|
|
teamId,
|
|
interval: 60000,
|
|
active: false,
|
|
});
|
|
const checks = generateDistributedChecks(monitor._id, teamId, 2800);
|
|
await DistributedUptimeCheck.insertMany(checks);
|
|
return monitor;
|
|
} catch (error) {
|
|
logger.error({
|
|
message: "Error seeding distributed test",
|
|
service: "DB",
|
|
method: "seedDistributedTest",
|
|
stack: error.stack,
|
|
});
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
export default seedDb;
|