From ca891f367c5b23ea841695c50ddbb7f08ae23292 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期一, 24 十月 2022 15:20:35 +0800 Subject: [PATCH] 首页改造完成,待添加系统信息 --- src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java | 7 web_src/src/components/console.vue | 57 ++ src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java | 6 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java | 6 src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java | 7 web_src/src/components/console/ConsoleResource.vue | 86 ++++ web_src/src/components/console/ConsoleMEM.vue | 16 src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java | 22 + src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java | 41 ++ web_src/src/components/console/ConsoleDisk.vue | 81 ++++ src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java | 5 src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 150 ++++++-- web_src/src/layout/index.vue | 3 src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 12 src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java | 3 src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 16 web_src/src/components/console/ConsoleCPU.vue | 20 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 6 src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java | 95 +++++ src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java | 8 src/main/java/com/genersoft/iot/vmp/service/bean/MediaServerLoad.java | 50 ++ src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java | 8 src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java | 56 ++ src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java | 6 src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java | 48 ++ src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java | 8 /dev/null | 51 -- src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java | 2 src/main/java/com/genersoft/iot/vmp/common/SystemAllInfo.java | 20 + src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java | 4 web_src/src/components/console/ConsoleNet.vue | 32 + web_src/src/layout/UiHeader.vue | 2 web_src/src/components/console/ConsoleNodeLoad.vue | 63 +++ web_src/src/components/console/ConsoleMediaServer.vue | 13 src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 6 src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java | 7 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java | 5 37 files changed, 882 insertions(+), 146 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/common/SystemAllInfo.java b/src/main/java/com/genersoft/iot/vmp/common/SystemAllInfo.java index eb6a37d..48485da 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/SystemAllInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/common/SystemAllInfo.java @@ -8,6 +8,10 @@ private List<Object> mem; private List<Object> net; + private long netTotal; + + private Object disk; + public List<Object> getCpu() { return cpu; } @@ -31,4 +35,20 @@ public void setNet(List<Object> net) { this.net = net; } + + public Object getDisk() { + return disk; + } + + public void setDisk(Object disk) { + this.disk = disk; + } + + public long getNetTotal() { + return netTotal; + } + + public void setNetTotal(long netTotal) { + this.netTotal = netTotal; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java b/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java deleted file mode 100644 index 81a93ac..0000000 --- a/src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.genersoft.iot.vmp.common; - -public class SystemInfoDto<T> { - private String time; - private T data; - - public String getTime() { - return time; - } - - public void setTime(String time) { - this.time = time; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } -} diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java index 6d52308..47e51ba 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java +++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java @@ -27,11 +27,9 @@ public static final String KEEPLIVEKEY_PREFIX = "VMP_KEEPALIVE_"; - // 姝ゅ澶氫簡涓�涓猒锛屾殏涓嶄慨鏀� + // TODO 姝ゅ澶氫簡涓�涓猒锛屾殏涓嶄慨鏀� public static final String PLAYER_PREFIX = "VMP_PLAYER_"; public static final String PLAY_BLACK_PREFIX = "VMP_PLAYBACK_"; - public static final String PLAY_INFO_PREFIX = "VMP_PLAY_INFO_"; - public static final String DOWNLOAD_PREFIX = "VMP_DOWNLOAD_"; public static final String PLATFORM_KEEPALIVE_PREFIX = "VMP_PLATFORM_KEEPALIVE_"; @@ -70,6 +68,8 @@ public static final String SYSTEM_INFO_NET_PREFIX = "VMP_SYSTEM_INFO_NET_"; + public static final String SYSTEM_INFO_DISK_PREFIX = "VMP_SYSTEM_INFO_DISK_"; + diff --git a/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java b/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java index 5a84e25..9bc8626 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java @@ -9,6 +9,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.util.List; import java.util.Map; /** @@ -31,6 +32,8 @@ redisCatchStorage.addMemInfo(memInfo); Map<String, Double> networkInterfaces = SystemInfoUtils.getNetworkInterfaces(); redisCatchStorage.addNetInfo(networkInterfaces); + List<Map<String, Object>> diskInfo =SystemInfoUtils.getDiskInfo(); + redisCatchStorage.addDiskInfo(diskInfo); } catch (InterruptedException e) { logger.error("[鑾峰彇绯荤粺淇℃伅澶辫触] {}", e.getMessage()); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipDeviceRunner.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipDeviceRunner.java deleted file mode 100644 index 91d8c3d..0000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipDeviceRunner.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.task; - -import com.genersoft.iot.vmp.conf.UserSetting; -import com.genersoft.iot.vmp.gb28181.bean.Device; -import com.genersoft.iot.vmp.service.IDeviceService; -import com.genersoft.iot.vmp.storager.IRedisCatchStorage; -import com.genersoft.iot.vmp.storager.IVideoManagerStorage; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.CommandLineRunner; -import org.springframework.core.annotation.Order; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; - - -/** - * 绯荤粺鍚姩鏃舵帶鍒惰澶� - * @author lin - */ -@Component -@Order(value=4) -public class SipDeviceRunner implements CommandLineRunner { - - @Autowired - private IVideoManagerStorage storager; - - @Autowired - private IRedisCatchStorage redisCatchStorage; - - @Autowired - private UserSetting userSetting; - - @Autowired - private IDeviceService deviceService; - - @Override - public void run(String... args) throws Exception { - List<Device> deviceList = deviceService.getAllOnlineDevice(); - - for (Device device : deviceList) { - if (deviceService.expire(device)){ - deviceService.offline(device.getDeviceId()); - }else { - deviceService.online(device); - } - } - // 閲嶇疆cseq璁℃暟 - redisCatchStorage.resetAllCSEQ(); - } -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java b/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java new file mode 100644 index 0000000..e04bad9 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java @@ -0,0 +1,95 @@ +package com.genersoft.iot.vmp.gb28181.task; + +import com.alibaba.fastjson.JSONObject; +import com.genersoft.iot.vmp.conf.UserSetting; +import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; +import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; +import com.genersoft.iot.vmp.service.IDeviceService; +import com.genersoft.iot.vmp.service.IMediaServerService; +import com.genersoft.iot.vmp.service.IPlatformService; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; +import com.genersoft.iot.vmp.storager.IVideoManagerStorage; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * 绯荤粺鍚姩鏃舵帶鍒惰澶� + * @author lin + */ +@Component +@Order(value=4) +public class SipRunner implements CommandLineRunner { + + @Autowired + private IVideoManagerStorage storager; + + @Autowired + private IRedisCatchStorage redisCatchStorage; + + @Autowired + private UserSetting userSetting; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private ZLMRESTfulUtils zlmresTfulUtils; + + @Autowired + private IMediaServerService mediaServerService; + + @Autowired + private IPlatformService platformService; + + @Autowired + private ISIPCommanderForPlatform commanderForPlatform; + + @Override + public void run(String... args) throws Exception { + List<Device> deviceList = deviceService.getAllOnlineDevice(); + + for (Device device : deviceList) { + if (deviceService.expire(device)){ + deviceService.offline(device.getDeviceId()); + }else { + deviceService.online(device); + } + } + // 閲嶇疆cseq璁℃暟 + redisCatchStorage.resetAllCSEQ(); + // 娓呯悊redis + // 鏌ユ壘鍥芥爣鎺ㄦ祦 + List<SendRtpItem> sendRtpItems = redisCatchStorage.queryAllSendRTPServer(); + if (sendRtpItems.size() > 0) { + for (SendRtpItem sendRtpItem : sendRtpItems) { + MediaServerItem mediaServerItem = mediaServerService.getOne(sendRtpItem.getMediaServerId()); + redisCatchStorage.deleteSendRTPServer(sendRtpItem.getPlatformId(),sendRtpItem.getChannelId(), sendRtpItem.getCallId(),sendRtpItem.getStreamId()); + if (mediaServerItem != null) { + Map<String, Object> param = new HashMap<>(); + param.put("vhost","__defaultVhost__"); + param.put("app",sendRtpItem.getApp()); + param.put("stream",sendRtpItem.getStreamId()); + param.put("ssrc",sendRtpItem.getSsrc()); + JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(mediaServerItem, param); + if (jsonObject != null && jsonObject.getInteger("code") == 0) { + ParentPlatform platform = platformService.queryPlatformByServerGBId(sendRtpItem.getPlatformId()); + if (platform != null) { + commanderForPlatform.streamByeCmd(platform, sendRtpItem.getCallId()); + } + } + } + } + } + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java index 9629e3a..3f58735 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java @@ -2,6 +2,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import java.util.List; @@ -32,4 +33,9 @@ */ int updateChannels(String deviceId, List<DeviceChannel> channels); + /** + * 鑾峰彇缁熻淇℃伅 + * @return + */ + ResourceBaceInfo getOverview(); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java index 24051b9..b87c9a7 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.SyncStatus; import com.genersoft.iot.vmp.vmanager.bean.BaseTree; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import java.util.List; @@ -155,4 +156,11 @@ * @return */ boolean delete(String deviceId); + + /** + * 鑾峰彇缁熻淇℃伅 + * @return + */ + ResourceBaceInfo getOverview(); + } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java b/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java index 0ecc717..dd08101 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java @@ -4,10 +4,12 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; +import com.genersoft.iot.vmp.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import java.util.List; +import java.util.Map; /** * 濯掍綋鏈嶅姟鑺傜偣 @@ -87,4 +89,10 @@ void updateMediaServerKeepalive(String mediaServerId, JSONObject data); boolean checkRtpServer(MediaServerItem mediaServerItem, String rtp, String stream); + + /** + * 鑾峰彇璐熻浇淇℃伅 + * @return + */ + MediaServerLoad getLoad(MediaServerItem mediaServerItem); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java index 1395a52..a2678b8 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import com.github.pagehelper.PageInfo; public interface IStreamProxyService { @@ -102,4 +103,11 @@ * 鏇存柊浠g悊娴� */ boolean updateStreamProxy(StreamProxyItem streamProxyItem); + + /** + * 鑾峰彇缁熻淇℃伅 + * @return + */ + ResourceBaceInfo getOverview(); + } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java index 5dbba92..4bccc3f 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java @@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; import com.github.pagehelper.PageInfo; @@ -106,4 +107,10 @@ * @return */ List<String> getAllAppAndStream(); + + /** + * 鑾峰彇缁熻淇℃伅 + * @return + */ + ResourceBaceInfo getOverview(); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/bean/MediaServerLoad.java b/src/main/java/com/genersoft/iot/vmp/service/bean/MediaServerLoad.java new file mode 100644 index 0000000..cb30f67 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/service/bean/MediaServerLoad.java @@ -0,0 +1,50 @@ +package com.genersoft.iot.vmp.service.bean; + +public class MediaServerLoad { + + private String id; + private int push; + private int proxy; + private int gbReceive; + private int gbSend; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getPush() { + return push; + } + + public void setPush(int push) { + this.push = push; + } + + public int getProxy() { + return proxy; + } + + public void setProxy(int proxy) { + this.proxy = proxy; + } + + public int getGbReceive() { + return gbReceive; + } + + public void setGbReceive(int gbReceive) { + this.gbReceive = gbReceive; + } + + public int getGbSend() { + return gbSend; + } + + public void setGbSend(int gbSend) { + this.gbSend = gbSend; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java index 99ad3de..41b55dd 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; import com.genersoft.iot.vmp.storager.dao.DeviceMapper; import com.genersoft.iot.vmp.utils.DateUtil; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -162,4 +163,9 @@ } return addChannels.size() + updateChannels.size(); } + + @Override + public ResourceBaceInfo getOverview() { + return channelMapper.getOverview(); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java index 23a342b..16c9803 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java @@ -19,6 +19,7 @@ import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.BaseTree; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -620,4 +621,9 @@ } return result; } + + @Override + public ResourceBaceInfo getOverview() { + return deviceMapper.getOverview(); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java index 7c5b149..90a73b3 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java @@ -10,6 +10,8 @@ import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.exception.ControllerException; +import com.genersoft.iot.vmp.service.bean.MediaServerLoad; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -89,6 +91,9 @@ @Autowired private DynamicTask dynamicTask; + + @Autowired + private IRedisCatchStorage redisCatchStorage; /** * 鍒濆鍖� @@ -691,4 +696,15 @@ } return false; } + + @Override + public MediaServerLoad getLoad(MediaServerItem mediaServerItem) { + MediaServerLoad result = new MediaServerLoad(); + result.setId(mediaServerItem.getId()); + result.setPush(redisCatchStorage.getPushStreamCount(mediaServerItem.getId())); + result.setProxy(redisCatchStorage.getProxyStreamCount(mediaServerItem.getId())); + result.setGbReceive(redisCatchStorage.getGbReceiveCount(mediaServerItem.getId())); + result.setGbSend(redisCatchStorage.getGbSendCount(mediaServerItem.getId())); + return result; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index f54147e..6798b48 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -26,6 +26,7 @@ import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; @@ -454,4 +455,9 @@ } } + + @Override + public ResourceBaceInfo getOverview() { + return streamProxyMapper.getOverview(); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java index 00980f9..1bc8b2f 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java @@ -18,6 +18,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.dao.*; import com.genersoft.iot.vmp.utils.DateUtil; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; @@ -507,6 +508,12 @@ @Override public List<String> getAllAppAndStream() { + return streamPushMapper.getAllAppAndStream(); } + + @Override + public ResourceBaceInfo getOverview() { + return streamPushMapper.getOverview(userSetting.isUsePushingAsStatus()); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java index 77bd61c..e2f8fca 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java @@ -244,4 +244,16 @@ SystemAllInfo getSystemInfo(); + int getPushStreamCount(String id); + + int getProxyStreamCount(String id); + + int getGbReceiveCount(String id); + + int getGbSendCount(String id); + + void addDiskInfo(List<Map<String, Object>> diskInfo); + + List<SendRtpItem> queryAllSendRTPServer(); + } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java index 9b2a099..ff20cef 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java @@ -3,6 +3,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @@ -347,4 +348,8 @@ @Select("select * from device_channel where deviceId = #{deviceId}") List<DeviceChannel> queryAllChannels(String deviceId); + + + @Select("select count(1) as total, sum(status) as online from device_channel") + ResourceBaceInfo getOverview(); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java index 03dba38..b1210c6 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java @@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.storager.dao; import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @@ -251,4 +252,8 @@ "#{online}" + ")") void addCustomDevice(Device device); + + @Select("select count(1) as total, sum(online) as online from device") + ResourceBaceInfo getOverview(); + } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java index a9827ad..448a358 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java @@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.storager.dao; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @@ -75,4 +76,7 @@ @Select("SELECT st.*, pgs.gbId, pgs.name, pgs.longitude, pgs.latitude FROM stream_proxy st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.enable_remove_none_reader=true AND st.mediaServerId=#{mediaServerId} order by st.createTime desc") List<StreamProxyItem> selecAutoRemoveItemByMediaServerId(String mediaServerId); + + @Select("select count(1) as total, sum(status) as online from stream_proxy") + ResourceBaceInfo getOverview(); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java index 675a8bc..ec51f11 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java @@ -3,6 +3,7 @@ import com.genersoft.iot.vmp.gb28181.bean.GbStream; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import org.apache.ibatis.annotations.*; // import org.omg.PortableInterceptor.INACTIVE; import org.springframework.stereotype.Repository; @@ -171,4 +172,10 @@ @Select("SELECT CONCAT(app,stream) FROM gb_stream") List<String> getAllAppAndStream(); + + @Select(value = {" <script>" + + " <if test='pushIngAsOnline == true'> select count(1) as total, sum(pushIng) as online from stream_push </if>" + + " <if test='pushIngAsOnline == false'> select count(1) as total, sum(status) as online from stream_push </if>" + + " </script>"}) + ResourceBaceInfo getOverview(boolean pushIngAsOnline); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java index 6178a3b..b82ccf9 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.common.SystemAllInfo; -import com.genersoft.iot.vmp.common.SystemInfoDto; import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; @@ -18,6 +17,7 @@ import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; import com.genersoft.iot.vmp.utils.DateUtil; +import com.genersoft.iot.vmp.utils.SystemInfoUtils; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -89,8 +89,9 @@ */ @Override public boolean startPlay(StreamInfo stream) { - return RedisUtil.set(String.format("%S_%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), - stream.getStream(), stream.getDeviceID(), stream.getChannelId()), + + return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), + stream.getMediaServerId(), stream.getStream(), stream.getDeviceID(), stream.getChannelId()), stream); } @@ -104,8 +105,9 @@ if (streamInfo == null) { return false; } - return RedisUtil.del(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, + return RedisUtil.del(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), + streamInfo.getMediaServerId(), streamInfo.getStream(), streamInfo.getDeviceID(), streamInfo.getChannelId())); @@ -117,17 +119,17 @@ */ @Override public StreamInfo queryPlay(StreamInfo streamInfo) { - return (StreamInfo)RedisUtil.get(String.format("%S_%s_%s_%s_%s", + return (StreamInfo)RedisUtil.get(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), + streamInfo.getMediaServerId(), streamInfo.getStream(), streamInfo.getDeviceID(), streamInfo.getChannelId())); } @Override public StreamInfo queryPlayByStreamId(String streamId) { - System.out.println(String.format("%S_%s_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId)); - List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId)); + List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId)); if (playLeys == null || playLeys.size() == 0) { return null; } @@ -136,7 +138,7 @@ @Override public StreamInfo queryPlayByDevice(String deviceId, String channelId) { - List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX, + List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), deviceId, channelId)); @@ -149,8 +151,7 @@ @Override public Map<String, StreamInfo> queryPlayByDeviceId(String deviceId) { Map<String, StreamInfo> streamInfos = new HashMap<>(); -// List<Object> playLeys = RedisUtil.keys(String.format("%S_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, deviceId)); - List<Object> players = RedisUtil.scan(String.format("%S_%s_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),deviceId)); + List<Object> players = RedisUtil.scan(String.format("%S_%s_*_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),deviceId)); if (players.size() == 0) { return streamInfos; } @@ -165,21 +166,19 @@ @Override public boolean startPlayback(StreamInfo stream, String callId) { - System.out.println(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId)); - return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); + return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); } @Override public boolean startDownload(StreamInfo stream, String callId) { boolean result; if (stream.getProgress() == 1) { - result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); + result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, + userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); }else { - result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream, 60*60); + result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, + userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream, 60*60); } return result; } @@ -203,7 +202,7 @@ if (callId == null) { callId = "*"; } - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, userSetting.getServerId(), deviceId, channelId, @@ -239,7 +238,7 @@ if (callId == null) { callId = "*"; } - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetting.getServerId(), deviceId, channelId, @@ -272,7 +271,7 @@ if (callId == null) { callId = "*"; } - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetting.getServerId(), deviceId, channelId, @@ -304,7 +303,7 @@ if (callId == null) { callId = "*"; } - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetting.getServerId(), deviceId, channelId, @@ -369,9 +368,14 @@ @Override public void updateSendRTPSever(SendRtpItem sendRtpItem) { - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" - + sendRtpItem.getPlatformId() + "_" + sendRtpItem.getChannelId() + "_" - + sendRtpItem.getStreamId() + "_" + sendRtpItem.getCallId(); + + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_" + + sendRtpItem.getMediaServerId() + "_" + + sendRtpItem.getPlatformId() + "_" + + sendRtpItem.getChannelId() + "_" + + sendRtpItem.getStreamId() + "_" + + sendRtpItem.getCallId(); RedisUtil.set(key, sendRtpItem); } @@ -389,8 +393,12 @@ if (callId == null) { callId = "*"; } - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId - + "_" + channelId + "_" + streamId + "_" + callId; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*_" + + platformGbId + "_" + + channelId + "_" + + streamId + "_" + + callId; List<Object> scan = RedisUtil.scan(key); if (scan.size() > 0) { return (SendRtpItem)RedisUtil.get((String)scan.get(0)); @@ -407,8 +415,12 @@ String platformGbId = "*"; String callId = "*"; String streamId = "*"; - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId - + "_" + channelId + "_" + streamId + "_" + callId; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*_" + + platformGbId + "_" + + channelId + "_" + + streamId + "_" + + callId; List<Object> scan = RedisUtil.scan(key); List<SendRtpItem> result = new ArrayList<>(); for (Object o : scan) { @@ -425,8 +437,12 @@ String platformGbId = "*"; String callId = "*"; String channelId = "*"; - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId - + "_" + channelId + "_" + stream + "_" + callId; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*_" + + platformGbId + "_" + + channelId + "_" + + stream + "_" + + callId; List<Object> scan = RedisUtil.scan(key); List<SendRtpItem> result = new ArrayList<>(); for (Object o : scan) { @@ -440,7 +456,9 @@ if (platformGbId == null) { platformGbId = "*"; } - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId + "_*" + "_*" + "_*"; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*_" + + platformGbId + "_*" + "_*" + "_*"; List<Object> queryResult = RedisUtil.scan(key); List<SendRtpItem> result= new ArrayList<>(); @@ -465,8 +483,12 @@ if (callId == null) { callId = "*"; } - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId - + "_" + channelId + "_" + streamId + "_" + callId; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*_" + + platformGbId + "_" + + channelId + "_" + + streamId + "_" + + callId; List<Object> scan = RedisUtil.scan(key); if (scan.size() > 0) { for (Object keyStr : scan) { @@ -475,7 +497,20 @@ } } + @Override + public List<SendRtpItem> queryAllSendRTPServer() { + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*"; + List<Object> queryResult = RedisUtil.scan(key); + List<SendRtpItem> result= new ArrayList<>(); + for (Object o : queryResult) { + String keyItem = (String) o; + result.add((SendRtpItem) RedisUtil.get(keyItem)); + } + + return result; + } /** * 鏌ヨ鏌愪釜閫氶亾鏄惁瀛樺湪涓婄骇鐐规挱锛圧TP鎺ㄩ�侊級 @@ -483,7 +518,9 @@ */ @Override public boolean isChannelSendingRTP(String channelId) { - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + "*_" + channelId + "*_" + "*_"; + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*_*_" + + channelId + "*_" + "*_"; List<Object> RtpStreams = RedisUtil.scan(key); if (RtpStreams.size() > 0) { return true; @@ -503,7 +540,7 @@ } } - List<Object> playBackers = RedisUtil.scan(String.format("%S_%s_%s_*_*_*", VideoManagerConstants.PLAY_BLACK_PREFIX, + List<Object> playBackers = RedisUtil.scan(String.format("%S_%s_*_%s_*_*_*", VideoManagerConstants.PLAY_BLACK_PREFIX, userSetting.getServerId(), deviceId)); if (playBackers.size() > 0) { @@ -569,7 +606,7 @@ if (callId == null) { callId = "*"; } - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, userSetting.getServerId(), deviceId, channelId, @@ -740,14 +777,25 @@ } @Override + public void addDiskInfo(List<Map<String, Object>> diskInfo) { + + String key = VideoManagerConstants.SYSTEM_INFO_DISK_PREFIX + userSetting.getServerId(); + RedisUtil.set(key, diskInfo); + } + + @Override public SystemAllInfo getSystemInfo() { String cpuKey = VideoManagerConstants.SYSTEM_INFO_CPU_PREFIX + userSetting.getServerId(); String memKey = VideoManagerConstants.SYSTEM_INFO_MEM_PREFIX + userSetting.getServerId(); String netKey = VideoManagerConstants.SYSTEM_INFO_NET_PREFIX + userSetting.getServerId(); + String diskKey = VideoManagerConstants.SYSTEM_INFO_DISK_PREFIX + userSetting.getServerId(); SystemAllInfo systemAllInfo = new SystemAllInfo(); systemAllInfo.setCpu(RedisUtil.lGet(cpuKey, 0, -1)); systemAllInfo.setMem(RedisUtil.lGet(memKey, 0, -1)); systemAllInfo.setNet(RedisUtil.lGet(netKey, 0, -1)); + + systemAllInfo.setDisk(RedisUtil.get(diskKey)); + systemAllInfo.setNetTotal(SystemInfoUtils.getNetworkTotal()); return systemAllInfo; } @@ -786,4 +834,32 @@ jsonObject.put(key, key); RedisUtil.convertAndSend(key, jsonObject); } + + @Override + public int getPushStreamCount(String id) { + String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_PUSH_*_*_" + id; + return RedisUtil.scan(key).size(); + } + + @Override + public int getProxyStreamCount(String id) { + String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_PULL_*_*_" + id; + return RedisUtil.scan(key).size(); + } + + @Override + public int getGbReceiveCount(String id) { + String playKey = VideoManagerConstants.PLAYER_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*"; + String playBackKey = VideoManagerConstants.PLAY_BLACK_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*"; + String downloadKey = VideoManagerConstants.DOWNLOAD_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*"; + + return RedisUtil.scan(playKey).size() + RedisUtil.scan(playBackKey).size() + RedisUtil.scan(downloadKey).size(); + } + + @Override + public int getGbSendCount(String id) { + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + + userSetting.getServerId() + "_*_" + id + "_*"; + return RedisUtil.scan(key).size(); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java index ca637dd..ed0e0fd 100644 --- a/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java +++ b/src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java @@ -13,7 +13,7 @@ @Value("${git.branch:}") private String branch; - @Value("${git.commit.id:}") + @Value("${git.commit.id.abbrev:}") private String gitCommitId; @Value("${git.remote.origin.url:}") private String gitUrl; diff --git a/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java b/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java index 3af4853..d228787 100644 --- a/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java @@ -1,14 +1,14 @@ package com.genersoft.iot.vmp.utils; +import org.springframework.util.ObjectUtils; import oshi.SystemInfo; -import oshi.hardware.CentralProcessor; -import oshi.hardware.GlobalMemory; -import oshi.hardware.HardwareAbstractionLayer; -import oshi.hardware.NetworkIF; +import oshi.hardware.*; import oshi.software.os.OperatingSystem; import oshi.util.FormatUtil; +import java.io.File; import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -85,6 +85,19 @@ return map; } + /** + * 鑾峰彇甯﹀鎬诲�� + * @return + */ + public static long getNetworkTotal() { + SystemInfo si = new SystemInfo(); + HardwareAbstractionLayer hal = si.getHardware(); + List<NetworkIF> recvNetworkIFs = hal.getNetworkIFs(); + NetworkIF networkIF= recvNetworkIFs.get(recvNetworkIFs.size() - 1); + + return networkIF.getSpeed()/1048576L/8L; + } + public static double formatUnits(long value, long prefix) { return (double)value / (double)prefix; } @@ -100,4 +113,31 @@ int processCount = os.getProcessCount(); return processCount; } + + public static List<Map<String, Object>> getDiskInfo() { + List<Map<String, Object>> result = new ArrayList<>(); + + String osName = System.getProperty("os.name"); + List<String> pathArray = new ArrayList<>(); + if (osName.startsWith("Mac OS")) { + // 鑻规灉 + pathArray.add("/"); + } else if (osName.startsWith("Windows")) { + // windows + pathArray.add("C:"); + } else { + pathArray.add("/"); + pathArray.add("/home"); + } + for (String path : pathArray) { + Map<String, Object> infoMap = new HashMap<>(); + infoMap.put("path", path); + File partitionFile = new File(path); + // 鍗曚綅锛� GB + infoMap.put("use", (partitionFile.getTotalSpace() - partitionFile.getFreeSpace())/1024/1024/1024D); + infoMap.put("free", partitionFile.getFreeSpace()/1024/1024/1024D); + result.add(infoMap); + } + return result; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java new file mode 100644 index 0000000..b50d97a --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java @@ -0,0 +1,22 @@ +package com.genersoft.iot.vmp.vmanager.bean; + +public class ResourceBaceInfo { + private int total; + private int online; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public int getOnline() { + return online; + } + + public void setOnline(int online) { + this.online = online; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java new file mode 100644 index 0000000..b8d7009 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java @@ -0,0 +1,41 @@ +package com.genersoft.iot.vmp.vmanager.bean; + +public class ResourceInfo { + + private ResourceBaceInfo device; + private ResourceBaceInfo channel; + private ResourceBaceInfo push; + private ResourceBaceInfo proxy; + + public ResourceBaceInfo getDevice() { + return device; + } + + public void setDevice(ResourceBaceInfo device) { + this.device = device; + } + + public ResourceBaceInfo getChannel() { + return channel; + } + + public void setChannel(ResourceBaceInfo channel) { + this.channel = channel; + } + + public ResourceBaceInfo getPush() { + return push; + } + + public void setPush(ResourceBaceInfo push) { + this.push = push; + } + + public ResourceBaceInfo getProxy() { + return proxy; + } + + public void setProxy(ResourceBaceInfo proxy) { + this.proxy = proxy; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java index ef2d748..ed6f44d 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java @@ -12,10 +12,13 @@ import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.IHookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; -import com.genersoft.iot.vmp.service.IMediaServerService; +import com.genersoft.iot.vmp.service.*; +import com.genersoft.iot.vmp.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.utils.SpringBeanFactory; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceInfo; import gov.nist.javax.sip.SipStackImpl; import io.swagger.v3.oas.annotations.Operation; @@ -30,8 +33,7 @@ import javax.sip.ListeningPoint; import javax.sip.ObjectInUseException; import javax.sip.SipProvider; -import java.util.Iterator; -import java.util.List; +import java.util.*; @SuppressWarnings("rawtypes") @Tag(name = "鏈嶅姟鎺у埗") @@ -54,6 +56,20 @@ @Autowired private UserSetting userSetting; + + @Autowired + private IDeviceService deviceService; + + @Autowired + private IDeviceChannelService channelService; + + @Autowired + private IStreamPushService pushService; + + + @Autowired + private IStreamProxyService proxyService; + @Value("${server.port}") private int serverPort; @@ -213,6 +229,40 @@ @Operation(summary = "鑾峰彇绯荤粺淇℃伅") public SystemAllInfo getSystemInfo() { SystemAllInfo systemAllInfo = redisCatchStorage.getSystemInfo(); + return systemAllInfo; } + + @GetMapping(value = "/media_server/load") + @ResponseBody + @Operation(summary = "鑾峰彇璐熻浇淇℃伅") + public List<MediaServerLoad> getMediaLoad() { + List<MediaServerLoad> result = new ArrayList<>(); + List<MediaServerItem> allOnline = mediaServerService.getAllOnline(); + if (allOnline.size() == 0) { + return result; + }else { + for (MediaServerItem mediaServerItem : allOnline) { + result.add(mediaServerService.getLoad(mediaServerItem)); + } + } + return result; + } + + @GetMapping(value = "/resource/info") + @ResponseBody + @Operation(summary = "鑾峰彇璐熻浇淇℃伅") + public ResourceInfo getResourceInfo() { + ResourceInfo result = new ResourceInfo(); + ResourceBaceInfo deviceInfo = deviceService.getOverview(); + result.setDevice(deviceInfo); + ResourceBaceInfo channelInfo = channelService.getOverview(); + result.setChannel(channelInfo); + ResourceBaceInfo pushInfo = pushService.getOverview(); + result.setPush(pushInfo); + ResourceBaceInfo proxyInfo = proxyService.getOverview(); + result.setProxy(proxyInfo); + + return result; + } } diff --git a/web_src/src/components/console.vue b/web_src/src/components/console.vue index f663aaa..352989f 100644 --- a/web_src/src/components/console.vue +++ b/web_src/src/components/console.vue @@ -2,6 +2,10 @@ <div id="app" style="width: 100%"> <div class="page-header"> <div class="page-title">鎺у埗鍙�</div> + <div class="page-header-btn"> + <el-button icon="el-icon-info" size="mini" style="margin-right: 1rem;" type="primary" @click="showInfo">骞冲彴淇℃伅 + </el-button> + </div> </div> <el-row style="width: 100%"> <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > @@ -14,7 +18,7 @@ <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > <div class="control-cell" id="WorkThreadsLoad" > <div style="width:100%; height:100%; "> - <consoleMem ref="consoleMem"></consoleMem> + <consoleResource ref="consoleResource"></consoleResource> </div> </div> </el-col> @@ -28,26 +32,25 @@ <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > <div class="control-cell" id="WorkThreadsLoad" > <div style="width:100%; height:100%; "> - <consoleCPU></consoleCPU> + + <consoleMem ref="consoleMem"></consoleMem> </div> </div> </el-col> <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > <div class="control-cell" id="WorkThreadsLoad" > <div style="width:100%; height:100%; "> - <consoleCPU></consoleCPU> + <consoleNodeLoad ref="consoleNodeLoad"></consoleNodeLoad> </div> </div> </el-col> <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > <div class="control-cell" id="WorkThreadsLoad" > <div style="width:100%; height:100%; "> - <consoleCPU></consoleCPU> + <consoleDisk ref="consoleDisk"></consoleDisk> </div> </div> </el-col> - - </el-row> </div> </template> @@ -57,6 +60,9 @@ import consoleCPU from './console/ConsoleCPU.vue' import consoleMem from './console/ConsoleMEM.vue' import consoleNet from './console/ConsoleNet.vue' +import consoleNodeLoad from './console/ConsoleNodeLoad.vue' +import consoleDisk from './console/ConsoleDisk.vue' +import consoleResource from './console/ConsoleResource.vue' import echarts from 'echarts'; @@ -67,7 +73,10 @@ uiHeader, consoleCPU, consoleMem, - consoleNet + consoleNet, + consoleNodeLoad, + consoleDisk, + consoleResource, }, data() { return { @@ -76,7 +85,10 @@ }, created() { this.getSystemInfo(); + this.getLoad(); + this.getResourceInfo(); this.loopForSystemInfo(); + }, destroyed() { }, @@ -87,8 +99,10 @@ } this.timer = setTimeout(()=>{ this.getSystemInfo(); + this.getLoad(); this.timer = null; this.loopForSystemInfo() + this.getResourceInfo() }, 2000) }, getSystemInfo: function (){ @@ -99,11 +113,38 @@ if (res.data.code === 0) { this.$refs.consoleCPU.setData(res.data.data.cpu) this.$refs.consoleMem.setData(res.data.data.mem) - this.$refs.consoleNet.setData(res.data.data.net) + this.$refs.consoleNet.setData(res.data.data.net, res.data.data.netTotal) + this.$refs.consoleDisk.setData(res.data.data.disk) } }).catch( (error)=> { }); + }, + getLoad: function (){ + this.$axios({ + method: 'get', + url: `/api/server/media_server/load`, + }).then( (res)=> { + if (res.data.code === 0) { + this.$refs.consoleNodeLoad.setData(res.data.data) + } + }).catch( (error)=> { + }); + }, + getResourceInfo: function (){ + this.$axios({ + method: 'get', + url: `/api/server/resource/info`, + }).then( (res)=> { + if (res.data.code === 0) { + this.$refs.consoleResource.setData(res.data.data) + } + }).catch( (error)=> { + }); + }, + showInfo: function (){ + } + } }; </script> diff --git a/web_src/src/components/console/ConsoleCPU.vue b/web_src/src/components/console/ConsoleCPU.vue index 0b4ecb2..5aed07e 100644 --- a/web_src/src/components/console/ConsoleCPU.vue +++ b/web_src/src/components/console/ConsoleCPU.vue @@ -1,6 +1,6 @@ <template> <div id="consoleCPU" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> - <ve-line :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> + <ve-line ref="consoleCPU" :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> </div> </template> @@ -59,7 +59,8 @@ trigger: 'axis', formatter: (data)=>{ console.log(data) - return moment(data[0].data[0]).format("HH:mm:ss") + "</br> 浣跨敤锛�" + (data[0].data[1]*100).toFixed(2) + "%"; + return moment(data[0].data[0]).format("HH:mm:ss") + "</br> " + + data[0].marker + "浣跨敤锛�" + (data[0].data[1]*100).toFixed(2) + "%"; } }, series: { @@ -85,13 +86,16 @@ } }; }, + created() { + + + }, mounted() { - // setInterval(()=>{ - // // console.log(111111) - // for (let i = 0; i < this.chartData.rows.length; i++) { - // this.chartData.rows[i].閿�鍞 += 1000; - // } - // },1000) + this.$nextTick(_ => { + setTimeout(()=>{ + this.$refs.consoleCPU.echarts.resize() + }, 100) + }) }, destroyed() { }, diff --git a/web_src/src/components/console/ConsoleDisk.vue b/web_src/src/components/console/ConsoleDisk.vue new file mode 100644 index 0000000..ed69cc3 --- /dev/null +++ b/web_src/src/components/console/ConsoleDisk.vue @@ -0,0 +1,81 @@ +<template> + <div id="ConsoleNet" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> + <ve-bar ref="ConsoleNet" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-bar> + </div> +</template> + +<script> + + +import moment from "moment/moment"; + +export default { + name: 'ConsoleNet', + data() { + return { + chartData: { + columns: ['path','free','use'], + rows: [] + }, + chartSettings: { + stack: { + 'xxx': ['free', 'use'] + }, + labelMap: { + 'free': '鍓╀綑', + 'use': '宸蹭娇鐢�' + }, + }, + extend: { + title: { + show: true, + text: "纾佺洏", + left: "center", + top: 20, + }, + grid: { + show: true, + right: "30px", + containLabel: true, + }, + series: { + barWidth: 30 + }, + legend: { + left: "center", + bottom: "15px", + }, + tooltip: { + trigger: 'axis', + formatter: (data)=>{ + console.log(data) + let relVal = ""; + for (let i = 0; i < data.length; i++) { + relVal += data[i].marker + data[i].seriesName + ":" + data[i].value.toFixed(2) + "GB" + if (i < data.length - 1) { + relVal += "</br>"; + } + } + return relVal; + } + }, + + } + }; + }, + mounted() { + this.$nextTick(_ => { + setTimeout(()=>{ + this.$refs.ConsoleNet.echarts.resize() + }, 100) + }) + }, + destroyed() { + }, + methods: { + setData: function(data) { + this.chartData.rows = data; + } + } +}; +</script> diff --git a/web_src/src/components/console/ConsoleMEM.vue b/web_src/src/components/console/ConsoleMEM.vue index beaa38c..566b469 100644 --- a/web_src/src/components/console/ConsoleMEM.vue +++ b/web_src/src/components/console/ConsoleMEM.vue @@ -1,6 +1,6 @@ <template> <div id="ConsoleMEM" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> - <ve-line :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> + <ve-line ref="ConsoleMEM" :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> </div> </template> @@ -59,7 +59,7 @@ trigger: 'axis', formatter: (data)=>{ console.log(data) - return moment(data[0].data[0]).format("HH:mm:ss") + "</br> 浣跨敤锛�" + (data[0].data[1]*100).toFixed(2) + "%"; + return moment(data[0].data[0]).format("HH:mm:ss") + "</br>"+ data[0].marker +" 浣跨敤锛�" + (data[0].data[1]*100).toFixed(2) + "%"; } }, series: { @@ -86,12 +86,11 @@ }; }, mounted() { - // setInterval(()=>{ - // // console.log(111111) - // for (let i = 0; i < this.chartData.rows.length; i++) { - // this.chartData.rows[i].閿�鍞 += 1000; - // } - // },1000) + this.$nextTick(_ => { + setTimeout(()=>{ + this.$refs.ConsoleMEM.echarts.resize() + }, 100) + }) }, destroyed() { }, @@ -99,7 +98,6 @@ setData: function(data) { this.chartData .rows = data; } - } }; </script> diff --git a/web_src/src/components/console/ConsoleMediaServer.vue b/web_src/src/components/console/ConsoleMediaServer.vue index 810ee39..a842b50 100644 --- a/web_src/src/components/console/ConsoleMediaServer.vue +++ b/web_src/src/components/console/ConsoleMediaServer.vue @@ -1,6 +1,6 @@ <template> <div id="ConsoleMediaServer" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> - <ve-histogram :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-histogram> + <ve-histogram ref="ConsoleMEM" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-histogram> </div> </template> @@ -66,12 +66,11 @@ }; }, mounted() { - // setInterval(()=>{ - // // console.log(111111) - // for (let i = 0; i < this.chartData.rows.length; i++) { - // this.chartData.rows[i].閿�鍞 += 1000; - // } - // },1000) + this.$nextTick(_ => { + setTimeout(()=>{ + this.$refs.ConsoleMEM.echarts.resize() + }, 100) + }) }, destroyed() { }, diff --git a/web_src/src/components/console/ConsoleNet.vue b/web_src/src/components/console/ConsoleNet.vue index a6d7111..22d4f34 100644 --- a/web_src/src/components/console/ConsoleNet.vue +++ b/web_src/src/components/console/ConsoleNet.vue @@ -1,6 +1,6 @@ <template> <div id="ConsoleNet" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> - <ve-line :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-line> + <ve-line ref="ConsoleNet" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-line> </div> </template> @@ -14,7 +14,7 @@ data() { return { chartData: { - columns: ['time', 'in', 'out'], + columns: ['time','out','in'], rows: [] }, chartSettings: { @@ -48,13 +48,18 @@ showMaxLabel: true, }, }, + yAxis: { + type: 'value', + min: 0, + max: 1000, + splitNumber: 6, + position: "left", + silent: true, + }, tooltip: { trigger: 'axis', formatter: (data)=>{ - console.log(parseFloat(data[0].data[1]).toFixed(2)) - console.log(parseFloat(data[1].data[1]).toFixed(2)) - console.log("############") - return "涓嬭浇锛�" + parseFloat(data[0].data[1]).toFixed(2) + "Mbps" + "</br> 涓婁紶锛�" + parseFloat(data[1].data[1]).toFixed(2) + "Mbps"; + return data[1].marker + "涓嬭浇锛�" + parseFloat(data[1].data[1]).toFixed(2) + "Mbps" + "</br> "+ data[0].marker +" 涓婁紶锛�" + parseFloat(data[0].data[1]).toFixed(2) + "Mbps"; } }, legend: { @@ -65,19 +70,18 @@ }; }, mounted() { - // setInterval(()=>{ - // // console.log(111111) - // for (let i = 0; i < this.chartData.rows.length; i++) { - // this.chartData.rows[i].閿�鍞 += 1000; - // } - // },1000) + this.$nextTick(_ => { + setTimeout(()=>{ + this.$refs.ConsoleNet.echarts.resize() + }, 100) + }) }, destroyed() { }, methods: { - setData: function(data) { - console.log(data) + setData: function(data, total) { this.chartData .rows = data; + this.extend.yAxis.max= total; } } diff --git a/web_src/src/components/console/ConsoleNodeLoad.vue b/web_src/src/components/console/ConsoleNodeLoad.vue new file mode 100644 index 0000000..0596c41 --- /dev/null +++ b/web_src/src/components/console/ConsoleNodeLoad.vue @@ -0,0 +1,63 @@ +<template> + <div id="ConsoleNodeLoad" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> + <ve-histogram ref="consoleNodeLoad" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" :legend-visible="true"></ve-histogram> + </div> +</template> + +<script> + + +import moment from "moment/moment"; + +export default { + name: 'ConsoleNodeLoad', + data() { + return { + chartData: { + columns: ['id', 'push', 'proxy', 'gbReceive', 'gbSend'], + rows: [] + }, + chartSettings: { + labelMap: { + 'push': '鐩存挱鎺ㄦ祦', + 'proxy': '鎷夋祦浠g悊', + 'gbReceive': '鍥芥爣鏀舵祦', + 'gbSend': '鍥芥爣鎺ㄦ祦', + }, + }, + extend: { + title: { + show: true, + text: "鑺傜偣璐熻浇", + left: "center", + top: 20, + + }, + legend: { + left: "center", + bottom: "15px", + }, + label: { + show: true, + position: "top" + } + } + }; + }, + mounted() { + this.$nextTick(_ => { + setTimeout(()=>{ + this.$refs.consoleNodeLoad.echarts.resize() + }, 100) + }) + }, + destroyed() { + }, + methods: { + setData: function(data) { + this.chartData .rows = data; + } + + } +}; +</script> diff --git a/web_src/src/components/console/ConsoleResource.vue b/web_src/src/components/console/ConsoleResource.vue new file mode 100644 index 0000000..c76b270 --- /dev/null +++ b/web_src/src/components/console/ConsoleResource.vue @@ -0,0 +1,86 @@ +<template > + <div id="consoleResource" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> + <div style="width: 50%;height: 50%; float:left; "> + <el-progress :width="100" :stroke-width="8" type="circle" :percentage="deviceInfo.online/deviceInfo.total*100" style="margin-top: 20px; font-size: 18px"></el-progress> + <div class="resourceInfo"> + 璁惧鎬绘暟:{{deviceInfo.total}}<br/> + 鍦ㄧ嚎鏁�:{{deviceInfo.online}} + </div> + </div> + <div style="width: 50%;height: 50%; float:left; "> + <el-progress :width="100" :stroke-width="10" type="circle" :percentage="channelInfo.online/channelInfo.total*100" style="margin-top: 20px"></el-progress> + <div class="resourceInfo"> + 閫氶亾鎬绘暟:{{channelInfo.total}}<br/> + 鍦ㄧ嚎鏁�:{{channelInfo.online}} + </div> + </div> + <div style="width: 50%;height: 50%; float:left; "> + <el-progress :width="100" :stroke-width="10" type="circle" :percentage="pushInfo.online/pushInfo.total*100" style="margin-top: 20px"></el-progress> + <div class="resourceInfo"> + 鎺ㄦ祦鎬绘暟:{{pushInfo.total}}<br/> + 鍦ㄧ嚎鏁�:{{pushInfo.online}} + </div> + </div> + <div style="width: 50%;height: 50%; float:left; "> + <el-progress :width="100" :stroke-width="10" type="circle" :percentage="proxyInfo.online/proxyInfo.total*100" style="margin-top: 20px"></el-progress> + <div class="resourceInfo"> + 鎷夋祦浠g悊鎬绘暟:{{proxyInfo.total}}<br/> + 鍦ㄧ嚎鏁�:{{proxyInfo.online}} + </div> + </div> + </div> +</template> + +<script> + +export default { + name: 'consoleResource', + data() { + return { + deviceInfo: { + total: 0, + online: 0 + }, + channelInfo: { + total: 0, + online: 0 + }, + pushInfo: { + total: 0, + online: 0 + }, + proxyInfo: { + total: 0, + online: 0 + }, + }; + }, + created() { + + + }, + mounted() { + }, + destroyed() { + }, + methods: { + setData: function(data) { + this.deviceInfo = data.device; + this.channelInfo = data.channel; + this.pushInfo = data.push; + this.proxyInfo = data.proxy; + } + } +}; +</script> + +<style> +.resourceInfo{ + width: 100%; + text-align: center; + font-size: 12px +} +.el-progress__text { + font-size: 18px !important; +} +</style> diff --git a/web_src/src/layout/UiHeader.vue b/web_src/src/layout/UiHeader.vue index 42d617e..fa9be3e 100644 --- a/web_src/src/layout/UiHeader.vue +++ b/web_src/src/layout/UiHeader.vue @@ -4,7 +4,7 @@ <el-menu router :default-active="activeIndex" menu-trigger="click" background-color="#001529" text-color="#fff" active-text-color="#1890ff" mode="horizontal"> - <el-menu-item index="/control">鎺у埗鍙�</el-menu-item> + <el-menu-item index="/console">鎺у埗鍙�</el-menu-item> <el-menu-item index="/live">鍒嗗睆鐩戞帶</el-menu-item> <el-menu-item index="/deviceList">鍥芥爣璁惧</el-menu-item> <el-menu-item index="/map">鐢靛瓙鍦板浘</el-menu-item> diff --git a/web_src/src/layout/index.vue b/web_src/src/layout/index.vue index dccf662..d6afcf6 100644 --- a/web_src/src/layout/index.vue +++ b/web_src/src/layout/index.vue @@ -24,6 +24,9 @@ } </script> <style> +body{ + font-family: sans-serif; +} /*瀹氫箟鏍囬鏍�*/ .page-header { background-color: #FFFFFF; -- Gitblit v1.8.0