15 Commits

17 changed files with 268 additions and 275 deletions

View File

@ -145,3 +145,37 @@ $BODY$;
NODE_TLS_REJECT_UNAUTHORIZED='0'
```
otherwise you will receive the error: **Error: self signed certificate**
## Run with Vagrant
Create the VM with
vagrant up
After you change anything
vagrant destroy; vagrant up
# or
vagrant reload
After installation, got to VirtualBox and add audio card to VM in Settings for VM. Do a `vagrant reload` afterwards.
To see the ssh parameters for config use `vagrant ssh-config`. Vagrant will map the current directory to `/vagrant` by default.
Steps to do in VM:
vagrant ssh
cd simulator
sudo cp -R /vagrant/* .
sudo chown -R vagrant:vagrant *
sudo npm install --unsafe-perm ?
(sudo?) npm install --unsafe-perm
#run simulator
NODE_TLS_REJECT_UNAUTHORIZED='0' node ./index.js --path="./config/dev/"
### Problems / to do
It worked once but now it does not work, don't know why.

79
Vagrantfile vendored Normal file
View File

@ -0,0 +1,79 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "bento/ubuntu-16.04"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
config.vm.network "public_network"
config.ssh.forward_x11 = true
config.ssh.forward_agent = true
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
# vb.gui = true
vb.customize [
"modifyvm", :id,
"--audio", "coreaudio",
"--audiocontroller", "hda"
]
# Customize the amount of memory on the VM:
vb.memory = "1024"
end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
config.vm.provision "shell", path: "install.sh", privileged: true
end

View File

@ -16,38 +16,25 @@ accept_untrusted_certs = true
[settings]
max_fails = 3
send_voice = true
send_gps = true
gps_report_interval = 10000 # The interval in which the GPS is sent
send_group_monitoring_before_each_call = 'true'
gps_report_interval = 1000 # The interval in which the GPS is sent
gps_lat_start_point = 46.217802
gps_lng_start_point = 24.776126
delay_between_clients = 300
testing_duration = 15 # seconds
[assets]
#ids = [ 8089 ]
ids = [ 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098 ]
#ids = [
# 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108
#]
#ids = [
# 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108
#]
testing_duration = 40 # seconds
#ids = [
# 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108,
# 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118,
# 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128
#]
[[assets]]
asset_id = 63
group_id = 1
generate_voice = true
generate_gps = true
[[assets]]
asset_id = 64
group_id = 1
generate_voice = false
generate_gps = true
[sounds]
#sound = 'sound.mp3'
#sound = 'Donald Trump Sings I Will Survive (64 kbps).mp3'
#sounds_total_number = 20
tracks = ['1.mp3','2.mp3','3.mp3','4.mp3','5.mp3','6.mp3','7.mp3','8.mp3','9.mp3','10.mp3','11.mp3','12.mp3','13.mp3','14.mp3','15.mp3','16.mp3','17.mp3','18.mp3','19.mp3']

View File

@ -17,62 +17,50 @@ accept_untrusted_certs = true
[settings]
max_fails = 3
send_voice = true
send_gps = true
send_gps = false
gps_report_interval = 10000 # The interval in which the GPS is sent
gps_lat_start_point = 46.217802
gps_lng_start_point = 24.776126
testing_period = 1
delay_between_clients = 300
testing_duration = 6000 # seconds
[assets]
#VOICE and GPS Stag
#ids = [ 5496 ]
#ids = [ 5483 ]
#ids = [ 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505 ]
#ids = [
# 5482,5483,5484,5485,5486,5487,5488,5489,5490,5491
#ids = [
# 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505,
# 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515
#]
ids = [
5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,
5492,5493,5494,5495,5496,5497,5498,5499,5500,5501
ids = [
5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505,
5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515,
5516, 5517, 5518, 5519, 5520, 5521, 5522, 5523, 5524, 5525,
5526, 5527, 5528, 5529, 5530, 5531, 5532, 5533, 5534, 5535
]
#ids = [
# 5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,
# 5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,
# 5502,5503,5504,5505,5506,5507,5508,5509,5510,5511
# 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108
#]
#ids = [
# 5482,5483,5484,5485,5486,5487,5488,5489,5490,5491,
# 5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,
# 5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,
# 5512,5513,5514,5515,5516,5517,5518,5519,5520,5521
# 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108
#]
#ids = [
# 5435,5436,5437,5438,5439,
# 5440,5441,5442,5443,5444
# 5445,5446,5447,5448,5449,
# 5450,5451,5452,5453,5454,
# 5455,5456,5457,5458,5459,
# 5460,5461,5462,5463,5464,
# 5465,5466,5467,5468,5469
#]
#ids = [
# 5435,5436,5437,5438,5439,
# 5440,5441,5442,5443,5444,
# 5445,5446,5447,5448,5449,
# 5450,5451,5452,5453,5454,
# 5455,5456,5457,5458,5459,
# 5460,5461,5462,5463,5464,
# 5465,5466,5467,5468,5469
#ids = [
# 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108,
# 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118,
# 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128
#]
[sounds]
#sound = 'Donald Trump Sings Without Me by Eminem.mp3'
sound = 'poke.mp3'
sounds_total_number = 20
#sound = 'sound.mp3'
#sound = 'Donald Trump Sings I Will Survive (64 kbps).mp3'
#sounds_total_number = 20
tracks = ['1.mp3','2.mp3','3.mp3','4.mp3','5.mp3','6.mp3','7.mp3','8.mp3','9.mp3','10.mp3','11.mp3','12.mp3','13.mp3','14.mp3','15.mp3','16.mp3','17.mp3','18.mp3','19.mp3']

View File

@ -1,16 +1,16 @@
[mumble]
port = '5668'
host = 'presgold.linx.safemobile.com'
host = 'dev.linx.safemobile.com'
[hub]
address = 'https://hub.presgold.linx.safemobile.com/'
address = 'https://hub.dev.linx.safemobile.com/'
[elogs]
name = 'stage'
name = 'dev'
[api]
port = ''
host = 'presgold.linx.safemobile.com/api/secure'
host = 'dev.linx.safemobile.com/api'
use_secure = true
accept_untrusted_certs = true
@ -18,135 +18,21 @@ accept_untrusted_certs = true
max_fails = 3
send_voice = true
send_gps = true
send_group_monitoring_before_each_call = false
gps_report_interval = 10000 # The interval in which the GPS is sent
gps_lat_start_point = 46.217802
gps_lng_start_point = 24.776126
delay_between_clients = 300
testing_duration = 600 # seconds
[assets]
ids = [ 2776 ]
#VOICE and GPS Stage
# ids = [
# 65,1125
# ]
# VOICE and GPS Presgold
# ids = [
# 2164
# 2164,2165,2166,2167,2168,2169,2170,2171,2172,2173
# 2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,
# 2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,
# 2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,
# 2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,
# 2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,
# 2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,
# 2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,
# 2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,
# 2254,2255,2256,2257,2258,2259,2260,2261,2262,2263
# ]
#VOICE and GPS Prestage
# ids = [1947]
# ids = [1947,1957]
# ids = [1947,1957,1967]
# 10 units
# ids = [1947,1957,1967,1977,1987,1997,2007,2017,2027,2037] # colinde 0-10
# 20 units
# ids = [1947,1957,1967,1977,1987,1997,2007,2017,2027,2037,2047,2057,2067,2077,2087,2097,2107,2117,2127,2137]
# 30 units
# ids = [1947,1957,1967,1977,1987,1997,2007,2017,2027,2037,2047,2057,2067,2077,2087,2097,2107,2117,2127,2137,2147,2157,2167,2177,2187,2197,2207,2217,2227,2237]
# 50 units
# ids = [1947,1957,1967,1977,1987,1997,2007,2017,2027,2037,2047,2057,2067,2077,2087,2097,2107,2117,2127,2137,2147,2157,2167,2177,2187,2197,2207,2217,2227,2237,2247,2257,2267,2277,2287,2297,2307,2317,2327,2337,2347,2357,2367,2377,2387,2397,2407,2417,2427,2437]
# 70 units
# ids = [1947,1957,1967,1977,1987,1997,2007,2017,2027,2037,2047,2057,2067,2077,2087,2097,2107,2117,2127,2137,2147,2157,2167,2177,2187,2197,2207,2217,2227,2237,2247,2257,2267,2277,2287,2297,2307,2317,2327,2337,2347,2357,2367,2377,2387,2397,2407,2417,2427,2437,2447,2457,2467,2477,2487,2497,2507,2517,2527,2537,2547,2557,2567,2577,2587,2597,2597,2607,2617,2627,2637]
#GPS Prestage
# 10 units
# ids = [3842,3843,3844,3845,3846,3847,3848,3849,3850,3851]
# 50 units
# ids = [3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892]
# 100 units
# ids = [3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942]
# 300 units
# ids = [3842,3843,3844,3845,3846,3847,3848,3849,3850,3851,3852,3853,3854,3855,3856,3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869,3870,3871,3872,3873,3874,3875,3876,3877,3878,3879,3880,3881,3882,3883,3884,3885,3886,3887,3888,3889,3890,3891,3892,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3893,3894,3895,3896,3897,3898,3899,3900,3901,3902,3903,3904,3905,3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921,3922,3923,3924,3925,3926,3927,3928,3929,3930,3931,3932,3933,3934,3935,3936,3937,3938,3939,3940,3941,3942,3943,3944,3945,3946,3947,3948,3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964,3965,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,3978,3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,3992,3993,3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009,4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,4024,4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055,4056,4057,4058,4059,4060,4061,4062,4063,4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079,4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111,4112,4113,4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,4125,4126,4127,4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,4138,4139,4140,4141]
# audio-test-100 1947 colinde
# audio-test-110 1957 colinde2
# audio-test-120 1967 colinde3
# audio-test-130 1977 colinde4
# audio-test-140 1987 colinde5
# audio-test-150 1997 colinde6
# audio-test-160 2007 colinde7
# audio-test-170 2017 colinde8
# audio-test-180 2027 colinde9
# audio-test-190 2037 colinde10
# audio-test-200 2047 colinde11
# audio-test-210 2057 colinde12
# audio-test-220 2067 colinde13
# audio-test-230 2077 colinde14
# audio-test-240 2087 colinde15
# audio-test-250 2097 colinde16
# audio-test-260 2107 colinde17
# audio-test-270 2117 colinde18
# audio-test-280 2127 colinde19
# audio-test-290 2137 colinde20
# audio-test-300 2147 colinde21
# audio-test-310 2157 colinde22
# audio-test-320 2167 colinde23
# audio-test-330 2177 colinde24
# audio-test-340 2187 colinde25
# audio-test-350 2197 colinde26
# audio-test-360 2207 colinde27
# audio-test-370 2217 colinde28
# audio-test-380 2227 colinde29
# audio-test-390 2237 colinde30
# audio-test-400 2247 colinde31
# audio-test-410 2257 colinde32
# audio-test-420 2267 colinde33
# audio-test-430 2277 colinde34
# audio-test-440 2287 colinde35
# audio-test-450 2297 colinde36
# audio-test-460 2307 colinde37
# audio-test-470 2317 colinde38
# audio-test-480 2327 colinde39
# audio-test-490 2337 colinde40
# audio-test-500 2347 colinde41
# audio-test-510 2357 colinde42
# audio-test-520 2367 colinde43
# audio-test-530 2377 colinde44
# audio-test-540 2387 colinde45
# audio-test-550 2397 colinde46
# audio-test-360 2407 colinde47
# audio-test-570 2417 colinde48
# audio-test-580 2427 colinde49
# audio-test-590 2437 colinde50
# audio-test-600 2447 colinde51
# audio-test-610 2457 colinde52
# audio-test-620 2467 colinde53
# audio-test-630 2477 colinde54
# audio-test-640 2487 colinde55
# audio-test-650 2497 colinde56
# audio-test-660 2507 colinde57
# audio-test-670 2517 colinde58
# audio-test-680 2527 colinde59
# audio-test-690 2537 colinde60
# audio-test-700 2547 colinde61
# audio-test-710 2557 colinde62
# audio-test-720 2567 colinde63
# audio-test-730 2577 colinde64
# audio-test-740 2587 colinde65
# audio-test-750 2597 colinde66
# audio-test-760 2607 colinde67
# audio-test-770 2617 colinde68
# audio-test-780 2627 colinde69
# audio-test-790 2637 colinde70
ids = [
asset_id_1, asset_id_2, asset_id_3
]
[sounds]
sound = 'sound.mp3'
sounds_total_number = 20
#sound = 'sound.mp3'
#sound = 'Donald Trump Sings I Will Survive (64 kbps).mp3'
#sounds_total_number = 20
tracks = ['1.mp3','2.mp3','3.mp3','4.mp3','5.mp3','6.mp3','7.mp3','8.mp3','9.mp3','10.mp3','11.mp3','12.mp3','13.mp3','14.mp3','15.mp3','16.mp3','17.mp3','18.mp3','19.mp3']

View File

@ -15,6 +15,9 @@ let configs = {
elogs: config.get('elogs'),
}
console.log('configs', configs)
// Start simulation.
console.log('Starting simulation...');
var simulator = new Simulator(configs);

14
install.sh Normal file
View File

@ -0,0 +1,14 @@
echo "Configure box for simulator"
apt-get update
apt-get -qq update
apt-get install -y build-essential
apt-get install -y curl
apt-get install -y python-minimal
curl -sL https://deb.nodesource.com/setup_8.x | bash
apt-get install -y nodejs
sudo apt install -y alsa-utils
sudo apt-get install -y libasound2-dev
sudo npm i -g node-gyp
mkdir simulator

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -18,20 +18,21 @@ const log = require('./utils').log
class Asset {
constructor(id, configs, token) {
constructor(asset, configs, token) {
this.id = id;
this.id = asset.asset_id;
this.group_id = asset.group_id;
this.generate_voice = asset.generate_voice;
this.generate_gps = asset.generate_gps;
this.token = token;
this.configs = configs
this._processConfigs();
this.startTime = +new Date();
this.pttEndSuccessfully = false;
this.assetProps = {};
this.murmurPassword = '';
this.startTime = null; // Will be set at the initialization of ptt(_start -> on_tt)
this.endTime = +new Date() + (this.configs.settings.testing_duration * 1000)
utils.writeLog(`Creating asset ${id}`)
utils.writeLog(`Creating asset ${this.id}`)
// Do async work: Init asset.
async.waterfall([
@ -45,6 +46,7 @@ class Asset {
utils.writeLog(`Asset ${this.id} was successfully initialized`)
if (err) {
console.log('err', err)
utils.writeLog(`Asset ${this.id} was not successfully initialized`, err);
return;
}
@ -72,7 +74,6 @@ class Asset {
(error, response, body) => {
if (!error && (response.statusCode === 200 || response.statusCode === 201)) {
let bodyObj = JSON.parse(body);
// Here are the asset fields.
this.assetProps = bodyObj.data;
// console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!', this.assetProps)
@ -130,17 +131,16 @@ class Asset {
// Find what group this asset is monitoring.
this.groups.forEach((g) => {
if (g.is_talk_group && g.monitoring.indexOf(this.id) != -1) {
this.groupId = g.id;
if (g.id === this.group_id) {
this.groupSipId = g.sip_id;
this.groupName = g.name;
}
});
if (!this.groupId) {
return callback('No talk group assigned to ' + this.id);
}
utils.writeLog(`Informations about asset ${this.id} received`)
// if (!this.groupId) {
// return callback('No talk group assigned to ' + this.id);
// }
utils.writeLog(`Informations about asset ${this.id} received | groupId: ${this.group_id} | groupName: ${this.groupName}`);
return callback();
} else {
utils.writeLog(`Error getting informations about asset ${this.id}`, error);
@ -174,7 +174,6 @@ class Asset {
});
hub.once('connect', () => {
console.log('11111111111111111111')
return callback();
});
hub.on('connect', () => {
@ -211,6 +210,7 @@ class Asset {
}
_connectToMurmur(callback) {
console.log(`Asset ${this.id} connecting to Murmur`);
this.configs.murmurPassword = this.murmurPassword;
this.mumble = new Mumble(this.id, this.configs, (err) => {
@ -228,6 +228,7 @@ class Asset {
}
_register(callback) {
console.log(`Asset ${this.id} connecting to Register`);
Request.post(
this.apiEndpoint + '/audio/register/' + this.id,
{
@ -242,7 +243,7 @@ class Asset {
} else {
console.log('_register--------------------')
console.log('error---', error)
console.log('response---', response)
// console.log('response---', response)
console.log('body---', body)
// utils.writeLog(`Asset ${this.id} audio registered error`, error);
// utils.writeErrorLog(`ERROR_API`);
@ -253,8 +254,10 @@ class Asset {
}
_moveToChannel(callback) {
console.log(`Asset ${this.id} move to Channel ${this.group_id}`);
// console.log('_moveToChannel', this.apiEndpoint + '/audio/enter-group/' + this.id + '/' + this.group_id)
Request.post(
this.apiEndpoint + '/audio/enter-group/' + this.id + '/' + this.groupId,
this.apiEndpoint + '/audio/enter-group/' + this.id + '/' + this.group_id,
{
headers: {
Authorization: `Bearer ${this.token}`
@ -272,20 +275,20 @@ class Asset {
asset_alias : this.assetProps.name,
request_ptt_groups_status: false,
group_sip_id: this.groupSipId,
group_id: this.groupId,
group_id: this.group_id,
group_name: this.groupName,
scan_group_ids: null
}
));
utils.writeLog(`Asset ${this.id} mmonitoring group ${this.groupId}`)
return callback();
utils.writeLog(`Asset ${this.id} monitoring group ${this.group_id}`)
if (callback) return callback();
} else {
return callback('Cannot send group-monitoring: Hub not connected');
if (callback) return callback('Cannot send group-monitoring: Hub not connected');
}
} else {
console.log('_moveToChannel--------------------')
console.log('error---', error)
console.log('response---', response)
// console.log('response---', response)
console.log('body---', body)
// utils.writeLog(`Asset ${this.id} audio enter group error`, error);
// utils.writeErrorLog(`ERROR_API`);
@ -296,31 +299,8 @@ class Asset {
}
_start() {
this.startTime = +new Date();
if(this.endTime > this.startTime) {
if(this.configs.settings.send_voice) {
this._makePtt(() => {
if(this.pttEndSuccessfully) {
this._verifyRecorder();
}
});
}
if(this.configs.settings.send_gps) {
this._sendGPS();
}
} else {
const assetIds = this.configs.assets.ids;
if(Math.max(...assetIds) == this.id) {
setTimeout(() => {
utils.writeLog('STOP')
.then(() => {
process.exit(0);
});
}, 10000);
}
}
this.generate_voice && this._makePtt();
this.generate_gps && this._sendGPS();
}
_verifyRecorder(callback) {
@ -375,8 +355,11 @@ class Asset {
}
_makePtt(callback) {
// Send ptt-press, transmit all the sound then send ptt-release.
// Sending group monitoring before we make PTT()
// Is used for the HUB load test(_moveToChannel is sent anyway after connecting to murmur-register)
if (this.configs.settings.send_group_monitoring_before_each_call == 'true') {
this._moveToChannel();
}
// Check hub.
let hub = this.hub;
@ -386,7 +369,6 @@ class Asset {
// Send ptt-press and wait for it to be accepted.
this._sendPttPress((isAccepted) => {
if (!isAccepted) {
return callback();
}
@ -431,8 +413,19 @@ class Asset {
this.pttEndSuccessfully = true;
setTimeout(() => {
this._sendPttRelease();
callback();
}, 1500); // Hangtime
const now = +new Date();
if(this.endTime > now) {
this._makePtt();
} else {
setTimeout(() => {
utils.writeLog(`Asset: ${this.id} - STOP`)
.then(() => {
process.exit(0);
});
}, 10000);
}
}, 1800); // Hangtime
});
// @TODO: Ugly hack for the voice to work with mp3 (The fix is to remove float32ToInt16 conversion). It is the _transform function from OpusEncoderStream class (mumble-client-codecs-node project).
@ -497,30 +490,38 @@ class Asset {
_sendGPS(callback) {
let hub = this.hub;
if (hub && hub.connected) {
let lat = this.configs.settings.gps_lat_start_point;
let lng = this.configs.settings.gps_lng_start_point;
setInterval(() => {
var new_lat = this._randomCoordinates(lat);
var new_lng = this._randomCoordinates(lng);
hub.emit('gps', JSON.stringify(
{
unix_time: 1467126677000,
asset_id: this.assetProps.id,
asset_sip_id: this.assetProps.sip_id,
speed_kmh: 16,
lat: new_lat,
lng: new_lng,
accuracy: 20.3,
activity_type: "driving",
activity_confidence: 90
}
));
lat = new_lat;
lng = new_lng;
const now = +new Date();
if(this.endTime > now) {
var new_lat = this._randomCoordinates(lat);
var new_lng = this._randomCoordinates(lng);
hub.emit('gps', JSON.stringify(
{
unix_time: 1467126677000,
asset_id: this.assetProps.id,
asset_sip_id: this.assetProps.sip_id,
speed_kmh: 16,
lat: new_lat,
lng: new_lng,
accuracy: 20.3,
activity_type: "driving",
activity_confidence: 90
}
));
lat = new_lat;
lng = new_lng;
} else {
setTimeout(() => {
utils.writeLog(`Asset: ${this.id} - STOP`)
.then(() => {
process.exit(0);
});
}, 11000);
}
}, this.configs.settings.gps_report_interval);
}
}
@ -542,7 +543,7 @@ class Asset {
if (data.asset_id != this.id) {
return;
}
utils.writeLog(`Asset ${this.id} sending PTT-PRESS to group ${this.groupId}`)
utils.writeLog(`Asset ${this.id} sending PTT-PRESS to group ${this.group_id}`)
hub.removeListener('ptt-deny', pttDenyHandler);
callback(true);
};
@ -561,7 +562,7 @@ class Asset {
hub.emit('ptt-press', JSON.stringify(
{
destination_group_id: this.groupId,
destination_group_id: this.group_id,
destination_group_sip_id: this.groupSipId,
destination_asset_id: 0,
destination_asset_sip_id: 0,
@ -580,10 +581,10 @@ class Asset {
let hub = this.hub;
if (hub && hub.connected) {
utils.writeLog(`Asset ${this.id} sending PTT-RELEASE to group ${this.groupId}`);
utils.writeLog(`Asset ${this.id} sending PTT-RELEASE to group ${this.group_id}`);
hub.emit('ptt-release', JSON.stringify(
{
destination_group_id: this.groupId,
destination_group_id: this.group_id,
destination_group_sip_id: this.groupSipId,
destination_asset_id: 0,
destination_asset_sip_id: 0,

View File

@ -12,7 +12,6 @@ const OpusEncoder = require('node-opus').OpusEncoder;
class Mumble {
constructor(id, configs, connectedCallback) {
console.log('------', configs)
this.id = id;
this.configs = configs;
let mumble = configs.mumble;
@ -104,7 +103,7 @@ class Mumble {
.on('reconnect', function (n, delay) {
// n = current number of reconnect
// delay = delay used before reconnect
console.log('------ Server reconnect...');
// console.log('------ Server reconnect...');
// utils.writeErrorLog(`ERROR_MUMBLE_RECONNECT`);
// utils.exitWriteErrorLog(`ERROR_MUMBLE_RECONNECT`);
})

View File

@ -12,12 +12,12 @@ class Simulator {
this.configs = configs;
this.token;
// Read assets ids from configs
this.assetIds = configs.assets.ids;
this.assets = configs.assets;
this.assetIds = this.assets.map(asset => asset.asset_id);
this.apiEndpoint = this.configs.api.use_secure ? 'https' : 'http';
this.apiEndpoint += '://' + this.configs.api.host + (this.configs.api.port ? (':' + this.configs.api.port) : '');
async.waterfall([
this._manageLogs.bind(this),
this._unregisterAsstes.bind(this),
@ -36,16 +36,17 @@ class Simulator {
_start() {
const settings = this.configs.settings;
this.assetIds.forEach((id, i) => {
// this.assetIds.forEach((id, i) => {
this.assets.forEach((asset, i) => {
let delay_between_clients = 500;
if(settings.hasOwnProperty('delay_between_clients')) {
delay_between_clients = parseInt(settings.delay_between_clients, 10);
}
console.log('id', id, i * delay_between_clients+'ms')
console.log('asset_id', asset.asset_id, i * delay_between_clients+'ms')
delay_between_clients = this._getRandomInt(delay_between_clients);
setTimeout(() => {
new Asset(id, this.configs, this.token);
new Asset(asset, this.configs, this.token);
// console.log('id, this.configs, this.token', id, this.configs, this.token)
}, i * delay_between_clients);
})
@ -74,6 +75,7 @@ class Simulator {
}
_unregisterAsstes(callback) {
let url = this.apiEndpoint + '/audio/un-register/[' + this.assetIds + ']/';
Request.post(
url,
@ -85,7 +87,7 @@ class Simulator {
return callback(error);
}
else {
utils.writeLog(`Unregister assets: ${this.assetIds}`)
utils.writeLog(`Unregister assets: ${this.assetIds}`);
return callback();
}
}