网关总数同步

This commit is contained in:
huangweixiong 2022-08-03 18:04:47 +08:00
parent 259f1b757a
commit 8e69ca0526
5 changed files with 58 additions and 3 deletions

View File

@ -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 = '网关历史调用总数';

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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();

View File

@ -14,6 +14,7 @@ census:
# 海信网关
hisense:
gateway:
sync-enabled: false
url: http://devtest-security-app.hismarttv.com:8080
# Tomcat
server: