Commit ca891f367c5b23ea841695c50ddbb7f08ae23292
1 parent
3ffe2050
首页改造完成,待添加系统信息
Showing
37 changed files
with
833 additions
and
119 deletions
src/main/java/com/genersoft/iot/vmp/common/SystemAllInfo.java
| @@ -8,6 +8,10 @@ public class SystemAllInfo { | @@ -8,6 +8,10 @@ public class SystemAllInfo { | ||
| 8 | private List<Object> mem; | 8 | private List<Object> mem; |
| 9 | private List<Object> net; | 9 | private List<Object> net; |
| 10 | 10 | ||
| 11 | + private long netTotal; | ||
| 12 | + | ||
| 13 | + private Object disk; | ||
| 14 | + | ||
| 11 | public List<Object> getCpu() { | 15 | public List<Object> getCpu() { |
| 12 | return cpu; | 16 | return cpu; |
| 13 | } | 17 | } |
| @@ -31,4 +35,20 @@ public class SystemAllInfo { | @@ -31,4 +35,20 @@ public class SystemAllInfo { | ||
| 31 | public void setNet(List<Object> net) { | 35 | public void setNet(List<Object> net) { |
| 32 | this.net = net; | 36 | this.net = net; |
| 33 | } | 37 | } |
| 38 | + | ||
| 39 | + public Object getDisk() { | ||
| 40 | + return disk; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public void setDisk(Object disk) { | ||
| 44 | + this.disk = disk; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + public long getNetTotal() { | ||
| 48 | + return netTotal; | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + public void setNetTotal(long netTotal) { | ||
| 52 | + this.netTotal = netTotal; | ||
| 53 | + } | ||
| 34 | } | 54 | } |
src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java deleted
100644 → 0
| 1 | -package com.genersoft.iot.vmp.common; | ||
| 2 | - | ||
| 3 | -public class SystemInfoDto<T> { | ||
| 4 | - private String time; | ||
| 5 | - private T data; | ||
| 6 | - | ||
| 7 | - public String getTime() { | ||
| 8 | - return time; | ||
| 9 | - } | ||
| 10 | - | ||
| 11 | - public void setTime(String time) { | ||
| 12 | - this.time = time; | ||
| 13 | - } | ||
| 14 | - | ||
| 15 | - public T getData() { | ||
| 16 | - return data; | ||
| 17 | - } | ||
| 18 | - | ||
| 19 | - public void setData(T data) { | ||
| 20 | - this.data = data; | ||
| 21 | - } | ||
| 22 | -} |
src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
| @@ -27,11 +27,9 @@ public class VideoManagerConstants { | @@ -27,11 +27,9 @@ public class VideoManagerConstants { | ||
| 27 | 27 | ||
| 28 | public static final String KEEPLIVEKEY_PREFIX = "VMP_KEEPALIVE_"; | 28 | public static final String KEEPLIVEKEY_PREFIX = "VMP_KEEPALIVE_"; |
| 29 | 29 | ||
| 30 | - // 此处多了一个_,暂不修改 | 30 | + // TODO 此处多了一个_,暂不修改 |
| 31 | public static final String PLAYER_PREFIX = "VMP_PLAYER_"; | 31 | public static final String PLAYER_PREFIX = "VMP_PLAYER_"; |
| 32 | public static final String PLAY_BLACK_PREFIX = "VMP_PLAYBACK_"; | 32 | public static final String PLAY_BLACK_PREFIX = "VMP_PLAYBACK_"; |
| 33 | - public static final String PLAY_INFO_PREFIX = "VMP_PLAY_INFO_"; | ||
| 34 | - | ||
| 35 | public static final String DOWNLOAD_PREFIX = "VMP_DOWNLOAD_"; | 33 | public static final String DOWNLOAD_PREFIX = "VMP_DOWNLOAD_"; |
| 36 | 34 | ||
| 37 | public static final String PLATFORM_KEEPALIVE_PREFIX = "VMP_PLATFORM_KEEPALIVE_"; | 35 | public static final String PLATFORM_KEEPALIVE_PREFIX = "VMP_PLATFORM_KEEPALIVE_"; |
| @@ -70,6 +68,8 @@ public class VideoManagerConstants { | @@ -70,6 +68,8 @@ public class VideoManagerConstants { | ||
| 70 | 68 | ||
| 71 | public static final String SYSTEM_INFO_NET_PREFIX = "VMP_SYSTEM_INFO_NET_"; | 69 | public static final String SYSTEM_INFO_NET_PREFIX = "VMP_SYSTEM_INFO_NET_"; |
| 72 | 70 | ||
| 71 | + public static final String SYSTEM_INFO_DISK_PREFIX = "VMP_SYSTEM_INFO_DISK_"; | ||
| 72 | + | ||
| 73 | 73 | ||
| 74 | 74 | ||
| 75 | 75 |
src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java
| @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; | @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; | ||
| 9 | import org.springframework.scheduling.annotation.Scheduled; | 9 | import org.springframework.scheduling.annotation.Scheduled; |
| 10 | import org.springframework.stereotype.Component; | 10 | import org.springframework.stereotype.Component; |
| 11 | 11 | ||
| 12 | +import java.util.List; | ||
| 12 | import java.util.Map; | 13 | import java.util.Map; |
| 13 | 14 | ||
| 14 | /** | 15 | /** |
| @@ -31,6 +32,8 @@ public class SystemInfoTimerTask { | @@ -31,6 +32,8 @@ public class SystemInfoTimerTask { | ||
| 31 | redisCatchStorage.addMemInfo(memInfo); | 32 | redisCatchStorage.addMemInfo(memInfo); |
| 32 | Map<String, Double> networkInterfaces = SystemInfoUtils.getNetworkInterfaces(); | 33 | Map<String, Double> networkInterfaces = SystemInfoUtils.getNetworkInterfaces(); |
| 33 | redisCatchStorage.addNetInfo(networkInterfaces); | 34 | redisCatchStorage.addNetInfo(networkInterfaces); |
| 35 | + List<Map<String, Object>> diskInfo =SystemInfoUtils.getDiskInfo(); | ||
| 36 | + redisCatchStorage.addDiskInfo(diskInfo); | ||
| 34 | } catch (InterruptedException e) { | 37 | } catch (InterruptedException e) { |
| 35 | logger.error("[获取系统信息失败] {}", e.getMessage()); | 38 | logger.error("[获取系统信息失败] {}", e.getMessage()); |
| 36 | } | 39 | } |
src/main/java/com/genersoft/iot/vmp/gb28181/task/SipDeviceRunner.java renamed to src/main/java/com/genersoft/iot/vmp/gb28181/task/SipRunner.java
| 1 | package com.genersoft.iot.vmp.gb28181.task; | 1 | package com.genersoft.iot.vmp.gb28181.task; |
| 2 | 2 | ||
| 3 | +import com.alibaba.fastjson.JSONObject; | ||
| 3 | import com.genersoft.iot.vmp.conf.UserSetting; | 4 | import com.genersoft.iot.vmp.conf.UserSetting; |
| 4 | import com.genersoft.iot.vmp.gb28181.bean.Device; | 5 | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| 6 | +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; | ||
| 7 | +import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; | ||
| 8 | +import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; | ||
| 9 | +import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; | ||
| 10 | +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | ||
| 5 | import com.genersoft.iot.vmp.service.IDeviceService; | 11 | import com.genersoft.iot.vmp.service.IDeviceService; |
| 12 | +import com.genersoft.iot.vmp.service.IMediaServerService; | ||
| 13 | +import com.genersoft.iot.vmp.service.IPlatformService; | ||
| 6 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 14 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| 7 | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; | 15 | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; |
| 8 | import org.springframework.beans.factory.annotation.Autowired; | 16 | import org.springframework.beans.factory.annotation.Autowired; |
| @@ -10,8 +18,9 @@ import org.springframework.boot.CommandLineRunner; | @@ -10,8 +18,9 @@ import org.springframework.boot.CommandLineRunner; | ||
| 10 | import org.springframework.core.annotation.Order; | 18 | import org.springframework.core.annotation.Order; |
| 11 | import org.springframework.stereotype.Component; | 19 | import org.springframework.stereotype.Component; |
| 12 | 20 | ||
| 13 | -import java.util.ArrayList; | 21 | +import java.util.HashMap; |
| 14 | import java.util.List; | 22 | import java.util.List; |
| 23 | +import java.util.Map; | ||
| 15 | 24 | ||
| 16 | 25 | ||
| 17 | /** | 26 | /** |
| @@ -20,7 +29,7 @@ import java.util.List; | @@ -20,7 +29,7 @@ import java.util.List; | ||
| 20 | */ | 29 | */ |
| 21 | @Component | 30 | @Component |
| 22 | @Order(value=4) | 31 | @Order(value=4) |
| 23 | -public class SipDeviceRunner implements CommandLineRunner { | 32 | +public class SipRunner implements CommandLineRunner { |
| 24 | 33 | ||
| 25 | @Autowired | 34 | @Autowired |
| 26 | private IVideoManagerStorage storager; | 35 | private IVideoManagerStorage storager; |
| @@ -34,6 +43,18 @@ public class SipDeviceRunner implements CommandLineRunner { | @@ -34,6 +43,18 @@ public class SipDeviceRunner implements CommandLineRunner { | ||
| 34 | @Autowired | 43 | @Autowired |
| 35 | private IDeviceService deviceService; | 44 | private IDeviceService deviceService; |
| 36 | 45 | ||
| 46 | + @Autowired | ||
| 47 | + private ZLMRESTfulUtils zlmresTfulUtils; | ||
| 48 | + | ||
| 49 | + @Autowired | ||
| 50 | + private IMediaServerService mediaServerService; | ||
| 51 | + | ||
| 52 | + @Autowired | ||
| 53 | + private IPlatformService platformService; | ||
| 54 | + | ||
| 55 | + @Autowired | ||
| 56 | + private ISIPCommanderForPlatform commanderForPlatform; | ||
| 57 | + | ||
| 37 | @Override | 58 | @Override |
| 38 | public void run(String... args) throws Exception { | 59 | public void run(String... args) throws Exception { |
| 39 | List<Device> deviceList = deviceService.getAllOnlineDevice(); | 60 | List<Device> deviceList = deviceService.getAllOnlineDevice(); |
| @@ -47,5 +68,28 @@ public class SipDeviceRunner implements CommandLineRunner { | @@ -47,5 +68,28 @@ public class SipDeviceRunner implements CommandLineRunner { | ||
| 47 | } | 68 | } |
| 48 | // 重置cseq计数 | 69 | // 重置cseq计数 |
| 49 | redisCatchStorage.resetAllCSEQ(); | 70 | redisCatchStorage.resetAllCSEQ(); |
| 71 | + // 清理redis | ||
| 72 | + // 查找国标推流 | ||
| 73 | + List<SendRtpItem> sendRtpItems = redisCatchStorage.queryAllSendRTPServer(); | ||
| 74 | + if (sendRtpItems.size() > 0) { | ||
| 75 | + for (SendRtpItem sendRtpItem : sendRtpItems) { | ||
| 76 | + MediaServerItem mediaServerItem = mediaServerService.getOne(sendRtpItem.getMediaServerId()); | ||
| 77 | + redisCatchStorage.deleteSendRTPServer(sendRtpItem.getPlatformId(),sendRtpItem.getChannelId(), sendRtpItem.getCallId(),sendRtpItem.getStreamId()); | ||
| 78 | + if (mediaServerItem != null) { | ||
| 79 | + Map<String, Object> param = new HashMap<>(); | ||
| 80 | + param.put("vhost","__defaultVhost__"); | ||
| 81 | + param.put("app",sendRtpItem.getApp()); | ||
| 82 | + param.put("stream",sendRtpItem.getStreamId()); | ||
| 83 | + param.put("ssrc",sendRtpItem.getSsrc()); | ||
| 84 | + JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(mediaServerItem, param); | ||
| 85 | + if (jsonObject != null && jsonObject.getInteger("code") == 0) { | ||
| 86 | + ParentPlatform platform = platformService.queryPlatformByServerGBId(sendRtpItem.getPlatformId()); | ||
| 87 | + if (platform != null) { | ||
| 88 | + commanderForPlatform.streamByeCmd(platform, sendRtpItem.getCallId()); | ||
| 89 | + } | ||
| 90 | + } | ||
| 91 | + } | ||
| 92 | + } | ||
| 93 | + } | ||
| 50 | } | 94 | } |
| 51 | } | 95 | } |
src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java
| @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.service; | @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.service; | ||
| 2 | 2 | ||
| 3 | import com.genersoft.iot.vmp.gb28181.bean.Device; | 3 | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| 4 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; | 4 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
| 5 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 5 | 6 | ||
| 6 | import java.util.List; | 7 | import java.util.List; |
| 7 | 8 | ||
| @@ -32,4 +33,9 @@ public interface IDeviceChannelService { | @@ -32,4 +33,9 @@ public interface IDeviceChannelService { | ||
| 32 | */ | 33 | */ |
| 33 | int updateChannels(String deviceId, List<DeviceChannel> channels); | 34 | int updateChannels(String deviceId, List<DeviceChannel> channels); |
| 34 | 35 | ||
| 36 | + /** | ||
| 37 | + * 获取统计信息 | ||
| 38 | + * @return | ||
| 39 | + */ | ||
| 40 | + ResourceBaceInfo getOverview(); | ||
| 35 | } | 41 | } |
src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java
| @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; | @@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; | ||
| 4 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; | 4 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
| 5 | import com.genersoft.iot.vmp.gb28181.bean.SyncStatus; | 5 | import com.genersoft.iot.vmp.gb28181.bean.SyncStatus; |
| 6 | import com.genersoft.iot.vmp.vmanager.bean.BaseTree; | 6 | import com.genersoft.iot.vmp.vmanager.bean.BaseTree; |
| 7 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 7 | 8 | ||
| 8 | import java.util.List; | 9 | import java.util.List; |
| 9 | 10 | ||
| @@ -155,4 +156,11 @@ public interface IDeviceService { | @@ -155,4 +156,11 @@ public interface IDeviceService { | ||
| 155 | * @return | 156 | * @return |
| 156 | */ | 157 | */ |
| 157 | boolean delete(String deviceId); | 158 | boolean delete(String deviceId); |
| 159 | + | ||
| 160 | + /** | ||
| 161 | + * 获取统计信息 | ||
| 162 | + * @return | ||
| 163 | + */ | ||
| 164 | + ResourceBaceInfo getOverview(); | ||
| 165 | + | ||
| 158 | } | 166 | } |
src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
| @@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSONObject; | @@ -4,10 +4,12 @@ import com.alibaba.fastjson.JSONObject; | ||
| 4 | import com.genersoft.iot.vmp.gb28181.bean.Device; | 4 | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| 5 | import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; | 5 | import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig; |
| 6 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 6 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 7 | +import com.genersoft.iot.vmp.service.bean.MediaServerLoad; | ||
| 7 | import com.genersoft.iot.vmp.service.bean.SSRCInfo; | 8 | import com.genersoft.iot.vmp.service.bean.SSRCInfo; |
| 8 | import com.genersoft.iot.vmp.vmanager.bean.WVPResult; | 9 | import com.genersoft.iot.vmp.vmanager.bean.WVPResult; |
| 9 | 10 | ||
| 10 | import java.util.List; | 11 | import java.util.List; |
| 12 | +import java.util.Map; | ||
| 11 | 13 | ||
| 12 | /** | 14 | /** |
| 13 | * 媒体服务节点 | 15 | * 媒体服务节点 |
| @@ -87,4 +89,10 @@ public interface IMediaServerService { | @@ -87,4 +89,10 @@ public interface IMediaServerService { | ||
| 87 | void updateMediaServerKeepalive(String mediaServerId, JSONObject data); | 89 | void updateMediaServerKeepalive(String mediaServerId, JSONObject data); |
| 88 | 90 | ||
| 89 | boolean checkRtpServer(MediaServerItem mediaServerItem, String rtp, String stream); | 91 | boolean checkRtpServer(MediaServerItem mediaServerItem, String rtp, String stream); |
| 92 | + | ||
| 93 | + /** | ||
| 94 | + * 获取负载信息 | ||
| 95 | + * @return | ||
| 96 | + */ | ||
| 97 | + MediaServerLoad getLoad(MediaServerItem mediaServerItem); | ||
| 90 | } | 98 | } |
src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java
| @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; | @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; | ||
| 4 | import com.genersoft.iot.vmp.common.StreamInfo; | 4 | import com.genersoft.iot.vmp.common.StreamInfo; |
| 5 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 5 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 6 | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; | 6 | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; |
| 7 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 7 | import com.github.pagehelper.PageInfo; | 8 | import com.github.pagehelper.PageInfo; |
| 8 | 9 | ||
| 9 | public interface IStreamProxyService { | 10 | public interface IStreamProxyService { |
| @@ -102,4 +103,11 @@ public interface IStreamProxyService { | @@ -102,4 +103,11 @@ public interface IStreamProxyService { | ||
| 102 | * 更新代理流 | 103 | * 更新代理流 |
| 103 | */ | 104 | */ |
| 104 | boolean updateStreamProxy(StreamProxyItem streamProxyItem); | 105 | boolean updateStreamProxy(StreamProxyItem streamProxyItem); |
| 106 | + | ||
| 107 | + /** | ||
| 108 | + * 获取统计信息 | ||
| 109 | + * @return | ||
| 110 | + */ | ||
| 111 | + ResourceBaceInfo getOverview(); | ||
| 112 | + | ||
| 105 | } | 113 | } |
src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
| @@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | @@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; | ||
| 6 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 6 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 7 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; | 7 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; |
| 8 | import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; | 8 | import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; |
| 9 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 9 | import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; | 10 | import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; |
| 10 | import com.github.pagehelper.PageInfo; | 11 | import com.github.pagehelper.PageInfo; |
| 11 | 12 | ||
| @@ -106,4 +107,10 @@ public interface IStreamPushService { | @@ -106,4 +107,10 @@ public interface IStreamPushService { | ||
| 106 | * @return | 107 | * @return |
| 107 | */ | 108 | */ |
| 108 | List<String> getAllAppAndStream(); | 109 | List<String> getAllAppAndStream(); |
| 110 | + | ||
| 111 | + /** | ||
| 112 | + * 获取统计信息 | ||
| 113 | + * @return | ||
| 114 | + */ | ||
| 115 | + ResourceBaceInfo getOverview(); | ||
| 109 | } | 116 | } |
src/main/java/com/genersoft/iot/vmp/service/bean/MediaServerLoad.java
0 → 100644
| 1 | +package com.genersoft.iot.vmp.service.bean; | ||
| 2 | + | ||
| 3 | +public class MediaServerLoad { | ||
| 4 | + | ||
| 5 | + private String id; | ||
| 6 | + private int push; | ||
| 7 | + private int proxy; | ||
| 8 | + private int gbReceive; | ||
| 9 | + private int gbSend; | ||
| 10 | + | ||
| 11 | + public String getId() { | ||
| 12 | + return id; | ||
| 13 | + } | ||
| 14 | + | ||
| 15 | + public void setId(String id) { | ||
| 16 | + this.id = id; | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + public int getPush() { | ||
| 20 | + return push; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + public void setPush(int push) { | ||
| 24 | + this.push = push; | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public int getProxy() { | ||
| 28 | + return proxy; | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + public void setProxy(int proxy) { | ||
| 32 | + this.proxy = proxy; | ||
| 33 | + } | ||
| 34 | + | ||
| 35 | + public int getGbReceive() { | ||
| 36 | + return gbReceive; | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + public void setGbReceive(int gbReceive) { | ||
| 40 | + this.gbReceive = gbReceive; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + public int getGbSend() { | ||
| 44 | + return gbSend; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + public void setGbSend(int gbSend) { | ||
| 48 | + this.gbSend = gbSend; | ||
| 49 | + } | ||
| 50 | +} |
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
| @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | ||
| 9 | import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; | 9 | import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; |
| 10 | import com.genersoft.iot.vmp.storager.dao.DeviceMapper; | 10 | import com.genersoft.iot.vmp.storager.dao.DeviceMapper; |
| 11 | import com.genersoft.iot.vmp.utils.DateUtil; | 11 | import com.genersoft.iot.vmp.utils.DateUtil; |
| 12 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 12 | import org.slf4j.Logger; | 13 | import org.slf4j.Logger; |
| 13 | import org.slf4j.LoggerFactory; | 14 | import org.slf4j.LoggerFactory; |
| 14 | import org.springframework.beans.factory.annotation.Autowired; | 15 | import org.springframework.beans.factory.annotation.Autowired; |
| @@ -162,4 +163,9 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService { | @@ -162,4 +163,9 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService { | ||
| 162 | } | 163 | } |
| 163 | return addChannels.size() + updateChannels.size(); | 164 | return addChannels.size() + updateChannels.size(); |
| 164 | } | 165 | } |
| 166 | + | ||
| 167 | + @Override | ||
| 168 | + public ResourceBaceInfo getOverview() { | ||
| 169 | + return channelMapper.getOverview(); | ||
| 170 | + } | ||
| 165 | } | 171 | } |
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
| @@ -19,6 +19,7 @@ import com.genersoft.iot.vmp.storager.dao.DeviceMapper; | @@ -19,6 +19,7 @@ import com.genersoft.iot.vmp.storager.dao.DeviceMapper; | ||
| 19 | import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; | 19 | import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; |
| 20 | import com.genersoft.iot.vmp.utils.DateUtil; | 20 | import com.genersoft.iot.vmp.utils.DateUtil; |
| 21 | import com.genersoft.iot.vmp.vmanager.bean.BaseTree; | 21 | import com.genersoft.iot.vmp.vmanager.bean.BaseTree; |
| 22 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 22 | import org.slf4j.Logger; | 23 | import org.slf4j.Logger; |
| 23 | import org.slf4j.LoggerFactory; | 24 | import org.slf4j.LoggerFactory; |
| 24 | import org.springframework.beans.factory.annotation.Autowired; | 25 | import org.springframework.beans.factory.annotation.Autowired; |
| @@ -620,4 +621,9 @@ public class DeviceServiceImpl implements IDeviceService { | @@ -620,4 +621,9 @@ public class DeviceServiceImpl implements IDeviceService { | ||
| 620 | } | 621 | } |
| 621 | return result; | 622 | return result; |
| 622 | } | 623 | } |
| 624 | + | ||
| 625 | + @Override | ||
| 626 | + public ResourceBaceInfo getOverview() { | ||
| 627 | + return deviceMapper.getOverview(); | ||
| 628 | + } | ||
| 623 | } | 629 | } |
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
| @@ -10,6 +10,8 @@ import java.util.Set; | @@ -10,6 +10,8 @@ import java.util.Set; | ||
| 10 | 10 | ||
| 11 | import com.genersoft.iot.vmp.conf.DynamicTask; | 11 | import com.genersoft.iot.vmp.conf.DynamicTask; |
| 12 | import com.genersoft.iot.vmp.conf.exception.ControllerException; | 12 | import com.genersoft.iot.vmp.conf.exception.ControllerException; |
| 13 | +import com.genersoft.iot.vmp.service.bean.MediaServerLoad; | ||
| 14 | +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | ||
| 13 | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; | 15 | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; |
| 14 | import org.slf4j.Logger; | 16 | import org.slf4j.Logger; |
| 15 | import org.slf4j.LoggerFactory; | 17 | import org.slf4j.LoggerFactory; |
| @@ -90,6 +92,9 @@ public class MediaServerServiceImpl implements IMediaServerService { | @@ -90,6 +92,9 @@ public class MediaServerServiceImpl implements IMediaServerService { | ||
| 90 | @Autowired | 92 | @Autowired |
| 91 | private DynamicTask dynamicTask; | 93 | private DynamicTask dynamicTask; |
| 92 | 94 | ||
| 95 | + @Autowired | ||
| 96 | + private IRedisCatchStorage redisCatchStorage; | ||
| 97 | + | ||
| 93 | /** | 98 | /** |
| 94 | * 初始化 | 99 | * 初始化 |
| 95 | */ | 100 | */ |
| @@ -691,4 +696,15 @@ public class MediaServerServiceImpl implements IMediaServerService { | @@ -691,4 +696,15 @@ public class MediaServerServiceImpl implements IMediaServerService { | ||
| 691 | } | 696 | } |
| 692 | return false; | 697 | return false; |
| 693 | } | 698 | } |
| 699 | + | ||
| 700 | + @Override | ||
| 701 | + public MediaServerLoad getLoad(MediaServerItem mediaServerItem) { | ||
| 702 | + MediaServerLoad result = new MediaServerLoad(); | ||
| 703 | + result.setId(mediaServerItem.getId()); | ||
| 704 | + result.setPush(redisCatchStorage.getPushStreamCount(mediaServerItem.getId())); | ||
| 705 | + result.setProxy(redisCatchStorage.getProxyStreamCount(mediaServerItem.getId())); | ||
| 706 | + result.setGbReceive(redisCatchStorage.getGbReceiveCount(mediaServerItem.getId())); | ||
| 707 | + result.setGbSend(redisCatchStorage.getGbSendCount(mediaServerItem.getId())); | ||
| 708 | + return result; | ||
| 709 | + } | ||
| 694 | } | 710 | } |
src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java
| @@ -26,6 +26,7 @@ import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; | @@ -26,6 +26,7 @@ import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; | ||
| 26 | import com.genersoft.iot.vmp.service.IStreamProxyService; | 26 | import com.genersoft.iot.vmp.service.IStreamProxyService; |
| 27 | import com.genersoft.iot.vmp.utils.DateUtil; | 27 | import com.genersoft.iot.vmp.utils.DateUtil; |
| 28 | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; | 28 | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; |
| 29 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 29 | import com.genersoft.iot.vmp.vmanager.bean.WVPResult; | 30 | import com.genersoft.iot.vmp.vmanager.bean.WVPResult; |
| 30 | import com.github.pagehelper.PageInfo; | 31 | import com.github.pagehelper.PageInfo; |
| 31 | import org.slf4j.Logger; | 32 | import org.slf4j.Logger; |
| @@ -454,4 +455,9 @@ public class StreamProxyServiceImpl implements IStreamProxyService { | @@ -454,4 +455,9 @@ public class StreamProxyServiceImpl implements IStreamProxyService { | ||
| 454 | } | 455 | } |
| 455 | 456 | ||
| 456 | } | 457 | } |
| 458 | + | ||
| 459 | + @Override | ||
| 460 | + public ResourceBaceInfo getOverview() { | ||
| 461 | + return streamProxyMapper.getOverview(); | ||
| 462 | + } | ||
| 457 | } | 463 | } |
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
| @@ -18,6 +18,7 @@ import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; | @@ -18,6 +18,7 @@ import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; | ||
| 18 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 18 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| 19 | import com.genersoft.iot.vmp.storager.dao.*; | 19 | import com.genersoft.iot.vmp.storager.dao.*; |
| 20 | import com.genersoft.iot.vmp.utils.DateUtil; | 20 | import com.genersoft.iot.vmp.utils.DateUtil; |
| 21 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 21 | import com.github.pagehelper.PageHelper; | 22 | import com.github.pagehelper.PageHelper; |
| 22 | import com.github.pagehelper.PageInfo; | 23 | import com.github.pagehelper.PageInfo; |
| 23 | import org.slf4j.Logger; | 24 | import org.slf4j.Logger; |
| @@ -507,6 +508,12 @@ public class StreamPushServiceImpl implements IStreamPushService { | @@ -507,6 +508,12 @@ public class StreamPushServiceImpl implements IStreamPushService { | ||
| 507 | 508 | ||
| 508 | @Override | 509 | @Override |
| 509 | public List<String> getAllAppAndStream() { | 510 | public List<String> getAllAppAndStream() { |
| 511 | + | ||
| 510 | return streamPushMapper.getAllAppAndStream(); | 512 | return streamPushMapper.getAllAppAndStream(); |
| 511 | } | 513 | } |
| 514 | + | ||
| 515 | + @Override | ||
| 516 | + public ResourceBaceInfo getOverview() { | ||
| 517 | + return streamPushMapper.getOverview(userSetting.isUsePushingAsStatus()); | ||
| 518 | + } | ||
| 512 | } | 519 | } |
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
| @@ -244,4 +244,16 @@ public interface IRedisCatchStorage { | @@ -244,4 +244,16 @@ public interface IRedisCatchStorage { | ||
| 244 | 244 | ||
| 245 | SystemAllInfo getSystemInfo(); | 245 | SystemAllInfo getSystemInfo(); |
| 246 | 246 | ||
| 247 | + int getPushStreamCount(String id); | ||
| 248 | + | ||
| 249 | + int getProxyStreamCount(String id); | ||
| 250 | + | ||
| 251 | + int getGbReceiveCount(String id); | ||
| 252 | + | ||
| 253 | + int getGbSendCount(String id); | ||
| 254 | + | ||
| 255 | + void addDiskInfo(List<Map<String, Object>> diskInfo); | ||
| 256 | + | ||
| 257 | + List<SendRtpItem> queryAllSendRTPServer(); | ||
| 258 | + | ||
| 247 | } | 259 | } |
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
| @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.storager.dao; | @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.storager.dao; | ||
| 3 | import com.genersoft.iot.vmp.gb28181.bean.Device; | 3 | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| 4 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; | 4 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
| 5 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform; | 5 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform; |
| 6 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 6 | import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; | 7 | import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; |
| 7 | import org.apache.ibatis.annotations.*; | 8 | import org.apache.ibatis.annotations.*; |
| 8 | import org.springframework.stereotype.Repository; | 9 | import org.springframework.stereotype.Repository; |
| @@ -347,4 +348,8 @@ public interface DeviceChannelMapper { | @@ -347,4 +348,8 @@ public interface DeviceChannelMapper { | ||
| 347 | 348 | ||
| 348 | @Select("select * from device_channel where deviceId = #{deviceId}") | 349 | @Select("select * from device_channel where deviceId = #{deviceId}") |
| 349 | List<DeviceChannel> queryAllChannels(String deviceId); | 350 | List<DeviceChannel> queryAllChannels(String deviceId); |
| 351 | + | ||
| 352 | + | ||
| 353 | + @Select("select count(1) as total, sum(status) as online from device_channel") | ||
| 354 | + ResourceBaceInfo getOverview(); | ||
| 350 | } | 355 | } |
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
| 1 | package com.genersoft.iot.vmp.storager.dao; | 1 | package com.genersoft.iot.vmp.storager.dao; |
| 2 | 2 | ||
| 3 | import com.genersoft.iot.vmp.gb28181.bean.Device; | 3 | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| 4 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 4 | import org.apache.ibatis.annotations.*; | 5 | import org.apache.ibatis.annotations.*; |
| 5 | import org.springframework.stereotype.Repository; | 6 | import org.springframework.stereotype.Repository; |
| 6 | 7 | ||
| @@ -251,4 +252,8 @@ public interface DeviceMapper { | @@ -251,4 +252,8 @@ public interface DeviceMapper { | ||
| 251 | "#{online}" + | 252 | "#{online}" + |
| 252 | ")") | 253 | ")") |
| 253 | void addCustomDevice(Device device); | 254 | void addCustomDevice(Device device); |
| 255 | + | ||
| 256 | + @Select("select count(1) as total, sum(online) as online from device") | ||
| 257 | + ResourceBaceInfo getOverview(); | ||
| 258 | + | ||
| 254 | } | 259 | } |
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java
| 1 | package com.genersoft.iot.vmp.storager.dao; | 1 | package com.genersoft.iot.vmp.storager.dao; |
| 2 | 2 | ||
| 3 | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; | 3 | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; |
| 4 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 4 | import org.apache.ibatis.annotations.*; | 5 | import org.apache.ibatis.annotations.*; |
| 5 | import org.springframework.stereotype.Repository; | 6 | import org.springframework.stereotype.Repository; |
| 6 | 7 | ||
| @@ -75,4 +76,7 @@ public interface StreamProxyMapper { | @@ -75,4 +76,7 @@ public interface StreamProxyMapper { | ||
| 75 | 76 | ||
| 76 | @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") | 77 | @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") |
| 77 | List<StreamProxyItem> selecAutoRemoveItemByMediaServerId(String mediaServerId); | 78 | List<StreamProxyItem> selecAutoRemoveItemByMediaServerId(String mediaServerId); |
| 79 | + | ||
| 80 | + @Select("select count(1) as total, sum(status) as online from stream_proxy") | ||
| 81 | + ResourceBaceInfo getOverview(); | ||
| 78 | } | 82 | } |
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
| @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.storager.dao; | @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.storager.dao; | ||
| 3 | import com.genersoft.iot.vmp.gb28181.bean.GbStream; | 3 | import com.genersoft.iot.vmp.gb28181.bean.GbStream; |
| 4 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; | 4 | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; |
| 5 | import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; | 5 | import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; |
| 6 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 6 | import org.apache.ibatis.annotations.*; | 7 | import org.apache.ibatis.annotations.*; |
| 7 | // import org.omg.PortableInterceptor.INACTIVE; | 8 | // import org.omg.PortableInterceptor.INACTIVE; |
| 8 | import org.springframework.stereotype.Repository; | 9 | import org.springframework.stereotype.Repository; |
| @@ -171,4 +172,10 @@ public interface StreamPushMapper { | @@ -171,4 +172,10 @@ public interface StreamPushMapper { | ||
| 171 | 172 | ||
| 172 | @Select("SELECT CONCAT(app,stream) FROM gb_stream") | 173 | @Select("SELECT CONCAT(app,stream) FROM gb_stream") |
| 173 | List<String> getAllAppAndStream(); | 174 | List<String> getAllAppAndStream(); |
| 175 | + | ||
| 176 | + @Select(value = {" <script>" + | ||
| 177 | + " <if test='pushIngAsOnline == true'> select count(1) as total, sum(pushIng) as online from stream_push </if>" + | ||
| 178 | + " <if test='pushIngAsOnline == false'> select count(1) as total, sum(status) as online from stream_push </if>" + | ||
| 179 | + " </script>"}) | ||
| 180 | + ResourceBaceInfo getOverview(boolean pushIngAsOnline); | ||
| 174 | } | 181 | } |
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
| @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; | @@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSON; | ||
| 4 | import com.alibaba.fastjson.JSONObject; | 4 | import com.alibaba.fastjson.JSONObject; |
| 5 | import com.genersoft.iot.vmp.common.StreamInfo; | 5 | import com.genersoft.iot.vmp.common.StreamInfo; |
| 6 | import com.genersoft.iot.vmp.common.SystemAllInfo; | 6 | import com.genersoft.iot.vmp.common.SystemAllInfo; |
| 7 | -import com.genersoft.iot.vmp.common.SystemInfoDto; | ||
| 8 | import com.genersoft.iot.vmp.common.VideoManagerConstants; | 7 | import com.genersoft.iot.vmp.common.VideoManagerConstants; |
| 9 | import com.genersoft.iot.vmp.conf.UserSetting; | 8 | import com.genersoft.iot.vmp.conf.UserSetting; |
| 10 | import com.genersoft.iot.vmp.gb28181.bean.*; | 9 | import com.genersoft.iot.vmp.gb28181.bean.*; |
| @@ -18,6 +17,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | @@ -18,6 +17,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | ||
| 18 | import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; | 17 | import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; |
| 19 | import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; | 18 | import com.genersoft.iot.vmp.storager.dao.dto.PlatformRegisterInfo; |
| 20 | import com.genersoft.iot.vmp.utils.DateUtil; | 19 | import com.genersoft.iot.vmp.utils.DateUtil; |
| 20 | +import com.genersoft.iot.vmp.utils.SystemInfoUtils; | ||
| 21 | import com.genersoft.iot.vmp.utils.redis.RedisUtil; | 21 | import com.genersoft.iot.vmp.utils.redis.RedisUtil; |
| 22 | import org.slf4j.Logger; | 22 | import org.slf4j.Logger; |
| 23 | import org.slf4j.LoggerFactory; | 23 | import org.slf4j.LoggerFactory; |
| @@ -89,8 +89,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -89,8 +89,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 89 | */ | 89 | */ |
| 90 | @Override | 90 | @Override |
| 91 | public boolean startPlay(StreamInfo stream) { | 91 | public boolean startPlay(StreamInfo stream) { |
| 92 | - return RedisUtil.set(String.format("%S_%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), | ||
| 93 | - stream.getStream(), stream.getDeviceID(), stream.getChannelId()), | 92 | + |
| 93 | + return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), | ||
| 94 | + stream.getMediaServerId(), stream.getStream(), stream.getDeviceID(), stream.getChannelId()), | ||
| 94 | stream); | 95 | stream); |
| 95 | } | 96 | } |
| 96 | 97 | ||
| @@ -104,8 +105,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -104,8 +105,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 104 | if (streamInfo == null) { | 105 | if (streamInfo == null) { |
| 105 | return false; | 106 | return false; |
| 106 | } | 107 | } |
| 107 | - return RedisUtil.del(String.format("%S_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, | 108 | + return RedisUtil.del(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, |
| 108 | userSetting.getServerId(), | 109 | userSetting.getServerId(), |
| 110 | + streamInfo.getMediaServerId(), | ||
| 109 | streamInfo.getStream(), | 111 | streamInfo.getStream(), |
| 110 | streamInfo.getDeviceID(), | 112 | streamInfo.getDeviceID(), |
| 111 | streamInfo.getChannelId())); | 113 | streamInfo.getChannelId())); |
| @@ -117,17 +119,17 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -117,17 +119,17 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 117 | */ | 119 | */ |
| 118 | @Override | 120 | @Override |
| 119 | public StreamInfo queryPlay(StreamInfo streamInfo) { | 121 | public StreamInfo queryPlay(StreamInfo streamInfo) { |
| 120 | - return (StreamInfo)RedisUtil.get(String.format("%S_%s_%s_%s_%s", | 122 | + return (StreamInfo)RedisUtil.get(String.format("%S_%s_%s_%s_%s_%s", |
| 121 | VideoManagerConstants.PLAYER_PREFIX, | 123 | VideoManagerConstants.PLAYER_PREFIX, |
| 122 | userSetting.getServerId(), | 124 | userSetting.getServerId(), |
| 125 | + streamInfo.getMediaServerId(), | ||
| 123 | streamInfo.getStream(), | 126 | streamInfo.getStream(), |
| 124 | streamInfo.getDeviceID(), | 127 | streamInfo.getDeviceID(), |
| 125 | streamInfo.getChannelId())); | 128 | streamInfo.getChannelId())); |
| 126 | } | 129 | } |
| 127 | @Override | 130 | @Override |
| 128 | public StreamInfo queryPlayByStreamId(String streamId) { | 131 | public StreamInfo queryPlayByStreamId(String streamId) { |
| 129 | - System.out.println(String.format("%S_%s_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId)); | ||
| 130 | - List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId)); | 132 | + List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(), streamId)); |
| 131 | if (playLeys == null || playLeys.size() == 0) { | 133 | if (playLeys == null || playLeys.size() == 0) { |
| 132 | return null; | 134 | return null; |
| 133 | } | 135 | } |
| @@ -136,7 +138,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -136,7 +138,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 136 | 138 | ||
| 137 | @Override | 139 | @Override |
| 138 | public StreamInfo queryPlayByDevice(String deviceId, String channelId) { | 140 | public StreamInfo queryPlayByDevice(String deviceId, String channelId) { |
| 139 | - List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX, | 141 | + List<Object> playLeys = RedisUtil.scan(String.format("%S_%s_*_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX, |
| 140 | userSetting.getServerId(), | 142 | userSetting.getServerId(), |
| 141 | deviceId, | 143 | deviceId, |
| 142 | channelId)); | 144 | channelId)); |
| @@ -149,8 +151,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -149,8 +151,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 149 | @Override | 151 | @Override |
| 150 | public Map<String, StreamInfo> queryPlayByDeviceId(String deviceId) { | 152 | public Map<String, StreamInfo> queryPlayByDeviceId(String deviceId) { |
| 151 | Map<String, StreamInfo> streamInfos = new HashMap<>(); | 153 | Map<String, StreamInfo> streamInfos = new HashMap<>(); |
| 152 | -// List<Object> playLeys = RedisUtil.keys(String.format("%S_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, deviceId)); | ||
| 153 | - List<Object> players = RedisUtil.scan(String.format("%S_%s_*_%S_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),deviceId)); | 154 | + List<Object> players = RedisUtil.scan(String.format("%S_%s_*_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, userSetting.getServerId(),deviceId)); |
| 154 | if (players.size() == 0) { | 155 | if (players.size() == 0) { |
| 155 | return streamInfos; | 156 | return streamInfos; |
| 156 | } | 157 | } |
| @@ -165,21 +166,19 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -165,21 +166,19 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 165 | 166 | ||
| 166 | @Override | 167 | @Override |
| 167 | public boolean startPlayback(StreamInfo stream, String callId) { | 168 | public boolean startPlayback(StreamInfo stream, String callId) { |
| 168 | - System.out.println(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, | ||
| 169 | - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId)); | ||
| 170 | - return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, | ||
| 171 | - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); | 169 | + return RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, |
| 170 | + userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); | ||
| 172 | } | 171 | } |
| 173 | 172 | ||
| 174 | @Override | 173 | @Override |
| 175 | public boolean startDownload(StreamInfo stream, String callId) { | 174 | public boolean startDownload(StreamInfo stream, String callId) { |
| 176 | boolean result; | 175 | boolean result; |
| 177 | if (stream.getProgress() == 1) { | 176 | if (stream.getProgress() == 1) { |
| 178 | - result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, | ||
| 179 | - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); | 177 | + result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, |
| 178 | + userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream); | ||
| 180 | }else { | 179 | }else { |
| 181 | - result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, | ||
| 182 | - userSetting.getServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream, 60*60); | 180 | + result = RedisUtil.set(String.format("%S_%s_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, |
| 181 | + userSetting.getServerId(), stream.getMediaServerId(), stream.getDeviceID(), stream.getChannelId(), stream.getStream(), callId), stream, 60*60); | ||
| 183 | } | 182 | } |
| 184 | return result; | 183 | return result; |
| 185 | } | 184 | } |
| @@ -203,7 +202,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -203,7 +202,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 203 | if (callId == null) { | 202 | if (callId == null) { |
| 204 | callId = "*"; | 203 | callId = "*"; |
| 205 | } | 204 | } |
| 206 | - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, | 205 | + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, |
| 207 | userSetting.getServerId(), | 206 | userSetting.getServerId(), |
| 208 | deviceId, | 207 | deviceId, |
| 209 | channelId, | 208 | channelId, |
| @@ -239,7 +238,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -239,7 +238,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 239 | if (callId == null) { | 238 | if (callId == null) { |
| 240 | callId = "*"; | 239 | callId = "*"; |
| 241 | } | 240 | } |
| 242 | - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, | 241 | + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, |
| 243 | userSetting.getServerId(), | 242 | userSetting.getServerId(), |
| 244 | deviceId, | 243 | deviceId, |
| 245 | channelId, | 244 | channelId, |
| @@ -272,7 +271,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -272,7 +271,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 272 | if (callId == null) { | 271 | if (callId == null) { |
| 273 | callId = "*"; | 272 | callId = "*"; |
| 274 | } | 273 | } |
| 275 | - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, | 274 | + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, |
| 276 | userSetting.getServerId(), | 275 | userSetting.getServerId(), |
| 277 | deviceId, | 276 | deviceId, |
| 278 | channelId, | 277 | channelId, |
| @@ -304,7 +303,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -304,7 +303,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 304 | if (callId == null) { | 303 | if (callId == null) { |
| 305 | callId = "*"; | 304 | callId = "*"; |
| 306 | } | 305 | } |
| 307 | - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, | 306 | + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, |
| 308 | userSetting.getServerId(), | 307 | userSetting.getServerId(), |
| 309 | deviceId, | 308 | deviceId, |
| 310 | channelId, | 309 | channelId, |
| @@ -369,9 +368,14 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -369,9 +368,14 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 369 | 368 | ||
| 370 | @Override | 369 | @Override |
| 371 | public void updateSendRTPSever(SendRtpItem sendRtpItem) { | 370 | public void updateSendRTPSever(SendRtpItem sendRtpItem) { |
| 372 | - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" | ||
| 373 | - + sendRtpItem.getPlatformId() + "_" + sendRtpItem.getChannelId() + "_" | ||
| 374 | - + sendRtpItem.getStreamId() + "_" + sendRtpItem.getCallId(); | 371 | + |
| 372 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + | ||
| 373 | + userSetting.getServerId() + "_" | ||
| 374 | + + sendRtpItem.getMediaServerId() + "_" | ||
| 375 | + + sendRtpItem.getPlatformId() + "_" | ||
| 376 | + + sendRtpItem.getChannelId() + "_" | ||
| 377 | + + sendRtpItem.getStreamId() + "_" | ||
| 378 | + + sendRtpItem.getCallId(); | ||
| 375 | RedisUtil.set(key, sendRtpItem); | 379 | RedisUtil.set(key, sendRtpItem); |
| 376 | } | 380 | } |
| 377 | 381 | ||
| @@ -389,8 +393,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -389,8 +393,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 389 | if (callId == null) { | 393 | if (callId == null) { |
| 390 | callId = "*"; | 394 | callId = "*"; |
| 391 | } | 395 | } |
| 392 | - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId | ||
| 393 | - + "_" + channelId + "_" + streamId + "_" + callId; | 396 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX |
| 397 | + + userSetting.getServerId() + "_*_" | ||
| 398 | + + platformGbId + "_" | ||
| 399 | + + channelId + "_" | ||
| 400 | + + streamId + "_" | ||
| 401 | + + callId; | ||
| 394 | List<Object> scan = RedisUtil.scan(key); | 402 | List<Object> scan = RedisUtil.scan(key); |
| 395 | if (scan.size() > 0) { | 403 | if (scan.size() > 0) { |
| 396 | return (SendRtpItem)RedisUtil.get((String)scan.get(0)); | 404 | return (SendRtpItem)RedisUtil.get((String)scan.get(0)); |
| @@ -407,8 +415,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -407,8 +415,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 407 | String platformGbId = "*"; | 415 | String platformGbId = "*"; |
| 408 | String callId = "*"; | 416 | String callId = "*"; |
| 409 | String streamId = "*"; | 417 | String streamId = "*"; |
| 410 | - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId | ||
| 411 | - + "_" + channelId + "_" + streamId + "_" + callId; | 418 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX |
| 419 | + + userSetting.getServerId() + "_*_" | ||
| 420 | + + platformGbId + "_" | ||
| 421 | + + channelId + "_" | ||
| 422 | + + streamId + "_" | ||
| 423 | + + callId; | ||
| 412 | List<Object> scan = RedisUtil.scan(key); | 424 | List<Object> scan = RedisUtil.scan(key); |
| 413 | List<SendRtpItem> result = new ArrayList<>(); | 425 | List<SendRtpItem> result = new ArrayList<>(); |
| 414 | for (Object o : scan) { | 426 | for (Object o : scan) { |
| @@ -425,8 +437,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -425,8 +437,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 425 | String platformGbId = "*"; | 437 | String platformGbId = "*"; |
| 426 | String callId = "*"; | 438 | String callId = "*"; |
| 427 | String channelId = "*"; | 439 | String channelId = "*"; |
| 428 | - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId | ||
| 429 | - + "_" + channelId + "_" + stream + "_" + callId; | 440 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX |
| 441 | + + userSetting.getServerId() + "_*_" | ||
| 442 | + + platformGbId + "_" | ||
| 443 | + + channelId + "_" | ||
| 444 | + + stream + "_" | ||
| 445 | + + callId; | ||
| 430 | List<Object> scan = RedisUtil.scan(key); | 446 | List<Object> scan = RedisUtil.scan(key); |
| 431 | List<SendRtpItem> result = new ArrayList<>(); | 447 | List<SendRtpItem> result = new ArrayList<>(); |
| 432 | for (Object o : scan) { | 448 | for (Object o : scan) { |
| @@ -440,7 +456,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -440,7 +456,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 440 | if (platformGbId == null) { | 456 | if (platformGbId == null) { |
| 441 | platformGbId = "*"; | 457 | platformGbId = "*"; |
| 442 | } | 458 | } |
| 443 | - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId + "_*" + "_*" + "_*"; | 459 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX |
| 460 | + + userSetting.getServerId() + "_*_" | ||
| 461 | + + platformGbId + "_*" + "_*" + "_*"; | ||
| 444 | List<Object> queryResult = RedisUtil.scan(key); | 462 | List<Object> queryResult = RedisUtil.scan(key); |
| 445 | List<SendRtpItem> result= new ArrayList<>(); | 463 | List<SendRtpItem> result= new ArrayList<>(); |
| 446 | 464 | ||
| @@ -465,8 +483,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -465,8 +483,12 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 465 | if (callId == null) { | 483 | if (callId == null) { |
| 466 | callId = "*"; | 484 | callId = "*"; |
| 467 | } | 485 | } |
| 468 | - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + platformGbId | ||
| 469 | - + "_" + channelId + "_" + streamId + "_" + callId; | 486 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX |
| 487 | + + userSetting.getServerId() + "_*_" | ||
| 488 | + + platformGbId + "_" | ||
| 489 | + + channelId + "_" | ||
| 490 | + + streamId + "_" | ||
| 491 | + + callId; | ||
| 470 | List<Object> scan = RedisUtil.scan(key); | 492 | List<Object> scan = RedisUtil.scan(key); |
| 471 | if (scan.size() > 0) { | 493 | if (scan.size() > 0) { |
| 472 | for (Object keyStr : scan) { | 494 | for (Object keyStr : scan) { |
| @@ -475,7 +497,20 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -475,7 +497,20 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 475 | } | 497 | } |
| 476 | } | 498 | } |
| 477 | 499 | ||
| 500 | + @Override | ||
| 501 | + public List<SendRtpItem> queryAllSendRTPServer() { | ||
| 502 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX | ||
| 503 | + + userSetting.getServerId() + "_*"; | ||
| 504 | + List<Object> queryResult = RedisUtil.scan(key); | ||
| 505 | + List<SendRtpItem> result= new ArrayList<>(); | ||
| 478 | 506 | ||
| 507 | + for (Object o : queryResult) { | ||
| 508 | + String keyItem = (String) o; | ||
| 509 | + result.add((SendRtpItem) RedisUtil.get(keyItem)); | ||
| 510 | + } | ||
| 511 | + | ||
| 512 | + return result; | ||
| 513 | + } | ||
| 479 | 514 | ||
| 480 | /** | 515 | /** |
| 481 | * 查询某个通道是否存在上级点播(RTP推送) | 516 | * 查询某个通道是否存在上级点播(RTP推送) |
| @@ -483,7 +518,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -483,7 +518,9 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 483 | */ | 518 | */ |
| 484 | @Override | 519 | @Override |
| 485 | public boolean isChannelSendingRTP(String channelId) { | 520 | public boolean isChannelSendingRTP(String channelId) { |
| 486 | - String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX + userSetting.getServerId() + "_" + "*_" + channelId + "*_" + "*_"; | 521 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX |
| 522 | + + userSetting.getServerId() + "_*_*_" | ||
| 523 | + + channelId + "*_" + "*_"; | ||
| 487 | List<Object> RtpStreams = RedisUtil.scan(key); | 524 | List<Object> RtpStreams = RedisUtil.scan(key); |
| 488 | if (RtpStreams.size() > 0) { | 525 | if (RtpStreams.size() > 0) { |
| 489 | return true; | 526 | return true; |
| @@ -503,7 +540,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -503,7 +540,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 503 | } | 540 | } |
| 504 | } | 541 | } |
| 505 | 542 | ||
| 506 | - List<Object> playBackers = RedisUtil.scan(String.format("%S_%s_%s_*_*_*", VideoManagerConstants.PLAY_BLACK_PREFIX, | 543 | + List<Object> playBackers = RedisUtil.scan(String.format("%S_%s_*_%s_*_*_*", VideoManagerConstants.PLAY_BLACK_PREFIX, |
| 507 | userSetting.getServerId(), | 544 | userSetting.getServerId(), |
| 508 | deviceId)); | 545 | deviceId)); |
| 509 | if (playBackers.size() > 0) { | 546 | if (playBackers.size() > 0) { |
| @@ -569,7 +606,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -569,7 +606,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 569 | if (callId == null) { | 606 | if (callId == null) { |
| 570 | callId = "*"; | 607 | callId = "*"; |
| 571 | } | 608 | } |
| 572 | - String key = String.format("%S_%s_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, | 609 | + String key = String.format("%S_%s_*_%s_%s_%s_%s", VideoManagerConstants.DOWNLOAD_PREFIX, |
| 573 | userSetting.getServerId(), | 610 | userSetting.getServerId(), |
| 574 | deviceId, | 611 | deviceId, |
| 575 | channelId, | 612 | channelId, |
| @@ -740,14 +777,25 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -740,14 +777,25 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 740 | } | 777 | } |
| 741 | 778 | ||
| 742 | @Override | 779 | @Override |
| 780 | + public void addDiskInfo(List<Map<String, Object>> diskInfo) { | ||
| 781 | + | ||
| 782 | + String key = VideoManagerConstants.SYSTEM_INFO_DISK_PREFIX + userSetting.getServerId(); | ||
| 783 | + RedisUtil.set(key, diskInfo); | ||
| 784 | + } | ||
| 785 | + | ||
| 786 | + @Override | ||
| 743 | public SystemAllInfo getSystemInfo() { | 787 | public SystemAllInfo getSystemInfo() { |
| 744 | String cpuKey = VideoManagerConstants.SYSTEM_INFO_CPU_PREFIX + userSetting.getServerId(); | 788 | String cpuKey = VideoManagerConstants.SYSTEM_INFO_CPU_PREFIX + userSetting.getServerId(); |
| 745 | String memKey = VideoManagerConstants.SYSTEM_INFO_MEM_PREFIX + userSetting.getServerId(); | 789 | String memKey = VideoManagerConstants.SYSTEM_INFO_MEM_PREFIX + userSetting.getServerId(); |
| 746 | String netKey = VideoManagerConstants.SYSTEM_INFO_NET_PREFIX + userSetting.getServerId(); | 790 | String netKey = VideoManagerConstants.SYSTEM_INFO_NET_PREFIX + userSetting.getServerId(); |
| 791 | + String diskKey = VideoManagerConstants.SYSTEM_INFO_DISK_PREFIX + userSetting.getServerId(); | ||
| 747 | SystemAllInfo systemAllInfo = new SystemAllInfo(); | 792 | SystemAllInfo systemAllInfo = new SystemAllInfo(); |
| 748 | systemAllInfo.setCpu(RedisUtil.lGet(cpuKey, 0, -1)); | 793 | systemAllInfo.setCpu(RedisUtil.lGet(cpuKey, 0, -1)); |
| 749 | systemAllInfo.setMem(RedisUtil.lGet(memKey, 0, -1)); | 794 | systemAllInfo.setMem(RedisUtil.lGet(memKey, 0, -1)); |
| 750 | systemAllInfo.setNet(RedisUtil.lGet(netKey, 0, -1)); | 795 | systemAllInfo.setNet(RedisUtil.lGet(netKey, 0, -1)); |
| 796 | + | ||
| 797 | + systemAllInfo.setDisk(RedisUtil.get(diskKey)); | ||
| 798 | + systemAllInfo.setNetTotal(SystemInfoUtils.getNetworkTotal()); | ||
| 751 | return systemAllInfo; | 799 | return systemAllInfo; |
| 752 | } | 800 | } |
| 753 | 801 | ||
| @@ -786,4 +834,32 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -786,4 +834,32 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 786 | jsonObject.put(key, key); | 834 | jsonObject.put(key, key); |
| 787 | RedisUtil.convertAndSend(key, jsonObject); | 835 | RedisUtil.convertAndSend(key, jsonObject); |
| 788 | } | 836 | } |
| 837 | + | ||
| 838 | + @Override | ||
| 839 | + public int getPushStreamCount(String id) { | ||
| 840 | + String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_PUSH_*_*_" + id; | ||
| 841 | + return RedisUtil.scan(key).size(); | ||
| 842 | + } | ||
| 843 | + | ||
| 844 | + @Override | ||
| 845 | + public int getProxyStreamCount(String id) { | ||
| 846 | + String key = VideoManagerConstants.WVP_SERVER_STREAM_PREFIX + userSetting.getServerId() + "_PULL_*_*_" + id; | ||
| 847 | + return RedisUtil.scan(key).size(); | ||
| 848 | + } | ||
| 849 | + | ||
| 850 | + @Override | ||
| 851 | + public int getGbReceiveCount(String id) { | ||
| 852 | + String playKey = VideoManagerConstants.PLAYER_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*"; | ||
| 853 | + String playBackKey = VideoManagerConstants.PLAY_BLACK_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*"; | ||
| 854 | + String downloadKey = VideoManagerConstants.DOWNLOAD_PREFIX + "_" + userSetting.getServerId() + "_" + id + "_*"; | ||
| 855 | + | ||
| 856 | + return RedisUtil.scan(playKey).size() + RedisUtil.scan(playBackKey).size() + RedisUtil.scan(downloadKey).size(); | ||
| 857 | + } | ||
| 858 | + | ||
| 859 | + @Override | ||
| 860 | + public int getGbSendCount(String id) { | ||
| 861 | + String key = VideoManagerConstants.PLATFORM_SEND_RTP_INFO_PREFIX | ||
| 862 | + + userSetting.getServerId() + "_*_" + id + "_*"; | ||
| 863 | + return RedisUtil.scan(key).size(); | ||
| 864 | + } | ||
| 789 | } | 865 | } |
src/main/java/com/genersoft/iot/vmp/utils/GitUtil.java
| @@ -13,7 +13,7 @@ public class GitUtil { | @@ -13,7 +13,7 @@ public class GitUtil { | ||
| 13 | 13 | ||
| 14 | @Value("${git.branch:}") | 14 | @Value("${git.branch:}") |
| 15 | private String branch; | 15 | private String branch; |
| 16 | - @Value("${git.commit.id:}") | 16 | + @Value("${git.commit.id.abbrev:}") |
| 17 | private String gitCommitId; | 17 | private String gitCommitId; |
| 18 | @Value("${git.remote.origin.url:}") | 18 | @Value("${git.remote.origin.url:}") |
| 19 | private String gitUrl; | 19 | private String gitUrl; |
src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java
| 1 | package com.genersoft.iot.vmp.utils; | 1 | package com.genersoft.iot.vmp.utils; |
| 2 | 2 | ||
| 3 | +import org.springframework.util.ObjectUtils; | ||
| 3 | import oshi.SystemInfo; | 4 | import oshi.SystemInfo; |
| 4 | -import oshi.hardware.CentralProcessor; | ||
| 5 | -import oshi.hardware.GlobalMemory; | ||
| 6 | -import oshi.hardware.HardwareAbstractionLayer; | ||
| 7 | -import oshi.hardware.NetworkIF; | 5 | +import oshi.hardware.*; |
| 8 | import oshi.software.os.OperatingSystem; | 6 | import oshi.software.os.OperatingSystem; |
| 9 | import oshi.util.FormatUtil; | 7 | import oshi.util.FormatUtil; |
| 10 | 8 | ||
| 9 | +import java.io.File; | ||
| 11 | import java.text.DecimalFormat; | 10 | import java.text.DecimalFormat; |
| 11 | +import java.util.ArrayList; | ||
| 12 | import java.util.HashMap; | 12 | import java.util.HashMap; |
| 13 | import java.util.List; | 13 | import java.util.List; |
| 14 | import java.util.Map; | 14 | import java.util.Map; |
| @@ -85,6 +85,19 @@ public class SystemInfoUtils { | @@ -85,6 +85,19 @@ public class SystemInfoUtils { | ||
| 85 | return map; | 85 | return map; |
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | + /** | ||
| 89 | + * 获取带宽总值 | ||
| 90 | + * @return | ||
| 91 | + */ | ||
| 92 | + public static long getNetworkTotal() { | ||
| 93 | + SystemInfo si = new SystemInfo(); | ||
| 94 | + HardwareAbstractionLayer hal = si.getHardware(); | ||
| 95 | + List<NetworkIF> recvNetworkIFs = hal.getNetworkIFs(); | ||
| 96 | + NetworkIF networkIF= recvNetworkIFs.get(recvNetworkIFs.size() - 1); | ||
| 97 | + | ||
| 98 | + return networkIF.getSpeed()/1048576L/8L; | ||
| 99 | + } | ||
| 100 | + | ||
| 88 | public static double formatUnits(long value, long prefix) { | 101 | public static double formatUnits(long value, long prefix) { |
| 89 | return (double)value / (double)prefix; | 102 | return (double)value / (double)prefix; |
| 90 | } | 103 | } |
| @@ -100,4 +113,31 @@ public class SystemInfoUtils { | @@ -100,4 +113,31 @@ public class SystemInfoUtils { | ||
| 100 | int processCount = os.getProcessCount(); | 113 | int processCount = os.getProcessCount(); |
| 101 | return processCount; | 114 | return processCount; |
| 102 | } | 115 | } |
| 116 | + | ||
| 117 | + public static List<Map<String, Object>> getDiskInfo() { | ||
| 118 | + List<Map<String, Object>> result = new ArrayList<>(); | ||
| 119 | + | ||
| 120 | + String osName = System.getProperty("os.name"); | ||
| 121 | + List<String> pathArray = new ArrayList<>(); | ||
| 122 | + if (osName.startsWith("Mac OS")) { | ||
| 123 | + // 苹果 | ||
| 124 | + pathArray.add("/"); | ||
| 125 | + } else if (osName.startsWith("Windows")) { | ||
| 126 | + // windows | ||
| 127 | + pathArray.add("C:"); | ||
| 128 | + } else { | ||
| 129 | + pathArray.add("/"); | ||
| 130 | + pathArray.add("/home"); | ||
| 131 | + } | ||
| 132 | + for (String path : pathArray) { | ||
| 133 | + Map<String, Object> infoMap = new HashMap<>(); | ||
| 134 | + infoMap.put("path", path); | ||
| 135 | + File partitionFile = new File(path); | ||
| 136 | + // 单位: GB | ||
| 137 | + infoMap.put("use", (partitionFile.getTotalSpace() - partitionFile.getFreeSpace())/1024/1024/1024D); | ||
| 138 | + infoMap.put("free", partitionFile.getFreeSpace()/1024/1024/1024D); | ||
| 139 | + result.add(infoMap); | ||
| 140 | + } | ||
| 141 | + return result; | ||
| 142 | + } | ||
| 103 | } | 143 | } |
src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java
0 → 100644
| 1 | +package com.genersoft.iot.vmp.vmanager.bean; | ||
| 2 | + | ||
| 3 | +public class ResourceBaceInfo { | ||
| 4 | + private int total; | ||
| 5 | + private int online; | ||
| 6 | + | ||
| 7 | + public int getTotal() { | ||
| 8 | + return total; | ||
| 9 | + } | ||
| 10 | + | ||
| 11 | + public void setTotal(int total) { | ||
| 12 | + this.total = total; | ||
| 13 | + } | ||
| 14 | + | ||
| 15 | + public int getOnline() { | ||
| 16 | + return online; | ||
| 17 | + } | ||
| 18 | + | ||
| 19 | + public void setOnline(int online) { | ||
| 20 | + this.online = online; | ||
| 21 | + } | ||
| 22 | +} |
src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java
0 → 100644
| 1 | +package com.genersoft.iot.vmp.vmanager.bean; | ||
| 2 | + | ||
| 3 | +public class ResourceInfo { | ||
| 4 | + | ||
| 5 | + private ResourceBaceInfo device; | ||
| 6 | + private ResourceBaceInfo channel; | ||
| 7 | + private ResourceBaceInfo push; | ||
| 8 | + private ResourceBaceInfo proxy; | ||
| 9 | + | ||
| 10 | + public ResourceBaceInfo getDevice() { | ||
| 11 | + return device; | ||
| 12 | + } | ||
| 13 | + | ||
| 14 | + public void setDevice(ResourceBaceInfo device) { | ||
| 15 | + this.device = device; | ||
| 16 | + } | ||
| 17 | + | ||
| 18 | + public ResourceBaceInfo getChannel() { | ||
| 19 | + return channel; | ||
| 20 | + } | ||
| 21 | + | ||
| 22 | + public void setChannel(ResourceBaceInfo channel) { | ||
| 23 | + this.channel = channel; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public ResourceBaceInfo getPush() { | ||
| 27 | + return push; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public void setPush(ResourceBaceInfo push) { | ||
| 31 | + this.push = push; | ||
| 32 | + } | ||
| 33 | + | ||
| 34 | + public ResourceBaceInfo getProxy() { | ||
| 35 | + return proxy; | ||
| 36 | + } | ||
| 37 | + | ||
| 38 | + public void setProxy(ResourceBaceInfo proxy) { | ||
| 39 | + this.proxy = proxy; | ||
| 40 | + } | ||
| 41 | +} |
src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java
| @@ -12,10 +12,13 @@ import com.genersoft.iot.vmp.conf.exception.ControllerException; | @@ -12,10 +12,13 @@ import com.genersoft.iot.vmp.conf.exception.ControllerException; | ||
| 12 | import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; | 12 | import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; |
| 13 | import com.genersoft.iot.vmp.media.zlm.dto.IHookSubscribe; | 13 | import com.genersoft.iot.vmp.media.zlm.dto.IHookSubscribe; |
| 14 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; | 14 | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| 15 | -import com.genersoft.iot.vmp.service.IMediaServerService; | 15 | +import com.genersoft.iot.vmp.service.*; |
| 16 | +import com.genersoft.iot.vmp.service.bean.MediaServerLoad; | ||
| 16 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 17 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| 17 | import com.genersoft.iot.vmp.utils.SpringBeanFactory; | 18 | import com.genersoft.iot.vmp.utils.SpringBeanFactory; |
| 18 | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; | 19 | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; |
| 20 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; | ||
| 21 | +import com.genersoft.iot.vmp.vmanager.bean.ResourceInfo; | ||
| 19 | import gov.nist.javax.sip.SipStackImpl; | 22 | import gov.nist.javax.sip.SipStackImpl; |
| 20 | 23 | ||
| 21 | import io.swagger.v3.oas.annotations.Operation; | 24 | import io.swagger.v3.oas.annotations.Operation; |
| @@ -30,8 +33,7 @@ import org.springframework.web.bind.annotation.*; | @@ -30,8 +33,7 @@ import org.springframework.web.bind.annotation.*; | ||
| 30 | import javax.sip.ListeningPoint; | 33 | import javax.sip.ListeningPoint; |
| 31 | import javax.sip.ObjectInUseException; | 34 | import javax.sip.ObjectInUseException; |
| 32 | import javax.sip.SipProvider; | 35 | import javax.sip.SipProvider; |
| 33 | -import java.util.Iterator; | ||
| 34 | -import java.util.List; | 36 | +import java.util.*; |
| 35 | 37 | ||
| 36 | @SuppressWarnings("rawtypes") | 38 | @SuppressWarnings("rawtypes") |
| 37 | @Tag(name = "服务控制") | 39 | @Tag(name = "服务控制") |
| @@ -55,6 +57,20 @@ public class ServerController { | @@ -55,6 +57,20 @@ public class ServerController { | ||
| 55 | @Autowired | 57 | @Autowired |
| 56 | private UserSetting userSetting; | 58 | private UserSetting userSetting; |
| 57 | 59 | ||
| 60 | + @Autowired | ||
| 61 | + private IDeviceService deviceService; | ||
| 62 | + | ||
| 63 | + @Autowired | ||
| 64 | + private IDeviceChannelService channelService; | ||
| 65 | + | ||
| 66 | + @Autowired | ||
| 67 | + private IStreamPushService pushService; | ||
| 68 | + | ||
| 69 | + | ||
| 70 | + @Autowired | ||
| 71 | + private IStreamProxyService proxyService; | ||
| 72 | + | ||
| 73 | + | ||
| 58 | @Value("${server.port}") | 74 | @Value("${server.port}") |
| 59 | private int serverPort; | 75 | private int serverPort; |
| 60 | 76 | ||
| @@ -213,6 +229,40 @@ public class ServerController { | @@ -213,6 +229,40 @@ public class ServerController { | ||
| 213 | @Operation(summary = "获取系统信息") | 229 | @Operation(summary = "获取系统信息") |
| 214 | public SystemAllInfo getSystemInfo() { | 230 | public SystemAllInfo getSystemInfo() { |
| 215 | SystemAllInfo systemAllInfo = redisCatchStorage.getSystemInfo(); | 231 | SystemAllInfo systemAllInfo = redisCatchStorage.getSystemInfo(); |
| 232 | + | ||
| 216 | return systemAllInfo; | 233 | return systemAllInfo; |
| 217 | } | 234 | } |
| 235 | + | ||
| 236 | + @GetMapping(value = "/media_server/load") | ||
| 237 | + @ResponseBody | ||
| 238 | + @Operation(summary = "获取负载信息") | ||
| 239 | + public List<MediaServerLoad> getMediaLoad() { | ||
| 240 | + List<MediaServerLoad> result = new ArrayList<>(); | ||
| 241 | + List<MediaServerItem> allOnline = mediaServerService.getAllOnline(); | ||
| 242 | + if (allOnline.size() == 0) { | ||
| 243 | + return result; | ||
| 244 | + }else { | ||
| 245 | + for (MediaServerItem mediaServerItem : allOnline) { | ||
| 246 | + result.add(mediaServerService.getLoad(mediaServerItem)); | ||
| 247 | + } | ||
| 248 | + } | ||
| 249 | + return result; | ||
| 250 | + } | ||
| 251 | + | ||
| 252 | + @GetMapping(value = "/resource/info") | ||
| 253 | + @ResponseBody | ||
| 254 | + @Operation(summary = "获取负载信息") | ||
| 255 | + public ResourceInfo getResourceInfo() { | ||
| 256 | + ResourceInfo result = new ResourceInfo(); | ||
| 257 | + ResourceBaceInfo deviceInfo = deviceService.getOverview(); | ||
| 258 | + result.setDevice(deviceInfo); | ||
| 259 | + ResourceBaceInfo channelInfo = channelService.getOverview(); | ||
| 260 | + result.setChannel(channelInfo); | ||
| 261 | + ResourceBaceInfo pushInfo = pushService.getOverview(); | ||
| 262 | + result.setPush(pushInfo); | ||
| 263 | + ResourceBaceInfo proxyInfo = proxyService.getOverview(); | ||
| 264 | + result.setProxy(proxyInfo); | ||
| 265 | + | ||
| 266 | + return result; | ||
| 267 | + } | ||
| 218 | } | 268 | } |
web_src/src/components/console.vue
| @@ -2,6 +2,10 @@ | @@ -2,6 +2,10 @@ | ||
| 2 | <div id="app" style="width: 100%"> | 2 | <div id="app" style="width: 100%"> |
| 3 | <div class="page-header"> | 3 | <div class="page-header"> |
| 4 | <div class="page-title">控制台</div> | 4 | <div class="page-title">控制台</div> |
| 5 | + <div class="page-header-btn"> | ||
| 6 | + <el-button icon="el-icon-info" size="mini" style="margin-right: 1rem;" type="primary" @click="showInfo">平台信息 | ||
| 7 | + </el-button> | ||
| 8 | + </div> | ||
| 5 | </div> | 9 | </div> |
| 6 | <el-row style="width: 100%"> | 10 | <el-row style="width: 100%"> |
| 7 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > | 11 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > |
| @@ -14,7 +18,7 @@ | @@ -14,7 +18,7 @@ | ||
| 14 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > | 18 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > |
| 15 | <div class="control-cell" id="WorkThreadsLoad" > | 19 | <div class="control-cell" id="WorkThreadsLoad" > |
| 16 | <div style="width:100%; height:100%; "> | 20 | <div style="width:100%; height:100%; "> |
| 17 | - <consoleMem ref="consoleMem"></consoleMem> | 21 | + <consoleResource ref="consoleResource"></consoleResource> |
| 18 | </div> | 22 | </div> |
| 19 | </div> | 23 | </div> |
| 20 | </el-col> | 24 | </el-col> |
| @@ -28,26 +32,25 @@ | @@ -28,26 +32,25 @@ | ||
| 28 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > | 32 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > |
| 29 | <div class="control-cell" id="WorkThreadsLoad" > | 33 | <div class="control-cell" id="WorkThreadsLoad" > |
| 30 | <div style="width:100%; height:100%; "> | 34 | <div style="width:100%; height:100%; "> |
| 31 | - <consoleCPU></consoleCPU> | 35 | + |
| 36 | + <consoleMem ref="consoleMem"></consoleMem> | ||
| 32 | </div> | 37 | </div> |
| 33 | </div> | 38 | </div> |
| 34 | </el-col> | 39 | </el-col> |
| 35 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > | 40 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > |
| 36 | <div class="control-cell" id="WorkThreadsLoad" > | 41 | <div class="control-cell" id="WorkThreadsLoad" > |
| 37 | <div style="width:100%; height:100%; "> | 42 | <div style="width:100%; height:100%; "> |
| 38 | - <consoleCPU></consoleCPU> | 43 | + <consoleNodeLoad ref="consoleNodeLoad"></consoleNodeLoad> |
| 39 | </div> | 44 | </div> |
| 40 | </div> | 45 | </div> |
| 41 | </el-col> | 46 | </el-col> |
| 42 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > | 47 | <el-col :xl="{ span: 8 }" :lg="{ span: 8 }" :md="{ span: 12 }" :sm="{ span: 12 }" :xs="{ span: 24 }" > |
| 43 | <div class="control-cell" id="WorkThreadsLoad" > | 48 | <div class="control-cell" id="WorkThreadsLoad" > |
| 44 | <div style="width:100%; height:100%; "> | 49 | <div style="width:100%; height:100%; "> |
| 45 | - <consoleCPU></consoleCPU> | 50 | + <consoleDisk ref="consoleDisk"></consoleDisk> |
| 46 | </div> | 51 | </div> |
| 47 | </div> | 52 | </div> |
| 48 | </el-col> | 53 | </el-col> |
| 49 | - | ||
| 50 | - | ||
| 51 | </el-row> | 54 | </el-row> |
| 52 | </div> | 55 | </div> |
| 53 | </template> | 56 | </template> |
| @@ -57,6 +60,9 @@ import uiHeader from '../layout/UiHeader.vue' | @@ -57,6 +60,9 @@ import uiHeader from '../layout/UiHeader.vue' | ||
| 57 | import consoleCPU from './console/ConsoleCPU.vue' | 60 | import consoleCPU from './console/ConsoleCPU.vue' |
| 58 | import consoleMem from './console/ConsoleMEM.vue' | 61 | import consoleMem from './console/ConsoleMEM.vue' |
| 59 | import consoleNet from './console/ConsoleNet.vue' | 62 | import consoleNet from './console/ConsoleNet.vue' |
| 63 | +import consoleNodeLoad from './console/ConsoleNodeLoad.vue' | ||
| 64 | +import consoleDisk from './console/ConsoleDisk.vue' | ||
| 65 | +import consoleResource from './console/ConsoleResource.vue' | ||
| 60 | 66 | ||
| 61 | import echarts from 'echarts'; | 67 | import echarts from 'echarts'; |
| 62 | 68 | ||
| @@ -67,7 +73,10 @@ export default { | @@ -67,7 +73,10 @@ export default { | ||
| 67 | uiHeader, | 73 | uiHeader, |
| 68 | consoleCPU, | 74 | consoleCPU, |
| 69 | consoleMem, | 75 | consoleMem, |
| 70 | - consoleNet | 76 | + consoleNet, |
| 77 | + consoleNodeLoad, | ||
| 78 | + consoleDisk, | ||
| 79 | + consoleResource, | ||
| 71 | }, | 80 | }, |
| 72 | data() { | 81 | data() { |
| 73 | return { | 82 | return { |
| @@ -76,7 +85,10 @@ export default { | @@ -76,7 +85,10 @@ export default { | ||
| 76 | }, | 85 | }, |
| 77 | created() { | 86 | created() { |
| 78 | this.getSystemInfo(); | 87 | this.getSystemInfo(); |
| 88 | + this.getLoad(); | ||
| 89 | + this.getResourceInfo(); | ||
| 79 | this.loopForSystemInfo(); | 90 | this.loopForSystemInfo(); |
| 91 | + | ||
| 80 | }, | 92 | }, |
| 81 | destroyed() { | 93 | destroyed() { |
| 82 | }, | 94 | }, |
| @@ -87,8 +99,10 @@ export default { | @@ -87,8 +99,10 @@ export default { | ||
| 87 | } | 99 | } |
| 88 | this.timer = setTimeout(()=>{ | 100 | this.timer = setTimeout(()=>{ |
| 89 | this.getSystemInfo(); | 101 | this.getSystemInfo(); |
| 102 | + this.getLoad(); | ||
| 90 | this.timer = null; | 103 | this.timer = null; |
| 91 | this.loopForSystemInfo() | 104 | this.loopForSystemInfo() |
| 105 | + this.getResourceInfo() | ||
| 92 | }, 2000) | 106 | }, 2000) |
| 93 | }, | 107 | }, |
| 94 | getSystemInfo: function (){ | 108 | getSystemInfo: function (){ |
| @@ -99,11 +113,38 @@ export default { | @@ -99,11 +113,38 @@ export default { | ||
| 99 | if (res.data.code === 0) { | 113 | if (res.data.code === 0) { |
| 100 | this.$refs.consoleCPU.setData(res.data.data.cpu) | 114 | this.$refs.consoleCPU.setData(res.data.data.cpu) |
| 101 | this.$refs.consoleMem.setData(res.data.data.mem) | 115 | this.$refs.consoleMem.setData(res.data.data.mem) |
| 102 | - this.$refs.consoleNet.setData(res.data.data.net) | 116 | + this.$refs.consoleNet.setData(res.data.data.net, res.data.data.netTotal) |
| 117 | + this.$refs.consoleDisk.setData(res.data.data.disk) | ||
| 103 | } | 118 | } |
| 104 | }).catch( (error)=> { | 119 | }).catch( (error)=> { |
| 105 | }); | 120 | }); |
| 121 | + }, | ||
| 122 | + getLoad: function (){ | ||
| 123 | + this.$axios({ | ||
| 124 | + method: 'get', | ||
| 125 | + url: `/api/server/media_server/load`, | ||
| 126 | + }).then( (res)=> { | ||
| 127 | + if (res.data.code === 0) { | ||
| 128 | + this.$refs.consoleNodeLoad.setData(res.data.data) | ||
| 129 | + } | ||
| 130 | + }).catch( (error)=> { | ||
| 131 | + }); | ||
| 132 | + }, | ||
| 133 | + getResourceInfo: function (){ | ||
| 134 | + this.$axios({ | ||
| 135 | + method: 'get', | ||
| 136 | + url: `/api/server/resource/info`, | ||
| 137 | + }).then( (res)=> { | ||
| 138 | + if (res.data.code === 0) { | ||
| 139 | + this.$refs.consoleResource.setData(res.data.data) | ||
| 140 | + } | ||
| 141 | + }).catch( (error)=> { | ||
| 142 | + }); | ||
| 143 | + }, | ||
| 144 | + showInfo: function (){ | ||
| 145 | + | ||
| 106 | } | 146 | } |
| 147 | + | ||
| 107 | } | 148 | } |
| 108 | }; | 149 | }; |
| 109 | </script> | 150 | </script> |
web_src/src/components/console/ConsoleCPU.vue
| 1 | <template> | 1 | <template> |
| 2 | <div id="consoleCPU" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> | 2 | <div id="consoleCPU" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> |
| 3 | - <ve-line :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> | 3 | + <ve-line ref="consoleCPU" :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> |
| 4 | </div> | 4 | </div> |
| 5 | </template> | 5 | </template> |
| 6 | 6 | ||
| @@ -59,7 +59,8 @@ export default { | @@ -59,7 +59,8 @@ export default { | ||
| 59 | trigger: 'axis', | 59 | trigger: 'axis', |
| 60 | formatter: (data)=>{ | 60 | formatter: (data)=>{ |
| 61 | console.log(data) | 61 | console.log(data) |
| 62 | - return moment(data[0].data[0]).format("HH:mm:ss") + "</br> 使用:" + (data[0].data[1]*100).toFixed(2) + "%"; | 62 | + return moment(data[0].data[0]).format("HH:mm:ss") + "</br> " |
| 63 | + + data[0].marker + "使用:" + (data[0].data[1]*100).toFixed(2) + "%"; | ||
| 63 | } | 64 | } |
| 64 | }, | 65 | }, |
| 65 | series: { | 66 | series: { |
| @@ -85,13 +86,16 @@ export default { | @@ -85,13 +86,16 @@ export default { | ||
| 85 | } | 86 | } |
| 86 | }; | 87 | }; |
| 87 | }, | 88 | }, |
| 89 | + created() { | ||
| 90 | + | ||
| 91 | + | ||
| 92 | + }, | ||
| 88 | mounted() { | 93 | mounted() { |
| 89 | - // setInterval(()=>{ | ||
| 90 | - // // console.log(111111) | ||
| 91 | - // for (let i = 0; i < this.chartData.rows.length; i++) { | ||
| 92 | - // this.chartData.rows[i].销售额 += 1000; | ||
| 93 | - // } | ||
| 94 | - // },1000) | 94 | + this.$nextTick(_ => { |
| 95 | + setTimeout(()=>{ | ||
| 96 | + this.$refs.consoleCPU.echarts.resize() | ||
| 97 | + }, 100) | ||
| 98 | + }) | ||
| 95 | }, | 99 | }, |
| 96 | destroyed() { | 100 | destroyed() { |
| 97 | }, | 101 | }, |
web_src/src/components/console/ConsoleDisk.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div id="ConsoleNet" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> | ||
| 3 | + <ve-bar ref="ConsoleNet" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-bar> | ||
| 4 | + </div> | ||
| 5 | +</template> | ||
| 6 | + | ||
| 7 | +<script> | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +import moment from "moment/moment"; | ||
| 11 | + | ||
| 12 | +export default { | ||
| 13 | + name: 'ConsoleNet', | ||
| 14 | + data() { | ||
| 15 | + return { | ||
| 16 | + chartData: { | ||
| 17 | + columns: ['path','free','use'], | ||
| 18 | + rows: [] | ||
| 19 | + }, | ||
| 20 | + chartSettings: { | ||
| 21 | + stack: { | ||
| 22 | + 'xxx': ['free', 'use'] | ||
| 23 | + }, | ||
| 24 | + labelMap: { | ||
| 25 | + 'free': '剩余', | ||
| 26 | + 'use': '已使用' | ||
| 27 | + }, | ||
| 28 | + }, | ||
| 29 | + extend: { | ||
| 30 | + title: { | ||
| 31 | + show: true, | ||
| 32 | + text: "磁盘", | ||
| 33 | + left: "center", | ||
| 34 | + top: 20, | ||
| 35 | + }, | ||
| 36 | + grid: { | ||
| 37 | + show: true, | ||
| 38 | + right: "30px", | ||
| 39 | + containLabel: true, | ||
| 40 | + }, | ||
| 41 | + series: { | ||
| 42 | + barWidth: 30 | ||
| 43 | + }, | ||
| 44 | + legend: { | ||
| 45 | + left: "center", | ||
| 46 | + bottom: "15px", | ||
| 47 | + }, | ||
| 48 | + tooltip: { | ||
| 49 | + trigger: 'axis', | ||
| 50 | + formatter: (data)=>{ | ||
| 51 | + console.log(data) | ||
| 52 | + let relVal = ""; | ||
| 53 | + for (let i = 0; i < data.length; i++) { | ||
| 54 | + relVal += data[i].marker + data[i].seriesName + ":" + data[i].value.toFixed(2) + "GB" | ||
| 55 | + if (i < data.length - 1) { | ||
| 56 | + relVal += "</br>"; | ||
| 57 | + } | ||
| 58 | + } | ||
| 59 | + return relVal; | ||
| 60 | + } | ||
| 61 | + }, | ||
| 62 | + | ||
| 63 | + } | ||
| 64 | + }; | ||
| 65 | + }, | ||
| 66 | + mounted() { | ||
| 67 | + this.$nextTick(_ => { | ||
| 68 | + setTimeout(()=>{ | ||
| 69 | + this.$refs.ConsoleNet.echarts.resize() | ||
| 70 | + }, 100) | ||
| 71 | + }) | ||
| 72 | + }, | ||
| 73 | + destroyed() { | ||
| 74 | + }, | ||
| 75 | + methods: { | ||
| 76 | + setData: function(data) { | ||
| 77 | + this.chartData.rows = data; | ||
| 78 | + } | ||
| 79 | + } | ||
| 80 | +}; | ||
| 81 | +</script> |
web_src/src/components/console/ConsoleMEM.vue
| 1 | <template> | 1 | <template> |
| 2 | <div id="ConsoleMEM" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> | 2 | <div id="ConsoleMEM" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> |
| 3 | - <ve-line :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> | 3 | + <ve-line ref="ConsoleMEM" :data="chartData" :extend="extend" width="100%" height="100%" :legend-visible="false"></ve-line> |
| 4 | </div> | 4 | </div> |
| 5 | </template> | 5 | </template> |
| 6 | 6 | ||
| @@ -59,7 +59,7 @@ export default { | @@ -59,7 +59,7 @@ export default { | ||
| 59 | trigger: 'axis', | 59 | trigger: 'axis', |
| 60 | formatter: (data)=>{ | 60 | formatter: (data)=>{ |
| 61 | console.log(data) | 61 | console.log(data) |
| 62 | - return moment(data[0].data[0]).format("HH:mm:ss") + "</br> 使用:" + (data[0].data[1]*100).toFixed(2) + "%"; | 62 | + return moment(data[0].data[0]).format("HH:mm:ss") + "</br>"+ data[0].marker +" 使用:" + (data[0].data[1]*100).toFixed(2) + "%"; |
| 63 | } | 63 | } |
| 64 | }, | 64 | }, |
| 65 | series: { | 65 | series: { |
| @@ -86,12 +86,11 @@ export default { | @@ -86,12 +86,11 @@ export default { | ||
| 86 | }; | 86 | }; |
| 87 | }, | 87 | }, |
| 88 | mounted() { | 88 | mounted() { |
| 89 | - // setInterval(()=>{ | ||
| 90 | - // // console.log(111111) | ||
| 91 | - // for (let i = 0; i < this.chartData.rows.length; i++) { | ||
| 92 | - // this.chartData.rows[i].销售额 += 1000; | ||
| 93 | - // } | ||
| 94 | - // },1000) | 89 | + this.$nextTick(_ => { |
| 90 | + setTimeout(()=>{ | ||
| 91 | + this.$refs.ConsoleMEM.echarts.resize() | ||
| 92 | + }, 100) | ||
| 93 | + }) | ||
| 95 | }, | 94 | }, |
| 96 | destroyed() { | 95 | destroyed() { |
| 97 | }, | 96 | }, |
| @@ -99,7 +98,6 @@ export default { | @@ -99,7 +98,6 @@ export default { | ||
| 99 | setData: function(data) { | 98 | setData: function(data) { |
| 100 | this.chartData .rows = data; | 99 | this.chartData .rows = data; |
| 101 | } | 100 | } |
| 102 | - | ||
| 103 | } | 101 | } |
| 104 | }; | 102 | }; |
| 105 | </script> | 103 | </script> |
web_src/src/components/console/ConsoleMediaServer.vue
| 1 | <template> | 1 | <template> |
| 2 | <div id="ConsoleMediaServer" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> | 2 | <div id="ConsoleMediaServer" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> |
| 3 | - <ve-histogram :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-histogram> | 3 | + <ve-histogram ref="ConsoleMEM" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-histogram> |
| 4 | </div> | 4 | </div> |
| 5 | </template> | 5 | </template> |
| 6 | 6 | ||
| @@ -66,12 +66,11 @@ export default { | @@ -66,12 +66,11 @@ export default { | ||
| 66 | }; | 66 | }; |
| 67 | }, | 67 | }, |
| 68 | mounted() { | 68 | mounted() { |
| 69 | - // setInterval(()=>{ | ||
| 70 | - // // console.log(111111) | ||
| 71 | - // for (let i = 0; i < this.chartData.rows.length; i++) { | ||
| 72 | - // this.chartData.rows[i].销售额 += 1000; | ||
| 73 | - // } | ||
| 74 | - // },1000) | 69 | + this.$nextTick(_ => { |
| 70 | + setTimeout(()=>{ | ||
| 71 | + this.$refs.ConsoleMEM.echarts.resize() | ||
| 72 | + }, 100) | ||
| 73 | + }) | ||
| 75 | }, | 74 | }, |
| 76 | destroyed() { | 75 | destroyed() { |
| 77 | }, | 76 | }, |
web_src/src/components/console/ConsoleNet.vue
| 1 | <template> | 1 | <template> |
| 2 | <div id="ConsoleNet" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> | 2 | <div id="ConsoleNet" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> |
| 3 | - <ve-line :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-line> | 3 | + <ve-line ref="ConsoleNet" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" ></ve-line> |
| 4 | </div> | 4 | </div> |
| 5 | </template> | 5 | </template> |
| 6 | 6 | ||
| @@ -14,7 +14,7 @@ export default { | @@ -14,7 +14,7 @@ export default { | ||
| 14 | data() { | 14 | data() { |
| 15 | return { | 15 | return { |
| 16 | chartData: { | 16 | chartData: { |
| 17 | - columns: ['time', 'in', 'out'], | 17 | + columns: ['time','out','in'], |
| 18 | rows: [] | 18 | rows: [] |
| 19 | }, | 19 | }, |
| 20 | chartSettings: { | 20 | chartSettings: { |
| @@ -48,13 +48,18 @@ export default { | @@ -48,13 +48,18 @@ export default { | ||
| 48 | showMaxLabel: true, | 48 | showMaxLabel: true, |
| 49 | }, | 49 | }, |
| 50 | }, | 50 | }, |
| 51 | + yAxis: { | ||
| 52 | + type: 'value', | ||
| 53 | + min: 0, | ||
| 54 | + max: 1000, | ||
| 55 | + splitNumber: 6, | ||
| 56 | + position: "left", | ||
| 57 | + silent: true, | ||
| 58 | + }, | ||
| 51 | tooltip: { | 59 | tooltip: { |
| 52 | trigger: 'axis', | 60 | trigger: 'axis', |
| 53 | formatter: (data)=>{ | 61 | formatter: (data)=>{ |
| 54 | - console.log(parseFloat(data[0].data[1]).toFixed(2)) | ||
| 55 | - console.log(parseFloat(data[1].data[1]).toFixed(2)) | ||
| 56 | - console.log("############") | ||
| 57 | - return "下载:" + parseFloat(data[0].data[1]).toFixed(2) + "Mbps" + "</br> 上传:" + parseFloat(data[1].data[1]).toFixed(2) + "Mbps"; | 62 | + return data[1].marker + "下载:" + parseFloat(data[1].data[1]).toFixed(2) + "Mbps" + "</br> "+ data[0].marker +" 上传:" + parseFloat(data[0].data[1]).toFixed(2) + "Mbps"; |
| 58 | } | 63 | } |
| 59 | }, | 64 | }, |
| 60 | legend: { | 65 | legend: { |
| @@ -65,19 +70,18 @@ export default { | @@ -65,19 +70,18 @@ export default { | ||
| 65 | }; | 70 | }; |
| 66 | }, | 71 | }, |
| 67 | mounted() { | 72 | mounted() { |
| 68 | - // setInterval(()=>{ | ||
| 69 | - // // console.log(111111) | ||
| 70 | - // for (let i = 0; i < this.chartData.rows.length; i++) { | ||
| 71 | - // this.chartData.rows[i].销售额 += 1000; | ||
| 72 | - // } | ||
| 73 | - // },1000) | 73 | + this.$nextTick(_ => { |
| 74 | + setTimeout(()=>{ | ||
| 75 | + this.$refs.ConsoleNet.echarts.resize() | ||
| 76 | + }, 100) | ||
| 77 | + }) | ||
| 74 | }, | 78 | }, |
| 75 | destroyed() { | 79 | destroyed() { |
| 76 | }, | 80 | }, |
| 77 | methods: { | 81 | methods: { |
| 78 | - setData: function(data) { | ||
| 79 | - console.log(data) | 82 | + setData: function(data, total) { |
| 80 | this.chartData .rows = data; | 83 | this.chartData .rows = data; |
| 84 | + this.extend.yAxis.max= total; | ||
| 81 | } | 85 | } |
| 82 | 86 | ||
| 83 | } | 87 | } |
web_src/src/components/console/ConsoleNodeLoad.vue
0 → 100644
| 1 | +<template> | ||
| 2 | + <div id="ConsoleNodeLoad" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> | ||
| 3 | + <ve-histogram ref="consoleNodeLoad" :data="chartData" :extend="extend" :settings="chartSettings" width="100%" height="100%" :legend-visible="true"></ve-histogram> | ||
| 4 | + </div> | ||
| 5 | +</template> | ||
| 6 | + | ||
| 7 | +<script> | ||
| 8 | + | ||
| 9 | + | ||
| 10 | +import moment from "moment/moment"; | ||
| 11 | + | ||
| 12 | +export default { | ||
| 13 | + name: 'ConsoleNodeLoad', | ||
| 14 | + data() { | ||
| 15 | + return { | ||
| 16 | + chartData: { | ||
| 17 | + columns: ['id', 'push', 'proxy', 'gbReceive', 'gbSend'], | ||
| 18 | + rows: [] | ||
| 19 | + }, | ||
| 20 | + chartSettings: { | ||
| 21 | + labelMap: { | ||
| 22 | + 'push': '直播推流', | ||
| 23 | + 'proxy': '拉流代理', | ||
| 24 | + 'gbReceive': '国标收流', | ||
| 25 | + 'gbSend': '国标推流', | ||
| 26 | + }, | ||
| 27 | + }, | ||
| 28 | + extend: { | ||
| 29 | + title: { | ||
| 30 | + show: true, | ||
| 31 | + text: "节点负载", | ||
| 32 | + left: "center", | ||
| 33 | + top: 20, | ||
| 34 | + | ||
| 35 | + }, | ||
| 36 | + legend: { | ||
| 37 | + left: "center", | ||
| 38 | + bottom: "15px", | ||
| 39 | + }, | ||
| 40 | + label: { | ||
| 41 | + show: true, | ||
| 42 | + position: "top" | ||
| 43 | + } | ||
| 44 | + } | ||
| 45 | + }; | ||
| 46 | + }, | ||
| 47 | + mounted() { | ||
| 48 | + this.$nextTick(_ => { | ||
| 49 | + setTimeout(()=>{ | ||
| 50 | + this.$refs.consoleNodeLoad.echarts.resize() | ||
| 51 | + }, 100) | ||
| 52 | + }) | ||
| 53 | + }, | ||
| 54 | + destroyed() { | ||
| 55 | + }, | ||
| 56 | + methods: { | ||
| 57 | + setData: function(data) { | ||
| 58 | + this.chartData .rows = data; | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + } | ||
| 62 | +}; | ||
| 63 | +</script> |
web_src/src/components/console/ConsoleResource.vue
0 → 100644
| 1 | +<template > | ||
| 2 | + <div id="consoleResource" style="width: 100%; height: 100%; background: #FFFFFF; text-align: center"> | ||
| 3 | + <div style="width: 50%;height: 50%; float:left; "> | ||
| 4 | + <el-progress :width="100" :stroke-width="8" type="circle" :percentage="deviceInfo.online/deviceInfo.total*100" style="margin-top: 20px; font-size: 18px"></el-progress> | ||
| 5 | + <div class="resourceInfo"> | ||
| 6 | + 设备总数:{{deviceInfo.total}}<br/> | ||
| 7 | + 在线数:{{deviceInfo.online}} | ||
| 8 | + </div> | ||
| 9 | + </div> | ||
| 10 | + <div style="width: 50%;height: 50%; float:left; "> | ||
| 11 | + <el-progress :width="100" :stroke-width="10" type="circle" :percentage="channelInfo.online/channelInfo.total*100" style="margin-top: 20px"></el-progress> | ||
| 12 | + <div class="resourceInfo"> | ||
| 13 | + 通道总数:{{channelInfo.total}}<br/> | ||
| 14 | + 在线数:{{channelInfo.online}} | ||
| 15 | + </div> | ||
| 16 | + </div> | ||
| 17 | + <div style="width: 50%;height: 50%; float:left; "> | ||
| 18 | + <el-progress :width="100" :stroke-width="10" type="circle" :percentage="pushInfo.online/pushInfo.total*100" style="margin-top: 20px"></el-progress> | ||
| 19 | + <div class="resourceInfo"> | ||
| 20 | + 推流总数:{{pushInfo.total}}<br/> | ||
| 21 | + 在线数:{{pushInfo.online}} | ||
| 22 | + </div> | ||
| 23 | + </div> | ||
| 24 | + <div style="width: 50%;height: 50%; float:left; "> | ||
| 25 | + <el-progress :width="100" :stroke-width="10" type="circle" :percentage="proxyInfo.online/proxyInfo.total*100" style="margin-top: 20px"></el-progress> | ||
| 26 | + <div class="resourceInfo"> | ||
| 27 | + 拉流代理总数:{{proxyInfo.total}}<br/> | ||
| 28 | + 在线数:{{proxyInfo.online}} | ||
| 29 | + </div> | ||
| 30 | + </div> | ||
| 31 | + </div> | ||
| 32 | +</template> | ||
| 33 | + | ||
| 34 | +<script> | ||
| 35 | + | ||
| 36 | +export default { | ||
| 37 | + name: 'consoleResource', | ||
| 38 | + data() { | ||
| 39 | + return { | ||
| 40 | + deviceInfo: { | ||
| 41 | + total: 0, | ||
| 42 | + online: 0 | ||
| 43 | + }, | ||
| 44 | + channelInfo: { | ||
| 45 | + total: 0, | ||
| 46 | + online: 0 | ||
| 47 | + }, | ||
| 48 | + pushInfo: { | ||
| 49 | + total: 0, | ||
| 50 | + online: 0 | ||
| 51 | + }, | ||
| 52 | + proxyInfo: { | ||
| 53 | + total: 0, | ||
| 54 | + online: 0 | ||
| 55 | + }, | ||
| 56 | + }; | ||
| 57 | + }, | ||
| 58 | + created() { | ||
| 59 | + | ||
| 60 | + | ||
| 61 | + }, | ||
| 62 | + mounted() { | ||
| 63 | + }, | ||
| 64 | + destroyed() { | ||
| 65 | + }, | ||
| 66 | + methods: { | ||
| 67 | + setData: function(data) { | ||
| 68 | + this.deviceInfo = data.device; | ||
| 69 | + this.channelInfo = data.channel; | ||
| 70 | + this.pushInfo = data.push; | ||
| 71 | + this.proxyInfo = data.proxy; | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | +}; | ||
| 75 | +</script> | ||
| 76 | + | ||
| 77 | +<style> | ||
| 78 | +.resourceInfo{ | ||
| 79 | + width: 100%; | ||
| 80 | + text-align: center; | ||
| 81 | + font-size: 12px | ||
| 82 | +} | ||
| 83 | +.el-progress__text { | ||
| 84 | + font-size: 18px !important; | ||
| 85 | +} | ||
| 86 | +</style> |
web_src/src/layout/UiHeader.vue
| @@ -4,7 +4,7 @@ | @@ -4,7 +4,7 @@ | ||
| 4 | <el-menu router :default-active="activeIndex" menu-trigger="click" background-color="#001529" text-color="#fff" | 4 | <el-menu router :default-active="activeIndex" menu-trigger="click" background-color="#001529" text-color="#fff" |
| 5 | active-text-color="#1890ff" mode="horizontal"> | 5 | active-text-color="#1890ff" mode="horizontal"> |
| 6 | 6 | ||
| 7 | - <el-menu-item index="/control">控制台</el-menu-item> | 7 | + <el-menu-item index="/console">控制台</el-menu-item> |
| 8 | <el-menu-item index="/live">分屏监控</el-menu-item> | 8 | <el-menu-item index="/live">分屏监控</el-menu-item> |
| 9 | <el-menu-item index="/deviceList">国标设备</el-menu-item> | 9 | <el-menu-item index="/deviceList">国标设备</el-menu-item> |
| 10 | <el-menu-item index="/map">电子地图</el-menu-item> | 10 | <el-menu-item index="/map">电子地图</el-menu-item> |
web_src/src/layout/index.vue