Fix presigned URL generation race conditions
This commit is contained in:
parent
a08f1d37b7
commit
52ecba53cc
@ -10,6 +10,7 @@ const mongoUri = process.env.MONGO_URI || 'mongodb://127.0.0.1:27017/default?rep
|
||||
// Minio set-up variables
|
||||
const minioURI = new URL(process.env.MINIO_URI || 'http://kspace-mugshot:2mSI6HdbJ8@127.0.0.1:9000/kspace-mugshot');
|
||||
const minioBucket = minioURI.pathname.substring(1);
|
||||
console.info("Using bucket:", minioBucket);
|
||||
const historyNumber = parseInt(process.env.HISTORY_AMOUNT) || 1000;
|
||||
|
||||
// Stream set-up variables
|
||||
@ -44,14 +45,12 @@ async function run() {
|
||||
secretKey: minioURI.password
|
||||
});
|
||||
|
||||
function wrapEvent(doc) {
|
||||
async function wrapEvent(doc) {
|
||||
if (doc && doc.screenshot_count) {
|
||||
doc.screenshots = [];
|
||||
for (let i = 1; i <= doc.screenshot_count ; i++) {
|
||||
minioClient.presignedUrl('GET', minioBucket, `${doc.camera}/${doc._id}/${i}.jpg`, 60 * 60, (err, presignedUrl) => {
|
||||
if (err) { return console.log(err) };
|
||||
let presignedUrl = await minioClient.presignedUrl('GET', minioBucket, `${doc.camera}/${doc._id}/${i}.jpg`, 60 * 60);
|
||||
doc.screenshots.push({ url: presignedUrl });
|
||||
})
|
||||
}
|
||||
};
|
||||
let blob = JSON.stringify(doc);
|
||||
@ -62,14 +61,14 @@ async function run() {
|
||||
const header = { 'Content-Type': 'text/event-stream', 'Connection': 'keep-alive' };
|
||||
response.writeHead(200, "OK", header);
|
||||
|
||||
const historyCursor = collection.find({}).sort({$natural : -1}).limit(historyNumber);
|
||||
const historyCursor = collection.find().sort({$natural:-1}).limit(historyNumber);
|
||||
|
||||
historyCursor.forEach((document) => {
|
||||
response.write(wrapEvent(document));
|
||||
historyCursor.forEach(async (document) => {
|
||||
response.write(await wrapEvent(document));
|
||||
})
|
||||
|
||||
changeStream.on("change", data => {
|
||||
response.write(wrapEvent(data.fullDocument));
|
||||
changeStream.on("change", async(data) => {
|
||||
response.write(await wrapEvent(data.fullDocument));
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -9,17 +9,11 @@ x-common: &common
|
||||
ME_CONFIG_MONGODB_ENABLE_ADMIN: 'true'
|
||||
ME_CONFIG_MONGODB_SERVER: '127.0.0.1'
|
||||
ME_CONFIG_MONGODB_AUTH_DATABASE: admin
|
||||
MONGO_URI: mongodb://127.0.0.1:27017/default?replicaSet=rs0
|
||||
MONGO_COLLECTION: eventlog
|
||||
HISTORY_AMOUNT: 10
|
||||
MINIO_ACCESS_KEY: kspace-mugshot
|
||||
MINIO_SECRET_KEY: 2mSI6HdbJ8
|
||||
MINIO_DEFAULT_BUCKETS: kspace-mugshot:download
|
||||
MINIO_CONSOLE_PORT_NUMBER: 9001
|
||||
MINIO_URI: 'https://kspace-mugshot:2mSI6HdbJ8@127.0.0.1:9000/kspace-mugshot'
|
||||
|
||||
|
||||
|
||||
services:
|
||||
|
||||
mongoexpress:
|
||||
|
@ -1,3 +1,4 @@
|
||||
from datetime import datetime
|
||||
from pymongo import MongoClient
|
||||
from bson.objectid import ObjectId
|
||||
from time import sleep
|
||||
@ -7,6 +8,14 @@ MONGO_URI="mongodb://127.0.0.1:27017/default"
|
||||
db = MongoClient(MONGO_URI).get_default_database()
|
||||
|
||||
while True:
|
||||
db.eventlog.insert_one({ "timestamp": "...", "event": "motion-detected", "started": "...", "finished": "...", "component": "motion-detect", "camera": "Server room", "action": "event",
|
||||
db.eventlog.insert_one({
|
||||
"timestamp": datetime.utcnow(),
|
||||
"event": "motion-detected",
|
||||
"started": "...",
|
||||
"finished": "...",
|
||||
"component": "motion-detect",
|
||||
"camera": "Server room",
|
||||
"action": "event",
|
||||
"screenshot_count": 1
|
||||
})
|
||||
sleep(1)
|
||||
|
Loading…
Reference in New Issue
Block a user