ServerController.java 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. package com.genersoft.iot.vmp.vmanager.server;
  2. import com.alibaba.fastjson2.JSON;
  3. import com.alibaba.fastjson2.JSONObject;
  4. import com.genersoft.iot.vmp.VManageBootstrap;
  5. import com.genersoft.iot.vmp.common.SystemAllInfo;
  6. import com.genersoft.iot.vmp.common.VersionPo;
  7. import com.genersoft.iot.vmp.conf.SipConfig;
  8. import com.genersoft.iot.vmp.conf.UserSetting;
  9. import com.genersoft.iot.vmp.conf.VersionInfo;
  10. import com.genersoft.iot.vmp.conf.exception.ControllerException;
  11. import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
  12. import com.genersoft.iot.vmp.media.zlm.dto.IHookSubscribe;
  13. import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
  14. import com.genersoft.iot.vmp.service.*;
  15. import com.genersoft.iot.vmp.service.bean.MediaServerLoad;
  16. import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
  17. import com.genersoft.iot.vmp.utils.SpringBeanFactory;
  18. import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
  19. import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo;
  20. import com.genersoft.iot.vmp.vmanager.bean.ResourceInfo;
  21. import com.genersoft.iot.vmp.vmanager.bean.SystemConfigInfo;
  22. import gov.nist.javax.sip.SipStackImpl;
  23. import io.swagger.v3.oas.annotations.Operation;
  24. import io.swagger.v3.oas.annotations.Parameter;
  25. import io.swagger.v3.oas.annotations.tags.Tag;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.beans.factory.annotation.Value;
  28. import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
  29. import org.springframework.util.ObjectUtils;
  30. import org.springframework.web.bind.annotation.*;
  31. import javax.sip.ListeningPoint;
  32. import javax.sip.ObjectInUseException;
  33. import javax.sip.SipProvider;
  34. import java.util.*;
  35. @SuppressWarnings("rawtypes")
  36. @Tag(name = "服务控制")
  37. @CrossOrigin
  38. @RestController
  39. @RequestMapping("/api/server")
  40. public class ServerController {
  41. @Autowired
  42. private ZlmHttpHookSubscribe zlmHttpHookSubscribe;
  43. @Autowired
  44. private IMediaServerService mediaServerService;
  45. @Autowired
  46. private VersionInfo versionInfo;
  47. @Autowired
  48. private SipConfig sipConfig;
  49. @Autowired
  50. private UserSetting userSetting;
  51. @Autowired
  52. private IDeviceService deviceService;
  53. @Autowired
  54. private IDeviceChannelService channelService;
  55. @Autowired
  56. private IStreamPushService pushService;
  57. @Autowired
  58. private IStreamProxyService proxyService;
  59. @Value("${server.port}")
  60. private int serverPort;
  61. @Autowired
  62. private ThreadPoolTaskExecutor taskExecutor;
  63. @Autowired
  64. private IRedisCatchStorage redisCatchStorage;
  65. @GetMapping(value = "/media_server/list")
  66. @ResponseBody
  67. @Operation(summary = "流媒体服务列表")
  68. public List<MediaServerItem> getMediaServerList() {
  69. return mediaServerService.getAll();
  70. }
  71. @GetMapping(value = "/media_server/online/list")
  72. @ResponseBody
  73. @Operation(summary = "在线流媒体服务列表")
  74. public List<MediaServerItem> getOnlineMediaServerList() {
  75. return mediaServerService.getAllOnline();
  76. }
  77. @GetMapping(value = "/media_server/one/{id}")
  78. @ResponseBody
  79. @Operation(summary = "停止视频回放")
  80. @Parameter(name = "id", description = "流媒体服务ID", required = true)
  81. public MediaServerItem getMediaServer(@PathVariable String id) {
  82. return mediaServerService.getOne(id);
  83. }
  84. @Operation(summary = "测试流媒体服务")
  85. @Parameter(name = "ip", description = "流媒体服务IP", required = true)
  86. @Parameter(name = "port", description = "流媒体服务HTT端口", required = true)
  87. @Parameter(name = "secret", description = "流媒体服务secret", required = true)
  88. @GetMapping(value = "/media_server/check")
  89. @ResponseBody
  90. public MediaServerItem checkMediaServer(@RequestParam String ip, @RequestParam int port, @RequestParam String secret) {
  91. return mediaServerService.checkMediaServer(ip, port, secret);
  92. }
  93. @Operation(summary = "测试流媒体录像管理服务")
  94. @Parameter(name = "ip", description = "流媒体服务IP", required = true)
  95. @Parameter(name = "port", description = "流媒体服务HTT端口", required = true)
  96. @GetMapping(value = "/media_server/record/check")
  97. @ResponseBody
  98. public void checkMediaRecordServer(@RequestParam String ip, @RequestParam int port) {
  99. boolean checkResult = mediaServerService.checkMediaRecordServer(ip, port);
  100. if (!checkResult) {
  101. throw new ControllerException(ErrorCode.ERROR100.getCode(), "连接失败");
  102. }
  103. }
  104. @Operation(summary = "保存流媒体服务")
  105. @Parameter(name = "mediaServerItem", description = "流媒体信息", required = true)
  106. @PostMapping(value = "/media_server/save")
  107. @ResponseBody
  108. public void saveMediaServer(@RequestBody MediaServerItem mediaServerItem) {
  109. MediaServerItem mediaServerItemInDatabase = mediaServerService.getOne(mediaServerItem.getId());
  110. if (mediaServerItemInDatabase != null) {
  111. mediaServerService.update(mediaServerItem);
  112. } else {
  113. mediaServerService.add(mediaServerItem);
  114. }
  115. }
  116. @Operation(summary = "移除流媒体服务")
  117. @Parameter(name = "id", description = "流媒体ID", required = true)
  118. @DeleteMapping(value = "/media_server/delete")
  119. @ResponseBody
  120. public void deleteMediaServer(@RequestParam String id) {
  121. if (mediaServerService.getOne(id) == null) {
  122. throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到此节点");
  123. }
  124. mediaServerService.delete(id);
  125. mediaServerService.deleteDb(id);
  126. }
  127. @Operation(summary = "重启服务")
  128. @GetMapping(value = "/restart")
  129. @ResponseBody
  130. public void restart() {
  131. taskExecutor.execute(()-> {
  132. try {
  133. Thread.sleep(3000);
  134. SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider");
  135. SipStackImpl stack = (SipStackImpl) up.getSipStack();
  136. stack.stop();
  137. Iterator listener = stack.getListeningPoints();
  138. while (listener.hasNext()) {
  139. stack.deleteListeningPoint((ListeningPoint) listener.next());
  140. }
  141. Iterator providers = stack.getSipProviders();
  142. while (providers.hasNext()) {
  143. stack.deleteSipProvider((SipProvider) providers.next());
  144. }
  145. VManageBootstrap.restart();
  146. } catch (InterruptedException | ObjectInUseException e) {
  147. throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage());
  148. }
  149. });
  150. };
  151. @Operation(summary = "获取系统信息信息")
  152. @GetMapping(value = "/system/configInfo")
  153. @ResponseBody
  154. public SystemConfigInfo getConfigInfo() {
  155. SystemConfigInfo systemConfigInfo = new SystemConfigInfo();
  156. systemConfigInfo.setVersion(versionInfo.getVersion());
  157. systemConfigInfo.setSip(sipConfig);
  158. systemConfigInfo.setAddOn(userSetting);
  159. systemConfigInfo.setServerPort(serverPort);
  160. return systemConfigInfo;
  161. }
  162. @Operation(summary = "获取版本信息")
  163. @GetMapping(value = "/version")
  164. @ResponseBody
  165. public VersionPo VersionPogetVersion() {
  166. return versionInfo.getVersion();
  167. }
  168. @GetMapping(value = "/config")
  169. @Operation(summary = "获取配置信息")
  170. @Parameter(name = "type", description = "配置类型(sip, base)", required = true)
  171. @ResponseBody
  172. public JSONObject getVersion(String type) {
  173. JSONObject jsonObject = new JSONObject();
  174. jsonObject.put("server.port", serverPort);
  175. if (ObjectUtils.isEmpty(type)) {
  176. jsonObject.put("sip", JSON.toJSON(sipConfig));
  177. jsonObject.put("base", JSON.toJSON(userSetting));
  178. } else {
  179. switch (type) {
  180. case "sip":
  181. jsonObject.put("sip", sipConfig);
  182. break;
  183. case "base":
  184. jsonObject.put("base", userSetting);
  185. break;
  186. default:
  187. break;
  188. }
  189. }
  190. return jsonObject;
  191. }
  192. @GetMapping(value = "/hooks")
  193. @ResponseBody
  194. @Operation(summary = "获取当前所有hook")
  195. public List<IHookSubscribe> getHooks() {
  196. return zlmHttpHookSubscribe.getAll();
  197. }
  198. @GetMapping(value = "/system/info")
  199. @ResponseBody
  200. @Operation(summary = "获取系统信息")
  201. public SystemAllInfo getSystemInfo() {
  202. SystemAllInfo systemAllInfo = redisCatchStorage.getSystemInfo();
  203. return systemAllInfo;
  204. }
  205. @GetMapping(value = "/media_server/load")
  206. @ResponseBody
  207. @Operation(summary = "获取负载信息")
  208. public List<MediaServerLoad> getMediaLoad() {
  209. List<MediaServerLoad> result = new ArrayList<>();
  210. List<MediaServerItem> allOnline = mediaServerService.getAllOnline();
  211. if (allOnline.size() == 0) {
  212. return result;
  213. }else {
  214. for (MediaServerItem mediaServerItem : allOnline) {
  215. result.add(mediaServerService.getLoad(mediaServerItem));
  216. }
  217. }
  218. return result;
  219. }
  220. @GetMapping(value = "/resource/info")
  221. @ResponseBody
  222. @Operation(summary = "获取负载信息")
  223. public ResourceInfo getResourceInfo() {
  224. ResourceInfo result = new ResourceInfo();
  225. ResourceBaceInfo deviceInfo = deviceService.getOverview();
  226. result.setDevice(deviceInfo);
  227. ResourceBaceInfo channelInfo = channelService.getOverview();
  228. result.setChannel(channelInfo);
  229. ResourceBaceInfo pushInfo = pushService.getOverview();
  230. result.setPush(pushInfo);
  231. ResourceBaceInfo proxyInfo = proxyService.getOverview();
  232. result.setProxy(proxyInfo);
  233. return result;
  234. }
  235. }