新增延迟测试,允许测试指定服务器之间或指定服务器到自定义公网ip的延迟

This commit is contained in:
chuzhongzai 2024-05-02 16:42:35 +08:00
parent 170841e458
commit 8b94d074cc
8 changed files with 124 additions and 30 deletions

View File

@ -29,4 +29,8 @@ public class SiteManageController {
return siteService.getSites();
}
@PostMapping("delayTest")
public String delayTest(Integer source, String targetIp){
return siteService.delayTest(source, targetIp);
}
}

View File

@ -28,6 +28,7 @@ public class AbstractMessage {
public static final int SHARE_FILE_QUERY_MESSAGE = 73;
public static final int CONFIG_MESSAGE = 80;
public static final int CONNECT_MESSAGE = 90;
public static final int DELAY_TEST_MESSAGE = 91;

View File

@ -0,0 +1,11 @@
package com.lion.sns.message;
import lombok.Data;
@Data
public class DelayTestMessage extends AbstractMessage{
{
messageType = DELAY_TEST_MESSAGE;
}
String ip;
}

View File

@ -47,6 +47,7 @@ public class MessageCodec extends ByteToMessageCodec<AbstractMessage> {
case AbstractMessage.SHARE_FILE_QUERY_MESSAGE -> objectMapper.readValue(bytes, ShareFileQueryMessage.class);
case AbstractMessage.CONFIG_MESSAGE -> objectMapper.readValue(bytes, ConfigMessage.class);
case AbstractMessage.CONNECT_MESSAGE -> objectMapper.readValue(bytes, ConnectMessage.class);
case AbstractMessage.DELAY_TEST_MESSAGE -> objectMapper.readValue(bytes, DelayTestMessage.class);
default -> throw new IllegalStateException("Unexpected value: " + type);
};

View File

@ -7,6 +7,7 @@ import com.lion.sns.dao.CustomConfigurationMapper;
import com.lion.sns.dao.ShareFileMapper;
import com.lion.sns.dao.SiteMapper;
import com.lion.sns.message.ConfigMessage;
import com.lion.sns.message.DelayTestMessage;
import com.lion.sns.message.ResponseMessage;
import com.lion.sns.message.UnPairMessage;
import com.lion.sns.pojo.ShareFile;
@ -18,8 +19,12 @@ import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
import java.net.Inet4Address;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.regex.Pattern;
@Service
public class SiteService {
@ -182,4 +187,56 @@ public class SiteService {
response.success(objectMapper.valueToTree(result));
return response.toJSONString();
}
public String delayTest(Integer source, String targetIp){
Response response = Response.generateResponse();
if (targetIp != null) {
String publicIPPattern = "^(?!10\\.)(?!192\\.168\\.)(?!172\\.(1[6-9]|2[0-9]|3[0-1])\\.)((2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)\\.){3}(2[0-4][0-9]|25[0-5]|[01]?[0-9][0-9]?)$";
if(!Pattern.compile(publicIPPattern).matcher(targetIp).find())
return response.failure("该ip地址不合法或者为非公网ip").toJSONString();
if(source == 1) {
return delayTestToIp(targetIp);
} else {
DelayTestMessage delayTestMessage = new DelayTestMessage();
delayTestMessage.setIp(targetIp);
delayTestMessage.setMessageId(CustomUtil.getId());
ResponseMessage responseMessage = communicateService.sendMessageToSite(source, delayTestMessage);
if (responseMessage.isResult()) {
return response.set("data", responseMessage.get("data")).success().toJSONString();
} else
response.failure(responseMessage.get("cause")).toJSONString();
}
}
return response.toJSONString();
}
public String delayTestToIp(String ip){
Response response = Response.generateResponse();
long sum = 0;
long[] data = new long[6];
for(int i=0; i<5; i++){
try {
long start = System.currentTimeMillis();
if(!Inet4Address.getByName(ip).isReachable(5000)) {
data[i] = -1;
continue;
}
long duration = System.currentTimeMillis() - start;
if(duration == 0)
duration = 1;
data[i] = duration;
sum += duration;
} catch (IOException e) {
e.printStackTrace();
response.failure("该ip无法连接或连接超时");
}
}
if(sum == 0)
return response.failure("该ip无法连接或连接超时").toJSONString();
else
data[5] = (sum / 5);
return response.set("data", Arrays.toString(data)).success().toJSONString();
}
}

View File

@ -16,11 +16,14 @@ public class Response {
return new Response();
}
public void set(String key, String value){
public Response set(String key, String value){
result.put(key, value);
return this;
}
public void set(String key, Object value){
public Response set(String key, Object value){
result.put(key, String.valueOf(value));
return this;
}
public String get(String key){

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long