static dep_graph generation instead of dynamic dep_graph 12/130712/3
authorJunghyun Kim <jh0822.kim@samsung.com>
Tue, 23 May 2017 11:13:47 +0000 (20:13 +0900)
committerJunghyun Kim <jh0822.kim@samsung.com>
Wed, 24 May 2017 00:46:15 +0000 (09:46 +0900)
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 <jh0822.kim@samsung.com>
common/dep_graph.html.template [moved from common/dep_graph.php.template with 86% similarity]
common/dep_graph.html.template_simple [new file with mode: 0644]
common/dep_graph.php.template_simple [deleted file]
common/dep_parse.py
debian/jenkins-scripts-common.install
job_make_dep_graph.py
packaging/jenkins-scripts.spec

similarity index 86%
rename from common/dep_graph.php.template
rename to common/dep_graph.html.template
index c19641a..6c9413b 100644 (file)
 <button onclick="FocusNode()">Find</button>
   </td>
   <td align="center" id="partial_edge_link">
-    <a href="%package%.php">partial edge graph</a>
+    <a href="%package%.html">partial edge graph</a>
   </td>
 </tr>
 <tr>
   <th>PackageName</th>
   <td id='pkg_name'>Click a package to see its name.</td>
   <td align="center" id="full_edge_link">
-    <a href="%package%_full_edges.php">full edge graph</a>
+    <a href="%package%_full_edges.html">full edge graph</a>
   </td>
 </tr>
 <tr>
   <th>BuildLevel</th>
   <td id='build_level'>Click a package to see its build level.</td>
   <td align="center" id="partial_edge_link">
-    <a href="%package%_reverse.php">partial edge graph (reverse)</a>
+    <a href="%package%_reverse.html">partial edge graph (reverse)</a>
   </td>
 </tr>
 <tr>
   <th>Max build level</th>
   <td id='max_build_level'></td>
   <td align="center" id="full_edge_link">
-    <a href="%package%_reverse_full_edges.php">full edge graph (reverse)</a>
+    <a href="%package%_reverse_full_edges.html">full edge graph (reverse)</a>
   </td>
 </tr>
 <tr>
   <th>Total packages</th>
   <td id='total_packages'></td>
   <td align="center">
-    <a href="index.php">full dependency graph</a><br>
+    <a href="index.html">full dependency graph</a><br>
   </td>
 </tr>
 <tr>
@@ -71,7 +71,7 @@
     <div id="slider-range" style="width:80%"></div>
   </td>
   <td align="center">
-    <a href="index_full_edges.php">full dependency graph (full_edges)</a><br>
+    <a href="index_full_edges.html">full dependency graph (full_edges)</a><br>
   </td>
 </tr>
 </table>
