workflow_manager 0.3.9 → 0.4.0

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: 18ae8afa0d8c422d163839c81a930793a149361e
4
- data.tar.gz: 72f450e946fdc603978f710eb520dbb8c41d261a
3
+ metadata.gz: 7bfc8ab86725ea91ec1127b3747cd0a88dfdf88d
4
+ data.tar.gz: d2949c18e76ee79369cf21b6448071724812508f
5
5
  SHA512:
6
- metadata.gz: bf583dd83202286eac771eebba6b3263c9a5d17a3a8ea7caeb6e165907623b517560592738647d513a98e9a85b165a6b657746605fff5a28029b5ac61ff3bc71
7
- data.tar.gz: e4babb61dc0f21012f1bee086e522985b232bf3301b20cfca676c46ebc6fe52675a1339acb6edafe2e2274afa725714e5898f5978695e62478d6c69186010607
6
+ metadata.gz: 16a58dd55438cc92db970374c99796dcb9604fb52104f27ff5a7bae2f70eb1b008fb0758a1afa0d5f04b05ff91ca47d2ad5318aeca601806df0f0a4153077dc4
7
+ data.tar.gz: 2cf236c75abfd814fbf42ba54605ec8240ed89bfebc3690dbf4aeaa7406d985242cf048d1ed423997ce5d1309f1a40cbfd34a634a0605d13f35072d3df47eab7
@@ -0,0 +1,169 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ Version = '20180308-150906'
4
+
5
+ require 'drb/drb'
6
+ require 'ruby-progressbar'
7
+ require 'parallel'
8
+ require 'tempfile'
9
+
10
+ def help
11
+ puts "Usage:"
12
+ puts " #{File.basename(__FILE__)} druby://host_name:port_number (options)"
13
+ puts
14
+ puts "Example:"
15
+ puts " #{File.basename(__FILE__)} druby://local_host:4000 -d 10 -r 100 > report.html"
16
+ puts " #{File.basename(__FILE__)} druby://local_host:4000 -d 10 -r 10 -m monitoring -n node-01 > report.html"
17
+ puts
18
+ puts "Options:"
19
+ puts " -d duration (default: 10 (s))"
20
+ puts " -r rate: (default: 10 (times))"
21
+ puts " -m call_method: [hello, monitoring] (default: hello)"
22
+ puts " -n sge_option: job submit node, required with -m option"
23
+ exit
24
+ end
25
+ unless uri = ARGV[0]
26
+ help
27
+ end
28
+ duration = if idx = ARGV.index("-d")
29
+ ARGV[idx+1].to_i
30
+ else
31
+ 10
32
+ end
33
+ rate = if idx = ARGV.index("-r")
34
+ ARGV[idx+1].to_i
35
+ else
36
+ 10
37
+ end
38
+
39
+ call_method = if idx = ARGV.index("-m")
40
+ ARGV[idx+1].to_sym
41
+ else
42
+ :hello
43
+ end
44
+ sge_option = if idx = ARGV.index("-n")
45
+ ARGV[idx+1]
46
+ elsif call_method == :monitoring
47
+ puts
48
+ puts "WARNING: You need -n option with -m monitoring"
49
+ puts
50
+ help
51
+ end
52
+
53
+
54
+ template =<<-EOS
55
+ <head>
56
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.4/Chart.min.js"></script>
57
+ </head>
58
+
59
+ <body>
60
+ <canvas id="stage"></canvas>
61
+ <script>
62
+ var mydata = {
63
+ labels: LABELS_ARRAY,
64
+ datasets: [
65
+ {
66
+ label: 'wfm_attack',
67
+ fill: false,
68
+ data: DATA_ARRAY,
69
+ }
70
+ ]
71
+ };
72
+
73
+ var options = {
74
+ title: {
75
+ display: true,
76
+ text: 'Latency'
77
+ },
78
+
79
+ scales: {
80
+ xAxes: [{
81
+ position: 'bottom',
82
+ scaleLabel: {
83
+ display: true,
84
+ labelString: 'Elapsed time [s]'
85
+ },
86
+ ticks: {
87
+ callback: function(value) {return (Math.pow(value - Math.round(value), 2) < 0.2/RATE ? Math.round(value) : '')},
88
+ min: 0,
89
+ max: DURATION,
90
+ stepSize: 1
91
+ }
92
+ }],
93
+
94
+ yAxes: [{
95
+ scaleLabel: {
96
+ display: true,
97
+ labelString: 'Latency [s]'
98
+ },
99
+ }]
100
+ }
101
+ };
102
+
103
+ var canvas = document.getElementById('stage');
104
+ var chart = new Chart(canvas, {
105
+ type: 'line',
106
+ data: mydata,
107
+ options: options
108
+ });
109
+ </script>
110
+ </body>
111
+ EOS
112
+
113
+ labels = data = nil
114
+ make_html =->(labels, data){
115
+ template.gsub(/LABELS_ARRAY/, labels).gsub(/DATA_ARRAY/, data).gsub(/DURATION/, duration.to_s).gsub(/RATE/, rate.to_s)
116
+ }
117
+
118
+ workflow_manager = DRbObject.new_with_uri(uri)
119
+ threads = rate
120
+ wait_time = duration.to_f/rate
121
+ commands = []
122
+ threads.times do |i|
123
+ commands << wait_time*i
124
+ end
125
+
126
+ call_wfm_func =->(method=:hello){
127
+ if method == :hello
128
+ workflow_manager.send(method)
129
+ elsif method == :monitoring
130
+ tf = Tempfile.open("test.sh"){|out|
131
+ out.puts "#!/bin/bash"
132
+ out.puts
133
+ out.puts "START"
134
+ out.puts "sleep 5"
135
+ out.puts "END"
136
+ out
137
+ }
138
+ job_script = tf.path
139
+ script_content = File.read(tf.path)
140
+ user = "sushi_lover"
141
+ project_number = 1001
142
+ gsub_options = ["-n", sge_option]
143
+ gstore_script_dir = "/srv/gstore/projects/p1001/test_wfm_attack/scripts"
144
+ job_id = workflow_manager.start_monitoring(job_script, user, 0, script_content, project_number, gsub_options.join(' '), gstore_script_dir)
145
+ end
146
+ }
147
+ progress = ProgressBar.create(title: "Progress", total: commands.length, format: '%a %B %p%% %t', output: $stderr)
148
+ result = Parallel.map(commands, in_processes: threads, finish: -> (item, i, res){ progress.increment }) do |wait_time|
149
+ start_time = Time.now
150
+ sleep wait_time
151
+ st = Time.now
152
+
153
+ call_wfm_func.(call_method.to_sym)
154
+
155
+ et = Time.now
156
+ response_time = et - st
157
+ elapsed_time = Time.now - start_time
158
+ [elapsed_time, response_time]
159
+ end
160
+
161
+ #puts ["Elapsed", "Latency"].join("\t")
162
+ #result.each.with_index do |ela_res|
163
+ # elapsed_time, response_time = ela_res
164
+ # puts [elapsed_time, response_time].join("\t")
165
+ #end
166
+
167
+ labels = "[#{result.map{|x| "'#{x.first}'"}.join(",")}]"
168
+ data = "[#{result.map{|x| "'#{x.last}'"}.join(",")}]"
169
+ puts make_html.(labels, data)
@@ -191,7 +191,7 @@ module WorkflowManager
191
191
 
