Skip to content

Commit

Permalink
Merge branch 'feature/yinghua_20211022'
Browse files Browse the repository at this point in the history
# Conflicts:
#	takin-web-biz-service/src/main/java/io/shulie/takin/web/biz/service/ApplicationService.java
#	takin-web-biz-service/src/main/java/io/shulie/takin/web/biz/service/impl/ApplicationServiceImpl.java
#	takin-web-entrypoint/src/main/java/io/shulie/takin/web/entrypoint/controller/confcenter/ApplicationController.java
  • Loading branch information
shenqioa committed Oct 22, 2021
2 parents ba36fad + 211e687 commit 88a3907
Show file tree
Hide file tree
Showing 24 changed files with 991 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ public Docket api_FastDebug2() {
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
.paths(getRegex("/api/(application/center/app/config|datasource|fastdebug/debug/callStack/node/locate|"
+ "fastdebug/debug/callStack/exception|link/ds/manage|application/plugins/config|opsScriptManage|sys|"
+ "pradar/switch).*"))
+ "pradar/switch|application/center/app).*"))
.build()
.directModelSubstitute(LocalDate.class, String.class)
.useDefaultResponseMessages(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
Expand All @@ -31,7 +32,7 @@ private void pointcut() {
@Around(value = "pointcut()")
public Object advice(ProceedingJoinPoint point) throws Throwable {
ActivityResponse activityResponse;
ActivityCache cache = point.getSignature().getDeclaringType().getMethod("getActivityById", ActivityInfoQueryRequest.class).getAnnotation(ActivityCache.class);
ActivityCache cache = ((MethodSignature) point.getSignature()).getMethod().getAnnotation(ActivityCache.class);
int expireTime = cache.expireTime();
ActivityInfoQueryRequest request = (ActivityInfoQueryRequest) point.getArgs()[0];
if (Objects.isNull(request)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,17 @@
import io.shulie.takin.web.common.enums.activity.info.FlowTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;

@Data
@ApiModel("业务活动详情查询对象")
@NoArgsConstructor
@AllArgsConstructor
public class ActivityInfoQueryRequest extends PagingDevice {

@ApiModelProperty("业务活动ID")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package io.shulie.takin.web.biz.pojo.request.application;

import io.shulie.takin.common.beans.page.PagingDevice;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

@Data
@ApiModel("应用监控查询对象")
public class ApplicationVisualInfoQueryRequest extends PagingDevice {
/**
* 应用名称
*/
@ApiModelProperty("应用名称")
private String appName;

@ApiModelProperty("流量类型(BLEND混合-1、PRESSURE_MEASUREMENT压测1、BUSINESS业务0)")
private int clusterTest;

@ApiModelProperty("开始时间")
private LocalDateTime startTimeDate = LocalDateTime.now().minusMinutes(5);

@ApiModelProperty("结束时间")
private LocalDateTime endTimeDate = LocalDateTime.now();

@ApiModelProperty("开始时间")
private String startTime = startTimeDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

@ApiModelProperty("结束时间")
private String endTime = endTimeDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

/**
* 服务名称
* 如果服务名称为空则查询全部服务,否则查询指定服务名称服务
*/
@ApiModelProperty("服务名称")
private String label;

/**
* 业务活动
*/
@ApiModelProperty("业务活动名称")
private String activityName;

/**
* 排序字段
* eg:TPS desc
*/
@ApiModelProperty("排序字段")
private String orderBy = "TPS desc";

/**
* 关注列表
*/
@ApiModelProperty("关注列表")
private List<String> attentionList;

/**
* 是否关注
*/
@ApiModelProperty("是否关注")
private Boolean attend;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.shulie.takin.web.biz.pojo.response.activity;

import lombok.Data;

@Data
public class ActivityBottleneckResponse {

// 总Rt 瓶颈类型(-1 没有瓶颈 | 1 一般卡慢 | 2 严重卡慢)
private int allTotalRtBottleneckType;
// 总Rt 瓶颈详情 id
private Long rtBottleneckId;


// 总成功率 瓶颈类型(-1 没有瓶颈 | 1 一般瓶颈 | 2 严重瓶颈)
private int allSuccessRateBottleneckType;
// 总成功率 瓶颈详情 id
private Long successRateBottleneckId;


// 总Rt 慢sql 瓶颈类型(-1 没有瓶颈 | 1 一般卡慢 | 2 严重卡慢)
private int allSqlTotalRtBottleneckType;
// 总Rt 慢sql 瓶颈详情 id
private Long rtSqlBottleneckId;

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.shulie.takin.web.biz.pojo.response.application;

import java.util.HashMap;
import java.util.List;
import java.util.Set;

Expand All @@ -24,6 +25,16 @@ public class ApplicationEntranceTopologyResponse {
@ApiModelProperty("边")
private List<ApplicationEntranceTopologyEdgeResponse> edges;

// 一般瓶颈 [false 没有瓶颈 | true 有一般瓶颈]
boolean hasL1Bottleneck = false;
// 一般瓶颈数量
int l1bottleneckNum = 0;

// 严重瓶颈 [false 没有瓶颈 | true 有严重瓶颈]
boolean hasL2Bottleneck = false;
// 严重瓶颈数量
int l2bottleneckNum = 0;

private List<ExceptionListResponse> exceptions;

public enum NodeTypeResponseEnum {
Expand Down Expand Up @@ -99,6 +110,16 @@ public static class AbstractTopologyNodeResponse {
private Double serviceRt;
// >>>>> 节点中 某个服务的 4 个性能指标

// 一般瓶颈 [false 没有瓶颈 | true 有一般瓶颈]
boolean hasL1Bottleneck = false;
// 一般瓶颈数量
int l1bottleneckNum = 0;

// 严重瓶颈 [false 没有瓶颈 | true 有严重瓶颈]
boolean hasL2Bottleneck = false;
// 严重瓶颈数量
int l2bottleneckNum = 0;

// TopologyAppNodeResponse
private String manager;
private List<AppProviderInfo> providerService;
Expand Down Expand Up @@ -175,6 +196,7 @@ public static class AppProvider {
private String serviceName;
// 上游应用
private String beforeApps;
private HashMap<String, String> beforeAppsMap;
// 服务开关状态(true 打开 | false 关闭)
private Boolean switchState;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package io.shulie.takin.web.biz.pojo.response.application;

import io.shulie.takin.web.biz.pojo.response.activity.ActivityBottleneckResponse;
import lombok.Data;

import java.io.Serializable;
import java.text.DecimalFormat;
import java.util.Map;

@Data
public class ApplicationVisualInfoResponse implements Serializable {

private static final long serialVersionUID = 1L;

/**
* 应用名称
*/
private String appName;
/**
* 服务名称
*/
private String serviceAndMethod;
/**
* 请求量
*/
private int requestCount;
/**
* TPS
*/
private double tps;
/**
* 响应时间
*/
private double responseConsuming;
/**
* 成功率
*/
private double successRatio;
/**
* 中间件类型
*/
private String middlewareName;
/**
* 关联业务活动名称
*/
private String[] activeList;
/**
* 关联业务活动名称
*/
private Map activeIdAndName;
/**
* 是否关注
*/
private boolean isAttend;
/**
* 健康检查结果
*/
private ActivityBottleneckResponse response;

private static final DecimalFormat df = new DecimalFormat("#.##");

public double getTps() {
return Double.parseDouble(df.format(tps));
}

public double getResponseConsuming() {
return Double.parseDouble(df.format(responseConsuming));
}

public double getSuccessRatio() {
return Double.parseDouble(df.format(successRatio));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import io.shulie.takin.common.beans.page.PagingList;
import io.shulie.takin.web.biz.pojo.request.activity.*;
import io.shulie.takin.web.biz.pojo.response.activity.ActivityBottleneckResponse;
import io.shulie.takin.web.biz.pojo.response.activity.ActivityListResponse;
import io.shulie.takin.web.biz.pojo.response.activity.ActivityResponse;
import io.shulie.takin.web.biz.pojo.response.activity.ActivityVerifyResponse;
Expand Down Expand Up @@ -70,6 +71,7 @@ public interface ActivityService {
ActivityResponse getActivityById(Long activityId);
ActivityResponse getActivityWithMetricsById(ActivityInfoQueryRequest request);
ActivityResponse getActivityWithMetricsByIdForReport(Long activityId, LocalDateTime start, LocalDateTime end);
ActivityBottleneckResponse getBottleneckByActivityList(List<ActivityInfoQueryRequest> activityList, String appName, String serviceName);

ActivityResponse getActivityByIdWithoutTopology(Long id);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
import com.pamirs.takin.entity.domain.vo.ApplicationVo;
import com.pamirs.takin.entity.domain.vo.JarVersionVo;
import com.pamirs.takin.entity.domain.vo.application.NodeNumParam;
import io.shulie.takin.web.biz.pojo.response.application.ApplicationVisualInfoResponse;
import io.shulie.takin.web.biz.pojo.openapi.response.application.ApplicationListResponse;
import io.shulie.takin.web.biz.pojo.request.application.ApplicationVisualInfoQueryRequest;
import io.shulie.takin.web.common.common.Response;
import io.shulie.takin.web.data.result.application.ApplicationDetailResult;
import org.springframework.web.multipart.MultipartFile;
Expand Down Expand Up @@ -155,6 +157,8 @@ public interface ApplicationService {

List<TApplicationMnt> getAllApplications();

List<TApplicationMnt> getApplicationsByUserIdList(List<Long> userIdList);

String getIdByName(String applicationName);

String getUserSwitchStatusForVo();
Expand Down Expand Up @@ -244,4 +248,18 @@ public interface ApplicationService {

Boolean silenceSwitchStatusIsTrue(Long uid, AppSwitchEnum appSwitchEnum);

/**
* 应用监控查询接口
*
* @param request 包含应用名称及服务名称
*/
Response<List<ApplicationVisualInfoResponse>> getApplicationVisualInfo(ApplicationVisualInfoQueryRequest request);

/**
* 关注服务
*
* @param request 应用名➕服务名➕是否关注
*/
void attendApplicationService(ApplicationVisualInfoQueryRequest request) throws Exception;

}
Loading

0 comments on commit 88a3907

Please sign in to comment.