diff --git a/common/dep_graph.html.template_simple b/common/dep_graph.html.template_simple
new file mode 100644 (file)
index 0000000..b76dd66
--- /dev/null
@@ -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 (file)
index 884d651..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<!doctype html>
-<html>
-<head>
-  <title>%graph% for package %package%</title>
-
-  <script type="text/javascript" src="%vis_dir%/dist/vis.js"></script>
-  <link href="%vis_dir%/dist/vis.css" rel="stylesheet" type="text/css" />
-  <link href="%dep_graph_dir%/dep_graph.css" rel="stylesheet" type="text/css" />
-
-  <link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
-  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
-  <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
-
-
-  <style type="text/css">
-    #mynetwork {
-      width: 100%;
-      height: 800px;
-      border: 1px solid lightgray;
-    }
-  </style>
-
-</head>
-<body>
-
-<table>
-<tr>
-  <th>OBS package name</th>
-  <td>
-<input type="text" name="node_name" id="node_name" OnKeyPress="Javascript: OnKeyPress_node_name(event);" />
-<button onclick="FocusNode()">Find</button>
-  </td>
-</table>
-
-<div id="config"></div>
-<div id="mynetwork"></div>
-
-<script type="text/javascript">
-<?php
-function CallRestAPI($method, $url, $user="", $pw="", $data = false)
-{
-  $curl = curl_init();
-
-  switch ($method)
-  {
-    case "POST":
-      curl_setopt($curl, CURLOPT_POST, 1);
-
-      if ($data)
-        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
-      break;
-    case "PUT":
-      curl_setopt($curl, CURLOPT_PUT, 1);
-      break;
-    default:
-      if ($data)
-        $url = sprintf("%s?%s", $url, http_build_query($data));
-  }
-
-  // Optional Authentication:
-  if ( $user != "" ) {
-    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
-    curl_setopt($curl, CURLOPT_USERPWD, "$user:$pw");
-  }
-
-  curl_setopt($curl, CURLOPT_URL, $url);
-  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
-
-  $result = curl_exec($curl);
-
-  curl_close($curl);
-
-  return $result;
-}
-
-function GetBuildStatusFromOBS($obs_api_url, $project, $repo, $arch, $username, $pw) {
-  $url = $obs_api_url . "/build/". $project . "/_result?repository=" . $repo . "&arch=" . $arch;
-  $response = CallRestAPI("GET", $url, $username, $pw);
-  $xml_data = simplexml_load_string($response);
-  $build_status = array();
-  foreach ($xml_data->result->status as $key => $value) {
-    if( $key == "status" ) {
-      $pkg = $value["package"];
-      $status=$value["code"];
-      $build_status["$pkg"] = "$status";
-    }
-  }
-
-  return $build_status;
-}
-
-function GetBuildStatusFromDB($mysql_ip, $mysql_username, $mysql_pw, $mysql_db, $mysql_build_target_id) {
-  $conn = new mysqli($mysql_ip, $mysql_username, $mysql_pw, $mysql_db);
-
-  if( $conn->connect_error ) {
-    die("connection failed: ". $conn->connect_error);
-  }
-
-  $sql = "SELECT info_package.package_name,build_package.build_status FROM build_package,info_package WHERE build_package.last_flag='Y' AND build_package.info_package_id=info_package.id AND build_package.build_target_id=" . $mysql_build_target_id;
-#echo $sql;
-  $result = $conn->query($sql);
-
-  $build_status = array();
-  if( $result->num_rows > 0 ) {
-    while($row = $result->fetch_assoc()) {
-#echo "package_name : ". $row["package_name"] . ", build_status:" . $row["build_status"] . "<br>";
-      $build_status[$row["package_name"]] = strtolower($row["build_status"]);
-    }
-  }
-  $conn->close();
-
-  return $build_status;
-}
-
-if ( ! isset($_GET["build_target_id"]) ) {
-  $obs_api_url="%obs_api_url%";
-  $obs_username="%obs_username%";
-  $obs_pw="%obs_pw%";
-  $obs_project="%obs_project%";
-  $obs_repo="%obs_repo%";
-  $obs_arch="%obs_arch%";
-
-  $build_status = GetBuildStatusFromOBS($obs_api_url, $obs_project, $obs_repo, $obs_arch, $obs_username, $obs_pw);
-
-  print "var package_buildinfo = {";
-  foreach ($build_status as $key => $value) {
-    print "\"".$key."\": \"".$value."\",";
-  }
-  print "};";
-
-} else {
-  // get build status from DB.
-  $mysql_ip = "%mysql_ip%";
-  $mysql_username = "%mysql_username%";
-  $mysql_pw = "%mysql_pw%";
-  $mysql_db = "%mysql_db%";
-  $mysql_build_target_id = $_GET["build_target_id"];
-
-  $build_status = GetBuildStatusFromDB($mysql_ip, $mysql_username, $mysql_pw, $mysql_db, $mysql_build_target_id);
-
-  print "var package_buildinfo = {";
-  foreach ($build_status as $key => $value) {
-    print "\"".$key."\": \"".$value."\",";
-  }
-  print "};";
-
-}
-
-?>
-</script>
-
-
-<script type="text/javascript" src=%src.js%></script>
-<script type="text/javascript" src="%dep_graph_dir%/dep_graph_simple.js"></script>
-<script type="text/javascript" src="%dep_graph_dir%/dep_graph_common.js"></script>
-
-</body>
-</html>
index c208f45..8cb5dcc 100755 (executable)
@@ -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)
index 1eb6077..214239d 100644 (file)
@@ -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/
index 52b0c92..f0f6ec0 100644 (file)
@@ -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 = []
index dfe6ec0..3b292c6 100644 (file)
@@ -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