新增延迟测试,允许测试指定服务器之间或指定服务器到自定义公网ip的延迟
This commit is contained in:
parent
170841e458
commit
8b94d074cc
@ -29,4 +29,8 @@ public class SiteManageController {
|
|||||||
return siteService.getSites();
|
return siteService.getSites();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("delayTest")
|
||||||
|
public String delayTest(Integer source, String targetIp){
|
||||||
|
return siteService.delayTest(source, targetIp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,7 @@ public class AbstractMessage {
|
|||||||
public static final int SHARE_FILE_QUERY_MESSAGE = 73;
|
public static final int SHARE_FILE_QUERY_MESSAGE = 73;
|
||||||
public static final int CONFIG_MESSAGE = 80;
|
public static final int CONFIG_MESSAGE = 80;
|
||||||
public static final int CONNECT_MESSAGE = 90;
|
public static final int CONNECT_MESSAGE = 90;
|
||||||
|
public static final int DELAY_TEST_MESSAGE = 91;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
11
src/main/java/com/lion/sns/message/DelayTestMessage.java
Normal file
11
src/main/java/com/lion/sns/message/DelayTestMessage.java
Normal 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;
|
||||||
|
}
|
||||||
@ -47,6 +47,7 @@ public class MessageCodec extends ByteToMessageCodec<AbstractMessage> {
|
|||||||
case AbstractMessage.SHARE_FILE_QUERY_MESSAGE -> objectMapper.readValue(bytes, ShareFileQueryMessage.class);
|
case AbstractMessage.SHARE_FILE_QUERY_MESSAGE -> objectMapper.readValue(bytes, ShareFileQueryMessage.class);
|
||||||
case AbstractMessage.CONFIG_MESSAGE -> objectMapper.readValue(bytes, ConfigMessage.class);
|
case AbstractMessage.CONFIG_MESSAGE -> objectMapper.readValue(bytes, ConfigMessage.class);
|
||||||
case AbstractMessage.CONNECT_MESSAGE -> objectMapper.readValue(bytes, ConnectMessage.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);
|
default -> throw new IllegalStateException("Unexpected value: " + type);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import com.lion.sns.dao.CustomConfigurationMapper;
|
|||||||
import com.lion.sns.dao.ShareFileMapper;
|
import com.lion.sns.dao.ShareFileMapper;
|
||||||
import com.lion.sns.dao.SiteMapper;
|
import com.lion.sns.dao.SiteMapper;
|
||||||
import com.lion.sns.message.ConfigMessage;
|
import com.lion.sns.message.ConfigMessage;
|
||||||
|
import com.lion.sns.message.DelayTestMessage;
|
||||||
import com.lion.sns.message.ResponseMessage;
|
import com.lion.sns.message.ResponseMessage;
|
||||||
import com.lion.sns.message.UnPairMessage;
|
import com.lion.sns.message.UnPairMessage;
|
||||||
import com.lion.sns.pojo.ShareFile;
|
import com.lion.sns.pojo.ShareFile;
|
||||||
@ -18,8 +19,12 @@ import jakarta.annotation.Resource;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.Inet4Address;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class SiteService {
|
public class SiteService {
|
||||||
@ -182,4 +187,56 @@ public class SiteService {
|
|||||||
response.success(objectMapper.valueToTree(result));
|
response.success(objectMapper.valueToTree(result));
|
||||||
return response.toJSONString();
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,11 +16,14 @@ public class Response {
|
|||||||
return new Response();
|
return new Response();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(String key, String value){
|
public Response set(String key, String value){
|
||||||
result.put(key, 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));
|
result.put(key, String.valueOf(value));
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String get(String key){
|
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
Loading…
Reference in New Issue
Block a user