+++ /dev/null
-<!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>
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:
for dp in dst_pkgs:
if src_pkg in nodes and dp in nodes:
edges.add((src_pkg, dp, 'true'))
-
+
return 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:
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
#-------------------------------------------------------------------------------
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
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={}
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'
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={}
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'
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
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
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
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()
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)
#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)
#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)