fullData = {
let data = aq.from(results.flat(1))
if (filterExpr !== "") {
data = data.filter(filterExpr);
}
if (data.columnIndex('worker_vm_type') !== -1) {
aq.addFunction('bestCluster', bestCluster, {override: true})
data = data
.lookup(instanceCosts, ['worker_vm_type', 'name'], 'hourlyPrice')
.derive({
workers_cost: d => d.hourlyPrice * d.n_workers / (3600 / d.duration)
})
.select(aq.not('hourlyPrice'))
.derive({
best_cluster: d => op.bestCluster({
minClusterMem: (d.peak_memory * 1.2) / 1024 ** 3,
minClusterCpus: d.n_threads,
minInstanceMem: 2,
minInstanceCpus: 2,
})
})
.derive({
ideal_worker_vm: d => d.best_cluster.name,
ideal_n_workers: d => d.best_cluster.count,
ideal_cluster_memory: d => d.best_cluster.totalMemoryGib * 1024 ** 3,
ideal_n_threads: d => d.best_cluster.totalVcpus,
ideal_workers_cost: d => d.best_cluster.totalHourlyPrice / (3600 / d.duration),
})
.select(aq.not('best_cluster'))
}
if (data.columnIndex('total_transfer_per_worker') !== -1) {
aq.addFunction('arraySum', arr => Array.isArray(arr) ? arr.reduce((a, b) => a + b, 0) : undefined, {override: true})
data = data
.derive({
'bytes_transferred': d => op.arraySum(d.total_transfer_per_worker)
})
}
data = data
.params({measure: measure})
.derive({
'value': (d, $) => d[$.measure]
})
.derive({
branch: d => op.replace(d.branch, 'bench/', ''),
passed: d => d.setup_outcome === 'passed' && d.call_outcome === 'passed'
})
.derive({
group: (
groupby === "commit"
? d => d.branch + '@' + d.commit
: d => d.branch
)
}, {
after: 'name'
})
if (show !== "all") {
data = data
.filter(show === 'passed' ? d => d.passed : d => !d.passed)
}
if (everygroup) {
const ngroups = data.rollup({ngroups: d => op.distinct(d.group)}).get('ngroups')
data = data
.params({ngroups: ngroups})
.groupby('name')
.filter(d => op.distinct(d.group) == ngroups)
}
return data
}