mirror of
https://github.com/9technologygroup/patchmon.net.git
synced 2025-11-01 20:44:09 +00:00
This script fixes the HTTP connection limit issue by adding a bulk status endpoint to the backend and updating the frontend to utilize this endpoint. Backups of the modified files are created before changes are applied.
129 lines
4.0 KiB
Bash
129 lines
4.0 KiB
Bash
#!/bin/bash
|
||
|
||
# Script to fix HTTP connection limit issue for hosts page
|
||
# This adds a bulk status endpoint and updates the frontend to use it
|
||
|
||
set -e
|
||
|
||
echo "🔧 Fixing HTTP connection limit issue..."
|
||
|
||
# Backup files first
|
||
echo "📦 Creating backups..."
|
||
cp backend/src/routes/wsRoutes.js backend/src/routes/wsRoutes.js.bak
|
||
cp frontend/src/pages/Hosts.jsx frontend/src/pages/Hosts.jsx.bak
|
||
|
||
# Add bulk status endpoint to wsRoutes.js
|
||
echo "➕ Adding bulk status endpoint to backend..."
|
||
|
||
cat > /tmp/ws_routes_addition.txt << 'EOF'
|
||
// Get WebSocket connection status for multiple hosts at once
|
||
router.get("/status", authenticateToken, async (req, res) => {
|
||
try {
|
||
const { apiIds } = req.query; // Comma-separated list of api_ids
|
||
const idArray = apiIds ? apiIds.split(',').filter(id => id.trim()) : [];
|
||
|
||
const statusMap = {};
|
||
idArray.forEach(apiId => {
|
||
statusMap[apiId] = getConnectionInfo(apiId);
|
||
});
|
||
|
||
res.json({
|
||
success: true,
|
||
data: statusMap,
|
||
});
|
||
} catch (error) {
|
||
console.error("Error fetching bulk WebSocket status:", error);
|
||
res.status(500).json({
|
||
success: false,
|
||
error: "Failed to fetch WebSocket status",
|
||
});
|
||
}
|
||
});
|
||
EOF
|
||
|
||
# Find the line number of the first router.get and insert after it
|
||
LINENUM=$(grep -n "router.get.*status.*apiId" backend/src/routes/wsRoutes.js | head -1 | cut -d: -f1)
|
||
sed -i "${LINENUM}r /tmp/ws_routes_addition.txt" backend/src/routes/wsRoutes.js
|
||
|
||
# Now update the frontend to use the bulk endpoint
|
||
echo "🔄 Updating frontend to use bulk endpoint..."
|
||
|
||
# Create a sed script to replace the fetchInitialStatus function
|
||
cat > /tmp/hosts_fix.sed << 'EOF'
|
||
/const fetchInitialStatus = async/,\}/c\
|
||
const fetchInitialStatus = async () => {\
|
||
const apiIds = hosts\
|
||
.filter((host) => host.api_id)\
|
||
.map(host => host.api_id);\
|
||
\
|
||
if (apiIds.length === 0) return;\
|
||
\
|
||
try {\
|
||
const response = await fetch(`/api/v1/ws/status?apiIds=${apiIds.join(',')}`, {\
|
||
headers: {\
|
||
Authorization: `Bearer ${token}`,\
|
||
},\
|
||
});\
|
||
if (response.ok) {\
|
||
const result = await response.json();\
|
||
setWsStatusMap(result.data);\
|
||
}\
|
||
} catch (_error) {\
|
||
// Silently handle errors\
|
||
}\
|
||
};
|
||
EOF
|
||
|
||
# Apply the sed script (multiline replacement is tricky with sed, so we'll use a different approach)
|
||
echo "✨ Using awk for multi-line replacement..."
|
||
|
||
# Create a temporary awk script
|
||
cat > /tmp/update_hosts.awk << 'AWK_EOF'
|
||
BEGIN { in_function=0; brace_count=0 }
|
||
/store.fetchInitialStatus/ { printing=1 }
|
||
/const fetchInitialStatus = async/ {
|
||
print " // Fetch initial WebSocket status for all hosts";
|
||
print " const fetchInitialStatus = async () => {";
|
||
print " const apiIds = hosts";
|
||
print " .filter((host) => host.api_id)";
|
||
print " .map(host => host.api_id);";
|
||
print "";
|
||
print " if (apiIds.length === 0) return;";
|
||
print "";
|
||
print " try {";
|
||
print " const response = await fetch(`/api/v1/ws/status?apiIds=${apiIds.join(',')}`, {";
|
||
print " headers: {";
|
||
print " Authorization: `Bearer ${token}`,";
|
||
print " },";
|
||
print " });";
|
||
print " if (response.ok) {";
|
||
print " const result = await response.json();";
|
||
print " setWsStatusMap(result.data);";
|
||
print " }";
|
||
print " } catch (_error) {";
|
||
print " // Silently handle errors";
|
||
print " }";
|
||
print " };";
|
||
skipping=1;
|
||
next
|
||
}
|
||
skipping && /^\t\t\}/ { skipping=0; next }
|
||
skipping { next }
|
||
{ print }
|
||
AWK_EOF
|
||
|
||
awk -f /tmp/update_hosts.awk frontend/src/pages/Hosts.jsx.bak > frontend/src/pages/Hosts.jsx
|
||
|
||
# Clean up temp files
|
||
rm /tmp/ws_routes_addition.txt /tmp/hosts_fix.sed /tmp/update_hosts.awk
|
||
|
||
echo "✅ Done! Files have been modified."
|
||
echo ""
|
||
echo "📝 Changes made:"
|
||
echo " - backend/src/routes/wsRoutes.js: Added bulk status endpoint"
|
||
echo " - frontend/src/pages/Hosts.jsx: Updated to use bulk endpoint"
|
||
echo ""
|
||
echo "💾 Backups saved as:"
|
||
echo " - backend/src/routes/wsRoutes.js.bak"
|
||
echo " - frontend/src/pages/Hosts.jsx.bak"
|