logstack-zee
Version:
Complete Node.js logging solution with 6 integration methods, S3 bidirectional operations, advanced analytics, and multi-cloud storage support for enterprise-scale applications.
285 lines (245 loc) ⢠9.2 kB
JavaScript
/**
* šÆ Complete LogStack Cron Control Demo
*
* Is demo mein aap dekhenge:
* 1. Cron jobs kaise control karte hain
* 2. Status kaise check karte hain
* 3. Emergency stop kaise use karte hain
* 4. Production mein kaise integrate karte hain
*/
const {
stopAllLogStackJobs,
getCronJobStatus,
emergencyStopLogStack,
getActiveLogStackJobs,
startLogStackJob,
} = require("./main.js");
class LogStackCronController {
constructor() {
this.isRunning = false;
this.setupGracefulShutdown();
}
/**
* Application shutdown ke time gracefully stop karo
*/
setupGracefulShutdown() {
// SIGTERM handler (PM2, Docker, etc.)
process.on("SIGTERM", async () => {
console.log("\nš” Received SIGTERM signal...");
await this.gracefulShutdown();
});
// SIGINT handler (Ctrl+C)
process.on("SIGINT", async () => {
console.log("\nš” Received SIGINT signal...");
await this.gracefulShutdown();
});
// Uncaught exception handler
process.on("uncaughtException", async (error) => {
console.error("\nš„ Uncaught Exception:", error.message);
await this.emergencyShutdown();
});
}
/**
* Graceful shutdown - normal application termination
*/
async gracefulShutdown() {
try {
console.log("š Starting graceful shutdown...");
const result = await stopAllLogStackJobs();
console.log("ā
All LogStack cron jobs stopped gracefully");
console.log(`š Stopped jobs: ${result.length}`);
process.exit(0);
} catch (error) {
console.error("ā Graceful shutdown failed:", error.message);
await this.emergencyShutdown();
}
}
/**
* Emergency shutdown - immediate termination
*/
async emergencyShutdown() {
try {
console.log("šØ Starting emergency shutdown...");
await emergencyStopLogStack();
console.log("ā
Emergency stop completed");
process.exit(1);
} catch (error) {
console.error("š Emergency shutdown failed:", error.message);
process.exit(1);
}
}
/**
* Health monitoring - har 30 seconds jobs ka status check karo
*/
async startHealthMonitoring() {
console.log("š Starting health monitoring...");
setInterval(async () => {
try {
const status = await getCronJobStatus();
const activeJobs = await getActiveLogStackJobs();
console.log(`\nš Health Check - ${new Date().toLocaleTimeString()}`);
console.log(` Total Jobs: ${status.totalJobs}`);
console.log(` Running Jobs: ${status.runningJobs}`);
console.log(` Active LogStack Jobs: ${activeJobs.count}`);
// Alert if no jobs running
if (status.runningJobs === 0 && status.totalJobs > 0) {
console.log("ā ļø WARNING: Jobs exist but none are running!");
}
// Alert if no LogStack jobs
if (activeJobs.count === 0) {
console.log("š INFO: No active LogStack jobs found");
}
} catch (error) {
console.error("ā Health check failed:", error.message);
}
}, 30000); // 30 seconds
}
/**
* Maintenance mode - saari jobs stop karo
*/
async enableMaintenanceMode() {
try {
console.log("š§ Enabling maintenance mode...");
const result = await stopAllLogStackJobs();
console.log(
`ā
Maintenance mode enabled - ${result.length} jobs stopped`
);
return { success: true, stoppedJobs: result.length };
} catch (error) {
console.error("ā Failed to enable maintenance mode:", error.message);
return { success: false, error: error.message };
}
}
/**
* Maintenance mode disable - jobs restart karo
*/
async disableMaintenanceMode() {
try {
console.log("š Disabling maintenance mode...");
// Start essential LogStack jobs
await startLogStackJob("0 0 * * *", "LogStack Daily Job");
await startLogStackJob("0 * * * *", "LogStack Hourly Job");
await startLogStackJob("0 2 * * *", "LogStack Cleanup Job");
console.log("ā
Maintenance mode disabled - essential jobs restarted");
return { success: true, message: "Normal operations resumed" };
} catch (error) {
console.error("ā Failed to disable maintenance mode:", error.message);
return { success: false, error: error.message };
}
}
/**
* Complete status report
*/
async getDetailedStatus() {
try {
const status = await getCronJobStatus();
const activeJobs = await getActiveLogStackJobs();
return {
timestamp: new Date(),
overview: {
totalJobs: status.totalJobs,
runningJobs: status.runningJobs,
stoppedJobs: status.stoppedJobs,
destroyedJobs: status.destroyedJobs,
},
activeLogStackJobs: activeJobs,
allJobs: status.jobs,
healthStatus: status.runningJobs > 0 ? "healthy" : "warning",
};
} catch (error) {
return {
timestamp: new Date(),
error: error.message,
healthStatus: "error",
};
}
}
/**
* Demo function - saare features demonstrate karo
*/
async runDemo() {
try {
console.log("š LogStack Cron Control Demo Starting...\n");
// 1. Initial status
console.log("1ļøā£ Initial Status Check:");
const initialStatus = await this.getDetailedStatus();
console.log(" Status:", initialStatus.healthStatus);
console.log(" Total Jobs:", initialStatus.overview.totalJobs);
console.log(" Running Jobs:", initialStatus.overview.runningJobs);
console.log("");
// 2. Start some test jobs (if needed)
console.log("2ļøā£ Starting test LogStack jobs...");
await startLogStackJob("*/10 * * * * *", "Demo LogStack Job 1");
await startLogStackJob("*/15 * * * * *", "Demo LogStack Job 2");
console.log(" ā
Test jobs started\n");
// Wait a moment
await new Promise((resolve) => setTimeout(resolve, 2000));
// 3. Status after starting jobs
console.log("3ļøā£ Status After Starting Jobs:");
const afterStartStatus = await this.getDetailedStatus();
console.log(" Status:", afterStartStatus.healthStatus);
console.log(" Total Jobs:", afterStartStatus.overview.totalJobs);
console.log(" Running Jobs:", afterStartStatus.overview.runningJobs);
console.log(
" Active LogStack Jobs:",
afterStartStatus.activeLogStackJobs.count
);
console.log("");
// 4. Enable maintenance mode
console.log("4ļøā£ Testing Maintenance Mode:");
const maintenanceResult = await this.enableMaintenanceMode();
console.log(" Maintenance Result:", maintenanceResult);
console.log("");
// 5. Status during maintenance
console.log("5ļøā£ Status During Maintenance:");
const maintenanceStatus = await this.getDetailedStatus();
console.log(" Status:", maintenanceStatus.healthStatus);
console.log(" Running Jobs:", maintenanceStatus.overview.runningJobs);
console.log("");
// 6. Disable maintenance mode
console.log("6ļøā£ Exiting Maintenance Mode:");
const resumeResult = await this.disableMaintenanceMode();
console.log(" Resume Result:", resumeResult);
console.log("");
// 7. Final status
console.log("7ļøā£ Final Status:");
const finalStatus = await this.getDetailedStatus();
console.log(" Status:", finalStatus.healthStatus);
console.log(" Total Jobs:", finalStatus.overview.totalJobs);
console.log(" Running Jobs:", finalStatus.overview.runningJobs);
console.log("");
console.log("š Demo completed successfully!");
console.log("\nš Available functions:");
console.log(" - stopAllLogStackJobs()");
console.log(" - getCronJobStatus()");
console.log(" - emergencyStopLogStack()");
console.log(" - getActiveLogStackJobs()");
console.log(" - startLogStackJob(schedule, name)");
console.log("");
console.log(
"š” Use these functions in your production application for complete cron job control!"
);
} catch (error) {
console.error("ā Demo failed:", error.message);
}
}
}
// Export the controller
module.exports = LogStackCronController;
// Run demo if this file is executed directly
if (require.main === module) {
const controller = new LogStackCronController();
// Run demo
controller
.runDemo()
.then(() => {
console.log("\nš Demo completed. Starting health monitoring...");
console.log(" Press Ctrl+C to exit gracefully");
// Start health monitoring
controller.startHealthMonitoring();
})
.catch((error) => {
console.error("ā Demo startup failed:", error);
process.exit(1);
});
}