canzea 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,139 @@
1
+ require 'json'
2
+ require 'open3'
3
+ require 'stringio'
4
+ require 'logger'
5
+
6
+ # Optionally can specify the command to continue from
7
+ # Exit on first failure
8
+ #
9
+ def time_diff_milli(start, finish)
10
+ (finish - start) * 1000.0
11
+ end
12
+
13
+ def handleIO(stillOpen, ioArray, io, log)
14
+ if ioArray.include?(io)
15
+ begin
16
+ log.write(io.readpartial(4096))
17
+ rescue EOFError
18
+ stillOpen.delete_if{|s| s == io}
19
+ end
20
+ end
21
+ end
22
+
23
+
24
+ class Audit
25
+ def start (id, cmd)
26
+ self.log( id, cmd, "start", "", 0, "")
27
+ end
28
+
29
+ def complete (id, cmd, status, msecs, result)
30
+ self.log( id, cmd, "complete", status, msecs, result)
31
+ end
32
+
33
+ def status (id, cmd, status, msecs, result)
34
+ data = {
35
+ "message" => {
36
+ "id" => id,
37
+ "cmd" => cmd,
38
+ "task" => "status",
39
+ "status" => status,
40
+ "elapsed" => msecs,
41
+ "result" => result
42
+ }
43
+ }
44
+ puts data.to_json
45
+ File.open(Canzea::config[:logging_root] + '/audit.log', 'a') { |file| file.puts(data.to_json) }
46
+ end
47
+
48
+ def log (id, cmd, task, status, msecs, result)
49
+ data = {
50
+ "message" => {
51
+ "id" => id,
52
+ "cmd" => cmd,
53
+ "task" => task,
54
+ "status" => status,
55
+ "elapsed" => msecs,
56
+ "result" => result
57
+ }
58
+ }
59
+ summary = {
60
+ "message" => {
61
+ "id" => id,
62
+ "cmd" => cmd,
63
+ "task" => task,
64
+ "status" => status,
65
+ "elapsed" => msecs
66
+ }
67
+ }
68
+ puts summary.to_json
69
+ File.open(Canzea::config[:logging_root] + '/audit.log', 'a') { |file| file.puts(data.to_json) }
70
+ end
71
+ end
72
+
73
+ class RunnerWorker
74
+
75
+ def run(command, start, lines, statusIndicator = false )
76
+ audit = Audit.new
77
+
78
+ log = Logger.new(Canzea::config[:logging_root] + '/plans.log')
79
+
80
+ log.info("HANDLING: " + command)
81
+
82
+ l = command
83
+
84
+ audit.start( "#{lines + 1 }", l.chomp)
85
+
86
+ log.info("#{lines + 1} FOUND: " + l)
87
+
88
+ t1 = Time.now
89
+
90
+ Open3.popen3(ENV, l) {|stdin, stdout, stderr, wait_thr|
91
+ pid = wait_thr.pid # pid of the started process.
92
+
93
+ log_w = StringIO.new
94
+
95
+ stillOpen = [stdout, stderr]
96
+ while !stillOpen.empty?
97
+ fhs = select(stillOpen, nil, nil, nil)
98
+ handleIO(stillOpen, fhs[0], stdout, log_w)
99
+ handleIO(stillOpen, fhs[0], stderr, log_w)
100
+ end
101
+
102
+ exit_status = wait_thr.value # wait for it to finish
103
+
104
+ log_w.close_write
105
+
106
+ output = log_w.string
107
+
108
+ output.split(/\n/).each do | line |
109
+ puts "-- #{line}"
110
+ end
111
+ puts "-- Exit Status = #{exit_status}"
112
+
113
+ log.info("STDOUT #{output}")
114
+
115
+ log.info("Exit Status = #{exit_status}")
116
+
117
+ # if exit status is failure then exit right away
118
+
119
+ t2 = Time.now
120
+
121
+ msecs = time_diff_milli t1, t2
122
+
123
+ audit.complete("#{lines + 1}", l.chomp, exit_status.exitstatus, msecs, output)
124
+
125
+ if (statusIndicator)
126
+ audit.status("#{lines + 1}", l.chomp, exit_status.exitstatus, msecs, output)
127
+ end
128
+
129
+ if exit_status.exitstatus != 0
130
+ abort()
131
+ end
132
+ }
133
+
134
+ lines += 1
135
+
136
+ return lines
137
+
138
+ end
139
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: canzea
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Canzea Technologies
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.13'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: patron
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.8'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: net-ssh
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: net-sftp
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.1'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: mustache
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: cri
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2.7'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.7'
125
+ - !ruby/object:Gem::Dependency
126
+ name: git
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.3'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '1.3'
139
+ description: Orchestrate the building of images based on defined ecosystem blueprints.
140
+ email:
141
+ - ikethecoder@canzea.com
142
+ executables:
143
+ - canzea
144
+ - setup
145
+ extensions: []
146
+ extra_rdoc_files: []
147
+ files:
148
+ - ".gitignore"
149
+ - ".idea/compiler.xml"
150
+ - ".idea/copyright/profiles_settings.xml"
151
+ - ".idea/misc.xml"
152
+ - ".idea/modules.xml"
153
+ - ".idea/vcs.xml"
154
+ - ".travis.yml"
155
+ - Gemfile
156
+ - LICENSE.txt
157
+ - README.md
158
+ - Rakefile
159
+ - bin/canzea
160
+ - bin/setup
161
+ - canzea.gemspec
162
+ - cli.iml
163
+ - lib/canzea.rb
164
+ - lib/canzea/config.rb
165
+ - lib/canzea/version.rb
166
+ - lib/commands/config-git-commit.rb
167
+ - lib/commands/get-catalog.rb
168
+ - lib/commands/remote-run.rb
169
+ - lib/helper-run-class.rb
170
+ - lib/plan-step-class.rb
171
+ - lib/prepare-environment.rb
172
+ - lib/registry.rb
173
+ - lib/ssh-base-cmd-class.rb
174
+ - lib/template-runner.rb
175
+ - lib/trace-component.rb
176
+ - lib/trace-runner.rb
177
+ homepage: http://www.canzea.com
178
+ licenses:
179
+ - MIT
180
+ metadata: {}
181
+ post_install_message:
182
+ rdoc_options: []
183
+ require_paths:
184
+ - lib
185
+ required_ruby_version: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ required_rubygems_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ requirements: []
196
+ rubyforge_project:
197
+ rubygems_version: 2.4.5.1
198
+ signing_key:
199
+ specification_version: 4
200
+ summary: Canzea command line interface for orchestrating builds.
201
+ test_files: []