diff --git a/src/main/java/com/geedge/common/config/ScheduledPoolConfig.java b/src/main/java/com/geedge/common/config/ScheduledPoolConfig.java index d538ca7..3cb0d29 100644 --- a/src/main/java/com/geedge/common/config/ScheduledPoolConfig.java +++ b/src/main/java/com/geedge/common/config/ScheduledPoolConfig.java @@ -19,7 +19,7 @@ public class ScheduledPoolConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); - scheduler.setPoolSize(16); + scheduler.setPoolSize(32); scheduler.initialize(); taskRegistrar.setScheduler(scheduler); } diff --git a/src/main/java/com/geedge/common/util/TsgUtil.java b/src/main/java/com/geedge/common/util/TsgUtil.java index 3e5b995..9bf9134 100644 --- a/src/main/java/com/geedge/common/util/TsgUtil.java +++ b/src/main/java/com/geedge/common/util/TsgUtil.java @@ -57,6 +57,25 @@ public class TsgUtil { throw new IllegalArgumentException("failed to get TSG system token."); } + public static JSONObject getObjectItemList(Integer objectId, String objectType) { + Stopwatch watch = Stopwatch.createStarted(); + String response = HttpRequest.get(TSG_URL + "/v1/policy/object/" + objectId + "/item?page_no=1&page_size=1&type=" + objectType) + .header(Header.AUTHORIZATION, getToken()) + .timeout(httpTimeOut) + .execute().body(); + log.info("get tsg-api, cost {} seconds", watch.elapsed(TimeUnit.SECONDS)); + if (StrUtil.isBlank(response)) { + log.error("get {} Object error, response: {}", objectId, response); + throw new RuntimeException("get " + objectId + " Object error, response: " + response); + } + JSONObject jsonObject = JSONUtil.parseObj(response); + if (!"200".equals(jsonObject.get("code").toString())) { + log.error("get {} Object error, response: {}", objectId, response); + throw new RuntimeException("get " + objectId + " Object error, response: " + response); + } + return jsonObject; + } + public static void updateObjectById(Integer id, Map body) { Stopwatch watch = Stopwatch.createStarted(); String response = HttpRequest.put(TSG_URL + "/v1/policy/object/" + id) diff --git a/src/main/java/com/geedge/scheduler/FqdnScheduler.java b/src/main/java/com/geedge/scheduler/FqdnScheduler.java index 5e08bcf..c076963 100644 --- a/src/main/java/com/geedge/scheduler/FqdnScheduler.java +++ b/src/main/java/com/geedge/scheduler/FqdnScheduler.java @@ -4,6 +4,7 @@ import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.BooleanUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import com.geedge.common.constant.TsgObject; @@ -309,12 +310,49 @@ public class FqdnScheduler { return; } try { - DateTime dateTime = DateUtil.offsetSecond(new Date(), offsetSecond).setTimeZone(TimeZone.getTimeZone("UTC")); - String datetimeZ = DateUtil.format(dateTime, DatePattern.UTC_PATTERN); + DateTime deleteCursor = DateUtil.offsetSecond(new Date(), offsetSecond).setTimeZone(TimeZone.getTimeZone("UTC")); + String deleteCursorStr = DateUtil.format(deleteCursor, DatePattern.UTC_PATTERN); + + JSONObject objectItemList = TsgUtil.getObjectItemList(id, "fqdn"); + Object data = objectItemList.get("data"); + if (StrUtil.isEmptyIfStr(data)) { + log.warn("No item does not need to be deleted"); + return; + } + Map dataMap = (Map) data; + Object itemsObj = dataMap.get("items"); + if (StrUtil.isEmptyIfStr(itemsObj)) { + log.warn("No item does not need to be deleted"); + return; + } + List> itemList = (List>) itemsObj; + if (itemList.isEmpty()) { + log.warn("No item does not need to be deleted"); + return; + } + Map map = itemList.get(0); + if (StrUtil.isEmptyIfStr(map)) { + log.warn("No item does not need to be deleted"); + return; + } + Object itemObj = map.get("string"); + if (StrUtil.isEmptyIfStr(itemObj)) { + log.warn("No item does not need to be deleted"); + return; + } + Map itemMap = (Map) itemObj; + Object createdTimeObj = itemMap.get("created_time"); + DateTime latestCreatedDateTime = DateUtil.parse(createdTimeObj.toString()); + int compare = DateUtil.compare(deleteCursor, latestCreatedDateTime); + if (compare > 0) { + log.warn("Does not need to be deleted, avoid item to empty"); + return; + } + Map form = Maps.newHashMap(); form.put(TsgObject.KEY_OBJECT_TYPE, TsgObject.VALUE_OBJECT_TYPE_FQDN); form.put(TsgObject.KEY_VSYS_ID, TsgObject.VALUE_VSYS_ID_1); - form.put(TsgObject.KEY_CREATED_BEFORE, datetimeZ); + form.put(TsgObject.KEY_CREATED_BEFORE, deleteCursorStr); TsgUtil.deleteItemOfObjectById(id, form); } catch (Exception e) { log.error("{}: failed to execute delete task. message: {}", id, e.getMessage()); diff --git a/src/main/java/com/geedge/scheduler/IpScheduler.java b/src/main/java/com/geedge/scheduler/IpScheduler.java index bd41728..bc5c854 100644 --- a/src/main/java/com/geedge/scheduler/IpScheduler.java +++ b/src/main/java/com/geedge/scheduler/IpScheduler.java @@ -512,12 +512,44 @@ public class IpScheduler { return; } try { - DateTime dateTime = DateUtil.offsetSecond(new Date(), offsetSecond).setTimeZone(TimeZone.getTimeZone("UTC")); - String datetimeZ = DateUtil.format(dateTime, DatePattern.UTC_PATTERN); + DateTime deleteCursor = DateUtil.offsetSecond(new Date(), offsetSecond).setTimeZone(TimeZone.getTimeZone("UTC")); + String deleteCursorStr = DateUtil.format(deleteCursor, DatePattern.UTC_PATTERN); + + JSONObject objectItemList = TsgUtil.getObjectItemList(id, "ip"); + Object data = objectItemList.get("data"); + if (StrUtil.isEmptyIfStr(data)) { + log.warn("No item does not need to be deleted"); + return; + } + Map dataMap = (Map) data; + Object itemsObj = dataMap.get("items"); + if (StrUtil.isEmptyIfStr(itemsObj) || StrUtil.isBlankIfStr(itemsObj)) { + log.warn("No item does not need to be deleted"); + return; + } + List> itemList = (List>) itemsObj; + if (itemList.isEmpty()) { + log.warn("No item does not need to be deleted"); + return; + } + Map map = itemList.get(0); + Object itemObj = map.get("ip"); + if (StrUtil.isEmptyIfStr(itemObj)) { + log.warn("No item does not need to be deleted"); + return; + } + Map itemMap = (Map) itemObj; + Object createdTimeObj = itemMap.get("created_time"); + DateTime latestCreatedDateTime = DateUtil.parse(createdTimeObj.toString()); + int compare = DateUtil.compare(deleteCursor, latestCreatedDateTime); + if (compare > 0) { + log.warn("Does not need to be deleted, avoid item to empty"); + return; + } Map form = Maps.newHashMap(); form.put(TsgObject.KEY_OBJECT_TYPE, TsgObject.VALUE_OBJECT_TYPE_IP); form.put(TsgObject.KEY_VSYS_ID, TsgObject.VALUE_VSYS_ID_1); - form.put(TsgObject.KEY_CREATED_BEFORE, datetimeZ); + form.put(TsgObject.KEY_CREATED_BEFORE, deleteCursorStr); TsgUtil.deleteItemOfObjectById(id, form); } catch (Exception e) { log.error("{}: failed to execute delete task. message: {}", id, e.getMessage());