Implement functionality

This commit is contained in:
2023-11-09 10:13:22 +01:00
parent 142592ef1b
commit 0a9fe206d5
3 changed files with 60 additions and 15 deletions

View File

@@ -3,6 +3,7 @@ const commandLineArgs = require("command-line-args");
const commandLineUsage = require("command-line-usage"); const commandLineUsage = require("command-line-usage");
const { createLogger, format, transports } = require("winston"); const { createLogger, format, transports } = require("winston");
const { combine, timestamp, label, printf } = format; const { combine, timestamp, label, printf } = format;
const NanoTimer = require("nanotimer");
const myFormat = printf(({ level, message, timestamp }) => { const myFormat = printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${message}`; return `${timestamp} ${level}: ${message}`;
@@ -19,6 +20,15 @@ function verifyExists(value, err) {
process.exit(0); process.exit(0);
} }
} }
function verifyDefaults(options) {
for (const optionDefinition of optionDefinitions) {
if (optionDefinition.defaultOption) {
if (!options[optionDefinition.name]) {
options[optionDefinition.name] = optionDefinition.defaultOption;
}
}
}
}
const optionDefinitions = [ const optionDefinitions = [
{ name: "help", type: Boolean, description: "Display this usage guide." }, { name: "help", type: Boolean, description: "Display this usage guide." },
@@ -32,6 +42,12 @@ const optionDefinitions = [
description: "Number of messages to send; Optional, defaults to 1.", description: "Number of messages to send; Optional, defaults to 1.",
defaultOption: 1, defaultOption: 1,
}, },
{
name: "mps",
type: Number,
description: "Number of messages to send per second",
defaultOption: 999999,
},
{ {
name: "source", name: "source",
type: String, type: String,
@@ -72,12 +88,16 @@ if (options.help) {
process.exit(0); process.exit(0);
} }
verifyDefaults(options);
verifyExists(options.host, "Host can not be undefined or empty! (--host)"); verifyExists(options.host, "Host can not be undefined or empty! (--host)");
verifyExists(options.port, "Port can not be undefined or empty! (--port)"); verifyExists(options.port, "Port can not be undefined or empty! (--port)");
verifyExists(options.systemId, "SystemID can not be undefined or empty! (--systemId)"); verifyExists(options.systemId, "SystemID can not be undefined or empty! (--systemId)");
verifyExists(options.password, "Password can not be undefined or empty! (--password)"); verifyExists(options.password, "Password can not be undefined or empty! (--password)");
let message_id = 0; let sent = 0;
let success = 0;
let failed = 0;
const sendTimer = new NanoTimer();
logger.info(`Connecting to ${options.host}:${options.port}...`); logger.info(`Connecting to ${options.host}:${options.port}...`);
const session = smpp.connect( const session = smpp.connect(
{ {
@@ -99,20 +119,35 @@ const session = smpp.connect(
logger.info( logger.info(
`Successfully bound, sending ${options.messageCount} messages '${options.source}'->'${options.destination}' ('${options.message}')` `Successfully bound, sending ${options.messageCount} messages '${options.source}'->'${options.destination}' ('${options.message}')`
); );
// session.submit_sm( sendTimer.setInterval(
// { () => {
// source_addr: "smpp_test_1", if (sent >= options.messageCount) {
// destination_addr: "123123123123", logger.info("Finished sending messages, idling...");
// short_message: "Hello!", sendTimer.clearInterval();
// data_coding: 0xc0, } else {
// }, logger.info(`Sending message ${sent + 1}/${options.messageCount}`);
// function (pdu) { session.submit_sm(
// if (pdu.command_status === 0) { {
// console.log(pdu.message_id); source_addr: options.source,
// message_id = pdu.message_id; destination_addr: options.destination,
// } short_message: options.message,
// } },
// ); function (pdu) {
if (pdu.command_status === 0) {
logger.info(`Received response with id ${pdu.message_id}`);
success++;
} else {
logger.warn(`Message failed with id ${pdu.message_id}`);
failed++;
}
}
);
sent++;
}
},
"",
`1000/${options.mps} ms`
);
} }
} }
); );
@@ -123,3 +158,5 @@ session.on("deliver_sm", function (pdu) {
console.log("Got deliver_sm"); console.log("Got deliver_sm");
session.send(pdu.response()); session.send(pdu.response());
}); });
// Proccess sigint messages

View File

@@ -12,6 +12,7 @@
"dependencies": { "dependencies": {
"command-line-args": "^5.2.1", "command-line-args": "^5.2.1",
"command-line-usage": "^7.0.1", "command-line-usage": "^7.0.1",
"nanotimer": "^0.3.15",
"smpp": "0.6.0-rc.4", "smpp": "0.6.0-rc.4",
"winston": "^3.11.0" "winston": "^3.11.0"
} }

7
pnpm-lock.yaml generated
View File

@@ -11,6 +11,9 @@ dependencies:
command-line-usage: command-line-usage:
specifier: ^7.0.1 specifier: ^7.0.1
version: 7.0.1 version: 7.0.1
nanotimer:
specifier: ^0.3.15
version: 0.3.15
smpp: smpp:
specifier: 0.6.0-rc.4 specifier: 0.6.0-rc.4
version: 0.6.0-rc.4 version: 0.6.0-rc.4
@@ -226,6 +229,10 @@ packages:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
dev: false dev: false
/nanotimer@0.3.15:
resolution: {integrity: sha512-xj8HcwceqeRbfSuwNIzYhdbyZu3zoiHX3y2cyVB/cLn0RzVCI8ZZVQLZELEUMG2tYEsjqbCLb3b4q1lDC7ENnA==}
dev: false
/one-time@1.0.0: /one-time@1.0.0:
resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==}
dependencies: dependencies: