Prechádzať zdrojové kódy

增加调用次数统计

xusonglin 1 mesiac pred
rodič
commit
dc7c0e65de

+ 6 - 1
pom.xml

@@ -10,7 +10,7 @@
     </parent>
     <groupId>com.jkcredit.info.query</groupId>
     <artifactId>info-query</artifactId>
-    <version>1.0.17</version>
+    <version>1.0.24</version>
     <name>info-query</name>
     <description>Demo project for Spring Boot</description>
     <properties>
@@ -73,6 +73,11 @@
             <artifactId>commons-lang</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.7.14</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
src/main/java/com/jkcredit/info/query/constant/CommonConstant.java

@@ -2,4 +2,6 @@ package com.jkcredit.info.query.constant;
 
 public class CommonConstant {
     public static final String COOKIE = "cookie";
+
+    public static final String ERROR_COOKIE_RESPONSE = "407 Proxy Authentication Required";
 }

+ 4 - 5
src/main/java/com/jkcredit/info/query/service/impl/InformationQueryServiceImpl.java

@@ -7,10 +7,7 @@ import com.jkcredit.common.model.CommonResponseObject;
 import com.jkcredit.info.query.enums.CatalogEnum;
 import com.jkcredit.info.query.service.InformationQueryService;
 import com.jkcredit.info.query.task.AsyncQuery;
-import com.jkcredit.info.query.util.CatalogConcurrentHashMapUtil;
-import com.jkcredit.info.query.util.CookieTaskConcurrentHashMapUtil;
-import com.jkcredit.info.query.util.CookieUtil;
-import com.jkcredit.info.query.util.HttpUtil;
+import com.jkcredit.info.query.util.*;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.FormBody;
 import org.apache.commons.lang3.StringUtils;
@@ -159,6 +156,7 @@ public class InformationQueryServiceImpl implements InformationQueryService {
                     , keyWord, type, requestId, JSON.toJSONString(result), (System.currentTimeMillis() - startTime));
             return result;
         }
+        QueryCountUtil.addQueryInfoListCount();
         Map<String, JSONObject> catalogIdMap = CatalogConcurrentHashMapUtil.getInstance();
         if (catalogIdMap.size() == 0) {
             // 查询节点id
@@ -223,7 +221,6 @@ public class InformationQueryServiceImpl implements InformationQueryService {
                     , path, requestId, JSON.toJSONString(result), (System.currentTimeMillis() - startTime));
             return result;
         }
-
         log.info("path:{}, requestId:{}", path, requestId);
         if (!path.contains("../")) {
             CommonResponseObject result = CommonResponseObject.noResult(getLocalHost(), requestId);
@@ -231,6 +228,8 @@ public class InformationQueryServiceImpl implements InformationQueryService {
                     , path, requestId, JSON.toJSONString(result), (System.currentTimeMillis() - startTime));
             return result;
         }
+
+        QueryCountUtil.addQueryDetailCount();
         List<Map<String, String>> results = getDetail(path, cookie);
         if (results.size() != 0) {
             CommonResponseObject result = CommonResponseObject.success(results, getLocalHost(), requestId);

+ 2 - 0
src/main/java/com/jkcredit/info/query/task/LoadCookieTask.java

@@ -41,6 +41,8 @@ public class LoadCookieTask {
                     int randomNum = new Random().nextInt(600000);
                     CookieTaskConcurrentHashMapUtil.getInstance().put("cookie", System.currentTimeMillis() + baseTime + randomNum);
                     log.info("LoadCookieTask.LoadCookie:{}", simpleDateFormat.format(new Date(System.currentTimeMillis() + baseTime + randomNum)));
+                } else {
+                    CookieTaskConcurrentHashMapUtil.clear();
                 }
             }
         }

+ 66 - 0
src/main/java/com/jkcredit/info/query/task/QueryCountTask.java

@@ -0,0 +1,66 @@
+package com.jkcredit.info.query.task;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileUtil;
+import com.jkcredit.info.query.util.QueryCountUtil;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Component
+public class QueryCountTask {
+    @Scheduled(cron = "59 59 23 ? * *", zone = "Asia/Shanghai")
+//    @Scheduled(cron = "0 0/2 * * * ?", zone = "Asia/Shanghai")
+    public void count() {
+        String fileName = DateUtil.format(new Date(), "yyyyMM") + ".txt";
+        String filePath = "C:\\Users\\Administrator\\Desktop\\work\\count\\" + fileName;
+        File file = new File(filePath);
+        if (!file.exists()) {
+            try {
+                file.createNewFile();
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+            }
+        }
+        List<String> stringList = FileUtil.readLines(file, Charset.defaultCharset());
+        List<String> countList = new ArrayList<>();
+
+        int listTotalCount = 0;
+        int detailTotalCount = 0;
+        for (String str : stringList) {
+            if (str.contains("total")) {
+                continue;
+            }
+            String[] countArray = str.split(",");
+            listTotalCount += Integer.parseInt(countArray[1]);
+            detailTotalCount += Integer.parseInt(countArray[2]);
+            countList.add(str);
+        }
+        String countStr = DateUtil.today() + "," + QueryCountUtil.getQueryInfoListCount() + "," + QueryCountUtil.getQueryDetailCount();
+        countList.add(countStr);
+
+        listTotalCount += QueryCountUtil.getQueryInfoListCount();
+        detailTotalCount += QueryCountUtil.getQueryDetailCount();
+        int totalCount = listTotalCount + detailTotalCount;
+        countList.add("total:" + totalCount);
+
+        FileUtil.writeLines(countList, file, Charset.defaultCharset());
+        QueryCountUtil.clearQueryInfoListCount();
+        QueryCountUtil.clearQueryDetailCount();
+    }
+
+    public static void main(String[] args) {
+        System.out.println(DateUtil.format(new Date(), "yyyyMM"));
+    }
+}

+ 5 - 1
src/main/java/com/jkcredit/info/query/util/CookieConcurrentHashMapUtil.java

@@ -12,9 +12,13 @@ import java.util.concurrent.ConcurrentHashMap;
 public enum CookieConcurrentHashMapUtil {
     INSTANCE;
 
-    public static ConcurrentHashMap<String, List<Cookie>> concurrentHashMap = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<String, List<Cookie>> concurrentHashMap = new ConcurrentHashMap<>();
 
     public static ConcurrentHashMap<String, List<Cookie>> getInstance() {
         return concurrentHashMap;
     }
+
+    public static void clear() {
+        concurrentHashMap = new ConcurrentHashMap<>();
+    }
 }

+ 5 - 1
src/main/java/com/jkcredit/info/query/util/CookieTaskConcurrentHashMapUtil.java

@@ -12,9 +12,13 @@ import java.util.concurrent.ConcurrentHashMap;
 public enum CookieTaskConcurrentHashMapUtil {
     INSTANCE;
 
-    public static ConcurrentHashMap<String, Long> concurrentHashMap = new ConcurrentHashMap<>();
+    private static ConcurrentHashMap<String, Long> concurrentHashMap = new ConcurrentHashMap<>();
 
     public static ConcurrentHashMap<String, Long> getInstance() {
         return concurrentHashMap;
     }
+
+    public static void clear() {
+        concurrentHashMap = new ConcurrentHashMap<>();
+    }
 }

+ 8 - 6
src/main/java/com/jkcredit/info/query/util/CookieUtil.java

@@ -1,5 +1,6 @@
 package com.jkcredit.info.query.util;
 
+import com.alibaba.fastjson.JSONObject;
 import com.jkcredit.info.query.constant.CommonConstant;
 import lombok.extern.slf4j.Slf4j;
 import okhttp3.Cookie;
@@ -28,22 +29,22 @@ public class CookieUtil {
 
     public static String getAuthenticationCookie() {
         ConcurrentHashMap<String, List<Cookie>> cookieStore = CookieConcurrentHashMapUtil.getInstance();
+//        log.info("TTTTT.getAuthCookie:{}", JSONObject.toJSON(cookieStore));
         if (cookieStore.get(CommonConstant.COOKIE) != null) {
             return getCookie();
         }
-        if (StringUtils.isNotBlank(HttpUtil.doGetLoadCookie(cookieUrl))) {
-            HttpUtil.doGet(authenticationCookieUrl, getCookie());
-        }
-        ;
-        return getCookie();
+        return getNewCookie();
     }
 
     public static String getNewCookie() {
         String responseContext = HttpUtil.doGetLoadCookie(cookieUrl);
-        if (StringUtils.isNotBlank(responseContext)) {
+        if (StringUtils.isNotBlank(responseContext) && !responseContext.contains(CommonConstant.ERROR_COOKIE_RESPONSE)) {
+//            log.info("TTTTT.getNewCookie:{}", responseContext);
             HttpUtil.doGet(authenticationCookieUrl, getCookie());
             return getCookie();
         } else {
+            log.info("TTTTT.getNewCookie.clear:{}", responseContext);
+            CookieConcurrentHashMapUtil.clear();
             return "";
         }
     }
@@ -52,6 +53,7 @@ public class CookieUtil {
         String cookie = "";
         ConcurrentHashMap<String, List<Cookie>> cookieStore = CookieConcurrentHashMapUtil.getInstance();
         if (cookieStore.get(CommonConstant.COOKIE) != null) {
+//            log.info("TTTTT.coolieStore:{}", JSONObject.toJSON(cookieStore));
             cookie = cookieStore.get(CommonConstant.COOKIE).get(0).name()
                     + "=" + cookieStore.get(CommonConstant.COOKIE).get(0).value();
         }

+ 33 - 0
src/main/java/com/jkcredit/info/query/util/QueryCountUtil.java

@@ -0,0 +1,33 @@
+package com.jkcredit.info.query.util;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+public class QueryCountUtil {
+    private static int queryInfoListCount = 0;
+    private static int queryDetailCount = 0;
+
+    public static void addQueryInfoListCount() {
+        ++queryInfoListCount;
+    }
+    public static void addQueryDetailCount() {
+        ++queryDetailCount;
+    }
+
+    public static int getQueryInfoListCount() {
+        return queryInfoListCount;
+    }
+
+    public static int getQueryDetailCount() {
+        return queryDetailCount;
+    }
+
+    public static void clearQueryInfoListCount() {
+        queryInfoListCount = 0;
+    }
+
+    public static void clearQueryDetailCount() {
+        queryDetailCount = 0;
+    }
+}