Untitled

 avatar
unknown
plain_text
2 years ago
3.1 kB
5
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...