Update launch_progress.js

This commit is contained in:
2025-06-23 10:56:58 +02:00
parent 7ec3027410
commit 0b9005b481

View File

@@ -1970,8 +1970,6 @@ async function downloadDockerCompose(repo, branch) {
} }
} }
// deployStack function moved to improved version below
// Add new function to save instance data // Add new function to save instance data
async function saveInstanceData(instanceData) { async function saveInstanceData(instanceData) {
try { try {
@@ -2529,287 +2527,8 @@ async function checkStackExists(stackName) {
} }
} }
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// deployStack function moved to improved version below
// Add new function to deploy stack // Add new function to deploy stack
async function deployStack(dockerComposeContent, stackName, port) { async function deployStack(dockerComposeContent, stackName, port) {
const maxRetries = 30; // 30 retries * 10 seconds = 5 minutes
const baseDelay = 10000; // 10 seconds base delay
try { try {
// First, attempt to deploy the stack // First, attempt to deploy the stack
const controller = new AbortController(); const controller = new AbortController();
@@ -2845,136 +2564,13 @@ async function deployStack(dockerComposeContent, stackName, port) {
throw new Error(error.error || 'Failed to deploy stack'); throw new Error(error.error || 'Failed to deploy stack');
} }
// Return success result with response data
const result = await response.json(); const result = await response.json();
// Check if deployment was successful or if stack already exists
if (result.success || result.data || result.status === 'existing' || result.status === 'created') {
console.log('Stack deployment result:', result);
// Update status to show we're waiting for stack to come online
const currentStep = document.querySelector('.step-item.active');
if (currentStep) {
const statusElement = currentStep.querySelector('.step-status');
statusElement.textContent = 'Stack deployed, waiting for services to start...';
}
// Wait and retry to check if stack is online
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
// Check stack status via Portainer API
const stackCheckResponse = await fetch('/api/admin/check-stack-status', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': document.querySelector('meta[name="csrf-token"]').content
},
body: JSON.stringify({
stack_name: `docupulse_${port}`
})
});
if (stackCheckResponse.ok) {
const stackStatus = await stackCheckResponse.json();
if (stackStatus.success && stackStatus.data.status === 'active') {
console.log(`Stack came online successfully on attempt ${attempt}`);
// Update status to show success
if (currentStep) {
const statusElement = currentStep.querySelector('.step-status');
statusElement.textContent = 'Stack deployed and online successfully';
}
return {
success: true,
data: {
...result.data || result,
status: 'active',
attempt: attempt
}
};
}
}
// If not online yet and this isn't the last attempt, wait and retry
if (attempt < maxRetries) {
const delay = baseDelay * Math.pow(1.2, attempt - 1); // Exponential backoff
console.log(`Attempt ${attempt}/${maxRetries}: Stack not yet online. Waiting ${Math.round(delay/1000)}s before retry...`);
// Update the step description to show retry progress
if (currentStep) {
const statusElement = currentStep.querySelector('.step-status');
statusElement.textContent = `Waiting for stack to come online... (Attempt ${attempt}/${maxRetries})`;
}
await new Promise(resolve => setTimeout(resolve, delay));
} else {
// Last attempt failed - stack might be online but API check failed
console.log(`Stack status check failed after ${maxRetries} attempts, but deployment was successful`);
// Update status to show partial success
if (currentStep) {
const statusElement = currentStep.querySelector('.step-status');
statusElement.textContent = 'Stack deployed (status check timeout)';
}
return {
success: true,
data: {
...result.data || result,
status: 'deployed',
note: 'Status check timeout - stack may be online'
}
};
}
} catch (error) {
console.error(`Stack status check attempt ${attempt} failed:`, error);
if (attempt === maxRetries) {
// Last attempt failed, but deployment was successful
console.log('Stack status check failed after all attempts, but deployment was successful');
if (currentStep) {
const statusElement = currentStep.querySelector('.step-status');
statusElement.textContent = 'Stack deployed (status check failed)';
}
return {
success: true,
data: {
...result.data || result,
status: 'deployed',
note: 'Status check failed - stack may be online'
}
};
}
// Wait before retrying on error
const delay = baseDelay * Math.pow(1.2, attempt - 1);
console.log(`Stack check failed, retrying in ${Math.round(delay/1000)}s...`);
if (currentStep) {
const statusElement = currentStep.querySelector('.step-status');
statusElement.textContent = `Stack check failed, retrying... (Attempt ${attempt}/${maxRetries})`;
}
await new Promise(resolve => setTimeout(resolve, delay));
}
}
}
// If we get here, deployment was successful but we couldn't verify status
return { return {
success: true, success: true,
data: { data: result
...result.data || result,
status: 'deployed',
note: 'Deployment successful, status unknown'
}
}; };
} catch (error) { } catch (error) {
console.error('Error deploying stack:', error); console.error('Error deploying stack:', error);