forked from svrjs/svrjs
Move code for sending the data to the statistics server to separate utility function
This commit is contained in:
parent
686ec4924e
commit
460829e0be
2 changed files with 81 additions and 53 deletions
61
src/index.js
61
src/index.js
|
@ -7,7 +7,7 @@ const logo = require("./res/logo.js");
|
|||
const generateServerString = require("./utils/generateServerString.js");
|
||||
const deleteFolderRecursive = require("./utils/deleteFolderRecursive.js");
|
||||
const svrjsInfo = require("../svrjs.json");
|
||||
const { name, version, statisticsServerCollectEndpoint } = svrjsInfo;
|
||||
const { name, version } = svrjsInfo;
|
||||
|
||||
let inspector = undefined;
|
||||
try {
|
||||
|
@ -211,6 +211,7 @@ const {
|
|||
calculateNetworkIPv4FromCidr,
|
||||
calculateBroadcastIPv4FromCidr,
|
||||
} = require("./utils/ipSubnetUtils.js");
|
||||
const sendStatistics = require("./utils/sendStatistics.js");
|
||||
|
||||
process.serverConfig = {};
|
||||
let configJSONRErr = undefined;
|
||||
|
@ -990,59 +991,13 @@ function listeningMessage() {
|
|||
"Sending data to statistics server is disabled, because the server only supports HTTPS, and your Node.JS version doesn't have crypto support.",
|
||||
);
|
||||
} else {
|
||||
const statisticsToSend = JSON.stringify({
|
||||
version: version,
|
||||
runtime: process.isBun ? "Bun" : "Node.js",
|
||||
runtimeVersion: process.isBun
|
||||
? process.versions.bun
|
||||
: process.version,
|
||||
mods: modInfos,
|
||||
sendStatistics(modInfos, (err) => {
|
||||
if (err)
|
||||
serverconsole.locwarnmessage(
|
||||
"There was a problem, when sending data to statistics server! Reason: " +
|
||||
err.message,
|
||||
);
|
||||
});
|
||||
const statisticsRequest = https.request(
|
||||
statisticsServerCollectEndpoint,
|
||||
{
|
||||
method: "POST",
|
||||
headers: {
|
||||
"User-Agent": generateServerString(true),
|
||||
"Content-Type": "application/json",
|
||||
"Content-Length": Buffer.byteLength(statisticsToSend),
|
||||
},
|
||||
},
|
||||
(res) => {
|
||||
const statusCode = res.statusCode;
|
||||
let data = "";
|
||||
res.on("data", (chunk) => {
|
||||
data += chunk.toString();
|
||||
});
|
||||
res.on("end", () => {
|
||||
try {
|
||||
let parsedJson = {};
|
||||
try {
|
||||
parsedJson = JSON.parse(data);
|
||||
} catch (err) {
|
||||
throw new Error(
|
||||
"JSON parse error (response parsing failed).",
|
||||
);
|
||||
}
|
||||
if (parsedJson.status != statusCode)
|
||||
throw new Error("Status code mismatch");
|
||||
if (statusCode != 200) throw new Error(parsedJson.message);
|
||||
} catch (err) {
|
||||
serverconsole.locwarnmessage(
|
||||
"There was a problem, when sending data to statistics server! Reason: " +
|
||||
err.message,
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
statisticsRequest.on("error", (err) => {
|
||||
serverconsole.locwarnmessage(
|
||||
"There was a problem, when sending data to statistics server! Reason: " +
|
||||
err.message,
|
||||
);
|
||||
});
|
||||
statisticsRequest.end(statisticsToSend);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
73
src/utils/sendStatistics.js
Normal file
73
src/utils/sendStatistics.js
Normal file
|
@ -0,0 +1,73 @@
|
|||
const generateServerString = require("./generateServerString.js");
|
||||
const svrjsInfo = require("../svrjs.json");
|
||||
const { version, statisticsServerCollectEndpoint } = svrjsInfo;
|
||||
|
||||
let crypto = {
|
||||
__disabled__: null,
|
||||
};
|
||||
let https = {
|
||||
createServer: function () {
|
||||
throw new Error("Crypto support is not present");
|
||||
},
|
||||
connect: function () {
|
||||
throw new Error("Crypto support is not present");
|
||||
},
|
||||
get: function () {
|
||||
throw new Error("Crypto support is not present");
|
||||
},
|
||||
};
|
||||
try {
|
||||
crypto = require("crypto");
|
||||
https = require("https");
|
||||
} catch (err) {
|
||||
// Can't load HTTPS
|
||||
}
|
||||
|
||||
function sendStatistics(modInfos, callback) {
|
||||
const statisticsToSend = JSON.stringify({
|
||||
version: version,
|
||||
runtime: process.isBun ? "Bun" : "Node.js",
|
||||
runtimeVersion: process.isBun ? process.versions.bun : process.version,
|
||||
mods: modInfos,
|
||||
});
|
||||
const statisticsRequest = https.request(
|
||||
statisticsServerCollectEndpoint,
|
||||
{
|
||||
method: "POST",
|
||||
headers: {
|
||||
"User-Agent": generateServerString(true),
|
||||
"Content-Type": "application/json",
|
||||
"Content-Length": Buffer.byteLength(statisticsToSend),
|
||||
},
|
||||
},
|
||||
(res) => {
|
||||
const statusCode = res.statusCode;
|
||||
let data = "";
|
||||
res.on("data", (chunk) => {
|
||||
data += chunk.toString();
|
||||
});
|
||||
res.on("end", () => {
|
||||
try {
|
||||
let parsedJson = {};
|
||||
try {
|
||||
parsedJson = JSON.parse(data);
|
||||
} catch (err) {
|
||||
throw new Error("JSON parse error (response parsing failed).");
|
||||
}
|
||||
if (parsedJson.status != statusCode)
|
||||
throw new Error("Status code mismatch");
|
||||
if (statusCode != 200) throw new Error(parsedJson.message);
|
||||
callback(null);
|
||||
} catch (err) {
|
||||
callback(err);
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
statisticsRequest.on("error", (err) => {
|
||||
callback(err);
|
||||
});
|
||||
statisticsRequest.end(statisticsToSend);
|
||||
}
|
||||
|
||||
module.exports = sendStatistics;
|
Reference in a new issue