Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 12 Dec 2013 14:22:52 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r259259 - user/nwhitehorn/condorports
Message-ID:  <201312121422.rBCEMqBC037834@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Thu Dec 12 14:22:51 2013
New Revision: 259259
URL: http://svnweb.freebsd.org/changeset/base/259259

Log:
  Script to parse DAG output for debugging why ports won't build.

Added:
  user/nwhitehorn/condorports/dag_status_summary.py   (contents, props changed)

Added: user/nwhitehorn/condorports/dag_status_summary.py
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/nwhitehorn/condorports/dag_status_summary.py	Thu Dec 12 14:22:51 2013	(r259259)
@@ -0,0 +1,56 @@
+import sys
+
+dag = file(sys.argv[1], 'r')
+rescue_dag = file(sys.argv[2], 'r')
+
+dag = dag.readlines()
+rescue_dag = rescue_dag.readlines()
+
+jobs = {}
+for line in dag:
+	line = line.split(' ')
+	if line[0] == 'JOB':
+		jobs[line[1].strip()] = {'done': False, 'children': 0, 'deps': [], 'failed': False}
+	if line[0] == 'PARENT':
+		deps = []
+		for dep in line[1:]:
+			if dep == 'CHILD':
+				break
+			deps.append(dep)
+		jobs[line[-1].strip()]['deps'] = deps
+
+for line in rescue_dag:
+	line = line.split(' ')
+	if line[0] == 'DONE':
+		jobs[line[1].strip()]['done'] = True
+
+jdone = 0
+jfailed = 0
+for job in jobs.values():
+	if job['done']:
+		jdone += 1
+		continue
+	deps_met = True
+	for dep in job['deps']:
+		dep = jobs[dep]
+		dep['children'] += 1
+		if not dep['done']:
+			deps_met = False
+	if deps_met:
+		job['failed'] = True
+		jfailed += 1
+
+print '%d jobs complete' % jdone
+print '%d jobs failed' % jfailed
+
+blocking = []
+for job in jobs:
+	j = jobs[job]
+	if j['failed']:
+		blocking.append((job, j['children']))
+
+blocking.sort(cmp=lambda a,b: cmp(a[1], b[1]), reverse=True)
+print 'Top ten failed jobs blocking other jobs:'
+for job in blocking[:10]:
+	print '\t%s blocking %d dependent jobs' % (job[0], job[1])
+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201312121422.rBCEMqBC037834>