#include "ReportGenerator.h"
#include "ConcreteDataCollector.h"
#include "ConcreteTriggerMechanism.h"
#include "ConcreteRecoveryModule.h"
#include "FileStorage.h"
#include <iostream>
#include <sstream>
void ReportGenerator::generate() {
std::cout << "Generating report..." << std::endl;
ConcreteDataCollector dataCollector;
dataCollector.collectSystemLogs();
dataCollector.collectProcessStatus();
dataCollector.collectMemoryUsage();
ConcreteTriggerMechanism triggerMechanism;
bool systemRestart = triggerMechanism.detectSystemRestart();
bool kernelCrash = triggerMechanism.detectKernelCrash();
bool oom = triggerMechanism.detectOOM();
std::ostringstream report;
report << "System Report\n";
report << "=================\n";
report << "System Logs:\n";
for (const auto& log : dataCollector.getSystemLogs()) {
report << log.timestamp << " - " << log.severity << " - " << log.message << "\n";
}
report << "\n";
report << "Process Statuses:\n";
for (const auto& status : dataCollector.getProcessStatuses()) {
report << "PID: " << status.pid << ", Name: " << status.name
<< ", State: " << status.state << ", Memory Usage: " << status.memoryUsage << " kB\n";
}
report << "\n";
report << "Memory Usage:\n";
report << "Used Memory: " << dataCollector.getMemoryUsage().usedMemory << " bytes\n";
report << "\n";
report << "Trigger Mechanism Results:\n";
report << "System Restart Detected: " << (systemRestart ? "Yes" : "No") << "\n";
report << "Kernel Crash Detected: " << (kernelCrash ? "Yes" : "No") << "\n";
report << "OOM Detected: " << (oom ? "Yes" : "No") << "\n";
report << "\n";
std::cout << report.str();
FileStorage storage;
storage.store(report.str(), "system_report.txt", false);
}