Commit a07d5cf9 by jenkins

update

parent a8a56b9a
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud-logging</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-logging-api</artifactId>
<dependencies>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-common-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-core</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-util</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency> -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.yizhi.logging.dto;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @ClassName RequestLogDTO
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/11 15:37
* @Version 1.0
*/
@Builder
@Data
public class RequestLogDTO implements Serializable {
private static final long serialVersionUID = -1;
private String id;
private String requestId;
/********** request *************************/
private String requestLocalIp;
private String requestRemoteIp;
private String requestRemoteIpPlace;
private String requestUrl;
private String requestUri;
private String requestMethod;
private String requestParams;
private String requestBody;
/********** response *************************/
private Integer responseStatus4Container;
private String responseBody4Container;
private Integer responseStatus;
private String responseBody;
private String errorMsg;
/********** common *************************/
private Long accountId;
private Long orgId;
private Long siteId;
private Long companyId;
private LocalDateTime startTime;
private LocalDateTime endTime;
private Long millis;
private String terminalType;
}
package com.yizhi.logging.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @ClassName RequestLogDTO
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/11 15:37
* @Version 1.0
*/
@Data
@Builder
@ApiModel("请求日志vo")
public class RequestLogPageVO {
private static final long serialVersionUID = -1;
@ApiModelProperty("主键id")
private String id;
@ApiModelProperty("用户名")
private String username;
/********** request *************************/
@ApiModelProperty("ip")
private String ip;
@ApiModelProperty("描述")
private String description;
@ApiModelProperty("终端类型")
private String terminalType;
@ApiModelProperty("请求耗时")
private String millis;
@ApiModelProperty("请求时间")
private String requestTime;
}
package com.yizhi.logging.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
/**
* @ClassName RequestLogViewVO
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 20:00
* @Version 1.0
*/
@Data
@Builder
@ApiModel("请求日志详情vo")
public class RequestLogViewVO {
private static final long serialVersionUID = -1;
@ApiModelProperty("请求地址")
private String requestUri;
@ApiModelProperty("请求方法")
private String requestMethod;
@ApiModelProperty("请求参数")
private String requestParams;
@ApiModelProperty("请求body")
private String requestBody;
@ApiModelProperty("返回状态码")
private Integer responseStatus;
@ApiModelProperty("返回body")
private String responseBody;
@ApiModelProperty("开始时间")
private String startTime;
@ApiModelProperty("结束时间")
private String endTime;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud-logging</artifactId>
<groupId>com.yizhi</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-logging-service</artifactId>
<dependencies>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-core</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-logging-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yizhi</groupId>
<artifactId>cloud-system-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- deploy 时跳过该模块 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.yizhi.logging;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@ComponentScan("com.yizhi")
@EnableFeignClients("com.yizhi")
public class CloudLoggingApplication {
public static void main(String[] args) {
SpringApplication.run(CloudLoggingApplication.class, args);
}
}
package com.yizhi.logging.config;
import org.apache.commons.lang3.StringUtils;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
/**
* @ClassName RequestlogRepository
* @Description 仅仅对controller层方法参数中的LocalDateTime生效,不适用reqestBody的对象中的属性,对象中的属性可以自定义jackson的转换来实现。
* @Author shengchenglong
* @DATE 2021/1/12 10:48
* @Version 1.0
*/
@Component
public class LocalDateTimeConverter implements Converter<String, LocalDateTime> {
@Override
public LocalDateTime convert(String source) {
if (StringUtils.isBlank(source)) {
return null;
}
return LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(source)), ZoneId.of("+8"));
}
}
\ No newline at end of file
package com.yizhi.logging.config;
import static com.google.common.base.Predicates.or;
import static springfox.documentation.builders.PathSelectors.regex;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.web.context.request.async.DeferredResult;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("请求日志服务")
.genericModelSubstitutes(DeferredResult.class)
.genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(false)
.forCodeGeneration(true)
// .pathMapping("/")
.select()
.apis(RequestHandlerSelectors.basePackage("com.yizhi.logging.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("请求日志服务")
.version("1.0")//版本
.build();
}
}
package com.yizhi.logging.controller.manage;
import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.yizhi.logging.domain.RequestLog;
import com.yizhi.logging.servicve.AuthResourceService;
import com.yizhi.logging.servicve.RequestLogService;
import com.yizhi.logging.util.IpUtil;
import com.yizhi.logging.util.PageInfoUtil;
import com.yizhi.logging.vo.RequestLogPageVO;
import com.yizhi.logging.vo.RequestLogViewVO;
import com.yizhi.system.application.system.remote.AccountClient;
import com.yizhi.system.application.vo.AccountVO;
import com.yizhi.util.application.domain.BizResponse;
import com.yizhi.util.application.page.PageInfo;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
/**
* @ClassName RequestLogController
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/13 17:23
* @Version 1.0
*/
@RestController
@RequestMapping("/manage/requestLog")
@Api("请求日志API")
@Slf4j
public class RequestLogController {
@Autowired
private RequestLogService requestLogService;
@Autowired
private AuthResourceService authResourceService;
@Autowired
private AccountClient accountClient;
@GetMapping("page")
@ApiOperation("请求日志分页列表")
public BizResponse<PageInfo<RequestLogPageVO>> page(
@ApiParam(value = "搜索时间段 - 起始时间 时间戳") @RequestParam(name = "startTime", required = false) LocalDateTime startTime,
@ApiParam(value = "搜索时间段 - 结束时间 时间戳") @RequestParam(name = "endTime", required = false) LocalDateTime endTime,
@ApiParam(value = "分页参数 - 第几页,默认1") @RequestParam(name = "pageNo", required = false, defaultValue = "1") Integer pageNo,
@ApiParam(value = "分页参数 - 每页条数,默认10") @RequestParam(name = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
log.info("=====page request");
Page<RequestLog> page = requestLogService.page(startTime, endTime, pageNo, pageSize);
List<RequestLog> list = page.getContent();
List<RequestLogPageVO> voList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(list)) {
list.forEach(item -> {
AccountVO accountVO = accountClient.findById(item.getAccountId());
voList.add(
RequestLogPageVO
.builder()
.id(item.getId())
.requestTime(item.getStartTime().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")))
.description(authResourceService.getNameByUrl(item.getRequestUri()))
.ip(item.getRequestRemoteIp() + " | " + IpUtil.getHttpCityInfo(item.getRequestRemoteIp()))
.millis(Duration.between(item.getStartTime(), item.getEndTime()).toMillis() + "ms")
.terminalType(item.getTerminalType())
.username(accountVO == null ? "" : accountVO.getName())
.build()
);
});
}
return BizResponse.ok(PageInfoUtil.of(pageNo, pageSize, Math.toIntExact(page.getTotalElements()), voList));
}
@GetMapping("view")
@ApiOperation("请求日志详情")
public BizResponse<RequestLogViewVO> view(
@ApiParam(value = "id") @RequestParam(name = "id") String id) {
RequestLog requestLog = requestLogService.findById(id);
if (requestLog == null) {
return BizResponse.fail();
}
RequestLogViewVO vo = RequestLogViewVO.builder()
.requestBody(requestLog.getRequestBody())
.requestUri(requestLog.getRequestUri())
.requestMethod(requestLog.getRequestMethod())
.requestParams(requestLog.getRequestParams())
.responseBody(requestLog.getResponseBody())
.responseStatus(requestLog.getResponseStatus())
.endTime(requestLog.getEndTime().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")))
.startTime(requestLog.getStartTime().format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")))
.build()
;
return BizResponse.ok(vo);
}
}
package com.yizhi.logging.domain;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.persistence.Id;
/**
* @ClassName AuthResource
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/28 14:54
* @Version 1.0
*/
@Data
@Document("auth_resource")
public class AuthResource {
private static final long serialVersionUID = -1;
@Id
private String id;
private String name;
private String url;
private String moduleCode;
}
package com.yizhi.logging.domain;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.Data;
/**
* @ClassName RequestLog
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/11 15:37
* @Version 1.0
*/
@Document("requestLog")
@Data
public class RequestLog implements Serializable {
private static final long serialVersionUID = -1;
@Id
private String id;
private String requestId;
/********** request *************************/
private String requestLocalIp;
private String requestRemoteIp;
private String requestRemoteIpPlace;
private String requestUrl;
private String requestUri;
private String requestMethod;
private String requestParams;
private String requestBody;
/********** response *************************/
private Integer responseStatus4Container;
private String responseBody4Container;
private Integer responseStatus;
private String responseBody;
private String errorMsg;
/********** common *************************/
private Long accountId;
private Long orgId;
private Long siteId;
private Long companyId;
private LocalDateTime startTime;
private LocalDateTime endTime;
private Long millis;
private String terminalType;
}
package com.yizhi.logging.mq;
import com.yizhi.logging.domain.RequestLog;
import com.yizhi.logging.dto.RequestLogDTO;
import com.yizhi.logging.repository.RequestLogRepository;
import com.yizhi.util.application.constant.QueueConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @ClassName GatewayLogMq
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/12 10:51
* @Version 1.0
*/
@Component
@RabbitListener(queues = QueueConstant.REQUEST_LOG_QUEUE)
@Slf4j
public class RequestLogListener {
@Autowired
private RequestLogRepository requestLogRepository;
@RabbitHandler
public void saveLog(RequestLogDTO requestLogDTO) {
log.debug("======save log");
RequestLog requestLog = new RequestLog();
BeanUtils.copyProperties(requestLogDTO, requestLog);
requestLogRepository.save(requestLog);
}
}
\ No newline at end of file
package com.yizhi.logging.repository;
import com.yizhi.logging.domain.AuthResource;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @ClassName RequestlogRepository
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/12 10:48
* @Version 1.0
*/
public interface AuthResourceRepository extends MongoRepository<AuthResource, String> {
AuthResource findFirstByUrl(String uri);
}
package com.yizhi.logging.repository;
import com.yizhi.logging.domain.RequestLog;
import org.springframework.data.mongodb.repository.MongoRepository;
/**
* @ClassName RequestlogRepository
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/12 10:48
* @Version 1.0
*/
public interface RequestLogRepository extends MongoRepository<RequestLog, String> {
}
package com.yizhi.logging.servicve;
/**
* @ClassName AuthResourceService
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/28 14:56
* @Version 1.0
*/
public interface AuthResourceService {
/**
* 根据接口路径获取功能描述
*
* @param uri
* @return
*/
String getNameByUrl(String uri);
}
package com.yizhi.logging.servicve;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yizhi.logging.domain.AuthResource;
import com.yizhi.logging.repository.AuthResourceRepository;
import lombok.extern.slf4j.Slf4j;
/**
* @ClassName RequestLogServiceImpl
* @Description 请求日志
* @Author shengchenglong
* @DATE 2021/1/25 10:41
* @Version 1.0
*/
@Service
@Slf4j
public class AuthResourceServiceImpl implements AuthResourceService {
@Autowired
private AuthResourceRepository authResourceRepository;
@Override
public String getNameByUrl(String uri) {
if (StringUtils.isBlank(uri)) {
return null;
}
String[] split = uri.split("/");
if (split.length > 2) {
uri = uri.substring(split[1].length() + 1);
}
log.info("==========uri {}", uri);
AuthResource authResource = authResourceRepository.findFirstByUrl(uri);
if (authResource != null) {
return authResource.getName();
}
return null;
}
}
package com.yizhi.logging.servicve;
import com.yizhi.logging.domain.RequestLog;
import org.springframework.data.domain.Page;
import java.time.LocalDateTime;
/**
* @ClassName RequestLogServiceImpl
* @Description 请求日志
* @Author shengchenglong
* @DATE 2021/1/25 10:41
* @Version 1.0
*/
public interface RequestLogService {
/**
* 分页列表
*
* @param startTime
* @param endTime
* @param pageNo
* @param pageSize
* @return
*/
Page<RequestLog> page(LocalDateTime startTime, LocalDateTime endTime, Integer pageNo, Integer pageSize);
RequestLog findById(String id);
}
package com.yizhi.logging.servicve;
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.yizhi.logging.domain.RequestLog;
import com.yizhi.logging.repository.RequestLogRepository;
import lombok.extern.slf4j.Slf4j;
/**
* @ClassName RequestLogServiceImpl
* @Description 请求日志
* @Author shengchenglong
* @DATE 2021/1/25 10:41
* @Version 1.0
*/
@Service
@Transactional
@Slf4j
public class RequestLogServiceImpl implements RequestLogService {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private RequestLogRepository requestLogRepository;
@Override
public Page<RequestLog> page(LocalDateTime startTime, LocalDateTime endTime, Integer pageNo, Integer pageSize) {
log.info("start {} end {}", startTime, endTime);
Sort sort = Sort.by("startTime").descending();
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
Criteria criteria = new Criteria();
if(startTime != null && endTime != null) {
criteria.andOperator(Criteria.where("startTime").gte(startTime), Criteria.where("startTime").lte(endTime));
}else if(startTime != null) {
criteria.and("startTime").gte(startTime);
}else if(endTime != null){
criteria.and("startTime").lte(endTime);
}
Query query = Query.query(criteria);
long t1 = System.currentTimeMillis();
// long count = mongoTemplate.count(query, RequestLog.class);
long count = 500000;
long t2 = System.currentTimeMillis();
log.info("total num {},spend {}", count, t2-t1);
query.with(pageable);
List<RequestLog> list = mongoTemplate.find(query, RequestLog.class);
long t3 = System.currentTimeMillis();
log.info("page query spend {}", t3-t2);
return new PageImpl(list, pageable, count);
}
@Override
public RequestLog findById(String id) {
return requestLogRepository.findById(id).get();
}
}
package com.yizhi.logging.util;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yizhi.core.application.cache.RedisCache;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.annotation.PostConstruct;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
* @ClassName IpUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 20:33
* @Version 1.0
*/
@Component
@ConditionalOnBean(RedisCache.class)
public class IpUtil {
private static final String IP_URL_PCONLINE = "http://whois.pconline.com.cn/ipJson.jsp?ip=%s&json=true";
private static final String IP_URL_126 = "https://ip.ws.126.net/ipquery?ip=%s";
private static final String IP_URL_IPAPI = "http://ip-api.com/json/%s?lang=zh-CN";
private static final String REDIS_CACHE_KEY = "IP_ADDR";
private static RedisCache redisCache;
@Autowired
private RedisCache redisCacheTmp;
@PostConstruct
public void init() {
IpUtil.redisCache = redisCacheTmp;
}
/**
* 根据ip获取详细地址
*/
public static String getHttpCityInfo(String ip) {
String addr = getFromRedis(ip);
if (!StringUtils.isEmpty(addr)) {
return addr;
}
addr = getFromPconline(ip);
if (StringUtils.isEmpty(addr)) {
addr = getFrom126(ip);
}
if (StringUtils.isEmpty(addr)) {
addr = getFromIpApi(ip);
}
set2Redis(ip, addr);
return addr;
}
private static String getFromPconline(String ip) {
try {
String api = String.format(IP_URL_PCONLINE, ip);
JSONObject json = JSON.parseObject(HttpUtil.get(api));
return String.valueOf(json.get("addr"));
} catch (Exception e) {
return null;
}
}
private static String getFrom126(String ip) {
try {
String api = String.format(IP_URL_126, ip);
String res = HttpUtil.get(api);
//本质上获得的是Rhino的接口在 JDK6.0后被集成 详细调用方法可以查看rhino的官网
//获取脚本引擎管理器 接着获得 对应引擎的对象
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine scriptEngine = manager.getEngineByName("javascript");
scriptEngine.eval(res);
String addr = String.valueOf(scriptEngine.get("lo")) + " | " + String.valueOf(scriptEngine.get("lo"));
return addr;
} catch (ScriptException e) {
return null;
}
}
private static String getFromIpApi(String ip) {
try {
String api = String.format(IP_URL_IPAPI, ip);
String res = HttpUtil.get(api);
JSONObject jsonObject = JSON.parseObject(res);
return jsonObject.get("city") + " | " + jsonObject.get("isp");
} catch (Exception e) {
return null;
}
}
private static String getFromRedis(String ip) {
Object object = redisCache.hget(REDIS_CACHE_KEY, ip);
if (object == null) {
return null;
}
return String.valueOf(object);
}
public static void set2Redis(String ip, String addr) {
redisCache.hset(REDIS_CACHE_KEY, ip, addr, 24 * 60 * 60);
}
}
package com.yizhi.logging.util;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName ListUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 17:57
* @Version 1.0
*/
public class ListUtil {
}
package com.yizhi.logging.util;
import com.yizhi.util.application.page.PageInfo;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.data.domain.Page;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName PageInfoUtil
* @Description TODO
* @Author shengchenglong
* @DATE 2021/1/25 11:11
* @Version 1.0
*/
public class PageInfoUtil {
public static PageInfo of(Integer pageNo, Integer pageSize, Integer total, List list) {
PageInfo pageInfo = new PageInfo();
pageInfo.setPageNo(pageNo);
pageInfo.setPageSize(pageSize);
pageInfo.setPageRecords(total);
pageInfo.setRecords(list);
return pageInfo;
}
public static PageInfo of(Page page) {
PageInfo pageInfo = new PageInfo();
pageInfo.setPageNo(page.getNumber() + 1);
pageInfo.setPageSize(page.getSize());
pageInfo.setPageRecords(Math.toIntExact(page.getTotalElements()));
pageInfo.setRecords(page.getContent());
return pageInfo;
}
public static PageInfo transfer(PageInfo originPage, Class destClass) {
if (originPage == null || CollectionUtils.isEmpty(originPage.getRecords())) {
return originPage;
}
List list = originPage.getRecords();
List destList = new ArrayList(list.size());
try {
Object destObj;
for (Object origin : list) {
destObj = destClass.newInstance();
BeanUtils.copyProperties(origin, destObj);
destList.add(destObj);
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
originPage.setRecords(destList);
return originPage;
}
}
#server.port=35100
spring.application.name=cloud-logging
ACTIVE=${spring.profiles.active}
spring.profiles.active=dev
# nacos
spring.cloud.nacos.config.shared-dataids=common-${spring.profiles.active}.properties
spring.cloud.nacos.config.namespace=${spring.profiles.active}
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.server-addr=192.168.1.22:3333,192.168.1.22:4444,192.168.1.22:5555
spring.jpa.show-sql=true
\ No newline at end of file
package com.yizhi.logging;
import com.yizhi.logging.domain.AuthResource;
import com.yizhi.logging.repository.AuthResourceRepository;
import com.yizhi.logging.repository.RequestLogRepository;
import com.yizhi.logging.servicve.RequestLogService;
import com.yizhi.util.application.page.PageInfo;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.test.context.junit4.SpringRunner;
import java.time.LocalDateTime;
@SpringBootTest
@RunWith(SpringRunner.class)
class CloudLoggingApplicationTests {
@Autowired
private RequestLogService requestLogService;
@Autowired
private RequestLogRepository requestLogRepository;
@Autowired
private AuthResourceRepository authResourceRepository;
@Test
void contextLoads() {
// Page page = requestLogService.page(
// LocalDateTime.of(2020, 1, 1, 0, 0, 0),
// LocalDateTime.of(2021, 2, 1, 0, 0, 0),
// 1, 10
// );
// System.out.println(page);
//
// page = requestLogService.page(null, null, 1, 100);
//
// RequestLog requestLog = requestLogRepository.findFirstByRequestUriEquals("http://linshi-gateway/web-student/student/siteLanguage/record/international/selectLanguage/get");
// System.out.println(requestLog);
// Page p = requestLogRepository.findAllByStartTimeAfterAndEndTimeBefore(
// LocalDateTime.of(2021, 1, 1, 0, 0, 0),
// LocalDateTime.of(2021, 2, 1, 0, 0, 0),
// PageRequest.of(0, 100));
// System.out.println(p);
// Page p = requestLogRepository.findAllByStartTimeBetween(Range
// .from(Range.Bound.inclusive(DateUtil.parse("2020-01-01").getTime()))
// .to(Range.Bound.inclusive(DateUtil.parse("2020-02-01").getTime())), PageRequest.of(0, 100));
// System.out.println(p);
// Optional<RequestLog> optionalRequestLog = requestLogRepository.findById("5ffeb2b008d4e03c513ec2fe");
// requestLog = optionalRequestLog.get();
// System.out.println(requestLog);
AuthResource authResource = authResourceRepository.findFirstByUrl("/manage/role/manager/edit");
System.out.println(authResource);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>cloud-logging-api</module>
<module>cloud-logging-service</module>
</modules>
<parent>
<groupId>com.yizhi</groupId>
<artifactId>wmy-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.yizhi</groupId>
<artifactId>cloud-logging</artifactId>
<version>1.0-SNAPSHOT</version>
<name>cloud-logging</name>
<repositories>
<repository>
<!-- <id>wmy4.0</id>
<url>http://mvn.km365.pw/nexus/content/groups/wmy4.0-group/</url> -->
<id>yzkj-my-4.0-group</id>
<url>http://mvn.km365.pw/nexus/content/groups/yzkj-wmy-4.0-group/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment