Crossbow Nightly Report
This report builds in sync with the email notifications (builds@arrow.apache.org
). Most recent commit are: 8cb4500. The report examines data from the last 120 days.
Summary
Trend
trendPlot = function(data) {
// variables to use
const spec = ({
x: "nightly_date",
y: "prop",
stroke: "build_type",
fy: "build_type"
})
const added_spec = Object.assign(
{},
spec,
{
tip: true,
symbol: "circle",
fill: "build_type",
opacity: 0.7
}
)
return Plot.plot({
width: 1200,
height: 600,
inset: 10,
nice: true,
color: {scheme: "viridis"},
facet: {
data: data,
y: "build_type",
marginRight: 90,
marginLeft: 10,
},
fy: {
inset: 15,
padding: 0.1,
label: ""
},
y: {
domain: [0, 100],
label: "Proportion successful (%)",
percent: true,
labelOffset: 40
},
x: {
type: "utc",
label: "Date",
tickFormat: "%b '%y",
},
style: {
fontSize: "16px"
},
marks: [
Plot.lineY(data, Plot.windowY(10, spec)),
Plot.frame(),
Plot.dot(data, added_spec),
Plot.axisX({ticks: d3.utcMonth.every(1), tickFormat: " %b %d", tickSize: 14, tickPadding: -8, textAnchor: "start"}),
Plot.axisX({ticks: d3.utcYear, tickFormat: "\n %Y", tickSize: 24, tickPadding: -20, textAnchor: "start"}),
Plot.gridX({ticks: d3.utcMonth})
]
})
}
import { aq, op } from '@uwdata/arquero';
parser = d3.timeParse("%Y-%m-%d");
import {slider as slide} from "@jashkenas/inputs"; // more configurable slider
timeScale = d3.scaleTime()
.domain([initialPlotStartDate, plotEndDate])
.range([0, d3.timeDay.count(initialPlotStartDate, plotEndDate)]);
passPct = aq.from(transpose(ojs_pass_pct))
.derive({ nightly_date: aq.escape(d => parser(d.nightly_date)) })
minNightlyDate = passPct
.rollup({
min_nightly_date: d => op.min(d.nightly_date)
})
.array('min_nightly_date')
// Slider for date
initialPlotStartDate = new Date(minNightlyDate)
plotEndDate = new Date(plot_end_date)
plotDefaultDate = new Date(plot_default_date)
// a slider that starts at the default date (value of CROSSBOW_LOOKBACK_WINDOW)
viewof slider = slide({
min: 0,
max: d3.timeDay.count(initialPlotStartDate, plotEndDate),
format: d => md`${d3.timeFormat("%B %d, %Y")(timeScale.invert(d))}`,
title: "Slide to select a Date range",
value: d3.timeDay.count(initialPlotStartDate, plotDefaultDate),
step: 2
})
// turn slide number back into a date
date = timeScale.invert(slider)