#pragma once #include "grove/IModule.h" #include "grove/IDataNode.h" #include #include namespace grove { /** * ErrorRecoveryModule - Module de test pour validation du système de recovery * * Contrairement au ChaosModule (aléatoire), ce module permet de déclencher * des crashes de manière CONTRÔLÉE via sa configuration : * * - crashAtFrame: Frame spécifique où crasher * - crashType: Type de crash (runtime_error, logic_error, etc.) * - enableAutoRecovery: Si true, le module peut se "guérir" après reload * - versionTag: Tag de version pour valider hot-reload */ class ErrorRecoveryModule : public IModule { public: // IModule interface void process(const IDataNode& input) override; void setConfiguration(const IDataNode& configNode, IIO* io, ITaskScheduler* scheduler) override; const IDataNode& getConfiguration() override; std::unique_ptr getHealthStatus() override; void shutdown() override; std::unique_ptr getState() override; void setState(const IDataNode& state) override; std::string getType() const override; bool isIdle() const override { return !isProcessing; } private: // État du module int frameCount = 0; int crashCount = 0; int recoveryCount = 0; bool isProcessing = false; bool hasCrashed = false; // Configuration int crashAtFrame = -1; // -1 = pas de crash planifié int crashType = 0; // 0=runtime_error, 1=logic_error, 2=out_of_range, 3=segfault simulation bool enableAutoRecovery = true; std::string versionTag = "v1.0"; std::shared_ptr logger; std::unique_ptr config; // Déclenche le crash configuré void triggerConfiguredCrash(); }; } // namespace grove // Export symbols extern "C" { grove::IModule* createModule(); void destroyModule(grove::IModule* module); }