rbbt-util 5.25.48 → 5.25.49

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46222cc21bab86e8e9d9783431a1607aeb2b3a8d
4
- data.tar.gz: c9912dfa07e5bef78b599ef53cf765033d5fa098
3
+ metadata.gz: a8a3a98584959d0127d381ed0eae5b73aaa649fe
4
+ data.tar.gz: 6bf3a25808ba9fcae6d9040e39a102ad6c4c44c5
5
5
  SHA512:
6
- metadata.gz: fe49673ea95fc2d2715459070c1c8e77af47b0281560b4663251980daf074b642c3077ff8c8b35609eeadbff35f78299abcb149b556c53e5fcf3c1ef6963090c
7
- data.tar.gz: 10fc19079bd5de99f8b21e5ef2b23435a9a2452c99f82c95c98c6c6810947853795fd0250ae6172a0de0bda04d9fe9daefe708dc9f2d1b6974141b23c33f7f8f
6
+ metadata.gz: 2966c9da9b0e33061c42a55832e9fd5fff3dafa4beab079ac4cbaae8ee22fc8f710f61669758342d6cfe26fb2a531829d3971f609d0b19fa0b1b6d915721ff81
7
+ data.tar.gz: d51d9e658746e68101ab971013c3ba54d5a0c9caf7e05ca0e5978bda83d959a7830b1afc9522fcf815f8c4d567bd2977f66e66ae36488e3a47c488716920bae5
@@ -384,7 +384,7 @@ module Open
384
384
  FileUtils.mkdir_p File.dirname(target) unless File.exist? File.dirname(target)
385
385
  tmp_target = File.join(File.dirname(target), '.tmp_mv.' + File.basename(target))
386
386
  FileUtils.cp source, tmp_target
387
- FileUtils.cp tmp_target, target
387
+ FileUtils.mv tmp_target, target
388
388
  return
389
389
  end
390
390
 
@@ -24,12 +24,13 @@ $ rbbt workflow trace <job-result> <file.png>
24
24
  -w--width* Image Width
25
25
  -h--height* Image Height
26
26
  -s--size* Image Size (Height and Width)
27
+ -fg--fix_gap Remove execution gaps
27
28
  EOF
28
29
 
29
30
  SOPT.usage if options[:help]
30
31
 
31
32
  file = ARGV.shift || "/home/mvazque2/.rbbt/var/jobs/Sample/haplotype/NA12878"
32
- plot = ARGV.shift || "/tmp/plot.png"
33
+ plot = ARGV.shift
33
34
 
34
35
  width, height, size = options.values_at :width, :height, :size
35
36
 
@@ -37,16 +38,13 @@ size = 800 if size.nil?
37
38
  width = size if width.nil?
38
39
  height = size if height.nil?
39
40
 
40
- $seen = []
41
41
  def get_step(file)
42
42
  file = File.expand_path(file)
43
43
  file = file.sub(/\.(info|files)/,'')
44
- $seen << file
45
44
  Workflow.load_step file
46
45
  end
47
46
 
48
47
  step = get_step file
49
- $main_mtime = Open.exist?(step.path) ? Open.mtime(step.path) : nil
50
48
 
51
49
  data = TSV.setup({}, "Job~Workflow,Task,Start,End#:type=:list")
52
50
 
@@ -60,7 +58,11 @@ jobs.each do |job|
60
58
  next unless job.done?
61
59
  started = job.info[:started]
62
60
  ddone = job.info[:done]
63
- data[[job.task_name.to_s, job.clean_name] * "."] = [job.workflow.to_s, job.task_name,started,ddone]
61
+
62
+ code = [job.workflow, job.task_name].compact.collect{|s| s.to_s} * "."
63
+ code = code + '.' + job.clean_name
64
+
65
+ data[code] = [job.workflow.to_s, job.task_name,started,ddone]
64
66
  if min_start.nil?
65
67
  min_start = started
66
68
  else
@@ -82,65 +84,123 @@ data.add_field "End.second" do |k,value|
82
84
  value["End"] - min_start
83
85
  end
84
86
 
