Skip to content

Commit

Permalink
Merge pull request #2789 from jsonwan/github_perf/get_step_status
Browse files Browse the repository at this point in the history
perf: ESB接口get_step_status支持返回执行中步骤的实时总耗时 #2788
  • Loading branch information
wangyu096 authored Feb 29, 2024
2 parents a4ca9d7 + 55d5cad commit 31ba038
Show file tree
Hide file tree
Showing 3 changed files with 190 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ private EsbStepInstanceStatusV3DTO buildEsbStepInstanceStatusV3DTO(StepExecution
stepInst.setType(stepInstance.getExecuteType().getValue());
stepInst.setStatus(stepInstance.getStatus().getValue());
stepInst.setCreateTime(stepInstance.getCreateTime());
stepInst.setStartTime(stepInstance.getStartTime());
stepInst.setEndTime(stepInstance.getEndTime());
stepInst.setTotalTime(stepInstance.getTotalTime());
stepInst.setStartTime(executionResult.getStartTime());
stepInst.setEndTime(executionResult.getEndTime());
stepInst.setTotalTime(executionResult.getTotalTime());

List<EsbStepInstanceStatusV3DTO.StepResultGroup> stepResultGroupList = new ArrayList<>();
List<ResultGroupDTO> resultGroups = executionResult.getResultGroups();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
/*
* Tencent is pleased to support the open source community by making BK-JOB蓝鲸智云作业平台 available.
*
* Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
*
* BK-JOB蓝鲸智云作业平台 is licensed under the MIT License.
*
* License for BK-JOB蓝鲸智云作业平台:
* --------------------------------------------------------------------
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
* to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of
* the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
* THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*/

package com.tencent.bk.job.api.v3.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Data
public class EsbStepInstanceStatusV3DTO {

/**
* 步骤实例id
*/
@JsonProperty("step_instance_id")
private Long id;

/**
* 执行次数
*/
@JsonProperty("execute_count")
private Integer executeCount;
/**
* 名称
*/
@JsonProperty("name")
private String name;

/**
* 步骤类型:1.脚本步骤; 2.文件步骤; 4.SQL步骤
*/
@JsonProperty("type")
private Integer type;
/**
* 状态: 1.未执行、2.正在执行、3.执行完成且成功、4.执行失败
*/
@JsonProperty("status")
private Integer status;
/**
* 创建时间
*/
@JsonProperty("create_time")
private Long createTime;
/**
* 开始时间
*/
@JsonProperty("start_time")
private Long startTime;
/**
* 结束时间
*/
@JsonProperty("end_time")
private Long endTime;
/**
* 总耗时,单位:毫秒
*/
@JsonProperty("total_time")
private Long totalTime;

@JsonProperty("step_result_group_list")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<StepResultGroup> stepResultGroupList;

@Setter
@Getter
public static class StepResultGroup {
@JsonProperty("result_type")
private Integer resultType;

@JsonProperty("result_type_desc")
private String resultTypeDesc;

private String tag;

@JsonProperty("host_size")
private Integer hostSize;

@JsonProperty("host_result_list")
private List<HostResult> hostResultList;
}

@Setter
@Getter
public static class HostResult {
@JsonProperty("bk_host_id")
private Long hostId;

private String ip;

private String ipv6;

@JsonProperty("bk_agent_id")
private String agentId;

@JsonProperty("bk_cloud_id")
private Long cloudAreaId;

@JsonProperty("bk_cloud_name")
private String cloudAreaName;

private Integer status;

@JsonProperty("status_desc")
private String statusDesc;

private String tag;

@JsonProperty("exit_code")
private Integer exitCode;

/**
* 开始时间
*/
@JsonProperty("start_time")
private Long startTime;
/**
* 结束时间
*/
@JsonProperty("end_time")
private Long endTime;
/**
* 总耗时,单位:毫秒
*/
@JsonProperty("total_time")
private Long totalTime;
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
package com.tencent.bk.job.api.v3.testcase;

import com.tencent.bk.job.api.constant.ErrorCode;
import com.tencent.bk.job.api.model.EsbResp;
import com.tencent.bk.job.api.props.TestProps;
import com.tencent.bk.job.api.util.ApiUtil;
import com.tencent.bk.job.api.util.Operations;
import com.tencent.bk.job.api.v3.constants.APIV3Urls;
import com.tencent.bk.job.api.v3.model.EsbJobExecuteV3DTO;
import com.tencent.bk.job.api.v3.model.EsbStepInstanceStatusV3DTO;
import io.restassured.common.mapper.TypeRef;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.notNullValue;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

/**
* 获取步骤状态 API 测试
Expand All @@ -35,7 +36,7 @@ void testGetScriptStepInstanceStatus() {
// 1.触发一次执行
EsbJobExecuteV3DTO esbJobExecuteV3DTO = Operations.fastExecuteScriptTask();
// 2.获取步骤详情
given()
EsbStepInstanceStatusV3DTO stepInstanceStatusV3DTO = given()
.spec(ApiUtil.requestSpec(TestProps.DEFAULT_TEST_USER))
.param("bk_scope_type", "biz")
.param("bk_scope_id", TestProps.DEFAULT_BIZ)
Expand All @@ -45,12 +46,20 @@ void testGetScriptStepInstanceStatus() {
.get(APIV3Urls.GET_STEP_INSTANCE_STATUS)
.then()
.spec(ApiUtil.successResponseSpec())
.body("data", notNullValue())
.body("data.step_instance_id", equalTo(esbJobExecuteV3DTO.getStepInstanceId()))
.body("data.execute_count", equalTo(0))
.body("data.type", equalTo(1))
.body("data.status", notNullValue())
.body("data.step_result_group_list", hasSize(1));
.extract()
.body()
.as(new TypeRef<EsbResp<EsbStepInstanceStatusV3DTO>>() {
})
.getData();
assertThat(stepInstanceStatusV3DTO).isNotNull();
assertThat(stepInstanceStatusV3DTO.getId()).isEqualTo(esbJobExecuteV3DTO.getStepInstanceId());
assertThat(stepInstanceStatusV3DTO.getExecuteCount()).isEqualTo(0);
assertThat(stepInstanceStatusV3DTO.getType()).isEqualTo(1);
assertThat(stepInstanceStatusV3DTO.getStatus()).isNotNull();
assertThat(stepInstanceStatusV3DTO.getStartTime()).isGreaterThan(0L);
assertThat(stepInstanceStatusV3DTO.getTotalTime()).isGreaterThan(0L);
assertThat(stepInstanceStatusV3DTO.getStepResultGroupList()).isNotNull();
assertThat(stepInstanceStatusV3DTO.getStepResultGroupList().size()).isEqualTo(1);
}

@Test
Expand All @@ -59,7 +68,7 @@ void testGetFileStepInstanceStatus() {
// 1.触发一次执行
EsbJobExecuteV3DTO esbJobExecuteV3DTO = Operations.fastTransferFileTask();
// 2.获取步骤详情
given()
EsbStepInstanceStatusV3DTO stepInstanceStatusV3DTO = given()
.spec(ApiUtil.requestSpec(TestProps.DEFAULT_TEST_USER))
.param("bk_scope_type", "biz")
.param("bk_scope_id", TestProps.DEFAULT_BIZ)
Expand All @@ -68,12 +77,20 @@ void testGetFileStepInstanceStatus() {
.get(APIV3Urls.GET_STEP_INSTANCE_STATUS)
.then()
.spec(ApiUtil.successResponseSpec())
.body("data", notNullValue())
.body("data.step_instance_id", equalTo(esbJobExecuteV3DTO.getStepInstanceId()))
.body("data.execute_count", equalTo(0))
.body("data.type", equalTo(2))
.body("data.status", notNullValue())
.body("data.step_result_group_list", hasSize(1));
.extract()
.body()
.as(new TypeRef<EsbResp<EsbStepInstanceStatusV3DTO>>() {
})
.getData();
assertThat(stepInstanceStatusV3DTO).isNotNull();
assertThat(stepInstanceStatusV3DTO.getId()).isEqualTo(esbJobExecuteV3DTO.getStepInstanceId());
assertThat(stepInstanceStatusV3DTO.getExecuteCount()).isEqualTo(0);
assertThat(stepInstanceStatusV3DTO.getType()).isEqualTo(2);
assertThat(stepInstanceStatusV3DTO.getStatus()).isNotNull();
assertThat(stepInstanceStatusV3DTO.getStartTime()).isGreaterThan(0L);
assertThat(stepInstanceStatusV3DTO.getTotalTime()).isGreaterThan(0L);
assertThat(stepInstanceStatusV3DTO.getStepResultGroupList()).isNotNull();
assertThat(stepInstanceStatusV3DTO.getStepResultGroupList().size()).isEqualTo(1);
}

@Test
Expand Down

0 comments on commit 31ba038

Please sign in to comment.