You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2018/03/23 17:41:49 UTC
[openmeetings] branch master updated: [OPENMEETINGS-1854] net test
is improved
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new 2fb0334 [OPENMEETINGS-1854] net test is improved
2fb0334 is described below
commit 2fb033490338d664b9d7611fc072b1f76b229506
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Sat Mar 24 00:41:41 2018 +0700
[OPENMEETINGS-1854] net test is improved
---
.../apache/openmeetings/web/pages/HashPage.java | 3 +-
.../apache/openmeetings/web/room/NetTestPanel.html | 4 +-
.../apache/openmeetings/web/room/nettest-base.js | 97 ++++++++++++++++------
.../org/apache/openmeetings/web/room/network.js | 8 +-
openmeetings-web/src/main/webapp/css/nettest.css | 29 +++++++
.../openmeetings/webservice/NetTestWebService.java | 35 +++-----
6 files changed, 122 insertions(+), 54 deletions(-)
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
index 24137dc..2aaf6f1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/HashPage.java
@@ -41,6 +41,7 @@ import org.apache.openmeetings.web.room.RoomPanel;
import org.apache.openmeetings.web.room.VideoSettings;
import org.apache.openmeetings.web.user.record.VideoInfo;
import org.apache.openmeetings.web.user.record.VideoPlayer;
+import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.markup.head.CssHeaderItem;
@@ -162,7 +163,7 @@ public class HashPage extends BaseInitedPage implements IUpdatable {
StringValue app = swf.isEmpty() ? p.get(APP) : swf;
if (!app.isEmpty()) {
if (APP_TYPE_NETWORK.equals(app.toString())) {
- replace(new NetTestPanel(PANEL_MAIN));
+ replace(new NetTestPanel(PANEL_MAIN).add(AttributeModifier.append("class", "app")));
error = false;
}
if (APP_TYPE_SETTINGS.equals(app.toString())) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html
index 8853ccc..dadf95a 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/NetTestPanel.html
@@ -41,7 +41,9 @@
<span class="ui-icon ui-icon-arrowthickstop-1-s"></span> <wicket:message key="network.test.dwn"/>
</button>
</div>
- <output></output>
+ <div class="output">
+ <output></output>
+ </div>
</div>
</wicket:panel>
</html>
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/nettest-base.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/nettest-base.js
index 72b8f3e..b1be9fd 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/nettest-base.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/nettest-base.js
@@ -1,7 +1,7 @@
/* Licensed under the Apache License, Version 2.0 (the "License") http://www.apache.org/licenses/LICENSE-2.0 */
var NetTest = (function() {
- const self = {};
- let output, lbls, net, testName, testLabel;
+ const self = {}, LIMIT = 2000;
+ let output, lbls, net, tests, testName, testLabel;
// Based on
// https://github.com/nesk/network.js/blob/master/example/main.js
@@ -14,20 +14,57 @@ var NetTest = (function() {
const btn = $(this);
testLabel = btn.data('lbl');
testName = btn.data('measure');
- net[testName].start();
- if (testName === 'latency') {
- net[testName].trigger('start');
- }
+ tests[testName].start();
});
net = new Network({
endpoint: './services/networktest/'
});
+ tests = {
+ latency: {
+ start: function() {
+ const t = net.latency;
+ t.settings({
+ measures: 5
+ , attempts: 3
+ });
+ t.start();
+ t.trigger('start');
+ }
+ }
+ , upload: {
+ start: function() {
+ const t = net.upload;
+ t.settings({
+ delay: LIMIT
+ , measures: 5
+ , data: {
+ size: 1 * 1024 * 1024
+ , multiplier: 2
+ }
+ });
+ t.start();
+ }
+ }
+ , download: {
+ start: function() {
+ const t = net.download;
+ t.settings({
+ delay: LIMIT
+ , measures: 5
+ , data: {
+ size: 1 * 1024 * 1024
+ , multiplier: 2
+ }
+ });
+ t.start();
+ }
+ }
+ };
net.upload
.on('start', _start)
.on('progress', _progress)
.on('restart', _restart)
- .on('error', _error)
.on('end', _end);
net.download
.on('start', _start)
@@ -36,22 +73,31 @@ var NetTest = (function() {
.on('end', _end);
net.latency
.on('start', _start)
- .on('end', function(avg, all) {
- all = all.map(function(latency) {
- return _value(latency, lbls['ms']);
- });
- all = '[ ' + all.join(' , ') + ' ]';
- _log('Instant latencies: ' + all);
- _log('Average latency: ' + _value(avg, lbls['ms']));
+ .on('end', function(avg, _all) {
+ const all = $('<span></span>').append('[');
+ let delim = '';
+ for (let i = 0; i < _all.length; ++i) {
+ all.append(delim).append(_value(_all[i], lbls['ms']));
+ delim = ',';
+ }
+ all.append(']');
+ _log(all);
+ _log($('<span></span>').append(lbls['jitter.avg']).append(_value(avg, lbls['ms'])));
_stop();
});
}
function _start(size) {
- _log(_delimiter(
- 'Starting ' + testLabel + ' measures'
- + (testName != 'latency' ? (' with ' + _value(size / 1024 / 1024, lbls['mb']) + ' of data') : '')
- + '...'
- ), true);
+ const msg = $('<span></span>').append(lbls['report.start']);
+ if (testName === 'upload') {
+ msg.append(lbls['upl.bytes']);
+ } else if (testName === 'download') {
+ msg.append(lbls['dwn.bytes']);
+ }
+ if (testName !== 'latency') {
+ msg.append(_value(size / 1024 / 1024, lbls['mb']));
+ }
+ msg.append('...');
+ _log(_delimiter(msg), true);
}
function _mbps() {
return lbls['mb'] + '/' + lbls['sec'];
@@ -63,7 +109,7 @@ var NetTest = (function() {
}
function _restart(size) {
_log(_delimiter(
- 'The minimum delay of ' + _value(8, lbls['sec']) + ' has not been reached'
+ 'The minimum delay of ' + _value(LIMIT / 1000, lbls['sec']) + ' has not been reached'
));
_log(_delimiter(
'Restarting measures with '
@@ -71,9 +117,6 @@ var NetTest = (function() {
+ ' of data...'
));
}
- function _error() {
- _log($('<span class="error></span>"'))
- }
function _end(avg) {
_log('Final average speed: ' + _value(avg / 1024 / 1024, _mbps()));
_stop();
@@ -82,20 +125,20 @@ var NetTest = (function() {
_log(_delimiter('Finished measures'));
}
function _delimiter(text) {
- return $('<span class="delim"></span>').text(text);
+ return $('<span class="delim"></span>').html(text);
}
function _log(text, newSection) {
output.append('<br/>');
if (newSection) {
output.append('<br/>');
}
- output.append($('<span class="module"></span> ').text(testLabel)).append(text);
+ output.append($('<span class="module"></span>').text(testLabel)).append(text);
}
function _value(value, unit) {
if (value != null) {
- return '<span class="value">' + value.toFixed(3) + ' ' + unit + '</span>';
+ return $('<span class="value">' + value.toFixed(3) + ' ' + unit + '</span>');
} else {
- return '<span class="value">null</span>';
+ return $('<span class="value">null</span>');
}
}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/network.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/network.js
index 5f34968..7bf5576 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/network.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/network.js
@@ -420,7 +420,8 @@ var BandwidthModule = (function (_HttpModule) {
// 2 MB for upload, 10 MB for download
size: loadingType == 'upload' ? 2 * 1024 * 1024 : 10 * 1024 * 1024,
multiplier: 2
- }
+ },
+ measures: -1
}).settings(settings);
this._loadingType = loadingType;
@@ -590,8 +591,9 @@ var BandwidthModule = (function (_HttpModule) {
}, {
key: '_end',
value: function _end() {
+ const measures = --this.settings().measures;
// A timeout or an abort occured, bypass the further requests and trigger the "end" event.
- if (this._intendedEnd) {
+ if (this._intendedEnd || measures == 0) {
this._isRestarting = false;
this.trigger('end', this._avgSpeed, this._speedRecords);
}
@@ -601,7 +603,7 @@ var BandwidthModule = (function (_HttpModule) {
var dataSettings = this.settings().data,
size = dataSettings.size * dataSettings.multiplier;
- this.settings({ data: { size: size } });
+ this.settings({ data: { size: size }, measures: measures });
this.trigger('restart', size);
this._isRestarting = true;
diff --git a/openmeetings-web/src/main/webapp/css/nettest.css b/openmeetings-web/src/main/webapp/css/nettest.css
index b829604..034e2b3 100644
--- a/openmeetings-web/src/main/webapp/css/nettest.css
+++ b/openmeetings-web/src/main/webapp/css/nettest.css
@@ -16,6 +16,35 @@
* specific language governing permissions and limitations
* under the License.
*/
+.hash-panel-main.app {
+ width: 100%;
+ height: calc(100% - 50px);
+}
+.nettest {
+ padding: 20px;
+ height: calc(100% - 50px);
+}
.nettest .test {
display: inline-block;
}
+.nettest .output {
+ border-radius: 10px;
+ border: 1px solid #cccccc;
+ min-height: calc(100% - 50px);
+ max-height: calc(100% - 50px);
+ margin-top: 20px;
+ overflow: auto;
+}
+.nettest output {
+}
+.nettest output .module {
+ color: #6b0df7;
+ padding: 0 5px;
+}
+.nettest output .delim {
+ color: green;
+}
+.nettest output .value {
+ color: green;
+ padding: 0 5px;
+}
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java
index 3c05543..3732eed 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/NetTestWebService.java
@@ -22,7 +22,7 @@ package org.apache.openmeetings.webservice;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.util.Arrays;
+import java.util.concurrent.ThreadLocalRandom;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
@@ -44,50 +44,40 @@ public class NetTestWebService {
private static final Logger log = LoggerFactory.getLogger(UserWebService.class);
enum TestType {
UNKNOWN,
- PING,
JITTER,
DOWNLOAD_SPEED,
UPLOAD_SPEED
}
- private static final int PING_PACKET_SIZE = 64;
private static final int JITTER_PACKET_SIZE = 1024;
- private static final int DOWNLOAD_PACKET_SIZE = 1024*1024;
+ private static final int MAX_UPLOAD_SIZE = 16 * 1024 * 1024;
+ private static final int MAX_DOWNLOAD_SIZE = 16 * 1024 * 1024;
- private final byte[] pingData;
private final byte[] jitterData;
- private final byte[] downloadData;
public NetTestWebService() {
- pingData = new byte[PING_PACKET_SIZE];
jitterData = new byte[JITTER_PACKET_SIZE];
- downloadData = new byte[DOWNLOAD_PACKET_SIZE];
- Arrays.fill(pingData, (byte) '0');
- Arrays.fill(jitterData, (byte) '0');
- Arrays.fill(downloadData, (byte) '0');
+ ThreadLocalRandom.current().nextBytes(jitterData);
}
@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/")
- public Response get(@QueryParam("module") String module, @QueryParam("size") long size) {
+ public Response get(@QueryParam("module") String module, @QueryParam("size") int _size) {
+ int size = Math.min(_size, MAX_DOWNLOAD_SIZE);
TestType testType = getTypeByString(module);
log.debug("Network test:: get");
// choose data to send
byte[] data = new byte[0];
switch (testType) {
- case PING:
- data = pingData;
- break;
case JITTER:
data = jitterData;
break;
case DOWNLOAD_SPEED:
- data = downloadData;
- break;
- case UPLOAD_SPEED:
+ data = new byte[size];
+ ThreadLocalRandom.current().nextBytes(data);
break;
default:
break;
@@ -105,9 +95,12 @@ public class NetTestWebService {
@Path("/")
public void upload(
@QueryParam("module") String module
- , @QueryParam("size") long size
+ , @QueryParam("size") int size
, InputStream stream) throws IOException
{
+ if (size > MAX_UPLOAD_SIZE) {
+ return;
+ }
byte[] b = new byte[1024];
while (stream.read(b) >= 0 ) {
//no-op
@@ -115,9 +108,7 @@ public class NetTestWebService {
}
private static TestType getTypeByString(String typeString) {
- if ("ping".equals(typeString)) {
- return TestType.PING;
- } else if ("latency".equals(typeString)) {
+ if ("latency".equals(typeString)) {
return TestType.JITTER;
} else if ("download".equals(typeString)) {
return TestType.DOWNLOAD_SPEED;
--
To stop receiving notification emails like this one, please contact
solomax@apache.org.