zillabyte 0.0.6

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,90 @@
1
+ require 'optparse'
2
+
3
+ class Zillabyte::Harness::SimpleSpout
4
+ attr_accessor :_nodes, :_sink, :_name
5
+
6
+
7
+ def self.build()
8
+
9
+ # Parse the options...
10
+ options = Zillabyte::Harness::Helper.opt_parser()
11
+ flow = Zillabyte::Harness::SimpleSpout.new()
12
+ flow._nodes = []
13
+ flow._name = options[:name]
14
+
15
+ # Get the user logic...
16
+ yield(flow)
17
+ if(options[:command] == :info)
18
+ _info_file = File.open(options[:file], "w+")
19
+ info_hash = {"language" => "ruby", "name" => flow._name}
20
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, _info_file)
21
+ end
22
+
23
+ # Get the spout-specific logic...
24
+ spout = Zillabyte::Harness::Spout.new(false)
25
+ yield(spout)
26
+ spout._name = "spout"
27
+ flow._nodes << spout
28
+ if(options[:command] == :info)
29
+ info_hash = {"name" => spout._name, "type" => spout._type}
30
+ if(spout._emits)
31
+ info_hash["emits"] = spout._emits
32
+ elsif(spout._relation)
33
+ info_hash["relation"] = spout._relation
34
+ elsif(spout._matches)
35
+ info_hash["matches"] = spout._matches
36
+ end
37
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, _info_file)
38
+ end
39
+
40
+ # Add the sink...
41
+ flow._nodes << flow._sink
42
+ if(options[:command] == :info)
43
+ info_hash = {"name" => flow._sink._name, "type" => flow._sink._type, "columns" => flow._sink._columns}
44
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, _info_file)
45
+ end
46
+
47
+ # Execute...
48
+ if(options[:command] == :execute and options[:name] == "spout")
49
+ pipe_name = options[:pipe]
50
+ c = Zillabyte::Harness::SpoutController.new(spout, progress = Zillabyte::Common::Progress.new)
51
+ c.run(pipe_name)
52
+ end
53
+
54
+ # Done
55
+ flow
56
+ end
57
+
58
+
59
+
60
+ def name(v)
61
+ Zillabyte::Harness::Helper.check_name("simple_spout", v, {})
62
+ @_name = v
63
+ end
64
+
65
+
66
+ def emits(v)
67
+ # Construct the sink...
68
+ Zillabyte::Harness::Helper.check_emits("simple_spout", v, {})
69
+ @_sink = Zillabyte::Harness::Sink.new()
70
+ @_sink.name(v[0][0])
71
+ columns = v[0][1]
72
+ columns.each do |col|
73
+ col.each do |cname, ctype|
74
+ @_sink.column(cname, ctype)
75
+ end
76
+ end
77
+ end
78
+
79
+
80
+ def prepare(&block)
81
+ # Dummy function, prepare is picked up by Each above
82
+ end
83
+
84
+ def next_batch(&block)
85
+ # Dummy function, execute is picked up by Each above
86
+ end
87
+
88
+
89
+ end
90
+
@@ -0,0 +1,23 @@
1
+ class Zillabyte::Harness::Sink
2
+ attr_accessor :_name, :_type, :_columns, :_consumes
3
+
4
+ def initialize()
5
+ @_type = 'sink'
6
+ @_columns = []
7
+ end
8
+
9
+
10
+ def consumes(v)
11
+ @_consumes = v
12
+ end
13
+
14
+ def name(v)
15
+ @_name = v
16
+ end
17
+
18
+ def column(cname, ctype)
19
+ col = {cname => ctype}
20
+ @_columns << col
21
+ end
22
+
23
+ end
@@ -0,0 +1,48 @@
1
+ class Zillabyte::Harness::Spout
2
+ attr_accessor :_name, :_type, :_matches, :_relation, :_emits, :_prepare, :_next_batch, :_flow_flag
3
+
4
+ def initialize(flow_flag)
5
+ @_name = "spout_"+Zillabyte::Harness::Counter.get()
6
+ @_type = 'spout'
7
+ @_flow_flag = flow_flag
8
+ end
9
+
10
+ def matches(v, options = {})
11
+ case v
12
+ when String
13
+ @_relation = { :query => v, :options => options.is_a?(Hash) ? options : {} }
14
+ when Array
15
+ @_matches = v
16
+ end
17
+ end
18
+
19
+ def name(v)
20
+ @_name = v
21
+ end
22
+
23
+ def emits(v)
24
+ if(@_flow_flag)
25
+ @_emits = v
26
+ else
27
+ @_emits = []
28
+ v.each do |relation|
29
+ temit = []
30
+ relation[1].each do |column|
31
+ column.each do |col, type|
32
+ temit << col
33
+ end
34
+ end
35
+ @_emits << [relation[0], temit]
36
+ end
37
+ end
38
+ end
39
+
40
+ def prepare(&block)
41
+ @_prepare = block
42
+ end
43
+
44
+ def next_batch(&block)
45
+ @_next_batch = block
46
+ end
47
+
48
+ end
@@ -0,0 +1,132 @@
1
+ require "json"
2
+
3
+ class Zillabyte::Harness::Topology
4
+ attr_accessor :_name, :_options, :_nodes, :_streams, :_names, :_branched, :_info_file #instance variables?
5
+
6
+ def self.build(name)
7
+ h = Zillabyte::Harness::Topology.new()
8
+ h._nodes = []
9
+ h._streams = {}
10
+ h._names = {}
11
+ h._branched = false
12
+ h._name = name || Dir.pwd.split("/")[-1]
13
+ Zillabyte::Harness::Helper.check_name("new", h._name, {})
14
+ h._options = Zillabyte::Harness::Helper.opt_parser()
15
+ if(h._options[:command] == :info)
16
+ h._info_file = File.open(h._options[:file],"w+")
17
+ info_hash = {"language" => "ruby", "name" => h._name}
18
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, h._info_file)
19
+ end
20
+ h
21
+ end
22
+
23
+ def spout_from_relation()
24
+ h = Zillabyte::Harness::Spout.new(true)
25
+ yield(h)
26
+ Zillabyte::Harness::Helper.check_name("spout", h._name, @_names)
27
+ @_nodes << h
28
+ if(@_options[:command] == :info)
29
+ info_hash = {"name" => h._name, "type" => h._type}
30
+ if(h._relation)
31
+ info_hash["relation"] = h._relation
32
+ elsif(h._matches)
33
+ info_hash["matches"] = h._matches
34
+ end
35
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, @_info_file)
36
+ end
37
+ end
38
+
39
+ def spout
40
+ h = Zillabyte::Harness::Spout.new(true)
41
+ yield(h)
42
+ Zillabyte::Harness::Helper.check_name("spout", h._name, @_names)
43
+ @_branched = Zillabyte::Harness::Helper.check_emits("spout", h._emits, @_streams) || @_branched
44
+ @_nodes << h
45
+ if(@_options[:command] == :info)
46
+ info_hash = {"name" => h._name, "type" => h._type, "emits" => h._emits}
47
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, @_info_file)
48
+ elsif(@_options[:command] == :execute and @_options[:name] == h._name)
49
+ pipe_name = @_options[:pipe]
50
+ c = Zillabyte::Harness::SpoutController.new(h, progress = Zillabyte::Common::Progress.new)
51
+ c.run(pipe_name)
52
+ end
53
+ end
54
+
55
+ def each
56
+ h = Zillabyte::Harness::Each.new()
57
+ yield(h)
58
+ Zillabyte::Harness::Helper.check_name("each", h._name, @_names)
59
+ if(@_branched)
60
+ Zillabyte::Harness::Helper.check_consumes(h, @_streams)
61
+ else
62
+ if(h._consumes)
63
+ h._consumes = nil
64
+ end
65
+ end
66
+ @_branched = Zillabyte::Harness::Helper.check_emits("each", h._emits, @_streams) || @_branched
67
+ @_nodes << h
68
+ if(@_options[:command] == :info)
69
+ info_hash = {"name" => h._name, "type" => h._type, "emits" => h._emits}
70
+ if(h._consumes)
71
+ info_hash["consumes"] = h._consumes
72
+ end
73
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, @_info_file)
74
+ elsif(@_options[:command] == :execute and @_options[:name] == h._name)
75
+ pipe_name = @_options[:pipe]
76
+ c = Zillabyte::Harness::EachController.new(h, progress = Zillabyte::Common::Progress.new)
77
+ c.run(pipe_name)
78
+ end
79
+ end
80
+
81
+ def group_by(fields)
82
+ h = Zillabyte::Harness::GroupBy.new(fields)
83
+ @_nodes << h
84
+ end
85
+
86
+ def aggregate
87
+ h = Zillabyte::Harness::Aggregate.new()
88
+ yield(h)
89
+ Zillabyte::Harness::Helper.check_name("aggregate", h._name, @_names)
90
+ @_branched = Zillabyte::Harness::Helper.check_emits("aggregate", h._emits, @_streams) || @_branched
91
+ @_nodes << h
92
+ if(@_options[:command] == :info)
93
+ info_hash = {"name" => h._name, "type" => h._type, "emits" => h._emits}
94
+ if(h._consumes)
95
+ info_hash["consumes"] = h._consumes
96
+ end
97
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, @_info_file)
98
+ elsif(@_options[:command] == :execute)
99
+ pipe_name = @_options[:pipe]
100
+ if(@_options[:name] == h._name+"_start")
101
+ c = Zillabyte::Harness::AggregateStartController.new(h, Zillabyte::Common::Progress.new)
102
+ elsif(@_options[:name] == h._name+"_aggregate")
103
+ c = Zillabyte::Harness::AggregateAggregateController.new(h, Zillabyte::Common::Progress.new)
104
+ elsif(@_options[:name] == h._name+"_complete")
105
+ c = Zillabyte::Harness::AggregateCompleteController.new(h, Zillabyte::Common::Progress.new)
106
+ end
107
+ c.run(pipe_name)
108
+ end
109
+ end
110
+
111
+ def sink
112
+ h = Zillabyte::Harness::Sink.new()
113
+ yield(h)
114
+ Zillabyte::Harness::Helper.check_sink(h, @_nodes)
115
+ if(@_branched)
116
+ Zillabyte::Harness::Helper.check_consumes(h, @_streams)
117
+ else
118
+ if(h._consumes)
119
+ h._consumes = nil
120
+ end
121
+ end
122
+ @_nodes << h
123
+ if(@_options[:command] == :info)
124
+ info_hash = {"name" => h._name, "type" => h._type, "columns" => h._columns}
125
+ if(h._consumes)
126
+ info_hash["consumes"] = h._consumes
127
+ end
128
+ Zillabyte::Harness::Helper.write_hash_to_file(info_hash, @_info_file)
129
+ end
130
+ end
131
+
132
+ end
@@ -0,0 +1,32 @@
1
+ class Tuple
2
+ attr_accessor :id, :component, :stream, :task, :values, :fields
3
+
4
+ def initialize(hash)
5
+ @hash = hash
6
+ end
7
+
8
+ def [](k)
9
+ values[k]
10
+ end
11
+
12
+ def values
13
+ @hash["tuple"]
14
+ end
15
+
16
+
17
+ def self.from_hash(hash)
18
+ begin
19
+ t = hash.fetch("tuple")
20
+ rescue Exception => e
21
+ fail 'Missing tuple field in emitted JSON object' + e.backtrace.join('\n')
22
+ return nil
23
+ end
24
+ begin
25
+ m = hash.fetch("meta")
26
+ rescue Exception => e
27
+ fail 'Missing meta field in emitted JSON object' + e.backtrace.join('\n')
28
+ return nil
29
+ end
30
+ Tuple.new(hash)
31
+ end
32
+ end
@@ -0,0 +1,3 @@
1
+ module Zillabyte
2
+ VERSION = "0.0.6" unless defined?(VERSION)
3
+ end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: zillabyte
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
+ platform: ruby
6
+ authors:
7
+ - zillabyte
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-10 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.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: zillabyte-cli
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: The Official Zillabyte Gem
56
+ email:
57
+ - gem@zillabyte.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ruby/lib/zillabyte/common/progress.rb
63
+ - ruby/lib/zillabyte/harness/aggregate.rb
64
+ - ruby/lib/zillabyte/harness/counter.rb
65
+ - ruby/lib/zillabyte/harness/each.rb
66
+ - ruby/lib/zillabyte/harness/groupby.rb
67
+ - ruby/lib/zillabyte/harness/helper.rb
68
+ - ruby/lib/zillabyte/harness/live_delegator.rb
69
+ - ruby/lib/zillabyte/harness/simple_function.rb
70
+ - ruby/lib/zillabyte/harness/simple_spout.rb
71
+ - ruby/lib/zillabyte/harness/sink.rb
72
+ - ruby/lib/zillabyte/harness/spout.rb
73
+ - ruby/lib/zillabyte/harness/topology.rb
74
+ - ruby/lib/zillabyte/harness/tuple.rb
75
+ - ruby/lib/zillabyte/harness.rb
76
+ - ruby/lib/zillabyte/version.rb
77
+ - ruby/lib/zillabyte.rb
78
+ - ruby/README.md
79
+ homepage: http://www.zillabyte.com
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - ruby/lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.0.7
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: The Official Zillabyte Gem
103
+ test_files: []