mirror of
https://github.com/9technologygroup/patchmon.net.git
synced 2025-12-20 12:29:58 -06:00
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.
This commit is contained in:
committed by
GitHub
parent
3f9a5576ac
commit
61523c9a44
128
tools/fixconnstrings.sh
Normal file
128
tools/fixconnstrings.sh
Normal file
@@ -0,0 +1,128 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user