[BuildMonitor] Update unresolvable/broken status by buildmonitor 25/117425/3
authorJunghyun Kim <jh0822.kim@samsung.com>
Mon, 6 Mar 2017 05:24:40 +0000 (14:24 +0900)
committerJunghyun Kim <jh0822.kim@samsung.com>
Mon, 6 Mar 2017 06:37:30 +0000 (15:37 +0900)
PROBLEM:
  If OBS generates unresolvable/broken events, too many
 events can be generated during building.

SOLUTION:
  To prohibit this, instead of OBS, snapshot jobs in Jenkins
 (pre-release-create and create-snapshot)
 update those build statuses.

Change-Id: I97ee4346d37c0919064b79173b7042c49dc7a4ae
Signed-off-by: Junghyun Kim <jh0822.kim@samsung.com>
common/buildservice.py
job_buildmonitor.py
job_create_snapshot.py
job_pre_release_obs.py

index a72f8ba..0f2a58c 100755 (executable)
@@ -457,7 +457,7 @@ class BuildService(OSC):
         root = ElementTree.parse(_file).getroot()
         return [node.get('name') for node in root.findall('entry')]
 
-    def get_package_build_result(self, project):
+    def get_package_build_result(self, project, status_filter=None):
         """ Get built result of the project """
 
         url = core.makeurl(self.apiurl, ['build', project, '_result'])
@@ -475,7 +475,8 @@ class BuildService(OSC):
             for package_status in project_status.findall('status'):
                 package_name = package_status.attrib['package']
                 package_status = package_status.attrib['code']
-                build_result[repo][arch][package_name] = package_status
+                if status_filter == None or package_status in status_filter:
+                    build_result[repo][arch][package_name] = package_status
 
         return build_result
 
index 79fb766..efc0ba8 100644 (file)
@@ -1156,6 +1156,31 @@ def update_build_log(content):
             query_data = (build_log_url, build_target_id, info_package_id)
             buildmonitor_db.do_query(query, query_data)
 
+def update_unresolvable_broken_packages(project, unresolvable_broken_packages):
+
+    # get curr_info_project_id -> get curr_build_project_id for multi profile
+    query = "SELECT id FROM info_project WHERE project_name = %s"
+    query_data = (project,)
+    curr_info_project_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+    query = "SELECT id FROM build_project WHERE info_project_id = %s ORDER BY id DESC LIMIT 1"
+    query_data = (curr_info_project_id,)
+    curr_build_project_id = buildmonitor_db.get_value_from_query_data(query, query_data)
+
+    for repo in unresolvable_broken_packages:
+        for arch in unresolvable_broken_packages[repo]:
+            for p in unresolvable_broken_packages[repo][arch]:
+                status = unresolvable_broken_packages[repo][arch][p]
+
+                query = "INSERT INTO build_package (build_target_id, info_package_id, start_time," \
+                        "end_time, build_status) VALUES ("\
+                        "(SELECT id FROM build_target WHERE build_project_id=%s AND repository=%s "\
+                        "AND arch=%s ORDER BY id DESC LIMIT 1), "\
+                        "(SELECT id FROM info_package WHERE info_project_id=%s AND package_name=%s "\
+                        "AND active_flag='Y' ORDER BY id DESC LIMIT 1), "\
+                        "NOW(), NOW(), %s)"
+                query_data = (curr_build_project_id, repo, arch, curr_info_project_id, p, status)
+                buildmonitor_db.do_query(query, query_data)
+
 #===============================================================================
 # [TRBS][job_submit.py]
 
@@ -1721,6 +1746,7 @@ def main():
         bm_git_tag = content.get("bm_git_tag")
         bm_start_datetime = content.get("bm_start_datetime")
         bBuildFail = content.get("bBuildFail")
+        unresolvable_broken_packages = content.get("unresolvable_broken_packages")
 
         # func call
         if bm_stage == 'Pre_Snap_Start':
@@ -1744,6 +1770,8 @@ def main():
             print '[%s] Build failed!! skip insert build_snapshot_id\n' \
                   % (__file__)
 
+        update_unresolvable_broken_packages(project, unresolvable_broken_packages)
+
     elif bm_stage == 'Pre_Snap_End' or bm_stage == '[TRBS]_Pre_Snap_End':
         print '[%s][Pre_Snap_End]\n' % (__file__)
 
@@ -1903,9 +1931,13 @@ def main():
         # get vars
         project = content.get("project")
         bm_start_datetime = content.get("bm_start_datetime")
+        unresolvable_broken_packages = content.get("unresolvable_broken_packages")
 
         # func call
         start_create_snapshot_for_sr_stage(project, bm_start_datetime)
+
+        update_unresolvable_broken_packages(project, unresolvable_broken_packages)
+
     elif bm_stage == 'Post_Snap_snapshot':
         print '[%s][Post_Snap_snapshot]\n' % (__file__)
         project = content.get("project")
index 7c9d1a0..3ea297d 100755 (executable)
@@ -292,6 +292,8 @@ def main():
 
     project = content.get("project")
 
+    build = BuildService(obs_api, obs_user, obs_passwd)
+
     if buildmonitor_enabled:
         global bm_project # for update_fail_xxx
         bm_project = project
@@ -300,12 +302,11 @@ def main():
         bm_data = {"bm_stage" : bm_stage,
                    "bm_stage_func" : 'start_create_snapshot_for_sr_stage',
                    "project" : project,
-                   "bm_start_datetime" : str(bm_start_datetime)
+                   "bm_start_datetime" : str(bm_start_datetime),
+                   "unresolvable_broken_packages": build.get_package_build_result(project, ["unresolvable", "broken"])
                   }
         trigger_next("BUILD-MONITOR-1-%s" % bm_stage, bm_data)
 
-    build = BuildService(obs_api, obs_user, obs_passwd)
-
     # Init backend database
     redis_host = os.getenv("REDIS_HOST")
     redis_port = int(os.getenv("REDIS_PORT"))
index c4e9727..bbb4afb 100755 (executable)
@@ -464,6 +464,7 @@ def main(action):
                        "bm_git_tag" : bm_git_tag,
                        "bm_start_datetime": str(bm_start_datetime),
                        "bBuildFail": bBuildFail,
+                       "unresolvable_broken_packages": build.get_package_build_result(project, ["unresolvable", "broken"])
                         }
             trigger_next("BUILD-MONITOR-1-%s" % bm_stage, bm_data)