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',

Reply via email to