济菏高速数据中心代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

107 lines
3.4 KiB

package com.zc.business.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.zc.business.domain.DcSwitch;
import com.zc.business.service.DcSwitchService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.io.IOException;
import java.net.InetAddress;
import java.util.Date;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
* 交换机Controller
*
* @author wangjiabao
*/
@Api(tags = {"交换机"})
@RestController
@RequestMapping("/business/switch")
public class DcSwitchController extends BaseController {
@Resource
private DcSwitchService dcSwitchService;
/**
* 查询交换机
*/
@ApiOperation("查询交换机")
@GetMapping("/query")
public AjaxResult getSwitchList(DcSwitch dcSwitch) {
return AjaxResult.success(dcSwitchService.getSwitchList(dcSwitch));
}
/**
* 根据设备列表查询设备
*/
@ApiOperation("根据设备列表查询设备")
@GetMapping("/deviceList/{deviceList}")
public AjaxResult getDeviceList(@PathVariable String deviceList) {
return AjaxResult.success(dcSwitchService.getDeviceList(deviceList));
}
/**
* 查询所有数据
*
* @return
*/
@GetMapping("/list")
public AjaxResult getSwitchListAll() {
return AjaxResult.success(dcSwitchService.getSwitchListAll());
}
/**
* 定时更新交换机网络状态
*/
@Scheduled(cron = "0 0/30 * * * ?")
public void updateNetWorkStatus() {
List<DcSwitch> switchList = dcSwitchService.getSwitchList(new DcSwitch());
ExecutorService executor = Executors.newFixedThreadPool(100);
List<DcSwitch> collect = switchList.stream()
.filter(dcSwitch -> {
return dcSwitch.getParentId() != null;
}).collect(Collectors.toList());
CountDownLatch latch = new CountDownLatch(collect.size());
collect.forEach(dcSwitch -> {
executor.execute(() -> {
try {
InetAddress inet = InetAddress.getByName(dcSwitch.getSwitchIp());
if (inet.isReachable(5000)) {
// 成功
dcSwitch.setNetWorkStatus(1);
} else {
// 失败
dcSwitch.setNetWorkStatus(0);
}
dcSwitch.setUpdateTime(new Date());
} catch (IOException e) {
e.getMessage();
} finally {
latch.countDown();
}
});
});
try {
latch.await(); // 等待所有线程执行完毕
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
executor.shutdown();
}
// 批量修改
dcSwitchService.updateBatchByNetWorkStatus(collect);
}
}