diff --git a/config/db/V4.6__gateway_add_table.sql b/config/db/V4.6__gateway_add_table.sql new file mode 100644 index 00000000..036be543 --- /dev/null +++ b/config/db/V4.6__gateway_add_table.sql @@ -0,0 +1,10 @@ +DROP TABLE IF EXISTS `t_api_count_history`; +CREATE TABLE `t_api_count_history` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `version` bigint COMMENT '数据版本号,从0递增', + `current_count`bigint COMMENT '当前总数,只有最新一条有效', + `history_count`bigint COMMENT '保存历史重启的数量', + `create_time` datetime NULL DEFAULT NULL, + `update_time` datetime NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB COMMENT = '网关历史调用总数'; diff --git a/renren-admin/src/main/java/io/renren/modules/gateway/controller/MonitorController.java b/renren-admin/src/main/java/io/renren/modules/gateway/controller/MonitorController.java index 1a5dac6c..5ed9c1d0 100644 --- a/renren-admin/src/main/java/io/renren/modules/gateway/controller/MonitorController.java +++ b/renren-admin/src/main/java/io/renren/modules/gateway/controller/MonitorController.java @@ -5,6 +5,7 @@ import cn.hutool.core.net.URLEncoder; import cn.hutool.core.util.URLUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import io.renren.modules.gateway.service.MonitorServiceV2; import io.renren.modules.monitor.entity.Result; import io.renren.modules.resource.dao.AttrDao; import io.renren.modules.resource.dao.ResourceDao; @@ -62,6 +63,9 @@ public class MonitorController { @Autowired private SysDeptDao sysDeptDao; + @Autowired + private MonitorServiceV2 monitorServiceV2; + // @RequestMapping("/metrics/**") void forward(HttpServletRequest request, HttpServletResponse response) throws IOException { //类似nginx匹配前缀 @@ -326,4 +330,11 @@ public class MonitorController { return Result.success(selectCount); } + @GetMapping("/gateway-monitor/getCallCount") + @ApiOperation("查询总api调用总量") + public Result getCallCount(){ + Long callCount = monitorServiceV2.getCallCount(); + return Result.success(callCount); + } + } diff --git a/renren-admin/src/main/java/io/renren/modules/gateway/entity/ApiCountHistoryEntity.java b/renren-admin/src/main/java/io/renren/modules/gateway/entity/ApiCountHistoryEntity.java index cf2aad7f..8a1a8fe9 100644 --- a/renren-admin/src/main/java/io/renren/modules/gateway/entity/ApiCountHistoryEntity.java +++ b/renren-admin/src/main/java/io/renren/modules/gateway/entity/ApiCountHistoryEntity.java @@ -1,12 +1,15 @@ package io.renren.modules.gateway.entity; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.renren.common.entity.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serializable; - +import java.util.Date; /** @@ -22,7 +25,11 @@ import java.io.Serializable; @Data @EqualsAndHashCode(callSuper = false) @TableName(value = "t_api_count_history", autoResultMap = true) -public class ApiCountHistoryEntity extends BaseEntity implements Serializable { +public class ApiCountHistoryEntity implements Serializable { + + @TableId + private Long id; + /** * 数据版本递增 @@ -38,4 +45,9 @@ public class ApiCountHistoryEntity extends BaseEntity implements Serializable { * 历史数据量 */ private Long historyCount; + + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + private Date updateTime; } diff --git a/renren-admin/src/main/java/io/renren/modules/gateway/service/MonitorServiceV2.java b/renren-admin/src/main/java/io/renren/modules/gateway/service/MonitorServiceV2.java index a9df81a3..ed437491 100644 --- a/renren-admin/src/main/java/io/renren/modules/gateway/service/MonitorServiceV2.java +++ b/renren-admin/src/main/java/io/renren/modules/gateway/service/MonitorServiceV2.java @@ -8,10 +8,15 @@ import io.renren.modules.gateway.entity.ApiCountHistoryEntity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; +import javax.annotation.PostConstruct; import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; @Service public class MonitorServiceV2 { @@ -19,12 +24,28 @@ public class MonitorServiceV2 { @Value("${hisense.gateway.url}") private String gatewayDomain; + @Value("${hisense.gateway.sync-enabled}") + private Boolean enableSync; + @Autowired private RestTemplate restTemplate; @Autowired private ApiCountHistoryDao apiCountHistoryDao; + @PostConstruct + public void init(){ + if (enableSync) { + ScheduledExecutorService service = Executors.newScheduledThreadPool(1); + service.scheduleAtFixedRate(new Runnable() { + @Override + public void run() { + fetchCallCount(); + } + }, 0, 60, TimeUnit.SECONDS); + } + } + public void fetchCallCount(){ Long currentTime = System.currentTimeMillis() / 1000; String query = "sum(apigateway_http_status)"; @@ -71,7 +92,7 @@ public class MonitorServiceV2 { }else if (currentCount < apiCountHistoryEntity.getCurrentCount()){ //保存旧值 apiCountHistoryEntity.setHistoryCount(apiCountHistoryEntity.getCurrentCount()); - apiCountHistoryEntity.setCreateDate(new Date()); + apiCountHistoryEntity.setUpdateTime(new Date()); apiCountHistoryDao.updateById(apiCountHistoryEntity); //新增记录 ApiCountHistoryEntity newHistoryEntity = new ApiCountHistoryEntity(); diff --git a/renren-admin/src/main/resources/application.yml b/renren-admin/src/main/resources/application.yml index c365e361..b8ce003a 100644 --- a/renren-admin/src/main/resources/application.yml +++ b/renren-admin/src/main/resources/application.yml @@ -14,6 +14,7 @@ census: # 海信网关 hisense: gateway: + sync-enabled: false url: http://devtest-security-app.hismarttv.com:8080 # Tomcat server: