From e5ebc2f6249e4f3508a5da7a77e3f77d30b782bf Mon Sep 17 00:00:00 2001 From: hongqiaowei Date: Mon, 11 Jul 2022 11:20:43 +0800 Subject: [PATCH] SFO --- .../src/main/resources/log4j2-spring.xml | 10 +- .../java/we/filter/FlowControlFilter.java | 12 +- .../java/we/monitor/FizzMonitorService.java | 136 +++++++++++--- .../we/plugin/stat/AccessStatSchedConfig.java | 168 +++++++++--------- .../java/we/plugin/stat/StatPluginFilter.java | 126 ++++++------- .../stat/StatPluginFilterProperties.java | 2 +- pom.xml | 2 +- 7 files changed, 269 insertions(+), 187 deletions(-) diff --git a/fizz-bootstrap/src/main/resources/log4j2-spring.xml b/fizz-bootstrap/src/main/resources/log4j2-spring.xml index 2e9a9d8..943e367 100644 --- a/fizz-bootstrap/src/main/resources/log4j2-spring.xml +++ b/fizz-bootstrap/src/main/resources/log4j2-spring.xml @@ -21,25 +21,25 @@ --> - diff --git a/fizz-core/src/main/java/we/filter/FlowControlFilter.java b/fizz-core/src/main/java/we/filter/FlowControlFilter.java index a666412..e66a6d4 100644 --- a/fizz-core/src/main/java/we/filter/FlowControlFilter.java +++ b/fizz-core/src/main/java/we/filter/FlowControlFilter.java @@ -168,7 +168,7 @@ public class FlowControlFilter extends FizzWebFilter { long currentTimeMillis = System.currentTimeMillis(); String blockedResourceId = result.getBlockedResourceId(); if (BlockType.CIRCUIT_BREAK == result.getBlockType()) { - fizzMonitorService.sendAlarm(service, path, FizzMonitorService.CIRCUIT_BREAK_ALARM, null, currentTimeMillis); + fizzMonitorService.alarm(service, path, FizzMonitorService.CIRCUIT_BREAK_ALARM, null); // log.info("{} trigger {} circuit breaker limit", traceId, blockedResourceId, LogService.BIZ_ID, traceId); log.info("{} trigger {} circuit breaker limit", traceId, blockedResourceId); @@ -200,11 +200,11 @@ public class FlowControlFilter extends FizzWebFilter { } else { if (BlockType.CONCURRENT_REQUEST == result.getBlockType()) { - fizzMonitorService.sendAlarm(service, path, FizzMonitorService.RATE_LIMIT_ALARM, concurrents, currentTimeMillis); + fizzMonitorService.alarm(service, path, FizzMonitorService.RATE_LIMIT_ALARM, concurrents); // log.info("{} exceed {} flow limit, blocked by maximum concurrent requests", traceId, blockedResourceId, LogService.BIZ_ID, traceId); log.info("{} exceed {} flow limit, blocked by maximum concurrent requests", traceId, blockedResourceId); } else { - fizzMonitorService.sendAlarm(service, path, FizzMonitorService.RATE_LIMIT_ALARM, qps, currentTimeMillis); + fizzMonitorService.alarm(service, path, FizzMonitorService.RATE_LIMIT_ALARM, qps); // log.info("{} exceed {} flow limit, blocked by maximum QPS", traceId, blockedResourceId, LogService.BIZ_ID, traceId); log.info("{} exceed {} flow limit, blocked by maximum QPS", traceId, blockedResourceId); } @@ -246,11 +246,11 @@ public class FlowControlFilter extends FizzWebFilter { cb.transit(CircuitBreaker.State.RESUME_DETECTIVE, CircuitBreaker.State.OPEN, currentTimeSlot, flowStat); } if (statusCode == HttpStatus.GATEWAY_TIMEOUT) { - fizzMonitorService.sendAlarm(finalService, finalPath, FizzMonitorService.TIMEOUT_ALARM, t.getMessage(), start); + fizzMonitorService.alarm(finalService, finalPath, FizzMonitorService.TIMEOUT_ALARM, t.getMessage()); } else if (statusCode.is5xxServerError()) { - fizzMonitorService.sendAlarm(finalService, finalPath, FizzMonitorService.ERROR_ALARM, String.valueOf(statusCode.value()), start); + fizzMonitorService.alarm(finalService, finalPath, FizzMonitorService.ERROR_ALARM, String.valueOf(statusCode.value())); } else if (s == SignalType.ON_ERROR && t != null) { - fizzMonitorService.sendAlarm(finalService, finalPath, FizzMonitorService.ERROR_ALARM, t.getMessage(), start); + fizzMonitorService.alarm(finalService, finalPath, FizzMonitorService.ERROR_ALARM, t.getMessage()); } } else { flowStat.addRequestRT(resourceConfigs, currentTimeSlot, rt, true, statusCode); diff --git a/fizz-core/src/main/java/we/monitor/FizzMonitorService.java b/fizz-core/src/main/java/we/monitor/FizzMonitorService.java index 6d50ae7..38a76cf 100644 --- a/fizz-core/src/main/java/we/monitor/FizzMonitorService.java +++ b/fizz-core/src/main/java/we/monitor/FizzMonitorService.java @@ -21,32 +21,50 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.ReactiveStringRedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import we.config.AggregateRedisConfig; +import we.config.SchedConfig; import we.util.Consts; +import we.util.DateTimeUtils; +import we.util.JacksonUtils; import we.util.ThreadContext; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; /** * @author hongqiaowei */ @Service -public class FizzMonitorService { +public class FizzMonitorService extends SchedConfig { - private static final Logger LOGGER = LoggerFactory.getLogger("monitor"); + private static final Logger MONITOR_LOGGER = LoggerFactory.getLogger("monitor"); + private static final Logger LOGGER = LoggerFactory.getLogger(FizzMonitorService.class); public static final byte ERROR_ALARM = 1; public static final byte TIMEOUT_ALARM = 2; public static final byte RATE_LIMIT_ALARM = 3; public static final byte CIRCUIT_BREAK_ALARM = 4; - private static final String _service = "\"service\":"; - private static final String _path = "\"path\":"; - private static final String _type = "\"type\":"; - private static final String _desc = "\"desc\":"; - private static final String _timestamp = "\"timestamp\":"; + private static class Alarm { + + public String service; + public String path; + public int type; + public String desc; + public long timestamp; + public int reqs = 0; + public long start; + + @Override + public String toString() { + return JacksonUtils.writeValueAsString(this); + } + } @Value("${fizz.monitor.alarm.enable:true}") private boolean alarmEnable; @@ -54,38 +72,102 @@ public class FizzMonitorService { @Value("${fizz.monitor.alarm.dest:redis}") private String dest; - @Value("${fizz.monitor.alarm.queue:fizz_alarm_channel}") + @Value("${fizz.monitor.alarm.queue:fizz_alarm_channel_new}") private String queue; @Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE) private ReactiveStringRedisTemplate rt; - public void sendAlarm(String service, String path, byte type, String desc, long timestamp) { + private Map + > + > + threadTimeWinAlarmMap = new HashMap<>(); + + public void alarm(String service, String path, byte type, String desc) { if (alarmEnable) { - StringBuilder b = ThreadContext.getStringBuilder(); - b.append(Consts.S.LEFT_BRACE); - b.append(_service); toJsonStrVal(b, service); b.append(Consts.S.COMMA); - b.append(_path); toJsonStrVal(b, path); b.append(Consts.S.COMMA); - b.append(_type); b.append(type); b.append(Consts.S.COMMA); + long tid = Thread.currentThread().getId(); + Map> timeWinAlarmMap = threadTimeWinAlarmMap.get(tid); + if (timeWinAlarmMap == null) { + timeWinAlarmMap = new LinkedHashMap>(4, 1) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > 2; + } + }; + threadTimeWinAlarmMap.put(tid, timeWinAlarmMap); + } - if (desc != null) { - b.append(_desc); toJsonStrVal(b, desc); b.append(Consts.S.COMMA); - } + long currentTimeWinStart = DateTimeUtils.get10sTimeWinStart(1); + Map alarmMap = timeWinAlarmMap.computeIfAbsent(currentTimeWinStart, k -> new HashMap<>(128)); - b.append(_timestamp) .append(timestamp); - b.append(Consts.S.RIGHT_BRACE); - String msg = b.toString(); - if (Consts.KAFKA.equals(dest)) { - // LOGGER.warn(msg, LogService.HANDLE_STGY, LogService.toKF(queue)); - LOGGER.info(msg); - } else { - rt.convertAndSend(queue, msg).subscribe(); + String key = ThreadContext.getStringBuilder().append(service).append(path).append(type).toString(); + Alarm alarm = alarmMap.get(key); + if (alarm == null) { + alarm = new Alarm(); + alarm.service = service; + alarm.path = path; + alarm.type = type; + alarmMap.put(key, alarm); + } + alarm.desc = desc; + alarm.timestamp = System.currentTimeMillis(); + alarm.reqs++; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("update alarm: {} at {}", alarm, DateTimeUtils.convert(alarm.timestamp, Consts.DP.DP19)); } } } - private static void toJsonStrVal(StringBuilder b, String value) { - b.append(Consts.S.DOUBLE_QUOTE).append(value).append(Consts.S.DOUBLE_QUOTE); + @Scheduled(cron = "${fizz.monitor.alarm.sched.cron:2/10 * * * * ?}") + public void sched() { + long prevTimeWinStart = DateTimeUtils.get10sTimeWinStart(2); + Map alarmMap = ThreadContext.getHashMap(); + threadTimeWinAlarmMap.forEach( + (t, timeWinAlarmMap) -> { + Map alarmMap0 = timeWinAlarmMap.get(prevTimeWinStart); + if (alarmMap0 != null) { + alarmMap0.forEach( + (spt, alarm) -> { + Alarm a = alarmMap.get(spt); + if (a == null) { + alarm.start = prevTimeWinStart; + alarmMap.put(spt, alarm); + } else { + a.reqs = a.reqs + alarm.reqs; + if (alarm.timestamp > a.timestamp) { + a.timestamp = alarm.timestamp; + a.desc = alarm.desc; + } + } + } + ); + } + } + ); + if (alarmMap.isEmpty()) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("no alarm in {} window", DateTimeUtils.convert(prevTimeWinStart, Consts.DP.DP19)); + } + } else { + alarmMap.forEach( + (spt, alarm) -> { + String msg = alarm.toString(); + if (Consts.KAFKA.equals(dest)) { + MONITOR_LOGGER.info(msg); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("send alarm {} which belong to {} window to topic", msg, DateTimeUtils.convert(alarm.start, Consts.DP.DP19)); + } + } else { + rt.convertAndSend(queue, msg).subscribe(); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("send alarm {} which belong to {} window to channel {}", msg, DateTimeUtils.convert(alarm.start, Consts.DP.DP19), queue); + } + } + } + ); + } } } diff --git a/fizz-core/src/main/java/we/plugin/stat/AccessStatSchedConfig.java b/fizz-core/src/main/java/we/plugin/stat/AccessStatSchedConfig.java index 6884a40..20b4945 100644 --- a/fizz-core/src/main/java/we/plugin/stat/AccessStatSchedConfig.java +++ b/fizz-core/src/main/java/we/plugin/stat/AccessStatSchedConfig.java @@ -1,84 +1,84 @@ -///* -// * Copyright (C) 2021 the original author or authors. -// * -// * This program is free software: you can redistribute it and/or modify -// * it under the terms of the GNU General Public License as published by -// * the Free Software Foundation, either version 3 of the License, or -// * any later version. -// * -// * This program is distributed in the hope that it will be useful, -// * but WITHOUT ANY WARRANTY; without even the implied warranty of -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// * GNU General Public License for more details. -// * -// * You should have received a copy of the GNU General Public License -// * along with this program. If not, see . -// */ -// -//package we.plugin.stat; -// -//import org.slf4j.Logger; -//import org.slf4j.LoggerFactory; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.data.redis.core.ReactiveStringRedisTemplate; -//import org.springframework.scheduling.annotation.Scheduled; -//import we.config.AggregateRedisConfig; -//import we.config.SchedConfig; -//import we.util.Consts; -//import we.util.DateTimeUtils; -//import we.util.StringUtils; -// -//import javax.annotation.Resource; -//import java.util.Map; -// -///** -// * @author hongqiaowei -// */ -// -//@Configuration -//public class AccessStatSchedConfig extends SchedConfig { -// -// private static final Logger LOGGER = LoggerFactory.getLogger(AccessStatSchedConfig.class); -// -// private static final Logger STAT_LOGGER = LoggerFactory.getLogger("stat"); -// -// @Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE) -// private ReactiveStringRedisTemplate rt; -// -// @Resource -// private StatPluginFilterProperties statPluginFilterProperties; -// -// @Resource -// private StatPluginFilter statPluginFilter; -// -// @Scheduled(cron = "${fizz-access-stat-sched.cron:2/10 * * * * ?}") -// public void sched() { -// long prevTimeWinStart = DateTimeUtils.get10sTimeWinStart(2); -// Map accessStatMap = statPluginFilter.getAccessStat(prevTimeWinStart); -// -// if (accessStatMap.isEmpty()) { -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("no access stat in {} window", DateTimeUtils.convert(prevTimeWinStart, Consts.DP.DP19)); -// } -// } else { -// accessStatMap.forEach( -// (smp, accessStat) -> { -// String msg = accessStat.toString(); -// String topic = statPluginFilterProperties.getFizzAccessStatTopic(); -// if (StringUtils.isBlank(topic)) { -// String channel = statPluginFilterProperties.getFizzAccessStatChannel(); -// rt.convertAndSend(channel, msg).subscribe(); -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("send access stat {} which belong to {} window to channel {}", msg, DateTimeUtils.convert(accessStat.start, Consts.DP.DP19), channel); -// } -// } else { -// STAT_LOGGER.info(msg); -// if (LOGGER.isDebugEnabled()) { -// LOGGER.debug("send access stat {} which belong to {} window to topic", msg, DateTimeUtils.convert(accessStat.start, Consts.DP.DP19)); -// } -// } -// } -// ); -// } -// } -//} +/* + * Copyright (C) 2021 the original author or authors. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package we.plugin.stat; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.ReactiveStringRedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import we.config.AggregateRedisConfig; +import we.config.SchedConfig; +import we.util.Consts; +import we.util.DateTimeUtils; +import we.util.StringUtils; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * @author hongqiaowei + */ + +@Configuration +public class AccessStatSchedConfig extends SchedConfig { + + private static final Logger LOGGER = LoggerFactory.getLogger(AccessStatSchedConfig.class); + + private static final Logger STAT_LOGGER = LoggerFactory.getLogger("stat"); + + @Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE) + private ReactiveStringRedisTemplate rt; + + @Resource + private StatPluginFilterProperties statPluginFilterProperties; + + @Resource + private StatPluginFilter statPluginFilter; + + @Scheduled(cron = "${fizz-access-stat-sched.cron:2/10 * * * * ?}") + public void sched() { + long prevTimeWinStart = DateTimeUtils.get10sTimeWinStart(2); + Map accessStatMap = statPluginFilter.getAccessStat(prevTimeWinStart); + + if (accessStatMap.isEmpty()) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("no access stat in {} window", DateTimeUtils.convert(prevTimeWinStart, Consts.DP.DP19)); + } + } else { + accessStatMap.forEach( + (smp, accessStat) -> { + String msg = accessStat.toString(); + String topic = statPluginFilterProperties.getFizzAccessStatTopic(); + if (StringUtils.isBlank(topic)) { + String channel = statPluginFilterProperties.getFizzAccessStatChannel(); + rt.convertAndSend(channel, msg).subscribe(); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("send access stat {} which belong to {} window to channel {}", msg, DateTimeUtils.convert(accessStat.start, Consts.DP.DP19), channel); + } + } else { + STAT_LOGGER.info(msg); + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("send access stat {} which belong to {} window to topic", msg, DateTimeUtils.convert(accessStat.start, Consts.DP.DP19)); + } + } + } + ); + } + } +} diff --git a/fizz-core/src/main/java/we/plugin/stat/StatPluginFilter.java b/fizz-core/src/main/java/we/plugin/stat/StatPluginFilter.java index b021700..d668efa 100644 --- a/fizz-core/src/main/java/we/plugin/stat/StatPluginFilter.java +++ b/fizz-core/src/main/java/we/plugin/stat/StatPluginFilter.java @@ -17,107 +17,107 @@ package we.plugin.stat; -import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.data.redis.core.ReactiveStringRedisTemplate; import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; -import we.config.AggregateRedisConfig; import we.plugin.PluginFilter; -import we.plugin.auth.GatewayGroupService; import we.util.Consts; +import we.util.DateTimeUtils; import we.util.ThreadContext; import we.util.WebUtils; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; /** * @author hongqiaowei - * @apiNote unstable. */ @Component(StatPluginFilter.STAT_PLUGIN_FILTER) public class StatPluginFilter extends PluginFilter { - private static final Logger log = LoggerFactory.getLogger("stat"); + private static final Logger LOGGER = LoggerFactory.getLogger(StatPluginFilter.class); public static final String STAT_PLUGIN_FILTER = "statPlugin"; - private static final String ip = "\"ip\":"; - - private static final String gatewayGroup = "\"gatewayGroup\":"; - - private static final String service = "\"service\":"; - - private static final String appid = "\"appid\":"; - - private static final String apiMethod = "\"apiMethod\":"; - - private static final String apiPath = "\"apiPath\":"; - - private static final String reqTime = "\"reqTime\":"; - @Resource private StatPluginFilterProperties statPluginFilterProperties; - @Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE) - private ReactiveStringRedisTemplate rt; - - @Resource - private GatewayGroupService gatewayGroupService; + private Map + > + > + threadTimeWinAccessStatMap = new HashMap<>(); @Override public Mono doFilter(ServerWebExchange exchange, Map config, String fixedConfig) { if (statPluginFilterProperties.isStatOpen()) { - StringBuilder b = ThreadContext.getStringBuilder(); - b.append(Consts.S.LEFT_BRACE); - b.append(ip); toJsonStringValue(b, WebUtils.getOriginIp(exchange)); b.append(Consts.S.COMMA); - b.append(gatewayGroup); toJsonStringValue(b, currentGatewayGroups()); b.append(Consts.S.COMMA); - b.append(service); toJsonStringValue(b, WebUtils.getClientService(exchange)); b.append(Consts.S.COMMA); + long tid = Thread.currentThread().getId(); + Map> timeWinAccessStatMap = threadTimeWinAccessStatMap.get(tid); + if (timeWinAccessStatMap == null) { + timeWinAccessStatMap = new LinkedHashMap>(4, 1) { + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + return size() > 2; + } + }; + threadTimeWinAccessStatMap.put(tid, timeWinAccessStatMap); + } - String appId = WebUtils.getAppId(exchange); - if (appId != null) { - b.append(appid); toJsonStringValue(b, appId); b.append(Consts.S.COMMA); - } + long currentTimeWinStart = DateTimeUtils.get10sTimeWinStart(1); + Map accessStatMap = timeWinAccessStatMap.computeIfAbsent(currentTimeWinStart, k -> new HashMap<>(128)); - b.append(apiMethod); toJsonStringValue(b, exchange.getRequest().getMethodValue()); b.append(Consts.S.COMMA); - b.append(apiPath); toJsonStringValue(b, WebUtils.getClientReqPath(exchange)); b.append(Consts.S.COMMA); - b.append(reqTime) .append(System.currentTimeMillis()); - b.append(Consts.S.RIGHT_BRACE); - - if (StringUtils.isBlank(statPluginFilterProperties.getFizzAccessStatTopic())) { - rt.convertAndSend(statPluginFilterProperties.getFizzAccessStatChannel(), b.toString()).subscribe(); - } else { - // log.warn(b.toString(), LogService.HANDLE_STGY, LogService.toKF(statPluginFilterProperties.getFizzAccessStatTopic())); // for internal use - log.info(b.toString()); + String service = WebUtils.getClientService(exchange); + String method = exchange.getRequest().getMethodValue(); + String path = WebUtils.getClientReqPath(exchange); + String key = ThreadContext.getStringBuilder().append(service).append(method).append(path).toString(); + AccessStat accessStat = accessStatMap.get(key); + if (accessStat == null) { + accessStat = new AccessStat(); + accessStat.service = service; + accessStat.apiMethod = method; + accessStat.apiPath = path; + accessStatMap.put(key, accessStat); + } + accessStat.reqTime = System.currentTimeMillis(); + accessStat.reqs++; + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("update access stat: {}, which request at {}", accessStat, DateTimeUtils.convert(accessStat.reqTime, Consts.DP.DP19)); } } return WebUtils.transmitSuccessFilterResultAndEmptyMono(exchange, STAT_PLUGIN_FILTER, null); } - private String currentGatewayGroups() { - int sz = gatewayGroupService.currentGatewayGroupSet.size(); - if (sz == 1) { - return gatewayGroupService.currentGatewayGroupSet.iterator().next(); - } - StringBuilder b = ThreadContext.getStringBuilder(ThreadContext.sb0); - byte i = 0; - for (String g : gatewayGroupService.currentGatewayGroupSet) { - b.append(g); - i++; - if (i < sz) { - b.append(Consts.S.COMMA); - } - } - return b.toString(); - } - - private static void toJsonStringValue(StringBuilder b, String value) { - b.append(Consts.S.DOUBLE_QUOTE).append(value).append(Consts.S.DOUBLE_QUOTE); + public Map getAccessStat(long timeWinStart) { + Map result = ThreadContext.getHashMap(); + threadTimeWinAccessStatMap.forEach( + (t, timeWinAccessStatMap) -> { + Map accessStatMap = timeWinAccessStatMap.get(timeWinStart); + if (accessStatMap != null) { + accessStatMap.forEach( + (smp, accessStat) -> { + AccessStat as = result.get(smp); + if (as == null) { + accessStat.start = timeWinStart; + result.put(smp, accessStat); + } else { + as.reqs = as.reqs + accessStat.reqs; + if (accessStat.reqTime > as.reqTime) { + as.reqTime = accessStat.reqTime; + } + } + } + ); + } + } + ); + return result; } } diff --git a/fizz-core/src/main/java/we/plugin/stat/StatPluginFilterProperties.java b/fizz-core/src/main/java/we/plugin/stat/StatPluginFilterProperties.java index cd8b471..3697196 100644 --- a/fizz-core/src/main/java/we/plugin/stat/StatPluginFilterProperties.java +++ b/fizz-core/src/main/java/we/plugin/stat/StatPluginFilterProperties.java @@ -37,7 +37,7 @@ public class StatPluginFilterProperties { @Value("${stat.open:false}") private boolean statOpen = false; - @Value("${stat.channel:fizz_access_stat}") + @Value("${stat.channel:fizz_access_stat_new}") private String fizzAccessStatChannel; @Value("${stat.topic:}") diff --git a/pom.xml b/pom.xml index 1877aa2..de7f1b5 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ Dysprosium-SR25 5.3.7.RELEASE 2.2.7.RELEASE - 4.1.78.Final + 4.1.79.Final 4.4.15 2.17.2 1.7.36