Sync DNS2 production changes - removed obsolete test suite and refactored structure
This commit is contained in:
@@ -83,7 +83,7 @@ class UpdateManager extends EventEmitter {
|
||||
currentDigest: currentDigest.substring(0, 12),
|
||||
latestDigest: latestDigest.substring(0, 12),
|
||||
currentTag: this.extractTag(imageName),
|
||||
detectedAt: new Date().toISOString(),
|
||||
detectedAt: new Date().toISOString()
|
||||
});
|
||||
|
||||
this.emit('update-available', this.availableUpdates.get(containerInfo.Id));
|
||||
@@ -137,8 +137,8 @@ class UpdateManager extends EventEmitter {
|
||||
path: `/v2/${repo}/manifests/${tag}`,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/vnd.docker.distribution.manifest.v2+json',
|
||||
},
|
||||
'Accept': 'application/vnd.docker.distribution.manifest.v2+json'
|
||||
}
|
||||
};
|
||||
|
||||
const req = https.request(options, (res) => {
|
||||
@@ -206,8 +206,8 @@ class UpdateManager extends EventEmitter {
|
||||
...originalOptions,
|
||||
headers: {
|
||||
...originalOptions.headers,
|
||||
'Authorization': `Bearer ${token}`,
|
||||
},
|
||||
'Authorization': `Bearer ${token}`
|
||||
}
|
||||
};
|
||||
|
||||
const req = https.request(options, (res) => {
|
||||
@@ -271,7 +271,7 @@ class UpdateManager extends EventEmitter {
|
||||
config: inspect.Config,
|
||||
hostConfig: inspect.HostConfig,
|
||||
networkSettings: inspect.NetworkSettings,
|
||||
timestamp: new Date().toISOString(),
|
||||
timestamp: new Date().toISOString()
|
||||
};
|
||||
|
||||
// Pull latest image
|
||||
@@ -292,7 +292,7 @@ class UpdateManager extends EventEmitter {
|
||||
name: containerName,
|
||||
Image: imageName,
|
||||
...backup.config,
|
||||
HostConfig: backup.hostConfig,
|
||||
HostConfig: backup.hostConfig
|
||||
});
|
||||
|
||||
// Start new container
|
||||
@@ -300,7 +300,7 @@ class UpdateManager extends EventEmitter {
|
||||
await newContainer.start();
|
||||
|
||||
// Extended verification with health checks and port accessibility
|
||||
console.log('[UpdateManager] Performing extended verification...');
|
||||
console.log(`[UpdateManager] Performing extended verification...`);
|
||||
await this.verifyContainerExtended(newContainer, inspect, options.verifyTimeout || 60000);
|
||||
|
||||
// Get new image ID
|
||||
@@ -313,7 +313,7 @@ class UpdateManager extends EventEmitter {
|
||||
console.log(`[UpdateManager] Removing old image: ${oldImageId.substring(0, 12)}`);
|
||||
const oldImage = docker.getImage(oldImageId);
|
||||
await oldImage.remove({ force: false });
|
||||
console.log('[UpdateManager] Old image removed successfully');
|
||||
console.log(`[UpdateManager] Old image removed successfully`);
|
||||
} catch (error) {
|
||||
console.warn(`[UpdateManager] Could not remove old image (may be in use): ${error.message}`);
|
||||
}
|
||||
@@ -330,7 +330,7 @@ class UpdateManager extends EventEmitter {
|
||||
timestamp: new Date().toISOString(),
|
||||
duration,
|
||||
status: 'success',
|
||||
backup,
|
||||
backup
|
||||
};
|
||||
|
||||
this.addToHistory(historyEntry);
|
||||
@@ -348,7 +348,7 @@ class UpdateManager extends EventEmitter {
|
||||
timestamp: new Date().toISOString(),
|
||||
duration,
|
||||
status: 'failed',
|
||||
error: error.message,
|
||||
error: error.message
|
||||
};
|
||||
|
||||
this.addToHistory(historyEntry);
|
||||
@@ -360,7 +360,7 @@ class UpdateManager extends EventEmitter {
|
||||
try {
|
||||
await this.rollbackUpdate(containerId);
|
||||
} catch (rollbackError) {
|
||||
console.error('[UpdateManager] Rollback failed:', rollbackError.message);
|
||||
console.error(`[UpdateManager] Rollback failed:`, rollbackError.message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,7 +448,7 @@ class UpdateManager extends EventEmitter {
|
||||
// Step 2: Check Docker health check if available
|
||||
if (inspect.State.Health) {
|
||||
if (inspect.State.Health.Status === 'healthy') {
|
||||
console.log('[UpdateManager] Container health check: healthy');
|
||||
console.log(`[UpdateManager] Container health check: healthy`);
|
||||
return true;
|
||||
} else if (inspect.State.Health.Status === 'unhealthy') {
|
||||
lastError = 'Container health check failed (unhealthy)';
|
||||
@@ -468,7 +468,7 @@ class UpdateManager extends EventEmitter {
|
||||
try {
|
||||
const response = await fetch(testUrl, {
|
||||
signal: AbortSignal.timeout(3000),
|
||||
redirect: 'manual',
|
||||
redirect: 'manual'
|
||||
});
|
||||
|
||||
// Accept 2xx, 3xx, 4xx as "accessible" (server is responding)
|
||||
@@ -477,7 +477,7 @@ class UpdateManager extends EventEmitter {
|
||||
|
||||
// Wait a bit more to ensure stability
|
||||
if (attempt >= 2) {
|
||||
console.log('[UpdateManager] Container verified successfully');
|
||||
console.log(`[UpdateManager] Container verified successfully`);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -488,7 +488,7 @@ class UpdateManager extends EventEmitter {
|
||||
} else {
|
||||
// No ports exposed - just verify it's running for a few cycles
|
||||
if (attempt >= 5) {
|
||||
console.log('[UpdateManager] Container running without exposed ports (verified)');
|
||||
console.log(`[UpdateManager] Container running without exposed ports (verified)`);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -529,7 +529,7 @@ class UpdateManager extends EventEmitter {
|
||||
ports.push({
|
||||
containerPort: containerPort.split('/')[0],
|
||||
hostPort: binding.HostPort,
|
||||
protocol: containerPort.split('/')[1] || 'tcp',
|
||||
protocol: containerPort.split('/')[1] || 'tcp'
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -572,7 +572,7 @@ class UpdateManager extends EventEmitter {
|
||||
name: backup.containerName,
|
||||
Image: backup.imageName,
|
||||
...backup.config,
|
||||
HostConfig: backup.hostConfig,
|
||||
HostConfig: backup.hostConfig
|
||||
});
|
||||
|
||||
await newContainer.start();
|
||||
@@ -582,7 +582,7 @@ class UpdateManager extends EventEmitter {
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('[UpdateManager] Rollback failed:', error.message);
|
||||
console.error(`[UpdateManager] Rollback failed:`, error.message);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@@ -599,7 +599,7 @@ class UpdateManager extends EventEmitter {
|
||||
|
||||
setTimeout(() => {
|
||||
this.updateContainer(containerId).catch(error => {
|
||||
console.error('[UpdateManager] Scheduled update failed:', error.message);
|
||||
console.error(`[UpdateManager] Scheduled update failed:`, error.message);
|
||||
});
|
||||
}, delay);
|
||||
|
||||
@@ -663,20 +663,20 @@ class UpdateManager extends EventEmitter {
|
||||
shortDescription: repoInfo?.description?.substring(0, 200) || '',
|
||||
starCount: repoInfo?.star_count || 0,
|
||||
pullCount: repoInfo?.pull_count || 0,
|
||||
lastUpdated: repoInfo?.last_updated || null,
|
||||
lastUpdated: repoInfo?.last_updated || null
|
||||
},
|
||||
tags: tags.slice(0, 10).map(t => ({
|
||||
name: t.name,
|
||||
lastPushed: t.last_pushed || t.tag_last_pushed,
|
||||
digest: t.digest?.substring(0, 12) || 'unknown',
|
||||
size: t.full_size || t.size || 0,
|
||||
size: t.full_size || t.size || 0
|
||||
})),
|
||||
urls: {
|
||||
dockerHub: hubUrl,
|
||||
tags: `${hubUrl}/tags`,
|
||||
dockerfile: repoInfo?.dockerfile_url || null,
|
||||
dockerfile: repoInfo?.dockerfile_url || null
|
||||
},
|
||||
changelog: this.formatChangelog(repoInfo, tags, imageTag),
|
||||
changelog: this.formatChangelog(repoInfo, tags, imageTag)
|
||||
};
|
||||
} catch (error) {
|
||||
console.error(`[UpdateManager] Error fetching changelog for ${imageName}:`, error.message);
|
||||
@@ -691,7 +691,7 @@ class UpdateManager extends EventEmitter {
|
||||
urls: {
|
||||
dockerHub: `https://hub.docker.com/r/${repoPath.replace('library/', '_/')}`,
|
||||
},
|
||||
changelog: 'Unable to fetch changelog. Visit Docker Hub for details.',
|
||||
changelog: 'Unable to fetch changelog. Visit Docker Hub for details.'
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -711,8 +711,8 @@ class UpdateManager extends EventEmitter {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'User-Agent': 'DashCaddy/1.0',
|
||||
},
|
||||
'User-Agent': 'DashCaddy/1.0'
|
||||
}
|
||||
};
|
||||
|
||||
const req = https.request(options, (res) => {
|
||||
@@ -755,8 +755,8 @@ class UpdateManager extends EventEmitter {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'User-Agent': 'DashCaddy/1.0',
|
||||
},
|
||||
'User-Agent': 'DashCaddy/1.0'
|
||||
}
|
||||
};
|
||||
|
||||
const req = https.request(options, (res) => {
|
||||
@@ -836,7 +836,7 @@ class UpdateManager extends EventEmitter {
|
||||
schedule: config.schedule || 'weekly',
|
||||
maintenanceWindow: config.maintenanceWindow,
|
||||
autoRollback: config.autoRollback !== false,
|
||||
securityOnly: config.securityOnly || false,
|
||||
securityOnly: config.securityOnly || false
|
||||
};
|
||||
|
||||
this.saveConfig();
|
||||
|
||||
Reference in New Issue
Block a user