feat: Refactor S3 last modified endpoint and Dashboard data fetching to handle errors gracefully
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m7s

This commit is contained in:
2025-08-05 21:39:58 +07:00
parent 7c6ceb66bc
commit 6dee0fa0b4
2 changed files with 60 additions and 21 deletions
+29 -9
View File
@@ -436,22 +436,42 @@ app.post('/api/filters', async (req, res) => {
// Новый эндпоинт для получения дат последнего изменения файлов S3
app.get('/api/s3/last-modified', async (req, res) => {
try {
const [domainsHead, domainsNewHead, asnsHead, serversHead, filtersHead] = await Promise.all([
const results = await Promise.allSettled([
s3.headObject({ Bucket: BUCKET_NAME, Key: 'bgp_data/domains.txt' }).promise(),
s3.headObject({ Bucket: BUCKET_NAME, Key: 'bgp_data/domains_community.txt' }).promise(),
s3.headObject({ Bucket: BUCKET_NAME, Key: 'bgp_data/asns.txt' }).promise(),
s3.headObject({ Bucket: BUCKET_NAME, Key: 'servers.json' }).promise(),
s3.headObject({ Bucket: BUCKET_NAME, Key: 'filters.json' }).promise()
]);
res.json({
domainsLastModified: domainsHead.LastModified ? domainsHead.LastModified.toISOString() : null,
domainsNewLastModified: domainsNewHead.LastModified ? domainsNewHead.LastModified.toISOString() : null,
asnsLastModified: asnsHead.LastModified ? asnsHead.LastModified.toISOString() : null,
serversLastModified: serversHead.LastModified ? serversHead.LastModified.toISOString() : null,
filtersLastModified: filtersHead.LastModified ? filtersHead.LastModified.toISOString() : null
});
const response = {
domainsLastModified: null,
domainsNewLastModified: null,
asnsLastModified: null,
serversLastModified: null,
filtersLastModified: null
};
// Обрабатываем результаты
if (results[0].status === 'fulfilled') {
response.domainsLastModified = results[0].value.LastModified ? results[0].value.LastModified.toISOString() : null;
}
if (results[1].status === 'fulfilled') {
response.domainsNewLastModified = results[1].value.LastModified ? results[1].value.LastModified.toISOString() : null;
}
if (results[2].status === 'fulfilled') {
response.asnsLastModified = results[2].value.LastModified ? results[2].value.LastModified.toISOString() : null;
}
if (results[3].status === 'fulfilled') {
response.serversLastModified = results[3].value.LastModified ? results[3].value.LastModified.toISOString() : null;
}
if (results[4].status === 'fulfilled') {
response.filtersLastModified = results[4].value.LastModified ? results[4].value.LastModified.toISOString() : null;
}
res.json(response);
} catch (error) {
console.error(error);
console.error('Error fetching last modified dates from S3:', error);
res.status(500).send('Error fetching last modified dates from S3');
}
});