/******************************************************************************* * Copyright 2013-2015 alladin-IT GmbH * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package at.alladin.rmbt.client.ndt; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import net.measurementlab.ndt.NdtTests; import org.json.JSONException; import org.json.JSONObject; import at.alladin.rmbt.client.helper.JSONParser; import at.alladin.rmbt.client.helper.NdtStatus; public class NDTRunner { private final AtomicInteger ndtProgress = new AtomicInteger(); private final AtomicReference<NdtStatus> ndtStatus = new AtomicReference<NdtStatus>(NdtStatus.NOT_STARTED); private final AtomicBoolean ndtFailure = new AtomicBoolean(); private final AtomicBoolean ndtCancelled = new AtomicBoolean(); private final String ndtHost; public NDTRunner(String ndtHost) { if (ndtHost == null) this.ndtHost = getNdtHost(); else this.ndtHost = ndtHost; } public NDTRunner() { this(null); } public static String getNdtHost() { try { final JSONObject obj = JSONParser.getURL(new URL(at.alladin.rmbt.client.helper.Config.MLAB_NS)); if (obj != null) { // System.out.println(obj.toString(4)); return obj.getString("fqdn"); } } catch (JSONException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } return at.alladin.rmbt.client.helper.Config.NDT_FALLBACK_HOST; } public abstract class UiServices extends UiServicesAdapter { @Override public void incrementProgress() { ndtProgress.incrementAndGet(); } @Override public boolean wantToStop() { return ndtCancelled.get(); } public void cancel() { ndtCancelled.set(true); } @Override public void onFailure(final String errorMessage) { ndtFailure.set(true); System.out.println("NDT error:" + errorMessage); } public abstract void sendResults(); } public NdtStatus getNdtStatus() { return ndtStatus.get(); } public float getNdtProgress() { final int progress = ndtProgress.get(); return (float) progress / UiServices.TEST_STEPS; } public void setNdtCacelled(boolean cancelled) { ndtCancelled.set(cancelled); } public void runNDT(String ndtNetworkType, UiServices usa) { ndtProgress.set(0); ndtStatus.set(NdtStatus.RUNNING); System.out.println("ndt status RUNNING"); if (usa == null) usa = new UiServices() { @Override public void sendResults() { } }; try { final NdtTests ndt = new NdtTests(ndtHost, usa, ndtNetworkType); ndt.run(); } catch (final Throwable t) { t.printStackTrace(); } if (ndtCancelled.get()) { ndtStatus.set(NdtStatus.ABORTED); System.out.println("ndt status ABORTED"); } else if (ndtFailure.get()) { ndtStatus.set(NdtStatus.ERROR); System.out.println("ndt status ERROR"); } else { ndtStatus.set(NdtStatus.RESULTS); System.out.println("ndt status RESULTS"); usa.sendResults(); ndtStatus.set(NdtStatus.FINISHED); System.out.println("ndt status FINISHED"); } } }