zillabyte 0.1.1 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8c70d8e1d80584425348ab8ca04755fbade0c947
4
- data.tar.gz: b11745a058193b76fd458f0de1e63fe93e093295
5
- SHA512:
6
- metadata.gz: 74adda596843678f98c809918b0baf540bd0883f8279a8e328efea515a2a70c2bb3bb9f4543fdf7b84adff15d9a3609443c5690c9091c097d41ee8c9c3c97e20
7
- data.tar.gz: ff3e886dacd18bddf69b577425a53498e6119699bc6ea4c7142af52a2c77666a35b8e3db52f879d239c95c8d107a453203271b402948f51eb2676bac741d4a0a
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NTA2NGJmMzJjMjMzOTBhMDcyNDczNWIzNDc3MTgyODljMWI3YTYzMw==
5
+ data.tar.gz: !binary |-
6
+ ZWNiZDUwNGYxMGVmYjk2OTJkODJiMzlmOTFhN2JiMzQ5Zjc3NGEzOA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NTMwMzFmMzk1ZTIwY2JhMmFkM2ExNzYzMmExMzViZmFmYTcxYTU2YTk0ODUz
10
+ MjgyYjY5OTkwZDhmOWRiZTUyZDQxYWRhOTg0Y2IyMzVmN2U0NjY3YzlmNDU4
11
+ OTc4NjYyNDdjYzg4MTUyZGUzYjU5NzZkZDI0YzIzZDE5MDNhZTk=
12
+ data.tar.gz: !binary |-
13
+ YWFlNzQxMWQ5OWQxZjYzYTZiM2E4N2RmODMxMDQ4NTg4M2I0ZDA0YmVmY2Rm
14
+ Nzg1OGRmYzE1ZjEwMTE5ODJhZGZiZTQ4ZjE1YzhhM2FmY2FhYmU0YWZmMTM4
15
+ NDE4ZWQ5Mjk0Y2JkYWMyZWY0Mzk5N2JlNjAxMWM2ZTQ5NDczZmE=
@@ -1,9 +1,10 @@
1
1
  class Zillabyte::Harness::Each
2
- attr_accessor :_name, :_type, :_emits, :_prepare, :_execute
2
+ attr_accessor :_name, :_type, :_emits, :_output_format, :_prepare, :_execute
3
3
 
4
4
  def initialize()
5
5
  @_name = "each_"+Zillabyte::Harness::Counter.get()
6
- @_type = 'each'
6
+ @_type = "each"
7
+ @_output_format = :replace
7
8
  end
8
9
 
9
10
  def name(v)
@@ -14,6 +15,10 @@ class Zillabyte::Harness::Each
14
15
  @_emits = *v
15
16
  end
16
17
 
18
+ def output_format(v)
19
+ @_output_format = v
20
+ end
21
+
17
22
  def prepare(&block)
18
23
  @_prepare = block
19
24
  end
@@ -2,6 +2,10 @@ require 'optparse'
2
2
 
3
3
  class Zillabyte::Harness::Helper
4
4
 
5
+ META_NAMES = ["id", "confidence", "since", "source"]
6
+ ALLOWED_OUTPUT_FORMATS = [:replace, :merge]
7
+ ALLOWED_END_CYCLE_POLICIES = [:null_emit, :explicit, :infinite]
8
+
5
9
  def self.opt_parser()
