This is an automated email from the ASF dual-hosted git repository.
hez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new 20535b4fd fix: Fix extraction and convertion of running builds (#5355)
20535b4fd is described below
commit 20535b4fdd8148cbeddf0ce005ed9148902e7b5b
Author: Camille Teruel <[email protected]>
AuthorDate: Fri Jun 2 18:56:53 2023 +0200
fix: Fix extraction and convertion of running builds (#5355)
Co-authored-by: Camille Teruel <[email protected]>
---
backend/python/plugins/azuredevops/azuredevops/models.py | 6 +++---
.../plugins/azuredevops/azuredevops/streams/builds.py | 10 +++++++++-
.../python/plugins/azuredevops/azuredevops/streams/jobs.py | 14 +++++++++++---
backend/python/plugins/azuredevops/tests/streams_test.py | 8 ++++----
4 files changed, 27 insertions(+), 11 deletions(-)
diff --git a/backend/python/plugins/azuredevops/azuredevops/models.py
b/backend/python/plugins/azuredevops/azuredevops/models.py
index 06be15d3c..d6de95a8e 100644
--- a/backend/python/plugins/azuredevops/azuredevops/models.py
+++ b/backend/python/plugins/azuredevops/azuredevops/models.py
@@ -120,10 +120,10 @@ class Job(ToolModel, table=True):
id: str = Field(primary_key=True)
build_id: str = Field(primary_key=True)
name: str
- startTime: datetime.datetime
- finishTime: datetime.datetime
+ start_time: Optional[datetime.datetime]
+ finish_time: Optional[datetime.datetime]
state: JobState
- result: JobResult
+ result: Optional[JobResult]
@migration(20230524181430)
diff --git a/backend/python/plugins/azuredevops/azuredevops/streams/builds.py
b/backend/python/plugins/azuredevops/azuredevops/streams/builds.py
index 97687f80a..ad349bc67 100644
--- a/backend/python/plugins/azuredevops/azuredevops/streams/builds.py
+++ b/backend/python/plugins/azuredevops/azuredevops/streams/builds.py
@@ -36,6 +36,9 @@ class Builds(Stream):
yield raw_build, state
def convert(self, b: Build, ctx: Context):
+ if not b.start_time:
+ return
+
result = None
if b.result == Build.BuildResult.Canceled:
result = devops.CICDResult.ABORT
@@ -65,13 +68,18 @@ class Builds(Stream):
if ctx.transformation_rule and
ctx.transformation_rule.production_pattern.search(b.name):
environment = devops.CICDEnvironment.PRODUCTION
+ if b.finish_time:
+ duration_sec = abs(b.finish_time.second - b.start_time.second)
+ else:
+ duration_sec = 0
+
yield devops.CICDPipeline(
name=b.name,
status=status,
created_date=b.start_time,
finished_date=b.finish_time,
result=result,
- duration_sec=abs(b.finish_time.second-b.start_time.second),
+ duration_sec=duration_sec,
environment=environment,
type=type,
cicd_scope_id=ctx.scope.domain_id(),
diff --git a/backend/python/plugins/azuredevops/azuredevops/streams/jobs.py
b/backend/python/plugins/azuredevops/azuredevops/streams/jobs.py
index 4d0b3a194..d85d971be 100644
--- a/backend/python/plugins/azuredevops/azuredevops/streams/jobs.py
+++ b/backend/python/plugins/azuredevops/azuredevops/streams/jobs.py
@@ -43,6 +43,9 @@ class Jobs(Substream):
yield raw_job, state
def convert(self, j: Job, ctx: Context) -> Iterable[devops.CICDPipeline]:
+ if not j.start_time:
+ return
+
result = None
if j.result == Job.JobResult.Abandoned:
result = devops.CICDResult.ABORT
@@ -72,16 +75,21 @@ class Jobs(Substream):
if ctx.transformation_rule and
ctx.transformation_rule.production_pattern.search(j.name):
environment = devops.CICDEnvironment.PRODUCTION
+ if j.finish_time:
+ duration_sec = abs(j.finish_time.second-j.start_time.second)
+ else:
+ duration_sec = 0
+
yield devops.CICDTask(
id=j.id,
name=j.name,
pipeline_id=j.build_id,
status=status,
- created_date=j.startTime,
- finished_date=j.finishTime,
+ created_date=j.start_time,
+ finished_date=j.finish_time,
result=result,
type=type,
- duration_sec=abs(j.finishTime.second-j.startTime.second),
+ duration_sec=duration_sec,
environment=environment,
cicd_scope_id=ctx.scope.domain_id()
)
diff --git a/backend/python/plugins/azuredevops/tests/streams_test.py
b/backend/python/plugins/azuredevops/tests/streams_test.py
index 4f9f1e199..f8f5dfe65 100644
--- a/backend/python/plugins/azuredevops/tests/streams_test.py
+++ b/backend/python/plugins/azuredevops/tests/streams_test.py
@@ -45,8 +45,8 @@ def test_builds_stream(context):
'status': 'completed',
'result': 'succeeded',
'queueTime': '2023-02-25T06:22:21.2237625Z',
- 'startTime': '2023-02-25T06:22:32.8097789Z',
- 'finishTime': '2023-02-25T06:23:04.0061884Z',
+ 'start_time': '2023-02-25T06:22:32.8097789Z',
+ 'finish_time': '2023-02-25T06:23:04.0061884Z',
'url':
'https://dev.azure.com/testorg/7a3fd40e-2aed-4fac-bac9-511bf1a70206/_apis/build/Builds/12',
'definition': {
'drafts': [],
@@ -155,8 +155,8 @@ def test_jobs_stream(context):
'type': 'Job',
'name': 'deploy production',
'build_id': 'azuredevops:Build:1:12', # Added by collector,
- 'startTime': '2023-02-25T06:22:36.8066667Z',
- 'finishTime': '2023-02-25T06:22:43.2333333Z',
+ 'start_time': '2023-02-25T06:22:36.8066667Z',
+ 'finish_time': '2023-02-25T06:22:43.2333333Z',
'currentOperation': None,
'percentComplete': None,
'state': 'completed',