git.iko.soy/typeable/cabal2nix
on master help sign in
doc: improve analyze-hydra-builds.r
commita67de282746b7802124813f9413fa52cebd70cd3 authorPeter Simons <simons@cryp.to> dateTue 3 Nov 2015, 18:32 (11 years ago) parent703af48
1 file changed+21−22
doc/analyze-hydra-builds.r+21−22
doc/analyze-hydra-builds.r+21−22
@@ -2,29 +2,24 @@
22#
33# Generate the input file "builds.csv" by running
44#
5−# sudo -u hydra psql -c "Copy (select * from Builds) to stdout With CSV HEADER;" >builds.csv
5+# sudo -u hydra psql -c "Copy (select b.project, b.jobset, b.job, b.timestamp, b.drvpath, b.system, b.buildstatus, b.size, b.closuresize, bs.type, bs.starttime, bs.stoptime, bs.machine from builds b left join buildsteps bs on b.id=bs.build and b.drvpath=bs.drvpath where finished=1 and iscachedbuild=0) to stdout With CSV HEADER;" >builds.csv
66#
77# on Hydra.
88
99library(data.table)
1010
11−builds <- within(as.data.table(read.csv("builds.csv", header=T, stringsAsFactors=F)), {
11+builds <- within(as.data.table(read.csv("builds.csv", header=T, stringsAsFactors=T)), {
1212 timestamp <- as.POSIXct(timestamp, origin="1970-01-01")
1313 starttime <- as.POSIXct(starttime, origin="1970-01-01")
1414 stoptime <- as.POSIXct(stoptime, origin="1970-01-01")
1515 runtime <- difftime(stoptime, starttime, units="secs")
16− finished <- finished == 1
17− project <- factor(project)
18− jobset <- factor(jobset)
19− system <- factor(system)
20− license <- factor(license)
21− iscurrent <- iscurrent == 1
22− iscachedbuild <- iscachedbuild == 1
23− keep <- keep == 1
24− ischannel <- ischannel == 1
25− name <- sub("-[0-9].*$", "", sub("^/nix/store/[^-]+-(.*).*\\.drv$", "\\1", drvpath))
16+ machine <- sub("^(hydra|root)@", "", machine)
2617})
27−setkey(builds, id, project, jobset, job, timestamp)
18+builds[machine=="", machine:="localhost"]
19+setkey(builds, project, jobset, job, timestamp)
20+
21+## Determine the average build runtime of all successful Haskell builds that
22+## ran on "work".
2823
2924hs <- builds[ project=="nixpkgs" & jobset %in% c("haskell-updates", "stackage")
3025 | project %in% c( "cabal2nix", "funcmp", "hackage-db", "hledger", "hsdns"
@@ -32,18 +27,22 @@ hs <- builds[ project=="nixpkgs" & jobset %in% c("haskell-updates", "stackage")
3227 )
3328 ,
3429 ]
35−hs <- hs[!duplicated(hs$drvpath)]
36−hs <- hs[finished==TRUE,]
37−hs <- hs[runtime > 0,]
30+hs <- hs[machine=="work" & buildstatus==0 & system == "x86_64-linux" & runtime > 0,]
31+hs <- hs[,job:=sub("\\.x86_64-linux$", "", job)]
32+hs <- hs[,job:=sub("^haskell(ng)?Packages\\.", "", job)]
33+hs <- hs[,job:=sub(".*git-?annex.*", "git-annex", job, ignore.case=T)]
34+hs <- hs[,job:=sub("idris_plain$", "idris", job)]
3835hs <- hs[!grep("haskell(-ng)?\\.compiler\\.", job),]
39−hs <- hs[!grep("\\.ghc(Plain)?$.", job),]
4036hs <- hs[!grep("^ghc\\.ghc", job),]
41−hs <- hs[ starttime >= as.POSIXct("2015-01-01")
42− , list(builds=length(id),runtime.median=median(runtime),runtime.mean=mean(runtime),runtime.sd=sd(runtime))
37+hs <- hs[!grep("ghc[0-9]+$", job),]
38+hs <- hs[!duplicated(hs$drvpath)]
39+
40+hs <- hs[
41+ , list(builds=length(runtime),runtime=sum(runtime),runtime.median=median(runtime),runtime.mean=mean(runtime),runtime.sd=sd(runtime))
4342 , by=job
4443 ]
4544hs <- hs[builds>10,]
46−
47−head(hs[order(runtime.median, decreasing=T)], n=20)
48−
45+head(hs[order(runtime.mean, decreasing=T)], n=30)
4946head(hs[order(builds, decreasing=T)], n=20)
47+summary(as.numeric(hs$runtime.mean,units="mins"))
48+quantile(as.numeric(hs$runtime.mean,units="mins"), 0.81)