From 6fc6f7ee08bd5a7a811b39fe7a4c61f0afdddca5 Mon Sep 17 00:00:00 2001 From: Junghyun Kim Date: Tue, 23 May 2017 20:13:47 +0900 Subject: [PATCH] static dep_graph generation instead of dynamic dep_graph Stanislav requires not to use php scripts on download.tizen.org because download server will be replicated and he assumes that there is no server-side scripting. Hence, server-side script code is moved to dashboard. Change-Id: Ia41def88a3b48dedb590f880c797b2363e293224 Signed-off-by: Junghyun Kim --- ..._graph.php.template => dep_graph.html.template} | 12 +- common/dep_graph.html.template_simple | 1 + common/dep_graph.php.template_simple | 158 --------------------- common/dep_parse.py | 77 ++++++---- debian/jenkins-scripts-common.install | 4 +- job_make_dep_graph.py | 8 +- packaging/jenkins-scripts.spec | 4 +- 7 files changed, 64 insertions(+), 200 deletions(-) rename common/{dep_graph.php.template => dep_graph.html.template} (86%) create mode 100644 common/dep_graph.html.template_simple delete mode 100644 common/dep_graph.php.template_simple diff --git a/common/dep_graph.php.template b/common/dep_graph.html.template similarity index 86% rename from common/dep_graph.php.template rename to common/dep_graph.html.template index c19641a..6c9413b 100644 --- a/common/dep_graph.php.template +++ b/common/dep_graph.html.template @@ -34,35 +34,35 @@ - partial edge graph + partial edge graph PackageName Click a package to see its name. - full edge graph + full edge graph BuildLevel Click a package to see its build level. - partial edge graph (reverse) + partial edge graph (reverse) Max build level - full edge graph (reverse) + full edge graph (reverse) Total packages - full dependency graph
+ full dependency graph
@@ -71,7 +71,7 @@
- full dependency graph (full_edges)
+ full dependency graph (full_edges)
diff --git a/common/dep_graph.html.template_simple b/common/dep_graph.html.template_simple new file mode 100644 index 0000000..b76dd66 --- /dev/null +++ b/common/dep_graph.html.template_simple @@ -0,0 +1 @@ +Empty file. diff --git a/common/dep_graph.php.template_simple b/common/dep_graph.php.template_simple deleted file mode 100644 index 884d651..0000000 --- a/common/dep_graph.php.template_simple +++ /dev/null @@ -1,158 +0,0 @@ - - - - %graph% for package %package% - - - - - - - - - - - - - - - - - - - -
OBS package name - - -
- -
-
- - - - - - - - - - diff --git a/common/dep_parse.py b/common/dep_parse.py index c208f45..8cb5dcc 100755 --- a/common/dep_parse.py +++ b/common/dep_parse.py @@ -22,19 +22,19 @@ reduced_edges_reverse={} git_obs_mapping={} -obs_api_url="http://10.113.76.103:81" -obs_project="Tizen:Mobile" -obs_repo="arm-wayland" -obs_arch="armv7l" -obs_username="Admin" -obs_pw="opensuse" - -mysql_ip="10.113.76.58" -mysql_username="terminiuser" -mysql_pw="1qaz2wsx" -mysql_db="terminidb" -mysql_build_target_id="26" -get_build_status_from="get_build_status_from_obs" +obs_api_url="" +obs_project="" +obs_repo="" +obs_arch="" +obs_username="" +obs_pw="" + +mysql_ip="" +mysql_username="" +mysql_pw="" +mysql_db="" +mysql_build_target_id="" +get_build_status_from="" #------------------------------------------------------------------------------- def MakeGitOBSMapping(): if len(git_obs_mapping) > 0: @@ -140,7 +140,7 @@ def MakeEdges(nodes, sorted_packages, dep_packages, cycle_edges, reduced_edges): for dp in dst_pkgs: if src_pkg in nodes and dp in nodes: edges.add((src_pkg, dp, 'true')) - + return edges #------------------------------------------------------------------------------- @@ -180,11 +180,11 @@ def MakeFullEdgePackageLevel(nodes, level0_packages, dep_packages, cycle_edges): level_packages[level].append(dst_pkg) inserted_pkgs.add(dst_pkg) pkg_count=pkg_count+1 - + return full_package_level - + #------------------------------------------------------------------------------- -def MakeFullEdges(nodes, dep_packages): +def MakeFullEdges(nodes, dep_packages, cycle_edges): edges=set() for pkg in nodes: @@ -193,6 +193,11 @@ def MakeFullEdges(nodes, dep_packages): if dst_pkg in nodes: edges.add((pkg, dst_pkg, 'false')) + for src_pkg,dst_pkgs in cycle_edges.items(): + for dp in dst_pkgs: + if src_pkg in nodes and dp in nodes: + edges.add((src_pkg, dp, 'true')) + return edges #------------------------------------------------------------------------------- @@ -272,7 +277,7 @@ def TopologySortPackages(nodes, dep_packages, in_edge_count, cycle_edges, reduce pkg_level[d]=pkg_level[src]+1 edges = MakeEdges(nodes, sorted_packages, dep_packages, cycle_edges, reduced_edges) - full_edges = MakeFullEdges(nodes, dep_packages) + full_edges = MakeFullEdges(nodes, dep_packages, cycle_edges) #full_edge_pkg_level = MakeFullEdgePackageLevel(nodes, sorted_packages[0], dep_packages, cycle_edges) #return nodes, edges, pkg_level, full_edges, full_edge_pkg_level return nodes, edges, pkg_level, full_edges @@ -390,7 +395,7 @@ def RemoveCycle(main_pkg_edges, full_in_edge_count): return main_pkg_edges, cycle_edges, full_in_edge_count #------------------------------------------------------------------------------- -def MakeSubGraphMultiPackages(pkgs_to_start, main_pkg_edges): +def MakeSubGraphMultiPackages(pkgs_to_start, main_pkg_edges, cycle_edges): pkg_status={} nodes=set() dep_packages={} @@ -417,6 +422,14 @@ def MakeSubGraphMultiPackages(pkgs_to_start, main_pkg_edges): if dst_pkg_name not in pkg_status: #print 'pkg_status['+dst_pkg_name+']=visited' pkg_status[dst_pkg_name]='visited' + if pkg_name in cycle_edges: + for dst_pkg_name in cycle_edges[pkg_name]: + if pkg_name not in dep_packages: + dep_packages[pkg_name]=[] + dep_packages[pkg_name].append(dst_pkg_name) + if dst_pkg_name not in pkg_status: + #print 'pkg_status['+dst_pkg_name+']=visited' + pkg_status[dst_pkg_name]='visited' pkg_status[pkg_name] = 'printed' @@ -435,7 +448,7 @@ def MakeSubGraphMultiPackages(pkgs_to_start, main_pkg_edges): return nodes, dep_packages, in_edge_count #------------------------------------------------------------------------------- -def MakeSubGraph(pkg_to_start, main_pkg_edges): +def MakeSubGraph(pkg_to_start, main_pkg_edges, cycle_edges): pkg_status={} nodes=set() dep_packages={} @@ -458,6 +471,14 @@ def MakeSubGraph(pkg_to_start, main_pkg_edges): if dst_pkg_name not in pkg_status: #print 'pkg_status['+dst_pkg_name+']=visited' pkg_status[dst_pkg_name]='visited' + if pkg_name in cycle_edges: + for dst_pkg_name in cycle_edges[pkg_name]: + if pkg_name not in dep_packages: + dep_packages[pkg_name]=[] + dep_packages[pkg_name].append(dst_pkg_name) + if dst_pkg_name not in pkg_status: + #print 'pkg_status['+dst_pkg_name+']=visited' + pkg_status[dst_pkg_name]='visited' pkg_status[pkg_name] = 'printed' @@ -546,11 +567,11 @@ def PrintHTML(html_out, js_out, pkg_name, template_filename, reverse, full_edges template_f.close(); #------------------------------------------------------------------------------- -def GenerateOutput(dir_name, pkg_name, nodes, edges, pkg_level, full_edges, full_edge_pkg_level, +def GenerateOutput(dir_name, pkg_name, nodes, edges, pkg_level, full_edges, full_edge_pkg_level, reverse, template_filename, vis_dir_str, dep_graph_dir_str, built_packages): js_postfix=".vis_input.js" - php_postfix=".php" + php_postfix=".html" if reverse: js_postfix="_reverse"+js_postfix php_postfix="_reverse"+php_postfix @@ -564,7 +585,7 @@ def GenerateOutput(dir_name, pkg_name, nodes, edges, pkg_level, full_edges, full PrintHTML(html_out, pkg_js, pkg_name, template_filename, reverse, False, vis_dir_str, dep_graph_dir_str) js_postfix=".full_edges.vis_input.js" - php_postfix="_full_edges.php" + php_postfix="_full_edges.html" if reverse: js_postfix="_reverse"+js_postfix php_postfix="_reverse"+php_postfix @@ -647,7 +668,7 @@ def set_mysql_environment(_mysql_ip, _mysql_username, _mysql_pw, _mysql_db, _mys get_build_status_from="get_build_status_from_mysql" def make_dep_graph(input_file, dest_dir_name, - vis_dir_str, dep_graph_dir_str, template_filename, + vis_dir_str, dep_graph_dir_str, template_filename, dep_multi_pkgs=[], built_packages=[], print_num_nodes=False, calc_build_level=False): global sub_pkg_edges @@ -720,7 +741,7 @@ def make_dep_graph(input_file, dest_dir_name, if dst_main is None: continue dst_main_id = pkg_id[dst_main] - + #for main_pkg_edges if not src_main in main_pkg_edges: main_pkg_edges[src_main]=set() @@ -750,7 +771,7 @@ def make_dep_graph(input_file, dest_dir_name, os.makedirs(dest_dir_name) if len(dep_multi_pkgs) > 0: - nodes, dep_packages, in_edge_count=MakeSubGraphMultiPackages(dep_multi_pkgs, main_pkg_edges) + nodes, dep_packages, in_edge_count=MakeSubGraphMultiPackages(dep_multi_pkgs, main_pkg_edges, cycle_edges) print "num_nodes=",len(nodes) nodes, edges, pkg_level, full_edges = TopologySortPackages(nodes, dep_packages, in_edge_count, cycle_edges, reduced_edges) GenerateOutput(dest_dir_name, 'index', nodes, edges, pkg_level, full_edges, pkg_level, False, template_filename, vis_dir_str, dep_graph_dir_str, built_packages) @@ -759,7 +780,7 @@ def make_dep_graph(input_file, dest_dir_name, #make a dependency graph for each package. for pkg in main_sub_pkg.keys(): #print 'processing package for dependence graph: ' + pkg - nodes, dep_packages, in_edge_count=MakeSubGraph(pkg, main_pkg_edges) + nodes, dep_packages, in_edge_count=MakeSubGraph(pkg, main_pkg_edges, cycle_edges) if calc_build_level: CalcBuildLevel(pkg, nodes, dep_packages, in_edge_count) nodes, edges, pkg_level, full_edges = TopologySortPackages(nodes, dep_packages, in_edge_count, cycle_edges, reduced_edges) @@ -784,7 +805,7 @@ def make_dep_graph(input_file, dest_dir_name, #make a reverse dependency graph for each package. for pkg in main_sub_pkg.keys(): #print 'processing package for reverse dependence graph: ' + pkg - nodes, dep_packages, in_edge_count=MakeSubGraph(pkg, main_pkg_reverse_edges) + nodes, dep_packages, in_edge_count=MakeSubGraph(pkg, main_pkg_reverse_edges, cycle_reverse_edges) nodes, edges, pkg_level, full_edges = TopologySortPackages(nodes, dep_packages, in_edge_count, cycle_reverse_edges, reduced_edges_reverse) reduced_edges_reverse[pkg]=edges.copy() GenerateOutput(dest_dir_name, pkg, nodes, edges, pkg_level, full_edges, pkg_level, True, template_filename, vis_dir_str, dep_graph_dir_str, built_packages) diff --git a/debian/jenkins-scripts-common.install b/debian/jenkins-scripts-common.install index 1eb6077..214239d 100644 --- a/debian/jenkins-scripts-common.install +++ b/debian/jenkins-scripts-common.install @@ -32,8 +32,8 @@ debian/tmp/job_update_git_branch_project_mapping_for_dashboard.py /var/lib/jenki debian/tmp/job_litmus_jira_issue_receiver.py /var/lib/jenkins/jenkins-scripts/ debian/tmp/job_litmus_tct_file_receiver.py /var/lib/jenkins/jenkins-scripts/ debian/tmp/job_make_dep_graph.py /var/lib/jenkins/jenkins-scripts/ -debian/tmp/common/dep_graph.php.template /var/lib/jenkins/jenkins-scripts/common/ -debian/tmp/common/dep_graph.php.template_simple /var/lib/jenkins/jenkins-scripts/common/ +debian/tmp/common/dep_graph.html.template /var/lib/jenkins/jenkins-scripts/common/ +debian/tmp/common/dep_graph.html.template_simple /var/lib/jenkins/jenkins-scripts/common/ debian/tmp/common/dep_parse.py /var/lib/jenkins/jenkins-scripts/common/ debian/tmp/dep_graph/* /var/lib/jenkins/jenkins-scripts/dep_graph/ debian/tmp/vis/* /var/lib/jenkins/jenkins-scripts/vis/ diff --git a/job_make_dep_graph.py b/job_make_dep_graph.py index 52b0c92..f0f6ec0 100644 --- a/job_make_dep_graph.py +++ b/job_make_dep_graph.py @@ -52,7 +52,7 @@ def create_build_progress_dep_graph(build, obs_project, content): vis_dir = "../../../../vis" dep_graph_dir = "../../../../dep_graph" - template_filename="jenkins-scripts/common/dep_graph.php.template_simple" + template_filename="jenkins-scripts/common/dep_graph.html.template_simple" repo = content.get("repo") arch = content.get("arch") @@ -178,7 +178,7 @@ def create_build_progress_dep_graph_post(build, obs_project, backenddb, content) vis_dir = "../../vis" dep_graph_dir = "../../dep_graph" - template_filename="jenkins-scripts/common/dep_graph.php.template_simple" + template_filename="jenkins-scripts/common/dep_graph.html.template_simple" # copy vis and dep_graph dirs. jenkins_script_dir = os.path.join(os.getenv("WORKSPACE"), "jenkins-scripts"); @@ -247,7 +247,7 @@ def create_build_progress_dep_graph_prerelease(build, obs_project, obs_linked_pr #dep_graph_dir="../../../../../../../../../../../dep_graph"; vis_dir = "../../vis" dep_graph_dir = "../../dep_graph" - template_filename="jenkins-scripts/common/dep_graph.php.template_simple" + template_filename="jenkins-scripts/common/dep_graph.html.template_simple" # copy vis and dep_graph dirs. jenkins_script_dir = os.path.join(os.getenv("WORKSPACE"), "jenkins-scripts"); @@ -292,7 +292,7 @@ def create_build_dep_graph(build, obs_project, backenddb, content): "depends") print "sync_dest = %s" % sync_dest - template_filename="jenkins-scripts/common/dep_graph.php.template" + template_filename="jenkins-scripts/common/dep_graph.html.template" graph_root_dir=os.path.join(sync_out_dir) os.makedirs(graph_root_dir) packages_to_be_built = [] diff --git a/packaging/jenkins-scripts.spec b/packaging/jenkins-scripts.spec index dfe6ec0..3b292c6 100644 --- a/packaging/jenkins-scripts.spec +++ b/packaging/jenkins-scripts.spec @@ -173,8 +173,8 @@ fi %{destdir}/job_ref_purge_prj_obs.py %{destdir}/job_test_trigger_info_update.py %{destdir}/job_make_dep_graph.py -%{destdir}/common/dep_graph.php.template -%{destdir}/common/dep_graph.php.template_simple +%{destdir}/common/dep_graph.html.template +%{destdir}/common/dep_graph.html.template_simple %{destdir}/common/dep_parse.py %dir %{destdir}/dep_graph %{destdir}/dep_graph/dep_graph.css -- 2.7.4