增加流量监测和假种检测功能
Change-Id: I808ce14b6f08565f797f4681a6f72db9c730d011
diff --git a/src/main/java/tracker/DataCaptureProxy.java b/src/main/java/tracker/DataCaptureProxy.java
index cb66feb..1749421 100644
--- a/src/main/java/tracker/DataCaptureProxy.java
+++ b/src/main/java/tracker/DataCaptureProxy.java
@@ -66,14 +66,22 @@
if (uploaded != null && !uploaded.isEmpty()) {
int uploadValue = Integer.parseInt(uploaded);
if (uploadValue > 0) {
- tracker.AddUpLoad(passkey, uploadValue, infoHash);
+ try {
+ tracker.AddUpLoad(passkey, uploadValue, infoHash);
+ } catch (javax.persistence.NoResultException e) {
+ System.out.println("Skipping upload update: info_hash not found in database - " + infoHash);
+ }
}
}
if (downloaded != null && !downloaded.isEmpty()) {
int downloadValue = Integer.parseInt(downloaded);
if (downloadValue > 0) {
- tracker.AddDownload(passkey, downloadValue, infoHash);
+ try {
+ tracker.AddDownload(passkey, downloadValue, infoHash);
+ } catch (javax.persistence.NoResultException e) {
+ System.out.println("Skipping download update: info_hash not found in database - " + infoHash);
+ }
}
}
} catch (NumberFormatException e) {
diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 1ac4d94..1b38806 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -16,7 +16,8 @@
import com.querydsl.jpa.impl.JPAUpdateClause;
import entity.*;
import entity.config;
-
+import java.util.Scanner;
+import java.io.IOException;
public class Tracker implements TrackerInterface {
private final EntityManagerFactory emf;
// 默认构造:产线数据库
@@ -55,7 +56,7 @@
long delta = newTotal - sumSoFar;
if (delta < 0L) {
tx.rollback();
- return true; // error: newTotal less than already recorded
+ return false; // error: newTotal less than already recorded
}
if (delta == 0L) {
tx.rollback();
@@ -69,7 +70,7 @@
rd.upload = delta;
rd.maxupload = newTotal;
em.persist(rd);
-
+ em.flush();
// 4) 重新计算用户的总上传,确保与 TransRecord 完全一致
Long totalUpload = em.createQuery(
"SELECT COALESCE(SUM(t.upload),0) FROM TransRecord t WHERE t.uploaduserid = :uid",
@@ -77,10 +78,29 @@
)
.setParameter("uid", userid)
.getSingleResult();
+
+ Long PTuploadbefor = em.createQuery(
+ "SELECT t.upload FROM UserPT t WHERE t.userid = :uid",
+ Long.class
+ ).setParameter("uid", userid)
+ .getSingleResult();
+
+
UserPT user = em.find(UserPT.class, userid);
user.upload = totalUpload;
em.merge(user);
+ em.flush();
tx.commit();
+
+ Long PTuploadafter = em.createQuery(
+ "SELECT t.upload FROM UserPT t WHERE t.userid = :uid",
+ Long.class
+ ).setParameter("uid", userid)
+ .getSingleResult();
+
+ System.out.println("按回车继续...");
+ System.out.printf("thisadd:%d userptsofar:%d userptafter:%d totaluploadnow:%d delta:%d%n",upload, PTuploadbefor,PTuploadafter, totalUpload,delta);
+ System.out.println("按回车继续...");
return false; // success
} catch (RuntimeException ex) {
if (tx.isActive()) tx.rollback();
@@ -137,7 +157,7 @@
List<SeedHash> shl = qsh.getResultList();
if (shl.isEmpty()) {
System.out.println("seed没有被记录");
- return true;
+ return false;
}
String seedid = shl.get(0).seedId;
@@ -202,7 +222,7 @@
long current = qcurr.getSingleResult();
if (downloadLong > current) {
em.close();
- return true;
+ return false;
}
// 2. 执行减法更新
EntityTransaction tx = em.getTransaction();
@@ -271,14 +291,16 @@
Path target = storageDir.resolve(seedid + "_" + filename);
Files.copy(TTorent.toPath(), target, StandardCopyOption.REPLACE_EXISTING);
- // attempt to parse infoHash, but don’t fail if parsing fails
+ // attempt to parse infoHash, but don't fail if parsing fails
String infoHash = null;
try {
byte[] torrentData = Files.readAllBytes(target);
Bencode bencode = new Bencode();
@SuppressWarnings("unchecked")
- Map<String,Object> meta = (Map<String,Object>) bencode.decode(torrentData, Type.DICTIONARY);
- byte[] infoBytes = bencode.encode((Map<String,Object>) meta.get("info"));
+ Map<String,Object> meta = bencode.decode(torrentData, Type.DICTIONARY);
+ @SuppressWarnings("unchecked")
+ Map<String,Object> info = (Map<String,Object>) meta.get("info");
+ byte[] infoBytes = bencode.encode(info);
MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
byte[] digest = sha1.digest(infoBytes);
StringBuilder sb = new StringBuilder();