Skip to content

Commit d752b3d

Browse files
committed
[代码优化](v2.6):修复服务监控磁盘统计不准确的问题,修复本机IP获取不准确的问题
close elunez#527
1 parent 41cd930 commit d752b3d

3 files changed

Lines changed: 54 additions & 25 deletions

File tree

eladmin-common/src/main/java/me/zhengjie/utils/StringUtils.java

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,13 @@
2929

3030
import javax.servlet.http.HttpServletRequest;
3131
import java.io.File;
32+
import java.net.Inet4Address;
3233
import java.net.InetAddress;
34+
import java.net.NetworkInterface;
3335
import java.net.UnknownHostException;
3436
import java.util.Calendar;
3537
import java.util.Date;
38+
import java.util.Enumeration;
3639

3740
/**
3841
* @author Zheng Jie
@@ -248,20 +251,37 @@ public static String getWeekDay() {
248251
* @return /
249252
*/
250253
public static String getLocalIp() {
251-
InetAddress addr;
252254
try {
253-
addr = InetAddress.getLocalHost();
254-
} catch (UnknownHostException e) {
255-
return "unknown";
256-
}
257-
byte[] ipAddr = addr.getAddress();
258-
StringBuilder ipAddrStr = new StringBuilder();
259-
for (int i = 0; i < ipAddr.length; i++) {
260-
if (i > 0) {
261-
ipAddrStr.append(".");
255+
InetAddress candidateAddress = null;
256+
// 遍历所有的网络接口
257+
for (Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements();) {
258+
NetworkInterface anInterface = interfaces.nextElement();
259+
// 在所有的接口下再遍历IP
260+
for (Enumeration<InetAddress> inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements();) {
261+
InetAddress inetAddr = inetAddresses.nextElement();
262+
// 排除loopback类型地址
263+
if (!inetAddr.isLoopbackAddress()) {
264+
if (inetAddr.isSiteLocalAddress()) {
265+
// 如果是site-local地址,就是它了
266+
return inetAddr.getHostAddress();
267+
} else if (candidateAddress == null) {
268+
// site-local类型的地址未被发现,先记录候选地址
269+
candidateAddress = inetAddr;
270+
}
271+
}
272+
}
273+
}
274+
if (candidateAddress != null) {
275+
return candidateAddress.getHostAddress();
262276
}
263-
ipAddrStr.append(ipAddr[i] & 0xFF);
277+
// 如果没有发现 non-loopback地址.只能用最次选的方案
278+
InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
279+
if (jdkSuppliedAddress == null) {
280+
return "";
281+
}
282+
return jdkSuppliedAddress.getHostAddress();
283+
} catch (Exception e) {
284+
return "";
264285
}
265-
return ipAddrStr.toString();
266286
}
267287
}

eladmin-system/src/main/java/me/zhengjie/modules/security/config/SecurityConfig.java renamed to eladmin-system/src/main/java/me/zhengjie/modules/security/config/SpringSecurityConfig.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.springframework.web.method.HandlerMethod;
4141
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
4242
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
43-
4443
import java.util.*;
4544

4645
/**
@@ -50,7 +49,7 @@
5049
@EnableWebSecurity
5150
@RequiredArgsConstructor
5251
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
53-
public class SecurityConfig extends WebSecurityConfigurerAdapter {
52+
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
5453

5554
private final TokenProvider tokenProvider;
5655
private final CorsFilter corsFilter;
@@ -138,6 +137,10 @@ protected void configure(HttpSecurity httpSecurity) throws Exception {
138137
.and().apply(securityConfigurerAdapter());
139138
}
140139

140+
private TokenConfigurer securityConfigurerAdapter() {
141+
return new TokenConfigurer(tokenProvider, properties, onlineUserService, userCacheClean);
142+
}
143+
141144
private Map<String, Set<String>> getAnonymousUrl(Map<RequestMappingInfo, HandlerMethod> handlerMethodMap) {
142145
Map<String, Set<String>> anonymousUrls = new HashMap<>(6);
143146
Set<String> get = new HashSet<>();
@@ -182,8 +185,4 @@ private Map<String, Set<String>> getAnonymousUrl(Map<RequestMappingInfo, Handler
182185
anonymousUrls.put(RequestMethodEnum.ALL.getType(), all);
183186
return anonymousUrls;
184187
}
185-
186-
private TokenConfigurer securityConfigurerAdapter() {
187-
return new TokenConfigurer(tokenProvider, properties, onlineUserService, userCacheClean);
188-
}
189188
}

eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/MonitorServiceImpl.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import cn.hutool.core.date.BetweenFormater;
1919
import cn.hutool.core.date.DateUtil;
2020
import me.zhengjie.modules.system.service.MonitorService;
21+
import me.zhengjie.utils.ElAdminConstant;
2122
import me.zhengjie.utils.FileUtil;
2223
import me.zhengjie.utils.StringUtils;
2324
import org.springframework.stereotype.Service;
@@ -73,15 +74,24 @@ private Map<String,Object> getDiskInfo(OperatingSystem os) {
7374
Map<String,Object> diskInfo = new LinkedHashMap<>();
7475
FileSystem fileSystem = os.getFileSystem();
7576
List<OSFileStore> fsArray = fileSystem.getFileStores();
77+
String osName = System.getProperty("os.name");
78+
long available = 0, total = 0;
7679
for (OSFileStore fs : fsArray){
77-
long available = fs.getUsableSpace();
78-
long total = fs.getTotalSpace();
79-
long used = total - available;
80-
diskInfo.put("total", total > 0 ? FileUtil.getSize(total) : "?");
81-
diskInfo.put("available", FileUtil.getSize(available));
82-
diskInfo.put("used", FileUtil.getSize(used));
83-
diskInfo.put("usageRate", df.format(used/(double)fs.getTotalSpace() * 100));
80+
// windows 需要将所有磁盘分区累加
81+
if(osName.toLowerCase().startsWith(ElAdminConstant.WIN)) {
82+
available += fs.getUsableSpace();
83+
total += fs.getTotalSpace();
84+
} else {
85+
available = fs.getUsableSpace();
86+
total = fs.getTotalSpace();
87+
break;
88+
}
8489
}
90+
long used = total - available;
91+
diskInfo.put("total", total > 0 ? FileUtil.getSize(total) : "?");
92+
diskInfo.put("available", FileUtil.getSize(available));
93+
diskInfo.put("used", FileUtil.getSize(used));
94+
diskInfo.put("usageRate", df.format(used/(double)total * 100));
8595
return diskInfo;
8696
}
8797

0 commit comments

Comments
 (0)