85
- Log.severity = 0
86
- #data.R_interactive <<-EOF
87
- # rbbt.require('timevis')
88
- # data$id = rownames(data)
89
- # data$content = data$Task
90
- # data$start = data$Start
91
- # data$end = data$End
92
- #
93
- # timevis(data)
94
- #EOF
95
-
96
-
97
- data.R <<-EOF, [:svg]
98
- rbbt.require('tidyverse')
99
- rbbt.require('ggplot2')
100
-
101
- names(data) <- make.names(names(data))
102
- data$id = rownames(data)
103
- data$content = data$Task
104
- data$start = data$Start
105
- data$end = data$End
106
- data$Project = data$Workflow
107
-
108
- tasks = data
109
-
110
- #theme_gantt <- function(base_size=11, base_family="Source Sans Pro Light") {
111
- theme_gantt <- function(base_size=11, base_family="Sans Serif") {
112
- ret <- theme_bw(base_size, base_family) %+replace%
113
- theme(panel.background = element_rect(fill="#ffffff", colour=NA),
114
- axis.title.x=element_text(vjust=-0.2), axis.title.y=element_text(vjust=1.5),
115
- title=element_text(vjust=1.2, family="Source Sans Pro Semibold"),
116
- panel.border = element_blank(), axis.line=element_blank(),
117
- panel.grid.minor=element_blank(),
118
- panel.grid.major.y = element_blank(),
119
- panel.grid.major.x = element_line(size=0.5, colour="grey80"),
120
- axis.ticks=element_blank(),
121
- legend.position="bottom",
122
- axis.title=element_text(size=rel(0.8), family="Source Sans Pro Semibold"),
123
- strip.text=element_text(size=rel(1), family="Source Sans Pro Semibold"),
124
- strip.background=element_rect(fill="#ffffff", colour=NA),
125
- panel.spacing.y=unit(1.5, "lines"),
126
- legend.key = element_blank())
127
-
128
- ret
129
- }
130
-
131
- tasks.long <- tasks %>%
132
- gather(date.type, task.date, -c(Project, Task, id, Start.second, End.second)) %>%
133
- arrange(date.type, task.date) %>%
134
- mutate(id = factor(id, levels=rev(unique(id)), ordered=TRUE))
135
-
136
- x.breaks <- seq(length(tasks$Task) + 0.5 - 3, 0, by=-3)
137
-
138
- timeline <- ggplot(tasks.long, aes(y=id, yend=id, x=Start.second, xend=End.second, colour=Task)) +
139
- geom_segment() +
140
- geom_vline(xintercept=x.breaks, colour="grey80", linetype="dotted") +
141
- guides(colour=guide_legend(title=NULL)) +
142
- labs(x=NULL, y=NULL) +
143
- theme_gantt() + theme(axis.text.x=element_text(angle=45, hjust=1))
144
-
145
- rbbt.png_plot('#{plot}', 'timeline', width=#{width}, height=#{height})
146
- EOF
87
+ if options[:fix_gap]
88
+ ranges = []
89
+ data.through do |k,values|
90
+ start, eend = values.values_at "Start.second", "End.second"
91
+
92
+ ranges << (start.floor..eend.ceil)
93
+ end
94
+
95
+ gaps = {}
96
+ last = nil
97
+ Misc.collapse_ranges(ranges).each do |range|
98
+ start = range.begin
99
+ eend = range.end
100
+ if last
101
+ gaps[last] = start - last
102
+ end
103
+ last = eend
104
+ end
105
+
106
+ data.process "End.second" do |value,k,values|
107
+ gap = Misc.sum(gaps.select{|pos,size| pos < values["Start.second"]}.collect{|pos,size| size})
108
+ value - gap
109
+ end
110
+
111
+ data.process "Start.second" do |value,k,values|
112
+ gap = Misc.sum(gaps.select{|pos,size| pos < values["Start.second"]}.collect{|pos,size| size})
113
+ value - gap
114
+ end
115
+ end
116
+
117
+ tasks_info = {}
118
+
119
+ jobs.each do |dep|
120
+ next unless dep.done?
121
+ task = [dep.workflow, dep.task_name].compact.collect{|s| s.to_s} * "#"
122
+ info = tasks_info[task] ||= {}
123
+
124
+ time = dep.info[:done] - dep.info[:started]
125
+ info[:time] ||= []
126
+ info[:time] << time
127
+
128
+ cpus = nil
129
+ spark = false
130
+ shard = false
131
+ dep.info[:config_keys].select do |kinfo|
132
+ key, value, tokens = kinfo
133
+ key = key.to_s
134
+ cpus = value if key.include? 'cpu'
135
+ spark = value if key == 'spark'
136
+ shard = value if key == 'shard'
137
+ end
138
+
139
+ info[:cpus] = cpus || 1
140
+ info[:spark] = spark
141
+ info[:shard] = shard
142
+ end
143
+
144
+ stats = TSV.setup({}, "Task~Calls,Time,Cpus,Spark,Shard#:type=:list")
145
+
146
+ tasks_info.each do |task, info|
147
+ time_lists, cpus, spark, shard = info.values_at :time, :cpus, :spark, :shard
148
+ avg_time = Misc.mean(time_lists).to_i
149
+ calls = time_lists.length
150
+ stats[task] = [calls,avg_time, cpus, spark, shard]
151
+ end
152
+
153
+ puts stats.to_s
154
+
155
+ if plot
156
+ data.R <<-EOF, [:svg]
157
+ rbbt.require('tidyverse')
158
+ rbbt.require('ggplot2')
159
+
160
+ names(data) <- make.names(names(data))
161
+ data$id = rownames(data)
162
+ data$content = data$Task
163
+ data$start = data$Start
164
+ data$end = data$End
165
+ data$Project = data$Workflow
166
+
167
+ tasks = data
168
+
169
+ #theme_gantt <- function(base_size=11, base_family="Source Sans Pro Light") {
170
+ theme_gantt <- function(base_size=11, base_family="Sans Serif") {
171
+ ret <- theme_bw(base_size, base_family) %+replace%
172
+ theme(panel.background = element_rect(fill="#ffffff", colour=NA),
173
+ axis.title.x=element_text(vjust=-0.2), axis.title.y=element_text(vjust=1.5),
174
+ title=element_text(vjust=1.2, family="Source Sans Pro Semibold"),
175
+ panel.border = element_blank(), axis.line=element_blank(),
176
+ panel.grid.minor=element_blank(),
177
+ panel.grid.major.y = element_blank(),
178
+ panel.grid.major.x = element_line(size=0.5, colour="grey80"),
179
+ axis.ticks=element_blank(),
180
+ legend.position="bottom",
181
+ axis.title=element_text(size=rel(1.2), family="Source Sans Pro Semibold"),
182
+ strip.text=element_text(size=rel(1.5), family="Source Sans Pro Semibold"),
183
+ strip.background=element_rect(fill="#ffffff", colour=NA),
184
+ panel.spacing.y=unit(1.5, "lines"),
185
+ legend.key = element_blank())
186
+
187
+ ret
188
+ }
189
+
190
+ tasks.long <- tasks %>%
191
+ gather(date.type, task.date, -c(Project, Task, id, Start.second, End.second)) %>%
192
+ arrange(date.type, task.date) %>%
193
+ mutate(id = factor(id, levels=rev(unique(id)), ordered=TRUE))
194
+
195
+ x.breaks <- seq(length(tasks$Task) + 0.5 - 3, 0, by=-3)
196
+
197
+ timeline <- ggplot(tasks.long, aes(y=id, yend=id, x=Start.second, xend=End.second, colour=Task)) +
198
+ geom_segment() +
199
+ geom_vline(xintercept=x.breaks, colour="grey80", linetype="dotted") +
200
+ guides(colour=guide_legend(title=NULL)) +
201
+ labs(x=NULL, y=NULL) +
202
+ theme_gantt() + theme(axis.text.x=element_text(angle=45, hjust=1))
203
+
204
+ rbbt.png_plot('#{plot}', 'timeline', width=#{width}, height=#{height}, pointsize=6)
205
+ EOF
206
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.25.48
4
+ version: 5.25.49
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-14 00:00:00.000000000 Z
11
+ date: 2019-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake