diff --git a/pom.xml b/pom.xml
index d0d8756..ddb6e24 100644
--- a/pom.xml
+++ b/pom.xml
@@ -94,33 +94,12 @@
gson
2.13.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ ch.qos.logback
+ logback-classic
+ 1.3.15
+ compile
+
diff --git a/src/main/java/com/sunyard/snmp/SnmpTrapSender.java b/src/main/java/com/sunyard/snmp/SnmpTrapSender.java
index 06da41e..b9e17ea 100644
--- a/src/main/java/com/sunyard/snmp/SnmpTrapSender.java
+++ b/src/main/java/com/sunyard/snmp/SnmpTrapSender.java
@@ -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);
}
diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java
index d51d31a..f48d4dd 100644
--- a/src/main/java/racal/sunyard/main/SydApi4j.java
+++ b/src/main/java/racal/sunyard/main/SydApi4j.java
@@ -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> taskOutcomes = executor.execBatchTasks(taskContexts);
+ executor.shutdown();
//失败的记录日志
List failures = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append("日期:").append(LocalDateTime.now()).append("\n");
for (TaskOutcome 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 map = gson.fromJson(snmpConfig, new TypeToken