Untitled
unknown
plain_text
3 years ago
3.1 kB
8
Indexable
const AWS = require('aws-sdk');
AWS.config.update({
accessKeyId: '****',
secretAccessKey: '******',
//region: 'us-east-1' // Promenite region u skladu sa lokacijom vaše korpe
});
const s3 = new AWS.S3();
const bucketName = 'worksite-safety-cvat-dev';
async function listAllCameras(bucket, prefix) {
let params = { Bucket: bucket, Prefix: prefix, Delimiter: '/' };
let cameras = [];
try {
const response = await s3.listObjects(params).promise();
response.CommonPrefixes.forEach(item => {
let camera = item.Prefix.replace(prefix, '').slice(0, -1);
cameras.push(camera);
});
} catch(error) {
throw error;
}
return cameras;
}
async function listAllObjectsFromBucket(bucket, prefix) {
let isTruncated = true;
let marker;
let files = [];
while(isTruncated) {
let params = { Bucket: bucket, Prefix: prefix };
if(marker) params.Marker = marker;
try {
const response = await s3.listObjects(params).promise();
response.Contents.forEach(item => files.push(item.Key));
isTruncated = response.IsTruncated;
if(isTruncated) {
marker = response.Contents.slice(-1)[0].Key;
}
} catch(error) {
throw error;
}
}
console.log(files)
return files;
}
async function findGapsInRecordings(cameraNumber) {
let prefix = 'recordings/' + cameraNumber + '/';
let files = await listAllObjectsFromBucket(bucketName, prefix);
files.sort();
let lastEndTime;
let gaps = [];
for (let file of files) {
let date = file.match(/\d{4}-\d{2}-\d{2}-\d{2}-\d{2}-\d{2}/);
if (!date) continue;
let dateParts = date[0].split('-');
let startTime = new Date(dateParts[0], dateParts[1]-1, dateParts[2], dateParts[3], dateParts[4], dateParts[5]);
if (lastEndTime) {
if ((startTime.getTime() - lastEndTime.getTime()) > 900000) {
let gap = {
gap_start: formatDate(lastEndTime),
gap_end: formatDate(startTime)
};
gaps.push(gap);
}
}
lastEndTime = new Date(startTime.getTime() + 900000);
}
return gaps;
}
function formatDate(date) {
let dd = String(date.getDate()).padStart(2, '0');
let mm = String(date.getMonth() + 1).padStart(2, '0');
let yyyy = date.getFullYear();
let hh = String(date.getHours()).padStart(2, '0');
let min = String(date.getMinutes()).padStart(2, '0');
let ss = String(date.getSeconds()).padStart(2, '0');
return yyyy + '-' + mm + '-' + dd + ' ' + hh + ':' + min + ':' + ss;
}
async function analyzeRecordings() {
let cameras = await listAllCameras(bucketName, 'recordings/'); // Automatski listamo sve kamere
let cameraGaps = {};
for (let camera of cameras) {
let gaps = await findGapsInRecordings(camera);
cameraGaps['kamera' + camera] = gaps;
}
console.log(JSON.stringify(cameraGaps, null, 2));
}
analyzeRecordings().catch(console.error);
Editor is loading...