feature: mirror speedtest

This commit is contained in:
harlekin
2021-11-15 14:09:41 +00:00
committed by Sheepit Renderfarm
parent 6c5e252a1f
commit 2e46685068
7 changed files with 324 additions and 35 deletions

View File

@@ -35,7 +35,11 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.sheepit.client.datamodel.SpeedTestTarget;
import com.sheepit.client.datamodel.SpeedTestResult;
import com.sheepit.client.datamodel.SpeedTestTargetResult;
import lombok.Getter;
import org.simpleframework.xml.core.Persister;
@@ -74,6 +78,8 @@ import com.sheepit.client.os.OS;
public class Server extends Thread {
private static final int NUMBER_OF_SPEEDTEST_RESULTS = 3;
final private String HTTP_USER_AGENT = "Java/" + System.getProperty("java.version");
private String base_url;
private final OkHttpClient httpClient;
@@ -136,8 +142,8 @@ public class Server extends Thread {
String in = response.body().string();
try {
HeartBeatInfos heartBeartInfos = new Persister().read(HeartBeatInfos.class, in);
ServerCode serverCode = ServerCode.fromInt(heartBeartInfos.getStatus());
HeartBeatInfos heartBeatInfos = new Persister().read(HeartBeatInfos.class, in);
ServerCode serverCode = ServerCode.fromInt(heartBeatInfos.getStatus());
if (serverCode == ServerCode.KEEPMEALIVE_STOP_RENDERING) {
this.log.debug("Server::stayAlive server asked to kill local render process");
// kill the current process, it will generate an error but it's okay
@@ -252,6 +258,41 @@ public class Server extends Thread {
return Error.Type.UNKNOWN;
}
if (serverConfig.getSpeedTestTargets() != null && serverConfig.getSpeedTestTargets().isEmpty() == false) {
try {
client.getGui().status("Checking mirror connection speeds...");
Speedtest speedtest = new Speedtest(log);
List<SpeedTestTarget> bestSpeedTestTargets = speedtest.doSpeedtests(serverConfig.getSpeedTestTargets().stream().map(m -> m.getUrl()).collect(Collectors.toList()),
NUMBER_OF_SPEEDTEST_RESULTS);
SpeedTestResult result = new SpeedTestResult();
result.setResults(bestSpeedTestTargets.stream().map(m -> {
SpeedTestTargetResult targetResult = new SpeedTestTargetResult();
targetResult.setTarget(m.getUrl());
targetResult.setSpeed(m.getSpeedtest());
targetResult.setPing((int) (m.getPing().getAverage()));
return targetResult;
}).collect(Collectors.toList()));
final Persister persister = new Persister();
try (StringWriter writer = new StringWriter()) {
persister.write(result, writer);
HttpUrl.Builder urlBuilder = Objects.requireNonNull(HttpUrl.parse(this.getPage("speedtest-answer"))).newBuilder();
Response response = this.HTTPRequest(urlBuilder, RequestBody.create(MediaType.parse("application/xml"), writer.toString()));
if (response.code() != HttpURLConnection.HTTP_OK) {
throw new IOException("Server::getConfiguration Speedtest unexpected response");
}
}
catch (final Exception e) {
throw new IOException("Server::getConfiguration Speedtest failed to generate payload");
}
}
catch (IOException e) {
this.log.error("Server::getConfiguration Speedtest failed: " + e);
return Error.Type.NETWORK_ISSUE;
}
}
client.setSessionStarted(true);
this.client.getGui().successfulAuthenticationEvent(publickey);