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>&nbsp;').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.