aissia/src/modules/WebModule.h
StillHammer d17ee5fbdc feat: AISSIA rename and codebase updates
- Renamed project from Celuna to AISSIA
- Updated all documentation and configuration files
- Codebase improvements and fixes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 18:37:13 +07:00

63 lines
1.9 KiB
C++

#pragma once
#include <grove/IModule.h>
#include <memory>
#include <spdlog/spdlog.h>
namespace celuna {
/**
* @brief WebModule - Handles HTTP requests via IIO pub/sub
*
* Provides HTTP GET/POST capabilities to other modules through the IIO system.
* Modules publish to "web:request" and receive responses on "web:response".
*
* Features:
* - GET/POST/PUT/DELETE support
* - Custom headers and body
* - Timeout configuration
* - Request statistics tracking
* - Hot-reload state preservation
*/
class WebModule : public grove::IModule {
public:
WebModule();
~WebModule() override = default;
// IModule interface
std::string getType() const override { return "WebModule"; }
bool isIdle() const override { return true; }
void setConfiguration(const grove::IDataNode& config,
grove::IIO* io,
grove::ITaskScheduler* scheduler) override;
const grove::IDataNode& getConfiguration() override;
void process(const grove::IDataNode& input) override;
std::unique_ptr<grove::IDataNode> getHealthStatus() override;
void shutdown() override;
// State management (hot-reload)
std::unique_ptr<grove::IDataNode> getState() override;
void setState(const grove::IDataNode& state) override;
private:
void processMessages();
void handleWebRequest(const grove::IDataNode& request);
bool isUrlAllowed(const std::string& url);
grove::IIO* m_io = nullptr;
std::shared_ptr<spdlog::logger> m_logger;
std::unique_ptr<grove::IDataNode> m_config;
// Configuration
bool m_enabled = true;
int m_requestTimeoutMs = 30000;
int m_maxConcurrentRequests = 10;
// Statistics (preserved on hot-reload)
int m_totalRequests = 0;
int m_successfulRequests = 0;
int m_failedRequests = 0;
};
} // namespace celuna