6
10
  options = {
7
11
  "name" => Dir.pwd.split("/")[-1]
@@ -63,6 +67,15 @@ class Zillabyte::Harness::Helper
63
67
 
64
68
  end
65
69
 
70
+ def self.check_output_format(operation, output_format)
71
+ ee = "Error in \"#{operation}\" at \"output_format\": \n\t "
72
+
73
+ if(!ALLOWED_OUTPUT_FORMATS.member? output_format)
74
+ msg = "#{ee}Invalid \"output_format\": #{output_format}. The allowed formats are :replace and :merge."
75
+ Zillabyte::Harness::Helper.print_error(msg)
76
+ end
77
+ end
78
+
66
79
  def self.check_custom_source(source)
67
80
  ee = "Error in \"source\": \n\t "
68
81
  pp = @@_print_check_source
@@ -74,8 +87,7 @@ class Zillabyte::Harness::Helper
74
87
  Zillabyte::Harness::Helper.print_error(msg)
75
88
  end
76
89
 
77
- allowed_policies = [:null_emit, :explicit, :infinite]
78
- if !(allowed_policies.member? source._end_cycle_policy)
90
+ if !(ALLOWED_END_CYCLE_POLICIES.member? source._end_cycle_policy)
79
91
  msg = "#{ee}Invalid \"end_cycle_policy\": \"#{source._end_cycle_policy}\". The allowed policies are :null_emit and :explicit. #{pp}"
80
92
  Zillabyte::Harness::Helper.print_error(msg)
81
93
  end
@@ -155,7 +167,9 @@ class Zillabyte::Harness::Helper
155
167
  if !each._execute
156
168
  msg = "#{ee}An \"each\" must contain an \"execute\" block. #{pp}"
157
169
  Zillabyte::Harness::Helper.print_error(msg)
158
- end
170
+ end
171
+
172
+ Zillabyte::Harness::Helper.check_output_format("each", each._output_format)
159
173
  end
160
174
 
161
175
  def self.check_group_by(group_by)
@@ -224,15 +238,16 @@ class Zillabyte::Harness::Helper
224
238
 
225
239
  id = node._id
226
240
  if !id
227
- msg = "#{ee} The \"component_id\" must be specified. Check \"zillabyte components\" to find the correct ID. #{pp}"
241
+ msg = "#{ee}The \"component_id\" must be specified. This may be the name or ID of the component. Check \"zillabyte components\" to find this information. #{pp}"
228
242
  Zillabyte::Harness::Helper.print_error(msg)
229
243
  end
230
244
 
231
- # \w matchs [0-9]
232
- if(!(id.is_a?(String) or id.is_a?(Symbol)) or (id =~ /^[0-9]+$/).nil? or id[0] == "0")
233
- msg = "#{ee} Invalid \"component_id\". The \"component_id\" must be a number. Check \"zillabyte components\" to find the correct ID. #{pp}"
245
+ if(!(id.is_a?(String) or id.is_a?(Symbol)) or (id =~ /^\w+$/).nil?)
246
+ msg = "#{ee}The \"component_id\" must be a non-empty STRING with only alphanumeric and underscore characters in \"#{id}\". #{pp}"
234
247
  Zillabyte::Harness::Helper.print_error(msg)
235
248
  end
249
+
250
+ Zillabyte::Harness::Helper.check_output_format("call_component", node._output_format)
236
251
  end
237
252
 
238
253
  def self.check_sink(sink, nodes)
@@ -281,7 +296,7 @@ class Zillabyte::Harness::Helper
281
296
  msg = "#{ee}Field names must be non-empty STRINGS with only alphanumeric and underscore characters in \"#{relation_name}\". #{pp}"
282
297
  Zillabyte::Harness::Helper.print_error(msg)
283
298
  end
284
- if(cname =~ /^v[0-9]+$/i or @@_meta_names.member?(cname.downcase))
299
+ if(cname =~ /^v[0-9]+$/i or META_NAMES.member?(cname.downcase))
285
300
  msg = "#{ee}\"v[number]\", \"id\", \"confidence\", \"since\" and \"source\" are special names in Zillabyte. Please name your field something else. #{pp}"
286
301
  Zillabyte::Harness::Helper.print_error(msg)
287
302
  end
@@ -385,10 +400,13 @@ OUTPUT
385
400
  Custom filter:
386
401
  stream.filter do
387
402
  name "name" \t\t\t => optional
403
+ emits "stream_1", "stream_2", ... \t\t => optional for single output stream
404
+ prepare |=block=| \t\t\t\t => optional if no initialization needed
388
405
  keep |=block=|
389
406
  end
390
- - The "keep" block must take in a single argument (the "tuple").
391
- - Tuples will pass through if "keep" returns "True".
407
+ - The "prepare" and "keep" blocks can be in do...end format or {} format.
408
+ * the "prepare" block is where any setup is done to prepare for tuple processing in the "keep" block.
409
+ * tuples will pass through the filter if "keep" returns "True". It must take in a single argument (the "tuple").
392
410
  OUTPUT
393
411
 
394
412
  @@_print_check_each = <<-OUTPUT
@@ -404,9 +422,13 @@ OUTPUT
404
422
  stream.each do
405
423
  name "name" \t\t\t\t\t => optional
406
424
  emits "stream_1", "stream_2", ... \t\t => optional for single output stream
425
+ output_format :replace OR :merge \t\t => optional, defaults to :replace
407
426
  prepare |=block=| \t\t\t\t => optional if no initialization needed
408
427
  execute |=block=|
409
428
  end
429
+ - The allowed output formats are :replace and :merge.
430
+ * :replace - discards the input tuple values and only emits the specified values. This is the default.
431
+ * :merge - re-emits the input tuple values along with the specified values.
410
432
  - The "prepare" and "execute" blocks can be in do...end format or {} format.
411
433
  * the "prepare" block is where any setup is done to prepare for tuple processing in the "execute" block.
412
434
  * the "execute" block is where the tuples are actually processed. It must take in a single argument (the "tuple").
@@ -469,12 +491,16 @@ OUTPUT
469
491
  @@_print_check_call_component = <<-OUTPUT
470
492
  \n\n"Call_component" Syntax:
471
493
  stream.call_component do
472
- component_id "component_id"
473
- name "name" \t\t\t\t\t\t\t\t\t => optional
474
- additional_inputs other_input_stream_object_1, other_input_stream_object_2, ... \t => blank if none
475
- outputs "output_stream_name_1", "output_stream_name_2", ...
476
- end
477
- - The "component_id" MUST be given and correspond to the id listed in the output of "zillabyte components".
494
+ component_id "component_id"
495
+ name "name" \t\t\t\t\t\t\t\t\t => optional
496
+ additional_inputs other_input_stream_object_1, other_input_stream_object_2, ... \t => blank if none
497
+ outputs "output_stream_name_1", "output_stream_name_2", ...
498
+ output_format :replace OR :merge \t\t => optional, defaults to :replace
499
+ end
500
+ - The "component_id" MUST be given and correspond to the name or id listed in the output of "zillabyte components".
501
+ - The allowed output formats are :replace and :merge. Note that only linear components, i.e. those with only "each" and "filter" operations support :merge.
502
+ * :replace - discards the input tuple values and only emits the output values. This is the default.
503
+ * :merge - re-emits the input tuple values along with the output values.
478
504
  - To correctly stich in the component, the implicit assumptions below WILL BE USED:
479
505
  * The "stream" that "call_component" is invoked on MUST correspond to the first listed input stream to the component.
480
506
  * The streams specified in "additional_inputs" MUST correspond to the other listed input streams in order.
@@ -483,5 +509,4 @@ OUTPUT
483
509
  * The number of input and output streams specified must match the number listed for the component.
484
510
  OUTPUT
485
511
 
486
- @@_meta_names = ["id", "confidence", "since", "source"]
487
512
  end
@@ -5,7 +5,7 @@ class Zillabyte::Harness::InjectedComponent
5
5
  @_name = "component_"+Zillabyte::Harness::Counter.get()
6
6
  @_type = "component"
7
7
  @_consumes = []
8
- @_output_format = "replace"
8
+ @_output_format = :replace
9
9
  end
10
10
 
11
11
  def name(v)
@@ -89,14 +89,14 @@ module Zillabyte
89
89
  Storm::Protocol.pending_commands.shift ||
90
90
  begin
91
91
  msg = read_message
92
- while msg.is_a?(Hash) && msg['pong']
92
+ while msg && msg.is_a?(Hash) && msg['pong']
93
93
  # Ignore 'pong' commands (i.e. the response from our 'pings' above)
94
94
  msg = read_message
95
95
  end
96
96
  msg
97
- rescue JSON::ParserError => e
98
- fail "error: #{e}"
99
- {}
97
+ rescue StandardError => e
98
+ log "message error: #{e}"
99
+ nil
100
100
  end
101
101
  end
102
102
 
@@ -114,21 +114,6 @@ module Zillabyte
114
114
  File.open("#{heartbeat_dir}/#{pid}", "w").close
115
115
  end
116
116
 
117
-
118
- def set_state(key, val)
119
- send_msg_to_parent({'set_state' => Base64.encode64(Marshal.dump(val)), 'key' => key})
120
- end
121
-
122
- def get_state(key)
123
- send_msg_to_parent({'get_state' => key})
124
- ret = read_message()
125
- if ret['state']
126
- return Marshal.load(Base64.decode64(ret['state']))
127
- else
128
- return nil
129
- end
130
- end
131
-
132
117
  def emit(*args)
133
118
 
134
119
  stream = nil
@@ -243,7 +228,7 @@ module Zillabyte
243
228
 
244
229
  while true
245
230
  begin
246
- msg = read_command
231
+ msg = read_command || {}
247
232
  case msg['command']
248
233
  when 'begin_cycle'
249
234
  begin_cycle
@@ -287,9 +272,13 @@ module Zillabyte
287
272
 
288
273
  while true
289
274
  begin
290
- t = Tuple.from_hash(read_command)
291
- next if(!t)
292
- execute t
275
+ m = read_command()
276
+ if(m)
277
+ t = Tuple.from_hash(m)
278
+ if(t)
279
+ execute t
280
+ end
281
+ end
293
282
  rescue SignalException => e
294
283
  raise
295
284
  rescue ParentDeadException => e
@@ -318,9 +307,13 @@ module Zillabyte
318
307
 
319
308
  while true
320
309
  begin
321
- t = Tuple.from_hash(read_command)
322
- next if(!t)
323
- emit t if keep t
310
+ m = read_command()
311
+ if m
312
+ t = Tuple.from_hash(m)
313
+ if t
314
+ emit(t) if keep t
315
+ end
316
+ end
324
317
  rescue SignalException => e
325
318
  raise
326
319
  rescue Exception => e
@@ -343,7 +336,7 @@ module Zillabyte
343
336
 
344
337
  while true
345
338
  begin
346
- msg = read_command
339
+ msg = read_command || {}
347
340
  case msg['command']
348
341
  when 'begin_group'
349
342
  t = Tuple.from_hash(msg)
@@ -34,7 +34,7 @@ class Zillabyte::Harness::Stream
34
34
  @_app._nodes << h
35
35
 
36
36
  if(@_app._options[:command] == :info)
37
- node_hash = {"name" => h._name, "type" => h._type}
37
+ node_hash = {"name" => h._name, "type" => h._type, "output_format" => h._output_format}
38
38
  Zillabyte::Harness::Helper.write_node_to_file(node_hash, @_app._info_file)
39
39
  arc_hash = {"name" => @_name, "origin" => @_previous_node_name, "dest" => h._name}
40
40
  Zillabyte::Harness::Helper.write_arc_to_file(arc_hash, @_app._info_file)
@@ -182,9 +182,13 @@ class Zillabyte::Harness::Stream
182
182
 
183
183
  end
184
184
 
185
- def call_component(&block)
185
+ def call_component(comp_id = nil, &block)
186
+
186
187
  h = Zillabyte::Harness::InjectedComponent.new()
187
- h.instance_eval(&block)
188
+ h.instance_eval(&block) if block_given?
189
+ h._id ||= comp_id
190
+ h._emits ||= ["stream_"+Zillabyte::Harness::Counter.get()] # We default to single-stream when called like this..
191
+
188
192
  Zillabyte::Harness::Helper.check_name("component", h._name, @_app._names)
189
193
  Zillabyte::Harness::Helper.check_call_component(h)
190
194
  Zillabyte::Harness::Helper.check_emits("component", h._emits, @_app._streams)
@@ -1,3 +1,3 @@
1
1
  module Zillabyte
2
- VERSION = "0.1.1" unless defined?(VERSION)
2
+ VERSION = "0.1.3" unless defined?(VERSION)
3
3
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zillabyte
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - zillabyte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-27 00:00:00.000000000 Z
11
+ date: 2014-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - ! '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - ! '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mkfifo
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: zillabyte-cli
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.1.0
47
+ version: 0.1.3
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.0
54
+ version: 0.1.3
55
55
  description: The Official Zillabyte Gem
56
56
  email:
57
57
  - gem@zillabyte.com
@@ -59,9 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - ruby/lib/zillabyte.rb
63
62
  - ruby/lib/zillabyte/common/progress.rb
64
- - ruby/lib/zillabyte/harness.rb
65
63
  - ruby/lib/zillabyte/harness/app.rb
66
64
  - ruby/lib/zillabyte/harness/base.rb
67
65
  - ruby/lib/zillabyte/harness/component.rb
@@ -80,7 +78,9 @@ files:
80
78
  - ruby/lib/zillabyte/harness/source.rb
81
79
  - ruby/lib/zillabyte/harness/stream.rb
82
80
  - ruby/lib/zillabyte/harness/tuple.rb
81
+ - ruby/lib/zillabyte/harness.rb
83
82
  - ruby/lib/zillabyte/version.rb
83
+ - ruby/lib/zillabyte.rb
84
84
  homepage: http://www.zillabyte.com
85
85
  licenses:
86
86
  - MIT
@@ -91,17 +91,17 @@ require_paths:
91
91
  - ruby/lib
92
92
  required_ruby_version: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - ! '>='
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - ">="
99
+ - - ! '>='
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  requirements: []
103
103
  rubyforge_project:
104
- rubygems_version: 2.2.2
104
+ rubygems_version: 2.0.6
105
105
  signing_key:
106
106
  specification_version: 4
107
107
  summary: The Official Zillabyte Gem