fix
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package com.sunyard.snmp;
|
||||
|
||||
import org.snmp4j.*;
|
||||
import org.snmp4j.event.ResponseEvent;
|
||||
import org.snmp4j.event.ResponseListener;
|
||||
import org.snmp4j.mp.*;
|
||||
import org.snmp4j.security.*;
|
||||
import org.snmp4j.smi.*;
|
||||
@@ -40,33 +42,35 @@ public class SnmpTrapSender implements AutoCloseable{
|
||||
snmp.listen();
|
||||
}
|
||||
|
||||
public void sendTrap(String message, int severity) throws IOException {
|
||||
public ResponseEvent sendTrap(String message, int severity) throws IOException {
|
||||
ResponseEvent event = null;
|
||||
switch (version) {
|
||||
case SnmpConstants.version1:
|
||||
sendV1Trap(message, severity);
|
||||
event = sendV1Trap(message, severity);
|
||||
break;
|
||||
case SnmpConstants.version2c:
|
||||
sendV2Trap(message, severity);
|
||||
event = sendV2Trap(message, severity);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("不支持的SNMP版本");
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
private void sendV1Trap(String message, int severity) throws IOException {
|
||||
private ResponseEvent sendV1Trap(String message, int severity) throws IOException {
|
||||
CommunityTarget target = createCommunityTarget(SnmpConstants.version1);
|
||||
PDUv1 pdu = new PDUv1();
|
||||
configureCommonTrap(pdu, message, severity);
|
||||
pdu.setGenericTrap(PDUv1.ENTERPRISE_SPECIFIC);
|
||||
snmp.send(pdu, target);
|
||||
return snmp.send(pdu, target);
|
||||
}
|
||||
|
||||
private void sendV2Trap(String message, int severity) throws IOException {
|
||||
private ResponseEvent sendV2Trap(String message, int severity) throws IOException {
|
||||
CommunityTarget target = createCommunityTarget(SnmpConstants.version2c);
|
||||
PDU pdu = new PDU();
|
||||
configureCommonTrap(pdu, message, severity);
|
||||
pdu.setType(PDU.TRAP);
|
||||
snmp.send(pdu, target);
|
||||
return snmp.send(pdu, target);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -30,6 +30,11 @@ import org.bouncycastle.asn1.cms.ContentInfo;
|
||||
import org.bouncycastle.cms.SydCmsUtil;
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider;
|
||||
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.snmp4j.PDU;
|
||||
import org.snmp4j.event.ResponseEvent;
|
||||
import org.snmp4j.mp.SnmpConstants;
|
||||
import racal.sunyard.main.dto.DTO77;
|
||||
import racal.sunyard.main.dto.DTO78;
|
||||
import racal.sunyard.main.dto.DTO79;
|
||||
@@ -61,6 +66,8 @@ import static org.bouncycastle.asn1.ASN1Encoding.DL;
|
||||
|
||||
public class SydApi4j implements SydApi {
|
||||
|
||||
private final static Logger log = LoggerFactory.getLogger(SydApi4j.class);
|
||||
|
||||
static {
|
||||
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
|
||||
}
|
||||
@@ -1320,19 +1327,31 @@ public class SydApi4j implements SydApi {
|
||||
addressList.stream().map(p -> createTaskContext(p, timeout, cert)).collect(Collectors.toList());
|
||||
AsyncTaskExecutor executor = new AsyncTaskExecutor();
|
||||
List<TaskOutcome<String>> taskOutcomes = executor.execBatchTasks(taskContexts);
|
||||
executor.shutdown();
|
||||
//失败的记录日志
|
||||
List<String> failures = new ArrayList<>();
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.append("日期:").append(LocalDateTime.now()).append("\n");
|
||||
for (TaskOutcome<String> taskOutcome : taskOutcomes) {
|
||||
if (!taskOutcome.isSuccess()) {
|
||||
failures.add(taskOutcome.getContext().getAddress());
|
||||
stringBuilder.append("ip:").append(taskOutcome.getContext().getAddress()).append("/证书导入失败:").append(taskOutcome.getError().getMessage()).append("\n");
|
||||
stringBuilder.append("签名服务器:").append(taskOutcome.getContext().getAddress()).append("/导入失败:").append(taskOutcome.getError().getMessage()).append("\n");
|
||||
}
|
||||
}
|
||||
if (!failures.isEmpty()) {
|
||||
String dn = "";
|
||||
String serialNumber = "";
|
||||
X509Certificate certificate = null;
|
||||
try {
|
||||
certificate = CertUtil.convertToX509Cert(cert);
|
||||
dn = certificate.getSubjectDN().toString();
|
||||
serialNumber = certificate.getSerialNumber().toString();
|
||||
} catch (Exception e) {
|
||||
log.info("证书格式错误!");
|
||||
}
|
||||
//记录失败日志
|
||||
stringBuilder.append("行号:").append(bkCode).append("\n").append("证书:").append(cert);
|
||||
stringBuilder.append("行号:").append(bkCode).append("\n").append("DN:").append(dn)
|
||||
.append("\n序列号:").append(serialNumber).append("\n证书:").append(cert);
|
||||
log.warn("证书导入失败!\n{}", stringBuilder);
|
||||
//异步发送snmp trap消息
|
||||
String result = "[" + failures.stream()
|
||||
.map(Object::toString)
|
||||
@@ -1342,12 +1361,20 @@ public class SydApi4j implements SydApi {
|
||||
Gson gson = new Gson();
|
||||
Map<String, String> map = gson.fromJson(snmpConfig, new TypeToken<Map<String, String>>() {}.getType());
|
||||
try (SnmpTrapSender sender = new SnmpTrapSender(map)) {
|
||||
sender.sendTrap(message, 2);
|
||||
System.out.println("snmp告警消息发送成功:" + message);
|
||||
} catch (IOException e) {
|
||||
System.out.println("snmp告警消息发送失败:" + e.getMessage());
|
||||
ResponseEvent event = sender.sendTrap(message, 2);
|
||||
log.info("snmp告警消息发送成功:{}", message);
|
||||
// if (event != null && event.getResponse() != null) {
|
||||
// PDU response = event.getResponse();
|
||||
// if (response.getErrorStatus() == PDU.noError) {
|
||||
// log.info("snmp告警消息发送成功:{}/响应数据:{}", message, response.getVariableBindings());
|
||||
// } else {
|
||||
// log.info("snmp告警消息发送失败:{}", SnmpConstants.mpErrorMessage(response.getErrorStatus()));
|
||||
// }
|
||||
// }
|
||||
} catch (Exception e) {
|
||||
log.warn("snmp告警消息发送失败:{}", e.getMessage());
|
||||
}
|
||||
throw new SydApiException(String.valueOf(stringBuilder), 56300, true);
|
||||
throw new SydApiException("证书导入失败!", 56300, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user