git.iko.soy/typeable/cabal2nix
on v2.4 help sign in
typeable/cabal2nix/doc/analyze-hydra-space-requirements.r
57 lines 1.7 kB history raw
1# cabal2nix/doc/analyze-hydra-space-requirements.r
3library(data.table)
4library(rjson)
5library(foreach)
6library(doParallel)
8### Set up the workspace.
10cores <- detectCores()
11options(cores=cores, mc.cores=cores)
12cl <- makeForkCluster(cores)
13registerDoParallel(cl)
14setDefaultCluster(cl)
16builds <- foreach (i=list.files(".", "*.json"), .combine="rbind") %dopar% {
17 print(i)
18 l <- fromJSON(file=i)
19 pkgset <- names(l)
20 data.table(pkgset, pkg=names(l[[pkgset]]), out=unlist(l[[pkgset]]))
22setkey(builds, pkgset, pkg)
24t <- foreach (out=unique(builds$out), .combine="rbind") %dopar% {
25 size <- system(paste("( du -sb", out, "| cut -f1 ) 2>/dev/null || true"), intern=TRUE)
26 size <- if (identical(size, character(0))) "" else size
27 data.table(out, size=as.integer(size))
30builds <- merge(builds, t, by="out")
32### Analyze the data.
34# Total number of attributes in all package sets.
35builds_total <- nrow(builds)
37# Number of distict builds (output paths).
38builds_unique <- length(unique(builds$out))
40# Size of haskellPackages per platform.
41haskellPackages <- unique(builds[pkgset != "ghc7102" & !is.na(size),list(out,size)])
42haskellPackages_size <- sum(as.numeric(haskellPackages$size))
44# List of distinct sizes.
45sizes <- unique(builds[pkg != "ghc" & !is.na(size),list(out,size)])$size
47# Average output path size.
48avg_build_size <- mean(sizes)
49sd_build_size <- sd(sizes)
50summary(sizes / 1e6)
52# Biggest builds.
53biggest_builds <- head(builds[!is.na(size),list(size=mean(size)),by=pkg][order(size, decreasing=T)], n=20)
54biggest_builds$size <- round(biggest_builds$size / 1e6, 1)
56# Number of builds, distinguished by package set.
57builds_by_pkgset <- builds[,list(attributes=length(pkg)), by=pkgset][order(pkgset)]