feat: Dockerize collector / CI-CD for PDF release (#1)
All checks were successful
Build LaTeX Document / build_latex (push) Successful in 1m35s
All checks were successful
Build LaTeX Document / build_latex (push) Successful in 1m35s
Reviewed-on: #1 Co-authored-by: Mirko Milovanovic <mir_ko@me.com> Co-committed-by: Mirko Milovanovic <mir_ko@me.com>
This commit is contained in:
141
peertube/datavis/CRUD/sessions-metrics.js
Normal file
141
peertube/datavis/CRUD/sessions-metrics.js
Normal file
@@ -0,0 +1,141 @@
|
||||
/* global use, db */
|
||||
// MongoDB Playground
|
||||
// To disable this template go to Settings | MongoDB | Use Default Template For Playground.
|
||||
// Make sure you are connected to enable completions and to be able to run a playground.
|
||||
// Use Ctrl+Space inside a snippet or a string literal to trigger completions.
|
||||
// The result of the last command run in a playground is shown on the results panel.
|
||||
// By default the first 20 documents will be returned with a cursor.
|
||||
// Use 'console.log()' to print to the debug output.
|
||||
// For more documentation on playgrounds please refer to
|
||||
// https://www.mongodb.com/docs/mongodb-vscode/playgrounds/
|
||||
use("statistics");
|
||||
|
||||
let formattedDate = (date) => ({
|
||||
unix: { $toLong: date },
|
||||
iso: { $toString: date },
|
||||
});
|
||||
|
||||
db.getCollection("peertube_ts").aggregate([
|
||||
{
|
||||
$sort: { timestamp: 1 }
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
_id: "$tags.session",
|
||||
host: { $first: "$tags.host" },
|
||||
firstTimestamp: { $first: "$timestamp" },
|
||||
lastTimestamp: { $last: "$timestamp" },
|
||||
firstTimestampWithPeers: {
|
||||
$min: {
|
||||
$cond: {
|
||||
if: { $gt: [{ $size: { $ifNull: ["$peers", []] } }, 0] },
|
||||
then: "$timestamp",
|
||||
else: null,
|
||||
}
|
||||
}
|
||||
},
|
||||
maxNumberOfPeers: {
|
||||
$max: {
|
||||
$size: { $ifNull: ["$peers", []] },
|
||||
}
|
||||
},
|
||||
minNumberOfPeers: {
|
||||
$min: {
|
||||
$size: { $ifNull: ["$peers", []] },
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
// Lookup other sessions that may have peers
|
||||
{
|
||||
$lookup: {
|
||||
from: "peertube_ts",
|
||||
let: { currentSession: "$_id", ftp: "$firstTimestampWithPeers", fst: "$firstTimestamp" },
|
||||
pipeline: [
|
||||
{
|
||||
$match: {
|
||||
$expr: {
|
||||
$and: [
|
||||
{ $ne: ["$tags.session", "$$currentSession"] },
|
||||
{ $lt: ["$timestamp", "$$ftp"] },
|
||||
{ $gte: ["$timestamp", "$$fst"] },
|
||||
{ $gt: [{ $size: { $ifNull: ["$peers", []] } }, 0] }
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
as: "concurrentSessions"
|
||||
}
|
||||
},
|
||||
// Mark whether peers existed in other sessions before starting
|
||||
{
|
||||
$addFields: {
|
||||
concurrentSessions: {
|
||||
$gt: [{ $size: "$concurrentSessions" }, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
$group: {
|
||||
_id: "$host",
|
||||
sessions: {
|
||||
$push: {
|
||||
id: "$_id",
|
||||
startTime: formattedDate("$firstTimestamp"),
|
||||
endTime: formattedDate("$lastTimestamp"),
|
||||
duration: {
|
||||
$divide: [
|
||||
{
|
||||
$subtract: ["$lastTimestamp", "$firstTimestamp"],
|
||||
},
|
||||
1000,
|
||||
]
|
||||
},
|
||||
firstPeerConnection: {
|
||||
$cond: {
|
||||
if: { $eq: ["$firstTimestampWithPeers", null] },
|
||||
then: null,
|
||||
else: {
|
||||
time: {
|
||||
date: formattedDate("$firstTimestampWithPeers"),
|
||||
elapsedFromStart: {
|
||||
$divide: [
|
||||
{
|
||||
$subtract: ["$firstTimestampWithPeers", "$firstTimestamp"],
|
||||
},
|
||||
1000,
|
||||
]
|
||||
}
|
||||
},
|
||||
concurrentSessions: "$concurrentSessions",
|
||||
}
|
||||
}
|
||||
},
|
||||
maxPeers: { $max: "$maxNumberOfPeers" },
|
||||
minPeers: { $min: "$minNumberOfPeers" }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
$set: {
|
||||
sessions: {
|
||||
$sortArray: {
|
||||
input: "$sessions",
|
||||
sortBy: { id: 1 }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
_id: 0,
|
||||
host: "$_id",
|
||||
sessions: "$sessions"
|
||||
}
|
||||
},
|
||||
{
|
||||
$sort: { host: 1 }
|
||||
}
|
||||
]);
|
Reference in New Issue
Block a user