Files
patchmon.net/tools/fixconnstrings.sh
9 Technology Group LTD 61523c9a44 Add bulk status endpoint and update frontend
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.
2025-10-28 12:23:46 +00:00

129 lines
4.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"