refactor: remove unused and obsolet stuff
This commit is contained in:
@@ -20,7 +20,6 @@ public:
|
||||
void removeDeadNodes();
|
||||
void printMemberList();
|
||||
const std::map<String, NodeInfo>& getMemberList() const { return *ctx.memberList; }
|
||||
void fetchNodeInfo(const IPAddress& ip);
|
||||
void updateLocalNodeResources();
|
||||
void heartbeatTaskCallback();
|
||||
void updateAllMembersInfoTaskCallback();
|
||||
|
||||
@@ -15,17 +15,12 @@ public:
|
||||
// CPU information
|
||||
float currentCpuUsage;
|
||||
float averageCpuUsage;
|
||||
float maxCpuUsage;
|
||||
float minCpuUsage;
|
||||
unsigned long measurementCount;
|
||||
bool isMeasuring;
|
||||
|
||||
// Memory information
|
||||
size_t freeHeap;
|
||||
size_t totalHeap;
|
||||
size_t minFreeHeap;
|
||||
size_t maxAllocHeap;
|
||||
size_t heapFragmentation;
|
||||
|
||||
// Filesystem information
|
||||
size_t totalBytes;
|
||||
@@ -45,7 +40,6 @@ private:
|
||||
void handleResourcesRequest(AsyncWebServerRequest* request);
|
||||
|
||||
// Helper methods
|
||||
size_t calculateHeapFragmentation() const;
|
||||
void getFilesystemInfo(size_t& totalBytes, size_t& usedBytes) const;
|
||||
|
||||
CpuUsage& cpuUsage;
|
||||
|
||||
@@ -357,8 +357,6 @@ void ClusterManager::addOrUpdateNode(const String& nodeHost, IPAddress nodeIP) {
|
||||
memberlistChanged = true;
|
||||
}
|
||||
it->second.lastSeen = millis();
|
||||
// Note: Other fields like latency, uptime, labels, etc. are preserved
|
||||
//fetchNodeInfo(nodeIP); // Do not fetch here, handled by periodic task
|
||||
} else {
|
||||
// Add new node
|
||||
NodeInfo newNode;
|
||||
@@ -369,7 +367,6 @@ void ClusterManager::addOrUpdateNode(const String& nodeHost, IPAddress nodeIP) {
|
||||
memberList[nodeHost] = newNode;
|
||||
memberlistChanged = true;
|
||||
LOG_INFO("Cluster", "Added node: " + nodeHost + " @ " + newNode.ip.toString() + " | Status: " + statusToStr(newNode.status) + " | last update: 0");
|
||||
//fetchNodeInfo(nodeIP); // Do not fetch here, handled by periodic task
|
||||
}
|
||||
|
||||
// Fire event if memberlist changed
|
||||
@@ -378,114 +375,6 @@ void ClusterManager::addOrUpdateNode(const String& nodeHost, IPAddress nodeIP) {
|
||||
}
|
||||
}
|
||||
|
||||
// unused http client to fetch complete node info
|
||||
void ClusterManager::fetchNodeInfo(const IPAddress& ip) {
|
||||
if(ip == ctx.localIP) {
|
||||
LOG_DEBUG("Cluster", "Skipping fetch for local node");
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned long requestStart = millis();
|
||||
HTTPClient http;
|
||||
WiFiClient client;
|
||||
String url = "http://" + ip.toString() + ClusterProtocol::API_NODE_STATUS;
|
||||
|
||||
// Use RAII pattern to ensure http.end() is always called
|
||||
bool httpInitialized = false;
|
||||
bool success = false;
|
||||
|
||||
httpInitialized = http.begin(client, url);
|
||||
if (!httpInitialized) {
|
||||
LOG_ERROR("Cluster", "Failed to initialize HTTP client for " + ip.toString());
|
||||
return;
|
||||
}
|
||||
|
||||
// Set timeout to prevent hanging
|
||||
http.setTimeout(5000); // 5 second timeout
|
||||
|
||||
int httpCode = http.GET();
|
||||
unsigned long requestEnd = millis();
|
||||
unsigned long requestDuration = requestEnd - requestStart;
|
||||
|
||||
if (httpCode == 200) {
|
||||
String payload = http.getString();
|
||||
|
||||
// Use stack-allocated JsonDocument with proper cleanup
|
||||
JsonDocument doc;
|
||||
DeserializationError err = deserializeJson(doc, payload);
|
||||
|
||||
if (!err) {
|
||||
auto& memberList = *ctx.memberList;
|
||||
// Still need to iterate since we're searching by IP, not hostname
|
||||
for (auto& pair : memberList) {
|
||||
NodeInfo& node = pair.second;
|
||||
if (node.ip == ip) {
|
||||
// Update resources efficiently
|
||||
node.resources.freeHeap = doc["freeHeap"];
|
||||
node.resources.chipId = doc["chipId"];
|
||||
node.resources.sdkVersion = (const char*)doc["sdkVersion"];
|
||||
node.resources.cpuFreqMHz = doc["cpuFreqMHz"];
|
||||
node.resources.flashChipSize = doc["flashChipSize"];
|
||||
node.status = NodeInfo::ACTIVE;
|
||||
node.latency = requestDuration;
|
||||
node.lastSeen = millis();
|
||||
|
||||
// Clear and rebuild endpoints efficiently
|
||||
node.endpoints.clear();
|
||||
node.endpoints.reserve(10); // Pre-allocate to avoid reallocations
|
||||
|
||||
if (doc["api"].is<JsonArray>()) {
|
||||
JsonArray apiArr = doc["api"].as<JsonArray>();
|
||||
for (JsonObject apiObj : apiArr) {
|
||||
// Use const char* to avoid String copies
|
||||
const char* uri = apiObj["uri"];
|
||||
int method = apiObj["method"];
|
||||
|
||||
// Create basic EndpointInfo without params for cluster nodes
|
||||
EndpointInfo endpoint;
|
||||
endpoint.uri = uri; // String assignment is more efficient than construction
|
||||
endpoint.method = method;
|
||||
endpoint.isLocal = false;
|
||||
endpoint.serviceName = "remote";
|
||||
node.endpoints.push_back(std::move(endpoint));
|
||||
}
|
||||
}
|
||||
|
||||
// Parse labels efficiently
|
||||
node.labels.clear();
|
||||
if (doc["labels"].is<JsonObject>()) {
|
||||
JsonObject labelsObj = doc["labels"].as<JsonObject>();
|
||||
for (JsonPair kvp : labelsObj) {
|
||||
// Use const char* to avoid String copies
|
||||
const char* key = kvp.key().c_str();
|
||||
const char* value = labelsObj[kvp.key()];
|
||||
node.labels[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
LOG_DEBUG("Cluster", "Fetched info for node: " + node.hostname + " @ " + ip.toString());
|
||||
success = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
LOG_ERROR("Cluster", "JSON parse error for node @ " + ip.toString() + ": " + String(err.c_str()));
|
||||
}
|
||||
} else {
|
||||
LOG_ERROR("Cluster", "Failed to fetch info for node @ " + ip.toString() + ", HTTP code: " + String(httpCode));
|
||||
}
|
||||
|
||||
// Always ensure HTTP client is properly closed
|
||||
if (httpInitialized) {
|
||||
http.end();
|
||||
}
|
||||
|
||||
// Log success/failure for debugging
|
||||
if (!success) {
|
||||
LOG_DEBUG("Cluster", "Failed to update node info for " + ip.toString());
|
||||
}
|
||||
}
|
||||
|
||||
void ClusterManager::heartbeatTaskCallback() {
|
||||
auto& memberList = *ctx.memberList;
|
||||
auto it = memberList.find(ctx.hostname);
|
||||
|
||||
@@ -25,17 +25,12 @@ MonitoringService::SystemResources MonitoringService::getSystemResources() const
|
||||
// CPU information
|
||||
resources.currentCpuUsage = cpuUsage.getCpuUsage();
|
||||
resources.averageCpuUsage = cpuUsage.getAverageCpuUsage();
|
||||
resources.maxCpuUsage = cpuUsage.getMaxCpuUsage();
|
||||
resources.minCpuUsage = cpuUsage.getMinCpuUsage();
|
||||
resources.measurementCount = cpuUsage.getMeasurementCount();
|
||||
resources.isMeasuring = cpuUsage.isMeasuring();
|
||||
|
||||
// Memory information - ESP8266 compatible
|
||||
resources.freeHeap = ESP.getFreeHeap();
|
||||
resources.totalHeap = 81920; // ESP8266 has ~80KB RAM
|
||||
resources.minFreeHeap = 0; // Not available on ESP8266
|
||||
resources.maxAllocHeap = 0; // Not available on ESP8266
|
||||
resources.heapFragmentation = calculateHeapFragmentation();
|
||||
|
||||
// Filesystem information
|
||||
getFilesystemInfo(resources.totalBytes, resources.usedBytes);
|
||||
@@ -59,8 +54,6 @@ void MonitoringService::handleResourcesRequest(AsyncWebServerRequest* request) {
|
||||
JsonObject cpu = doc["cpu"].to<JsonObject>();
|
||||
cpu["current_usage"] = resources.currentCpuUsage;
|
||||
cpu["average_usage"] = resources.averageCpuUsage;
|
||||
cpu["max_usage"] = resources.maxCpuUsage;
|
||||
cpu["min_usage"] = resources.minCpuUsage;
|
||||
cpu["measurement_count"] = resources.measurementCount;
|
||||
cpu["is_measuring"] = resources.isMeasuring;
|
||||
|
||||
@@ -68,9 +61,6 @@ void MonitoringService::handleResourcesRequest(AsyncWebServerRequest* request) {
|
||||
JsonObject memory = doc["memory"].to<JsonObject>();
|
||||
memory["free_heap"] = resources.freeHeap;
|
||||
memory["total_heap"] = resources.totalHeap;
|
||||
memory["min_free_heap"] = resources.minFreeHeap;
|
||||
memory["max_alloc_heap"] = resources.maxAllocHeap;
|
||||
memory["heap_fragmentation"] = resources.heapFragmentation;
|
||||
memory["heap_usage_percent"] = resources.totalHeap > 0 ?
|
||||
(float)(resources.totalHeap - resources.freeHeap) / (float)resources.totalHeap * 100.0f : 0.0f;
|
||||
|
||||
@@ -94,15 +84,6 @@ void MonitoringService::handleResourcesRequest(AsyncWebServerRequest* request) {
|
||||
request->send(200, "application/json", json);
|
||||
}
|
||||
|
||||
size_t MonitoringService::calculateHeapFragmentation() const {
|
||||
size_t freeHeap = ESP.getFreeHeap();
|
||||
size_t maxAllocHeap = 0; // Not available on ESP8266
|
||||
|
||||
if (maxAllocHeap == 0) return 0;
|
||||
|
||||
// Calculate fragmentation as percentage of free heap that can't be allocated in one block
|
||||
return (freeHeap - maxAllocHeap) * 100 / freeHeap;
|
||||
}
|
||||
|
||||
void MonitoringService::getFilesystemInfo(size_t& totalBytes, size_t& usedBytes) const {
|
||||
totalBytes = 0;
|
||||
|
||||
@@ -116,7 +116,7 @@ void NodeService::handleUpdateUpload(AsyncWebServerRequest* request, const Strin
|
||||
LOG_ERROR("OTA", "Update failed: not enough space");
|
||||
Update.printError(Serial);
|
||||
AsyncWebServerResponse* response = request->beginResponse(500, "application/json",
|
||||
"{\"status\": \"FAIL\"}");
|
||||
"{\"status\": \"FAIL\", \"message\": \"Update failed: not enough space\"}");
|
||||
response->addHeader("Connection", "close");
|
||||
request->send(response);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user