ServerController.java 9.5 KB

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