mirror of
https://github.com/openmhz/trunk-server.git
synced 2026-11-13 09:17:30 -05:00
Everything looks like it is workings with the upgraded backend
This commit is contained in:
@@ -71,12 +71,14 @@ exports.listSystems = async function (req, res, next) {
|
|||||||
for (var i = 0; i < stats.length; i++) {
|
for (var i = 0; i < stats.length; i++) {
|
||||||
sys_stats[stats[i].shortName] = {};
|
sys_stats[stats[i].shortName] = {};
|
||||||
|
|
||||||
sys_stats[stats[i].shortName].callTotals = stats[i].callTotals;
|
sys_stats[stats[i].shortName]["uploadErrors"] = stats[i].uploadErrors;
|
||||||
sys_stats[stats[i].shortName].uploadErrors = stats[i].uploadErrors;
|
sys_stats[stats[i].shortName]["callTotals"] = stats[i].callTotals;
|
||||||
|
|
||||||
sys_stats[stats[i].shortName].talkgroupStats= stats[i].talkgroupStats;
|
sys_stats[stats[i].shortName].talkgroupStats= stats[i].talkgroupStats;
|
||||||
sys_stats[stats[i].shortName].decodeErrorsFreq = stats[i].decodeErrorsFreq;
|
sys_stats[stats[i].shortName].decodeErrorsFreq = stats[i].decodeErrorsFreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log(sys_stats["test"]);
|
||||||
res.json({
|
res.json({
|
||||||
success: true,
|
success: true,
|
||||||
systems: returnSys,
|
systems: returnSys,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
var ObjectID = require('mongodb').ObjectID;
|
const { ObjectId } = require('mongodb');
|
||||||
var db = require('../db');
|
var db = require('../db');
|
||||||
var mongoose = require("mongoose");
|
var mongoose = require("mongoose");
|
||||||
var { callModel: Call } = require("../models/call");
|
var { callModel: Call } = require("../models/call");
|
||||||
@@ -110,7 +110,7 @@ async function build_filter(filter_type, code, start_time, direction, shortName,
|
|||||||
|
|
||||||
const group = await groupCollection.findOne({
|
const group = await groupCollection.findOne({
|
||||||
'shortName': shortName,
|
'shortName': shortName,
|
||||||
'_id': ObjectID.createFromHexString(code)
|
'_id': ObjectId.createFromHexString(code)
|
||||||
});
|
});
|
||||||
if (!group) {
|
if (!group) {
|
||||||
console.warn("[" + shortName + "] Error - build_filter() group is null " + err);
|
console.warn("[" + shortName + "] Error - build_filter() group is null " + err);
|
||||||
@@ -163,9 +163,9 @@ async function build_filter(filter_type, code, start_time, direction, shortName,
|
|||||||
exports.get_card = async function (req, res) {
|
exports.get_card = async function (req, res) {
|
||||||
var objectId = req.params.id;
|
var objectId = req.params.id;
|
||||||
try {
|
try {
|
||||||
var o_id = ObjectID.createFromHexString(objectId);
|
var o_id = ObjectId.createFromHexString(objectId);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn("Error - /card/:id generating ObjectID " + err);
|
console.warn("Error - /card/:id generating ObjectId " + err);
|
||||||
res.status(500);
|
res.status(500);
|
||||||
res.send(JSON.stringify({
|
res.send(JSON.stringify({
|
||||||
error: err,
|
error: err,
|
||||||
@@ -219,9 +219,9 @@ function package_call(item) {
|
|||||||
exports.remove_star = async function (req, res, next) {
|
exports.remove_star = async function (req, res, next) {
|
||||||
var objectId = req.params.id;
|
var objectId = req.params.id;
|
||||||
try {
|
try {
|
||||||
var o_id = ObjectID.createFromHexString(objectId);
|
var o_id = ObjectId.createFromHexString(objectId);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn("[" + req.params.shortName + "] Error - /remove_star/:id generating ObjectID " + err);
|
console.warn("[" + req.params.shortName + "] Error - /remove_star/:id generating ObjectId " + err);
|
||||||
res.status(500);
|
res.status(500);
|
||||||
res.send(JSON.stringify({
|
res.send(JSON.stringify({
|
||||||
success: false,
|
success: false,
|
||||||
@@ -252,9 +252,9 @@ exports.remove_star = async function (req, res, next) {
|
|||||||
exports.add_star = async function (req, res, next) {
|
exports.add_star = async function (req, res, next) {
|
||||||
var objectId = req.params.id;
|
var objectId = req.params.id;
|
||||||
try {
|
try {
|
||||||
var o_id = ObjectID.createFromHexString(objectId);
|
var o_id = ObjectId.createFromHexString(objectId);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn("[" + req.params.shortName + "] Error - /add_star/:id generating ObjectID " + err);
|
console.warn("[" + req.params.shortName + "] Error - /add_star/:id generating ObjectId " + err);
|
||||||
res.status(500);
|
res.status(500);
|
||||||
res.send(JSON.stringify({
|
res.send(JSON.stringify({
|
||||||
success: false,
|
success: false,
|
||||||
@@ -286,9 +286,9 @@ exports.add_star = async function (req, res, next) {
|
|||||||
exports.get_call = async function (req, res) {
|
exports.get_call = async function (req, res) {
|
||||||
var objectId = req.params.id;
|
var objectId = req.params.id;
|
||||||
try {
|
try {
|
||||||
var o_id = ObjectID.createFromHexString(objectId);
|
var o_id = ObjectId.createFromHexString(objectId);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.warn("[" + req.params.shortName + "] Error - /:shortName/call/:id generating ObjectID " + err);
|
console.warn("[" + req.params.shortName + "] Error - /:shortName/call/:id generating ObjectId " + err);
|
||||||
res.status(500);
|
res.status(500);
|
||||||
res.send(JSON.stringify({
|
res.send(JSON.stringify({
|
||||||
success: false,
|
success: false,
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
var ObjectID = require('mongodb').ObjectID;
|
const { ObjectId } = require('mongodb');
|
||||||
const { spawn, spawnSync } = require('node:child_process');
|
const { spawn } = require('node:child_process');
|
||||||
const https = require('https');
|
const https = require('https');
|
||||||
var db = require('../db');
|
|
||||||
var mongoose = require("mongoose");
|
|
||||||
var Event = require("../models/event");
|
var Event = require("../models/event");
|
||||||
var Podcast = require("../models/podcast");
|
var Podcast = require("../models/podcast");
|
||||||
var System = require("../models/system");
|
var System = require("../models/system");
|
||||||
@@ -14,22 +12,20 @@ var frontend_server = process.env['REACT_APP_FRONTEND_SERVER'] != null ? process
|
|||||||
const os = require('os');
|
const os = require('os');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
|
||||||
const s3 = require('aws-sdk');
|
const { PutObjectCommand, S3Client } = require("@aws-sdk/client-s3");
|
||||||
const { events } = require('../models/event');
|
const { fromIni } = require("@aws-sdk/credential-providers");
|
||||||
|
|
||||||
var s3_endpoint = process.env['S3_ENDPOINT'] != null ? process.env['S3_ENDPOINT'] : 'https://s3.us-west-1.wasabisys.com';
|
var s3_endpoint = process.env['S3_ENDPOINT'] != null ? process.env['S3_ENDPOINT'] : 'https://s3.us-west-1.wasabisys.com';
|
||||||
|
var s3_region = process.env['S3_REGION'] != null ? process.env['S3_REGION'] : 'us-west-1';
|
||||||
var s3_bucket = process.env['S3_BUCKET'] != null ? process.env['S3_BUCKET'] : 'openmhz-west';
|
var s3_bucket = process.env['S3_BUCKET'] != null ? process.env['S3_BUCKET'] : 'openmhz-west';
|
||||||
var s3_profile = process.env['S3_PROFILE'] != null ? process.env['S3_PROFILE'] : 'wasabi-account';
|
var s3_profile = process.env['S3_PROFILE'] != null ? process.env['S3_PROFILE'] : 'wasabi-account';
|
||||||
|
|
||||||
const s3Endpoint = new s3.Endpoint(s3_endpoint);
|
|
||||||
var s3Credentials = new s3.SharedIniFileCredentials({
|
|
||||||
profile: s3_profile
|
|
||||||
});
|
|
||||||
|
|
||||||
s3.config.credentials = s3Credentials;
|
const client = new S3Client({
|
||||||
const s3S3 = new s3.S3({
|
credentials: fromIni({ profile: s3_profile }),
|
||||||
endpoint: s3Endpoint,
|
endpoint: s3_endpoint,
|
||||||
maxRetries: 2
|
region: s3_region,
|
||||||
|
maxAttempts: 2
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -105,41 +101,36 @@ const createEventZip = async (folder, filename, zipFolder) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const uploadFile = (zipFile, s3File) => {
|
const uploadFile = async (zipFile, s3File) => {
|
||||||
var s3Src = fs.createReadStream(zipFile);
|
var s3Src = fs.createReadStream(zipFile);
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const s3Params = {
|
|
||||||
Bucket: s3_bucket,
|
|
||||||
Key: s3File,
|
|
||||||
Body: s3Src,
|
|
||||||
ACL: 'public-read'
|
|
||||||
};
|
|
||||||
|
|
||||||
s3S3.upload(s3Params, function (err, data) {
|
const command = new PutObjectCommand({
|
||||||
s3Src.destroy();
|
Bucket: s3_bucket,
|
||||||
|
Key: s3File,
|
||||||
if (err) {
|
Body: s3Src,
|
||||||
console.error("Event S3 Upload Error " + err);
|
ACL: 'public-read'
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve("done");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
await client.send(command);
|
||||||
|
s3Src.destroy();
|
||||||
|
} catch (err) {
|
||||||
|
console.error("Event S3 Upload Error " + err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const ffmpeg = async (command) => {
|
const ffmpeg = async (command) => {
|
||||||
// https://stackoverflow.com/questions/68101810/how-to-execute-ffmpeg-commands-synchronously
|
// https://stackoverflow.com/questions/68101810/how-to-execute-ffmpeg-commands-synchronously
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const ffmpeg = spawn("/usr/bin/ffmpeg", command);
|
const ffmpeg = spawn("/usr/bin/ffmpeg", command);
|
||||||
//ffmpeg.once('error', reject);
|
//ffmpeg.once('error', reject);
|
||||||
ffmpeg.stderr.on("data", (data) => {
|
ffmpeg.stderr.on("data", (data) => {
|
||||||
console.error(data.toString()); //I'm not sure what debug is
|
console.error(data.toString()); //I'm not sure what debug is
|
||||||
});
|
});
|
||||||
ffmpeg.stdout.on("data", (data) => {
|
ffmpeg.stdout.on("data", (data) => {
|
||||||
//console.log(data.toString()); //I'm not sure what debug is
|
//console.log(data.toString()); //I'm not sure what debug is
|
||||||
});
|
});
|
||||||
ffmpeg.on("exit", (code, signal) => {
|
ffmpeg.on("exit", (code, signal) => {
|
||||||
if (signal)
|
if (signal)
|
||||||
code = signal;
|
code = signal;
|
||||||
@@ -156,11 +147,15 @@ const ffmpeg = async (command) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const escapeMetadata = (input) => {
|
const escapeMetadata = (input) => {
|
||||||
let result = input.replace(/(\\)/g, '\\\\');
|
if (typeof input === 'string') {
|
||||||
result=result.replace(/(\;)/g, '\\;');
|
let result = input.replace(/(\\)/g, '\\\\');
|
||||||
result=result.replace(/(\#)/g, '\\#');
|
result = result.replace(/(\;)/g, '\\;');
|
||||||
result=result.replace(/(\=)/g, '\\=');
|
result = result.replace(/(\#)/g, '\\#');
|
||||||
return result;
|
result = result.replace(/(\=)/g, '\\=');
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const createChapters = (event) => {
|
const createChapters = (event) => {
|
||||||
let chapters = ";FFMETADATA1\n";
|
let chapters = ";FFMETADATA1\n";
|
||||||
@@ -204,7 +199,7 @@ const createPodcast = async (tmpEventFolder, podcastFile, event) => {
|
|||||||
command.push("-acodec");
|
command.push("-acodec");
|
||||||
command.push("copy");
|
command.push("copy");
|
||||||
command.push(tmpFile);
|
command.push(tmpFile);
|
||||||
console.log("Running command: " + command);
|
//console.log("Running command: " + command);
|
||||||
await ffmpeg(command);
|
await ffmpeg(command);
|
||||||
|
|
||||||
|
|
||||||
@@ -221,7 +216,7 @@ const createPodcast = async (tmpEventFolder, podcastFile, event) => {
|
|||||||
command.push("-codec");
|
command.push("-codec");
|
||||||
command.push("copy");
|
command.push("copy");
|
||||||
command.push(podcastFile)
|
command.push(podcastFile)
|
||||||
console.log("Running command: " + command);
|
//console.log("Running command: " + command);
|
||||||
await ffmpeg(command);
|
await ffmpeg(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -278,15 +273,15 @@ const packageEvent = (eventId) => {
|
|||||||
exportEventJson(tmpEventFolder, event);
|
exportEventJson(tmpEventFolder, event);
|
||||||
createEventZip(tmpEventFolder, zipFile, eventFolder);
|
createEventZip(tmpEventFolder, zipFile, eventFolder);
|
||||||
await uploadFile(zipFile, s3ZipFile);
|
await uploadFile(zipFile, s3ZipFile);
|
||||||
|
|
||||||
const downloadUrl = s3_endpoint + "/" + s3_bucket + "/" + s3ZipFile;
|
const downloadUrl = s3_endpoint + "/" + s3_bucket + "/" + s3ZipFile;
|
||||||
const podcastUrl = s3_endpoint + "/" + s3_bucket + "/" + s3PodcastFile;
|
const podcastUrl = s3_endpoint + "/" + s3_bucket + "/" + s3PodcastFile;
|
||||||
event.downloadUrl = downloadUrl;
|
event.downloadUrl = downloadUrl;
|
||||||
event.podcastUrl = podcastUrl;
|
event.podcastUrl = podcastUrl;
|
||||||
await event.save();
|
await event.save();
|
||||||
await createPodcast(tmpEventFolder, podcastFile, event);
|
await createPodcast(tmpEventFolder, podcastFile, event);
|
||||||
await uploadFile(podcastFile,s3PodcastFile);
|
await uploadFile(podcastFile, s3PodcastFile);
|
||||||
await savePodcast(event,podcastUrl);
|
await savePodcast(event, podcastUrl);
|
||||||
console.log("uploaded to: " + podcastUrl);
|
console.log("uploaded to: " + podcastUrl);
|
||||||
|
|
||||||
|
|
||||||
@@ -368,7 +363,7 @@ exports.addNewEvent = async function (req, res, next) {
|
|||||||
const callIds = req.body.callIds;
|
const callIds = req.body.callIds;
|
||||||
let objectIds = [];
|
let objectIds = [];
|
||||||
callIds.forEach((id) => {
|
callIds.forEach((id) => {
|
||||||
objectIds.push(new ObjectID(id));
|
objectIds.push(new ObjectId(id));
|
||||||
})
|
})
|
||||||
|
|
||||||
event.title = title.replace(/[^a-zA-Z0-9 \.\-\_]/g, "");
|
event.title = title.replace(/[^a-zA-Z0-9 \.\-\_]/g, "");
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
var path = require('path');
|
var path = require('path');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var sysStats = require("../sys_stats");
|
var sysStats = require("../sys_stats");
|
||||||
var probe = require('node-ffprobe');
|
|
||||||
var mongoose = require("mongoose");
|
|
||||||
var System = require("../models/system");
|
var System = require("../models/system");
|
||||||
var Talkgroup = require("../models/talkgroup");
|
var Talkgroup = require("../models/talkgroup");
|
||||||
var { callModel: Call } = require("../models/call");
|
var { callModel: Call } = require("../models/call");
|
||||||
var secrets = require("../config/secrets");
|
|
||||||
var util = require("util")
|
|
||||||
const { PutObjectCommand, S3Client } = require("@aws-sdk/client-s3");
|
const { PutObjectCommand, S3Client } = require("@aws-sdk/client-s3");
|
||||||
const {fromIni} = require("@aws-sdk/credential-providers");
|
const {fromIni} = require("@aws-sdk/credential-providers");
|
||||||
|
|
||||||
@@ -148,19 +145,19 @@ exports.upload = async function (req, res, next) {
|
|||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
var wasabiSrc = fs.createReadStream(req.file.path);
|
var s3Src = fs.createReadStream(req.file.path);
|
||||||
|
|
||||||
const command = new PutObjectCommand({
|
const command = new PutObjectCommand({
|
||||||
Bucket: s3_bucket,
|
Bucket: s3_bucket,
|
||||||
Key: object_key,
|
Key: object_key,
|
||||||
Body: wasabiSrc,
|
Body: s3Src,
|
||||||
ACL: 'public-read'
|
ACL: 'public-read'
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await client.send(command);
|
await client.send(command);
|
||||||
|
|
||||||
wasabiSrc.destroy();
|
s3Src.destroy();
|
||||||
fs.unlink(req.file.path, async (err) => {
|
fs.unlink(req.file.path, async (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error("[" + call.shortName + "]error deleting: " + req.file.path);
|
console.error("[" + call.shortName + "]error deleting: " + req.file.path);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ var events = require("./controllers/events");
|
|||||||
var config = require('./config/config.json');
|
var config = require('./config/config.json');
|
||||||
|
|
||||||
var mongoose = require("mongoose");
|
var mongoose = require("mongoose");
|
||||||
var ObjectID = require('mongodb').ObjectID;
|
const { ObjectId } = require('mongodb');
|
||||||
var db = require('./db');
|
var db = require('./db');
|
||||||
|
|
||||||
var System = require("./models/system");
|
var System = require("./models/system");
|
||||||
@@ -264,14 +264,14 @@ io.sockets.on('connection', function (client) {
|
|||||||
delete clients[client.id];
|
delete clients[client.id];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!ObjectID.isValid(data.filterCode)) {
|
if (!ObjectId.isValid(data.filterCode)) {
|
||||||
console.error("Error - Socket - Invalid Group ID: " + data.filterCode);
|
console.error("Error - Socket - Invalid Group ID: " + data.filterCode);
|
||||||
delete clients[client.id];
|
delete clients[client.id];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
groupCollection.findOne({
|
groupCollection.findOne({
|
||||||
'shortName': data.shortName.toLowerCase(),
|
'shortName': data.shortName.toLowerCase(),
|
||||||
'_id': ObjectID.createFromHexString(data.filterCode)
|
'_id': ObjectId.createFromHexString(data.filterCode)
|
||||||
}, function (err, group) {
|
}, function (err, group) {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.warn("[" + data.shortName.toLowerCase() + "] Error - WebSocket Group ID not Found! Error: " + err + " Group ID: " + data.filterCode);
|
console.warn("[" + data.shortName.toLowerCase() + "] Error - WebSocket Group ID not Found! Error: " + err + " Group ID: " + data.filterCode);
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ exports.shiftStats = async function() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const query = { shortName: item.shortName};
|
const query = { shortName: shortName};
|
||||||
const update = { $set: { "talkgroupStats": talkgroupStats[shortName], "callTotals": callTotals[shortName] }};
|
const update = { $set: { "talkgroupStats": talkgroupStats[shortName], "callTotals": callTotals[shortName] }};
|
||||||
const options = {upsert: true};
|
const options = {upsert: true};
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,3 @@ export REACT_APP_ACCOUNT_SERVER="${PROTOCOL}account.${DOMAIN_NAME}"
|
|||||||
export REACT_APP_ADMIN_SERVER="${PROTOCOL}admin.${DOMAIN_NAME}"
|
export REACT_APP_ADMIN_SERVER="${PROTOCOL}admin.${DOMAIN_NAME}"
|
||||||
export REACT_APP_COOKIE_DOMAIN=".${DOMAIN_NAME}"
|
export REACT_APP_COOKIE_DOMAIN=".${DOMAIN_NAME}"
|
||||||
|
|
||||||
export TWITTER_CONSUMER_KEY=""
|
|
||||||
export TWITTER_CONSUMER_SECRET=""
|
|
||||||
export TWITTER_ACCESS_TOKEN_KEY=""
|
|
||||||
export TWITTER_ACCESS_TOKEN_SECRET=""
|
|
||||||
|
|||||||
Reference in New Issue
Block a user