8 Commits

25 changed files with 152 additions and 324 deletions

View File

@ -1 +0,0 @@
{"dependencies":[["log4r",[">= 0"]],["concurrent-ruby",["~> 1.0"]],["i18n",[">= 0"]],["micromachine",[">= 2","< 4"]],["vagrant-vbguest",["= 0.30.0"]]],"checksum":"11b1b35cf79113cc49e78dfeea4aabc6746d1df7877ec4f5145f0b7b96ad3af1","vagrant_version":"2.2.18"}

View File

@ -1 +0,0 @@
1633592300

View File

@ -1 +0,0 @@
{"name":"ubuntu/xenial64","version":"20210804.0.0","provider":"virtualbox","directory":"boxes/ubuntu-VAGRANTSLASH-xenial64/20210804.0.0/virtualbox"}

View File

@ -1 +0,0 @@
501

View File

@ -1 +0,0 @@
f5f76f97-2f67-49df-83e1-835cbb87625e

View File

@ -1 +0,0 @@
cf5295e73d3d40e6a3647df3a5a41f89

View File

@ -1 +0,0 @@
/Users/cristi/work/git-projects/LINX/linx-simulator2

View File

@ -1,9 +0,0 @@
# This file loads the proper rgloader/loader.rb file that comes packaged
# with Vagrant so that encoded files can properly run with Vagrant.
if ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"]
require File.expand_path(
"rgloader/loader", ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"])
else
raise "Encoded files can't be read outside of the Vagrant installer."
end

View File

@ -6,7 +6,6 @@ RUN apt-get install -y build-essential
RUN apt-get install -y curl RUN apt-get install -y curl
RUN apt-get install -y python-minimal RUN apt-get install -y python-minimal
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash RUN curl -sL https://deb.nodesource.com/setup_8.x | bash
RUN apt-get install -y nodejs RUN apt-get install -y nodejs
WORKDIR /simulator WORKDIR /simulator

30
Vagrantfile vendored
View File

@ -12,7 +12,7 @@ Vagrant.configure("2") do |config|
# Every Vagrant development environment requires a box. You can search for # Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search. # boxes at https://vagrantcloud.com/search.
config.vm.box = "ubuntu/xenial64" config.vm.box = "bento/ubuntu-16.04"
# Disable automatic box update checking. If you disable this, then # Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs # boxes will only be checked for updates when the user runs
@ -47,7 +47,6 @@ Vagrant.configure("2") do |config|
# the path on the guest to mount the folder. And the optional third # the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options. # argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data" # config.vm.synced_folder "../data", "/vagrant_data"
config.vm.synced_folder ".", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various # Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options. # backing providers for Vagrant. These expose provider-specific options.
@ -56,14 +55,14 @@ Vagrant.configure("2") do |config|
config.vm.provider "virtualbox" do |vb| config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine # Display the VirtualBox GUI when booting the machine
# vb.gui = true # vb.gui = true
# vb.customize [ vb.customize [
# "modifyvm", :id, "modifyvm", :id,
# "--audio", "coreaudio", "--audio", "coreaudio",
# "--audiocontroller", "hda" "--audiocontroller", "hda"
# ] ]
# Customize the amount of memory on the VM: # Customize the amount of memory on the VM:
vb.memory = "2024" vb.memory = "1024"
end end
# #
# View the documentation for the provider you are using for more # View the documentation for the provider you are using for more
@ -76,18 +75,5 @@ Vagrant.configure("2") do |config|
# apt-get update # apt-get update
# apt-get install -y apache2 # apt-get install -y apache2
# SHELL # SHELL
# config.vm.provision "shell", inline: <<-SHELL
# sudo apt-get update
# sudo apt-get -y install dkms
# #https://wiki.ubuntu.com/Audio/UpgradingAlsa/DKMS
# wget http://ppa.launchpad.net/ubuntu-audio-dev/alsa-daily/ubuntu/pool/main/o/oem-audio-hda-daily-dkms/oem-audio-hda-daily-dkms_0.201509251532~ubuntu14.04.1_all.deb
# sudo dpkg -i oem-audio-hda-daily-dkms_0.201509251532~ubuntu14.04.1_all.deb
# rm oem-audio-hda-daily-dkms_0.201509251532~ubuntu14.04.1_all.deb
# sudo apt-get -y install python-dev ipython python-numpy python-matplotlib python-scipy cython alsa-utils paman
# sudo usermod -a -G audio vagrant
# SHELL
config.vm.provision "shell", path: "install.sh", privileged: true config.vm.provision "shell", path: "install.sh", privileged: true
end end

View File

@ -16,38 +16,25 @@ accept_untrusted_certs = true
[settings] [settings]
max_fails = 3 max_fails = 3
send_voice = true send_group_monitoring_before_each_call = 'true'
send_gps = true gps_report_interval = 1000 # The interval in which the GPS is sent
gps_report_interval = 10000 # The interval in which the GPS is sent
gps_lat_start_point = 46.217802 gps_lat_start_point = 46.217802
gps_lng_start_point = 24.776126 gps_lng_start_point = 24.776126
delay_between_clients = 300 delay_between_clients = 300
testing_duration = 15 # seconds testing_duration = 20 # 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
#]
#ids = [ [[assets]]
# 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098, asset_id = 63
# 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108, group_id = 1
# 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118, generate_voice = true
# 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128 generate_gps = true
#]
[[assets]]
asset_id = 64
group_id = 1
generate_voice = false
generate_gps = true
[sounds] [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'] 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] [settings]
max_fails = 3 max_fails = 3
send_voice = true send_voice = true
send_gps = true send_gps = false
gps_report_interval = 10000 # The interval in which the GPS is sent gps_report_interval = 10000 # The interval in which the GPS is sent
gps_lat_start_point = 46.217802 gps_lat_start_point = 46.217802
gps_lng_start_point = 24.776126 gps_lng_start_point = 24.776126
testing_period = 1 delay_between_clients = 300
testing_duration = 6000 # seconds
[assets] [assets]
#VOICE and GPS Stag #ids = [ 5496 ]
#ids = [ 5483 ] #ids = [ 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505 ]
#ids = [ #ids = [
# 5482,5483,5484,5485,5486,5487,5488,5489,5490,5491 # 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505,
# 5506, 5507, 5508, 5509, 5510, 5511, 5512, 5513, 5514, 5515
#] #]
ids = [ ids = [
5482,5483,5484,5485,5486,5487,5488,5489,5490,5491, 5496, 5497, 5498, 5499, 5500, 5501, 5502, 5503, 5504, 5505,
5492,5493,5494,5495,5496,5497,5498,5499,5500,5501 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 = [ #ids = [
# 5482,5483,5484,5485,5486,5487,5488,5489,5490,5491, # 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 5492,5493,5494,5495,5496,5497,5498,5499,5500,5501, # 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108
# 5502,5503,5504,5505,5506,5507,5508,5509,5510,5511
#] #]
#ids = [ #ids = [
# 5482,5483,5484,5485,5486,5487,5488,5489,5490,5491, # 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 5492,5493,5494,5495,5496,5497,5498,5499,5500,5501, # 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108
# 5502,5503,5504,5505,5506,5507,5508,5509,5510,5511,
# 5512,5513,5514,5515,5516,5517,5518,5519,5520,5521
#] #]
#ids = [
#ids = [ # 8089, 8090, 8091, 8092, 8093, 8094, 8095, 8096, 8097, 8098,
# 5435,5436,5437,5438,5439, # 8099, 8100, 8101, 8102, 8103, 8104, 8105, 8106, 8107, 8108,
# 5440,5441,5442,5443,5444 # 8109, 8110, 8111, 8112, 8113, 8114, 8115, 8116, 8117, 8118,
# 5445,5446,5447,5448,5449, # 8119, 8120, 8121, 8122, 8123, 8124, 8125, 8126, 8127, 8128
# 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
#] #]
[sounds] [sounds]
#sound = 'Donald Trump Sings Without Me by Eminem.mp3' #sound = 'sound.mp3'
sound = 'poke.mp3' #sound = 'Donald Trump Sings I Will Survive (64 kbps).mp3'
sounds_total_number = 20 #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] [mumble]
port = '5668' port = '5668'
host = 'presgold.linx.safemobile.com' host = 'dev.linx.safemobile.com'
[hub] [hub]
address = 'https://hub.presgold.linx.safemobile.com/' address = 'https://hub.dev.linx.safemobile.com/'
[elogs] [elogs]
name = 'stage' name = 'dev'
[api] [api]
port = '' port = ''
host = 'presgold.linx.safemobile.com/api/secure' host = 'dev.linx.safemobile.com/api'
use_secure = true use_secure = true
accept_untrusted_certs = true accept_untrusted_certs = true
@ -18,135 +18,21 @@ accept_untrusted_certs = true
max_fails = 3 max_fails = 3
send_voice = true send_voice = true
send_gps = true send_gps = true
send_group_monitoring_before_each_call = false
gps_report_interval = 10000 # The interval in which the GPS is sent gps_report_interval = 10000 # The interval in which the GPS is sent
gps_lat_start_point = 46.217802 gps_lat_start_point = 46.217802
gps_lng_start_point = 24.776126 gps_lng_start_point = 24.776126
delay_between_clients = 300
testing_duration = 600 # seconds
[assets] [assets]
ids = [ 2776 ]
#VOICE and GPS Stage
# ids = [
# 65,1125
# ]
# VOICE and GPS Presgold ids = [
# ids = [ asset_id_1, asset_id_2, asset_id_3
# 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
[sounds] [sounds]
sound = 'sound.mp3' #sound = 'sound.mp3'
sounds_total_number = 20 #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'), elogs: config.get('elogs'),
} }
console.log('configs', configs)
// Start simulation. // Start simulation.
console.log('Starting simulation...'); console.log('Starting simulation...');
var simulator = new Simulator(configs); var simulator = new Simulator(configs);

View File

@ -5,18 +5,10 @@ apt-get -qq update
apt-get install -y build-essential apt-get install -y build-essential
apt-get install -y curl apt-get install -y curl
apt-get install -y python-minimal apt-get install -y python-minimal
curl -sL https://deb.nodesource.com/setup_8.x | bash
# install node 8 apt-get install -y nodejs
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
nvm install v8.17.0
# add node 8 for all users
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"
sudo apt install -y alsa-utils sudo apt install -y alsa-utils
sudo apt-get install -y libasound2-dev sudo apt-get install -y libasound2-dev
sudo npm i -g node-gyp sudo npm i -g node-gyp
# mkdir simulator mkdir simulator
# scp -P 2222 ./ vagrant@127.0.0.1:.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -18,19 +18,21 @@ const log = require('./utils').log
class Asset { 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.token = token;
this.configs = configs this.configs = configs
this._processConfigs(); this._processConfigs();
this.pttEndSuccessfully = false; this.pttEndSuccessfully = false;
this.assetProps = {}; this.assetProps = {};
this.murmurPassword = ''; 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) 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. // Do async work: Init asset.
async.waterfall([ async.waterfall([
@ -44,6 +46,7 @@ class Asset {
utils.writeLog(`Asset ${this.id} was successfully initialized`) utils.writeLog(`Asset ${this.id} was successfully initialized`)
if (err) { if (err) {
console.log('err', err)
utils.writeLog(`Asset ${this.id} was not successfully initialized`, err); utils.writeLog(`Asset ${this.id} was not successfully initialized`, err);
return; return;
} }
@ -71,7 +74,6 @@ class Asset {
(error, response, body) => { (error, response, body) => {
if (!error && (response.statusCode === 200 || response.statusCode === 201)) { if (!error && (response.statusCode === 200 || response.statusCode === 201)) {
let bodyObj = JSON.parse(body); let bodyObj = JSON.parse(body);
// Here are the asset fields. // Here are the asset fields.
this.assetProps = bodyObj.data; this.assetProps = bodyObj.data;
// console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!', this.assetProps) // console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!', this.assetProps)
@ -129,17 +131,16 @@ class Asset {
// Find what group this asset is monitoring. // Find what group this asset is monitoring.
this.groups.forEach((g) => { this.groups.forEach((g) => {
if (g.is_talk_group && g.monitoring.indexOf(this.id) != -1) { if (g.id === this.group_id) {
this.groupId = g.id;
this.groupSipId = g.sip_id; this.groupSipId = g.sip_id;
this.groupName = g.name; this.groupName = g.name;
} }
}); });
if (!this.groupId) { // if (!this.groupId) {
return callback('No talk group assigned to ' + this.id); // return callback('No talk group assigned to ' + this.id);
} // }
utils.writeLog(`Informations about asset ${this.id} received`) utils.writeLog(`Informations about asset ${this.id} received | groupId: ${this.group_id} | groupName: ${this.groupName}`);
return callback(); return callback();
} else { } else {
utils.writeLog(`Error getting informations about asset ${this.id}`, error); utils.writeLog(`Error getting informations about asset ${this.id}`, error);
@ -173,7 +174,6 @@ class Asset {
}); });
hub.once('connect', () => { hub.once('connect', () => {
console.log('11111111111111111111')
return callback(); return callback();
}); });
hub.on('connect', () => { hub.on('connect', () => {
@ -210,6 +210,7 @@ class Asset {
} }
_connectToMurmur(callback) { _connectToMurmur(callback) {
console.log(`Asset ${this.id} connecting to Murmur`);
this.configs.murmurPassword = this.murmurPassword; this.configs.murmurPassword = this.murmurPassword;
this.mumble = new Mumble(this.id, this.configs, (err) => { this.mumble = new Mumble(this.id, this.configs, (err) => {
@ -227,6 +228,7 @@ class Asset {
} }
_register(callback) { _register(callback) {
console.log(`Asset ${this.id} connecting to Register`);
Request.post( Request.post(
this.apiEndpoint + '/audio/register/' + this.id, this.apiEndpoint + '/audio/register/' + this.id,
{ {
@ -241,7 +243,7 @@ class Asset {
} else { } else {
console.log('_register--------------------') console.log('_register--------------------')
console.log('error---', error) console.log('error---', error)
console.log('response---', response) // console.log('response---', response)
console.log('body---', body) console.log('body---', body)
// utils.writeLog(`Asset ${this.id} audio registered error`, error); // utils.writeLog(`Asset ${this.id} audio registered error`, error);
// utils.writeErrorLog(`ERROR_API`); // utils.writeErrorLog(`ERROR_API`);
@ -252,8 +254,10 @@ class Asset {
} }
_moveToChannel(callback) { _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( Request.post(
this.apiEndpoint + '/audio/enter-group/' + this.id + '/' + this.groupId, this.apiEndpoint + '/audio/enter-group/' + this.id + '/' + this.group_id,
{ {
headers: { headers: {
Authorization: `Bearer ${this.token}` Authorization: `Bearer ${this.token}`
@ -271,20 +275,20 @@ class Asset {
asset_alias : this.assetProps.name, asset_alias : this.assetProps.name,
request_ptt_groups_status: false, request_ptt_groups_status: false,
group_sip_id: this.groupSipId, group_sip_id: this.groupSipId,
group_id: this.groupId, group_id: this.group_id,
group_name: this.groupName, group_name: this.groupName,
scan_group_ids: null scan_group_ids: null
} }
)); ));
utils.writeLog(`Asset ${this.id} mmonitoring group ${this.groupId}`) utils.writeLog(`Asset ${this.id} monitoring group ${this.group_id}`)
return callback(); if (callback) return callback();
} else { } else {
return callback('Cannot send group-monitoring: Hub not connected'); if (callback) return callback('Cannot send group-monitoring: Hub not connected');
} }
} else { } else {
console.log('_moveToChannel--------------------') console.log('_moveToChannel--------------------')
console.log('error---', error) console.log('error---', error)
console.log('response---', response) // console.log('response---', response)
console.log('body---', body) console.log('body---', body)
// utils.writeLog(`Asset ${this.id} audio enter group error`, error); // utils.writeLog(`Asset ${this.id} audio enter group error`, error);
// utils.writeErrorLog(`ERROR_API`); // utils.writeErrorLog(`ERROR_API`);
@ -295,31 +299,8 @@ class Asset {
} }
_start() { _start() {
this.startTime = +new Date(); this.generate_voice && this._makePtt();
if(this.endTime > this.startTime) { this.generate_gps && this._sendGPS();
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);
}
}
} }
_verifyRecorder(callback) { _verifyRecorder(callback) {
@ -374,8 +355,11 @@ class Asset {
} }
_makePtt(callback) { _makePtt(callback) {
// Sending group monitoring before we make PTT()
// Send ptt-press, transmit all the sound then send ptt-release. // 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. // Check hub.
let hub = this.hub; let hub = this.hub;
@ -385,7 +369,6 @@ class Asset {
// Send ptt-press and wait for it to be accepted. // Send ptt-press and wait for it to be accepted.
this._sendPttPress((isAccepted) => { this._sendPttPress((isAccepted) => {
if (!isAccepted) { if (!isAccepted) {
return callback(); return callback();
} }
@ -430,8 +413,19 @@ class Asset {
this.pttEndSuccessfully = true; this.pttEndSuccessfully = true;
setTimeout(() => { setTimeout(() => {
this._sendPttRelease(); this._sendPttRelease();
callback(); const now = +new Date();
}, 1500); // Hangtime 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). // @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).
@ -496,30 +490,38 @@ class Asset {
_sendGPS(callback) { _sendGPS(callback) {
let hub = this.hub; let hub = this.hub;
if (hub && hub.connected) { if (hub && hub.connected) {
let lat = this.configs.settings.gps_lat_start_point; let lat = this.configs.settings.gps_lat_start_point;
let lng = this.configs.settings.gps_lng_start_point; let lng = this.configs.settings.gps_lng_start_point;
setInterval(() => { setInterval(() => {
var new_lat = this._randomCoordinates(lat); const now = +new Date();
var new_lng = this._randomCoordinates(lng); if(this.endTime > now) {
var new_lat = this._randomCoordinates(lat);
hub.emit('gps', JSON.stringify( var new_lng = this._randomCoordinates(lng);
{
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;
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); }, this.configs.settings.gps_report_interval);
} }
} }
@ -541,7 +543,7 @@ class Asset {
if (data.asset_id != this.id) { if (data.asset_id != this.id) {
return; 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); hub.removeListener('ptt-deny', pttDenyHandler);
callback(true); callback(true);
}; };
@ -560,7 +562,7 @@ class Asset {
hub.emit('ptt-press', JSON.stringify( hub.emit('ptt-press', JSON.stringify(
{ {
destination_group_id: this.groupId, destination_group_id: this.group_id,
destination_group_sip_id: this.groupSipId, destination_group_sip_id: this.groupSipId,
destination_asset_id: 0, destination_asset_id: 0,
destination_asset_sip_id: 0, destination_asset_sip_id: 0,
@ -579,10 +581,10 @@ class Asset {
let hub = this.hub; let hub = this.hub;
if (hub && hub.connected) { 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( hub.emit('ptt-release', JSON.stringify(
{ {
destination_group_id: this.groupId, destination_group_id: this.group_id,
destination_group_sip_id: this.groupSipId, destination_group_sip_id: this.groupSipId,
destination_asset_id: 0, destination_asset_id: 0,
destination_asset_sip_id: 0, destination_asset_sip_id: 0,

View File

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

View File

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