192
192
  class FGCZCourseCluster < FGCZCluster
193
193
  def copy_commands(org_dir, dest_parent_dir, now=nil)
194
- commands = ["cp -r #{org_dir} #{dest_parent_dir}"]
194
+ commands = ["umask 0002; cp -r #{org_dir} #{dest_parent_dir}"]
195
195
  end
196
196
  def delete_command(target)
197
197
  command = "rm -rf #{target}"
@@ -1,3 +1,3 @@
1
1
  module WorkflowManager
2
- VERSION = "0.3.9"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workflow_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.9
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Functional Genomics Center Zurich
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-01 00:00:00.000000000 Z
11
+ date: 2018-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -42,6 +42,7 @@ description: Workflow Manager manages job submissions using dRuby.
42
42
  email:
43
43
  - masaomi.hatakeyama@fgcz.uzh.ch
44
44
  executables:
45
+ - wfm_attack
45
46
  - wfm_delete_command
46
47
  - wfm_get_log
47
48
  - wfm_get_script
@@ -61,6 +62,7 @@ files:
61
62
  - LICENSE.txt
62
63
  - README.md
63
64
  - Rakefile
65
+ - bin/wfm_attack
64
66
  - bin/wfm_delete_command
65
67
  - bin/wfm_get_log
66
68
  - bin/wfm_get_script