Package: piuparts Version: 0.50 Severity: normal Tags: patch thanks Recent upgrades to r-base-core and python-rpy have broken chart creation in piuparts-report in sid. The changes to 'R' have introduced a failure in the 'palette' call:
20:31:54 analysis template obsolete_conffiles_error.tpl does not exist. No protocol specified Warning message: In (function (display = "", width, height, pointsize, gamma, bg, : unable to open connection to X11 display '' 20:31:54 Error generating the graph images, probably python-rpy is not installed, disabling graphs. 20:31:54 Writing stats pages for squeeze This is fixed in the patch below by providing a virtual X11 framebuffer for 'R' to use. The python-rpy upgrade broke the module - it fails to import. The patch ports the charting from the obsolete python-rpy to the supported python-rpy2. The python-rpy problem is fixed in #705847, associated with rpy 1.0.3-25. The git branch 'port-to-rpy2'(3) is available: https://github.com/davesteele/piuparts/commit/port-to-rpy2 This is a kluge fix, useful for quickly restoring charts to a sid instance, but not recommended for production (piuparts-report reports a segfault at the end of its run). It is recommended that rpy* be replaced with a more mainline charting package, like matplotlib, for a more permanent fix. I have posted this to piuparts, not piuparts-master, assuming that is the preferred location. >From e65e182ca6cac928573938839a0559732d9f31de Mon Sep 17 00:00:00 2001 From: David Steele <dste...@gmail.com> Date: Sat, 20 Apr 2013 20:24:19 -0400 Subject: [PATCH] piuparts-report - Fix breakage in 'R' charting. Recent changes in sid for 'R' and python-rpy have broken chart creation. There are two problems, 1) python-rpy, a legacy package, will not import after the upgrade, and 2) some of the 'r' commands are expecting to be interacting with an X frame buffer. This commit restores charts by 1) porting the chart creation code to python-rpy2, and 2) providing a virtual frame buffer. --- debian/changelog | 2 ++ debian/control | 3 ++- piuparts-report.py | 45 +++++++++++++++++++++++++++------------------ 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/debian/changelog b/debian/changelog index b4d1c4d..6236100 100644 --- a/debian/changelog +++ b/debian/changelog @@ -58,6 +58,8 @@ piuparts (0.51) UNRELEASED; urgency=low * New known problem: Database setup failure (issue). [ David Steele ] + * piuparts-report: + - Upgrade package stat charting from python-rpy to python-rpy2 * detect_well_known_errors: - Replace the bash script with an equivalent Python script. - Sort known error and issue packages by reverse dependency count, diff --git a/debian/control b/debian/control index 8f895c2..c2dd58f 100644 --- a/debian/control +++ b/debian/control @@ -51,12 +51,13 @@ Depends: openssh-server, python-debianbts, tango-icon-theme, + xvfb, ${misc:Depends}, ${python:Depends} Recommends: apache2, ghostscript, - python-rpy, + python-rpy2, r-base-dev, r-recommended, Breaks: diff --git a/piuparts-report.py b/piuparts-report.py index 996ca2a..b92f1f8 100644 --- a/piuparts-report.py +++ b/piuparts-report.py @@ -35,10 +35,11 @@ import urllib import shutil import re import string +import subprocess -# if python-rpy ain't installed, we don't draw fancy graphs +# if python-rpy2 ain't installed, we don't draw fancy graphs try: - from rpy import * + import rpy2.robjects as robjects except: pass @@ -1063,22 +1064,30 @@ class Section: def make_stats_graph(self): countsfile = os.path.join(self._output_directory, "counts.txt") pngfile = os.path.join(self._output_directory, "states.png") - r('t <- (read.table("'+countsfile+'",sep=",",header=1,row.names=1))') - r('cname <- c("date",rep(colnames(t)))') - # here we define how many days we wants stats for (163=half a year) - #r('v <- t[(nrow(t)-163):nrow(t),0:12]') - # make graph since day 1 - r('v <- t[0:nrow(t),0:12]') - # thanks to http://tango.freedesktop.org/Generic_Icon_Theme_Guidelines - r('palette(c("#4e9a06", "#ef2929", "#d3d7cf", "#5c3566", "#c4a000", \ - "#fce94f", "#a40000", "#888a85", "#2e3436", "#729fcf", \ - "#3465a4", "#204a87", "#555753"))') - r('bitmap(file="'+pngfile+'",type="png16m",width=16,height=9,pointsize= - r('barplot(t(v),col = 1:13, \ - main="Binary packages per state in '+self._config.section+'", \ - xlab="", ylab="Number of binary packages", space=0.1, border=0)') - r('legend(x="bottom",legend=colnames(t), ncol=2,fill=1:13,xjust=0.5,yju - r.dev_off() + + xvfb = subprocess.Popen(['Xvfb', ':99'], stdout=open(os.devnull, 'wb'), + stderr=open(os.devnull, 'wb')) + os.environ["DISPLAY"] = ":99" + + try: + robjects.r('t <- (read.table("'+countsfile+'",sep=",",header=1,row. + robjects.r('cname <- c("date",rep(colnames(t)))') + # here we define how many days we wants stats for (163=half a year) + #robjects.r('v <- t[(nrow(t)-163):nrow(t),0:12]') + # make graph since day 1 + robjects.r('v <- t[0:nrow(t),0:12]') + # thanks to http://tango.freedesktop.org/Generic_Icon_Theme_Guideli + # for those nice colors + robjects.r('palette(c("#4e9a06", "#ef2929", "#d3d7cf", "#5c3566",\ + "#c4a000", "#fce94f", "#a40000", "#888a85", "#2e3436",\ + "#729fcf", "#3465a4", "#204a87", "#555753"))') + robjects.r('bitmap(file="'+pngfile+'",type="png16m",width=16,height + robjects.r('barplot(t(v),col = 1:13, \ + main="Binary packages per state in '+self._config.section+'", \ + xlab="", ylab="Number of binary packages", space=0.1, border=0)') + robjects.r('legend(x="bottom",legend=colnames(t), ncol=2,fill=1:13, + finally: + xvfb.terminate() stats_html = "<tr class=\"normalrow\"> " \ + "<td class=\"contentcell2\" colspan=\"3\">" \ -- 1.7.10.4 (END) -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org