|
@@ -4,6 +4,9 @@ import com.adx.tracking.baidu.model.PaymentInfo;
|
|
|
import com.adx.tracking.storage.model.BidRecord;
|
|
import com.adx.tracking.storage.model.BidRecord;
|
|
|
import com.adx.tracking.storage.model.MediaCallbackRecord;
|
|
import com.adx.tracking.storage.model.MediaCallbackRecord;
|
|
|
|
|
|
|
|
|
|
+import org.slf4j.Logger;
|
|
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
|
|
+
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
import java.io.InputStream;
|
|
|
import java.net.URI;
|
|
import java.net.URI;
|
|
@@ -13,6 +16,7 @@ import java.net.http.HttpClient;
|
|
|
import java.net.http.HttpRequest;
|
|
import java.net.http.HttpRequest;
|
|
|
import java.net.http.HttpResponse;
|
|
import java.net.http.HttpResponse;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.nio.charset.StandardCharsets;
|
|
|
|
|
+import java.time.Duration;
|
|
|
import java.time.Instant;
|
|
import java.time.Instant;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
|
@@ -25,13 +29,17 @@ import java.util.*;
|
|
|
*/
|
|
*/
|
|
|
public class KuaishouClient {
|
|
public class KuaishouClient {
|
|
|
|
|
|
|
|
|
|
+ private static final Logger log = LoggerFactory.getLogger(KuaishouClient.class);
|
|
|
|
|
+
|
|
|
private final HttpClient httpClient;
|
|
private final HttpClient httpClient;
|
|
|
private final Map<Integer, Integer> actMap; // baiduAct -> kuaishouEventType
|
|
private final Map<Integer, Integer> actMap; // baiduAct -> kuaishouEventType
|
|
|
private final Map<Integer, List<Integer>> extraActMap; // baiduAct -> [extra kuaishouEventTypes]
|
|
private final Map<Integer, List<Integer>> extraActMap; // baiduAct -> [extra kuaishouEventTypes]
|
|
|
|
|
|
|
|
public KuaishouClient(Map<Integer, Integer> actMapOverride,
|
|
public KuaishouClient(Map<Integer, Integer> actMapOverride,
|
|
|
Map<Integer, List<Integer>> extraActMap) {
|
|
Map<Integer, List<Integer>> extraActMap) {
|
|
|
- this.httpClient = HttpClient.newHttpClient();
|
|
|
|
|
|
|
+ this.httpClient = HttpClient.newBuilder()
|
|
|
|
|
+ .connectTimeout(Duration.ofSeconds(10))
|
|
|
|
|
+ .build();
|
|
|
// 从默认表开始,再用配置覆盖
|
|
// 从默认表开始,再用配置覆盖
|
|
|
Map<Integer, Integer> merged = new HashMap<>(defaultActMap());
|
|
Map<Integer, Integer> merged = new HashMap<>(defaultActMap());
|
|
|
if (actMapOverride != null) merged.putAll(actMapOverride);
|
|
if (actMapOverride != null) merged.putAll(actMapOverride);
|
|
@@ -96,9 +104,12 @@ public class KuaishouClient {
|
|
|
record.setCallbackUrl(reportUrl);
|
|
record.setCallbackUrl(reportUrl);
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
|
|
+ log.info("[Kuaishou] sending callback: qk={}, eventType={}, url={}",
|
|
|
|
|
+ payment.getQk(), eventType, truncate(reportUrl, 200));
|
|
|
HttpRequest request = HttpRequest.newBuilder()
|
|
HttpRequest request = HttpRequest.newBuilder()
|
|
|
.uri(URI.create(reportUrl))
|
|
.uri(URI.create(reportUrl))
|
|
|
.GET()
|
|
.GET()
|
|
|
|
|
+ .timeout(Duration.ofSeconds(15))
|
|
|
.build();
|
|
.build();
|
|
|
HttpResponse<byte[]> response = httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
|
HttpResponse<byte[]> response = httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
|
|
int status = response.statusCode();
|
|
int status = response.statusCode();
|
|
@@ -106,10 +117,14 @@ public class KuaishouClient {
|
|
|
record.setStatus(status);
|
|
record.setStatus(status);
|
|
|
record.setOk(status >= 200 && status < 300);
|
|
record.setOk(status >= 200 && status < 300);
|
|
|
record.setResponseBody(body);
|
|
record.setResponseBody(body);
|
|
|
|
|
+ log.info("[Kuaishou] callback result: qk={}, eventType={}, status={}, ok={}",
|
|
|
|
|
+ payment.getQk(), eventType, status, record.isOk());
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
// 对应 Go:即使 HTTP 请求失败也返回 record(ErrorMessage 已设置),不抛异常
|
|
// 对应 Go:即使 HTTP 请求失败也返回 record(ErrorMessage 已设置),不抛异常
|
|
|
record.setOk(false);
|
|
record.setOk(false);
|
|
|
record.setErrorMessage(e.getMessage());
|
|
record.setErrorMessage(e.getMessage());
|
|
|
|
|
+ log.warn("[Kuaishou] callback failed: qk={}, eventType={}, error={}",
|
|
|
|
|
+ payment.getQk(), eventType, e.getMessage());
|
|
|
}
|
|
}
|
|
|
return record;
|
|
return record;
|
|
|
}
|
|
}
|
|
@@ -124,6 +139,7 @@ public class KuaishouClient {
|
|
|
HttpRequest request = HttpRequest.newBuilder()
|
|
HttpRequest request = HttpRequest.newBuilder()
|
|
|
.uri(URI.create(original.getCallbackUrl()))
|
|
.uri(URI.create(original.getCallbackUrl()))
|
|
|
.GET()
|
|
.GET()
|
|
|
|
|
+ .timeout(Duration.ofSeconds(15))
|
|
|
.build();
|
|
.build();
|
|
|
|
|
|
|
|
MediaCallbackRecord retry = copyRecord(original);
|
|
MediaCallbackRecord retry = copyRecord(original);
|
|
@@ -131,15 +147,21 @@ public class KuaishouClient {
|
|
|
retry.setCreatedAt(Instant.now());
|
|
retry.setCreatedAt(Instant.now());
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
|
|
+ log.info("[Kuaishou] retrying callback: dedupeKey={}, attempt={}, url={}",
|
|
|
|
|
+ original.getDedupeKey(), retry.getAttempt(), truncate(original.getCallbackUrl(), 200));
|
|
|
HttpResponse<byte[]> response = httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
|
HttpResponse<byte[]> response = httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray());
|
|
|
int status = response.statusCode();
|
|
int status = response.statusCode();
|
|
|
retry.setStatus(status);
|
|
retry.setStatus(status);
|
|
|
retry.setOk(status >= 200 && status < 300);
|
|
retry.setOk(status >= 200 && status < 300);
|
|
|
retry.setResponseBody(truncate(new String(response.body()), 4096));
|
|
retry.setResponseBody(truncate(new String(response.body()), 4096));
|
|
|
retry.setErrorMessage(null);
|
|
retry.setErrorMessage(null);
|
|
|
|
|
+ log.info("[Kuaishou] retry result: dedupeKey={}, status={}, ok={}",
|
|
|
|
|
+ original.getDedupeKey(), status, retry.isOk());
|
|
|
} catch (IOException | InterruptedException e) {
|
|
} catch (IOException | InterruptedException e) {
|
|
|
retry.setOk(false);
|
|
retry.setOk(false);
|
|
|
retry.setErrorMessage(e.getMessage());
|
|
retry.setErrorMessage(e.getMessage());
|
|
|
|
|
+ log.warn("[Kuaishou] retry failed: dedupeKey={}, error={}",
|
|
|
|
|
+ original.getDedupeKey(), e.getMessage());
|
|
|
throw e;
|
|
throw e;
|
|
|
}
|
|
}
|
|
|
return retry;
|
|
return retry;
|