distribot 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +3 -0
  5. data/.travis.yml +10 -0
  6. data/Dockerfile +9 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +153 -0
  9. data/LICENSE +201 -0
  10. data/README.md +107 -0
  11. data/Rakefile +16 -0
  12. data/bin/distribot.flow-created +6 -0
  13. data/bin/distribot.flow-finished +6 -0
  14. data/bin/distribot.handler-finished +6 -0
  15. data/bin/distribot.phase-finished +6 -0
  16. data/bin/distribot.phase-started +6 -0
  17. data/bin/distribot.task-finished +6 -0
  18. data/distribot.gemspec +35 -0
  19. data/docker-compose.yml +29 -0
  20. data/examples/controller +168 -0
  21. data/examples/distribot.eye +49 -0
  22. data/examples/status +38 -0
  23. data/examples/worker +135 -0
  24. data/lib/distribot/connector.rb +162 -0
  25. data/lib/distribot/flow.rb +200 -0
  26. data/lib/distribot/flow_created_handler.rb +12 -0
  27. data/lib/distribot/flow_finished_handler.rb +12 -0
  28. data/lib/distribot/handler.rb +40 -0
  29. data/lib/distribot/handler_finished_handler.rb +29 -0
  30. data/lib/distribot/phase.rb +46 -0
  31. data/lib/distribot/phase_finished_handler.rb +19 -0
  32. data/lib/distribot/phase_handler.rb +15 -0
  33. data/lib/distribot/phase_started_handler.rb +69 -0
  34. data/lib/distribot/task_finished_handler.rb +37 -0
  35. data/lib/distribot/worker.rb +148 -0
  36. data/lib/distribot.rb +108 -0
  37. data/provision/nodes.sh +80 -0
  38. data/provision/templates/fluentd.conf +27 -0
  39. data/spec/distribot/bunny_connector_spec.rb +196 -0
  40. data/spec/distribot/connection_sharer_spec.rb +34 -0
  41. data/spec/distribot/connector_spec.rb +63 -0
  42. data/spec/distribot/flow_created_handler_spec.rb +32 -0
  43. data/spec/distribot/flow_finished_handler_spec.rb +32 -0
  44. data/spec/distribot/flow_spec.rb +661 -0
  45. data/spec/distribot/handler_finished_handler_spec.rb +112 -0
  46. data/spec/distribot/handler_spec.rb +32 -0
  47. data/spec/distribot/module_spec.rb +163 -0
  48. data/spec/distribot/multi_subscription_spec.rb +37 -0
  49. data/spec/distribot/phase_finished_handler_spec.rb +61 -0
  50. data/spec/distribot/phase_started_handler_spec.rb +150 -0
  51. data/spec/distribot/subscription_spec.rb +40 -0
  52. data/spec/distribot/task_finished_handler_spec.rb +71 -0
  53. data/spec/distribot/worker_spec.rb +281 -0
  54. data/spec/fixtures/simple_flow.json +49 -0
  55. data/spec/spec_helper.rb +74 -0
  56. metadata +371 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 15b7db8443141b8fdb898ed7b5dbda3874c7ae6e
4
+ data.tar.gz: 4b27c704d5596db1084f0c4d2a9bd55a372f7d92
5
+ SHA512:
6
+ metadata.gz: f8f6b34c21d0423669f5d2b1e65fd1e892458d8b13ac11f7e680b1f53ef822f98d5ea6461964e7cecf51c54f81bdf1c45ad52f7bca0e41131c61fa4538e125a0
7
+ data.tar.gz: 93ff7a788f203533a6430018c346c383096cec8f5318c5a2db01afd33e153de5d33c28c29281bf20379c24c2e5c1167df895bdd5b5e4f73b9c9caf88c3f8d836
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ coverage/
2
+ *.png
3
+ .vagrant
4
+ .byebug_history
5
+ cool/
6
+ ws/
7
+ bin/killer.rb
8
+ channel.rb
9
+ log/
10
+ tmp/
11
+ .env
12
+ *.gem
13
+
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format doc
2
+ --color
3
+ --tty
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ Documentation:
2
+ Enabled: false
3
+
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ ---
2
+
3
+ language: ruby
4
+ rvm: 2.0.0
5
+ before_install:
6
+ - gem install bundler --no-ri --no-rdoc
7
+ script: CODECLIMATE_REPO_TOKEN=e8e06f8d90a3cede40689f57ffa00ff3eb388b1b0d7d0d4c79796acf94908242 bundle && bundle exec rspec
8
+ addons:
9
+ code_climate:
10
+ repo_token: e8e06f8d90a3cede40689f57ffa00ff3eb388b1b0d7d0d4c79796acf94908242
data/Dockerfile ADDED
@@ -0,0 +1,9 @@
1
+
2
+ FROM ubuntu:14.04
3
+ RUN useradd -d /home/ubuntu -m -s /bin/bash ubuntu
4
+ ADD ./ /var/www/distribot
5
+ RUN echo "ubuntu:changeme" | chpasswd
6
+ RUN echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
7
+ RUN sed -i s#/home/ubuntu:/bin/false#/home/ubuntu:/bin/bash# /etc/passwd
8
+ USER ubuntu
9
+ WORKDIR /var/www/distribot
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+
2
+ source 'https://rubygems.org'
3
+
4
+ gem 'codeclimate-test-reporter', group: :test, require: nil
5
+
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,153 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ distribot (0.1.1)
5
+ activesupport
6
+ bunny
7
+ concurrent-ruby
8
+ dotenv
9
+ eye
10
+ logstash-logger
11
+ redis
12
+ semantic
13
+ wrest
14
+
15
+ GEM
16
+ remote: https://rubygems.org/
17
+ specs:
18
+ activesupport (4.2.5)
19
+ i18n (~> 0.7)
20
+ json (~> 1.7, >= 1.7.7)
21
+ minitest (~> 5.1)
22
+ thread_safe (~> 0.3, >= 0.3.4)
23
+ tzinfo (~> 1.1)
24
+ addressable (2.3.8)
25
+ amq-protocol (2.0.1)
26
+ ast (2.1.0)
27
+ astrolabe (1.3.1)
28
+ parser (~> 2.2)
29
+ builder (3.2.2)
30
+ bunny (2.2.2)
31
+ amq-protocol (>= 2.0.1)
32
+ byebug (8.2.0)
33
+ celluloid (0.17.2)
34
+ celluloid-essentials
35
+ celluloid-extras
36
+ celluloid-fsm
37
+ celluloid-pool
38
+ celluloid-supervision
39
+ timers (>= 4.1.1)
40
+ celluloid-essentials (0.20.5)
41
+ timers (>= 4.1.1)
42
+ celluloid-extras (0.20.5)
43
+ timers (>= 4.1.1)
44
+ celluloid-fsm (0.20.5)
45
+ timers (>= 4.1.1)
46
+ celluloid-io (0.17.2)
47
+ celluloid (>= 0.17.2)
48
+ nio4r (>= 1.1)
49
+ timers (>= 4.1.1)
50
+ celluloid-pool (0.20.5)
51
+ timers (>= 4.1.1)
52
+ celluloid-supervision (0.20.5)
53
+ timers (>= 4.1.1)
54
+ codeclimate-test-reporter (0.4.8)
55
+ simplecov (>= 0.7.1, < 1.0.0)
56
+ concurrent-ruby (1.0.0)
57
+ crack (0.4.2)
58
+ safe_yaml (~> 1.0.0)
59
+ diff-lcs (1.2.5)
60
+ docile (1.1.5)
61
+ dotenv (2.1.0)
62
+ eye (0.8)
63
+ celluloid (~> 0.17.2)
64
+ celluloid-io (~> 0.17.0)
65
+ sigar (~> 0.7.3)
66
+ state_machine
67
+ thor
68
+ faker (1.6.1)
69
+ i18n (~> 0.5)
70
+ hashdiff (0.2.3)
71
+ hitimes (1.2.3)
72
+ i18n (0.7.0)
73
+ json (1.8.3)
74
+ logstash-event (1.2.02)
75
+ logstash-logger (0.15.2)
76
+ logstash-event (~> 1.2)
77
+ stud
78
+ minitest (5.8.3)
79
+ multi_json (1.11.2)
80
+ nio4r (1.2.0)
81
+ parser (2.2.3.0)
82
+ ast (>= 1.1, < 3.0)
83
+ powerpack (0.1.1)
84
+ rainbow (2.0.0)
85
+ rake (10.4.2)
86
+ redis (3.2.2)
87
+ rspec (3.4.0)
88
+ rspec-core (~> 3.4.0)
89
+ rspec-expectations (~> 3.4.0)
90
+ rspec-mocks (~> 3.4.0)
91
+ rspec-core (3.4.1)
92
+ rspec-support (~> 3.4.0)
93
+ rspec-expectations (3.4.0)
94
+ diff-lcs (>= 1.2.0, < 2.0)
95
+ rspec-support (~> 3.4.0)
96
+ rspec-mocks (3.4.0)
97
+ diff-lcs (>= 1.2.0, < 2.0)
98
+ rspec-support (~> 3.4.0)
99
+ rspec-support (3.4.1)
100
+ rubocop (0.35.1)
101
+ astrolabe (~> 1.3)
102
+ parser (>= 2.2.3.0, < 3.0)
103
+ powerpack (~> 0.1)
104
+ rainbow (>= 1.99.1, < 3.0)
105
+ ruby-progressbar (~> 1.7)
106
+ tins (<= 1.6.0)
107
+ ruby-progressbar (1.7.5)
108
+ safe_yaml (1.0.4)
109
+ semantic (1.4.1)
110
+ shoulda-matchers (3.0.1)
111
+ activesupport (>= 4.0.0)
112
+ sigar (0.7.3)
113
+ simplecov (0.10.0)
114
+ docile (~> 1.1.0)
115
+ json (~> 1.8)
116
+ simplecov-html (~> 0.10.0)
117
+ simplecov-html (0.10.0)
118
+ state_machine (1.2.0)
119
+ stud (0.0.22)
120
+ thor (0.19.1)
121
+ thread_safe (0.3.5)
122
+ timers (4.1.1)
123
+ hitimes
124
+ tins (1.6.0)
125
+ tzinfo (1.2.2)
126
+ thread_safe (~> 0.1)
127
+ webmock (1.22.3)
128
+ addressable (>= 2.3.6)
129
+ crack (>= 0.3.2)
130
+ hashdiff
131
+ wrest (2.1.2)
132
+ activesupport (~> 4)
133
+ builder (> 2.0)
134
+ multi_json (~> 1.0)
135
+
136
+ PLATFORMS
137
+ ruby
138
+
139
+ DEPENDENCIES
140
+ bundler (~> 1.7)
141
+ byebug
142
+ codeclimate-test-reporter
143
+ distribot!
144
+ faker
145
+ rake (~> 10.0)
146
+ rspec
147
+ rubocop
148
+ shoulda-matchers
149
+ simplecov
150
+ webmock
151
+
152
+ BUNDLED WITH
153
+ 1.11.2
data/LICENSE ADDED
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "{}"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright {yyyy} {name of copyright owner}
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,107 @@
1
+
2
+ # Distribot
3
+
4
+ [![Code Climate](https://codeclimate.com/github/jdrago999/distribot/badges/gpa.svg)](https://codeclimate.com/github/jdrago999/distribot)
5
+ [![Test Coverage](https://codeclimate.com/github/jdrago999/distribot/badges/coverage.svg)](https://codeclimate.com/github/jdrago999/distribot/coverage)
6
+
7
+ Work scheduling and distribution engine.
8
+
9
+ ## Features
10
+
11
+ * Built on RabbitMQ and Redis.
12
+
13
+ ![robot](https://cdn2.iconfinder.com/data/icons/windows-8-metro-style/512/robot.png)
14
+
15
+ ## Installation
16
+
17
+ ### In your Gemfile
18
+
19
+ ```ruby
20
+ gem 'distribot', git: 'git@github.com:jdrago999/distribot.git'
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ ```ruby
26
+ require 'distribot'
27
+
28
+ Distribot.configure do |config|
29
+ config.redis_url = ENV['DISTRIBOT_REDIS_URL']
30
+ config.rabbitmq_url = ENV['DISTRIBOT_RABBITMQ_URL']
31
+ end
32
+ ```
33
+
34
+ ```json
35
+ {
36
+ "name": "search",
37
+ "phases": [
38
+ {
39
+ "name": "pending",
40
+ "is_initial": true,
41
+ "transitions_to": "searching"
42
+ },
43
+ {
44
+ "name": "searching",
45
+ "transitions_to": "fetching-pages",
46
+ "handlers": [
47
+ "GoogleSearcher",
48
+ "BingSearcher"
49
+ ]
50
+ },
51
+ {
52
+ "name": "fetching-pages",
53
+ "transitions_to": "finished",
54
+ "handlers": [
55
+ {
56
+ "name": "PageDownloader",
57
+ "version": "~> 1.2"
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ "name": "finished",
63
+ "is_final": true
64
+ }
65
+ ]
66
+ }
67
+ ```
68
+
69
+ # TODO
70
+
71
+ ### Features
72
+
73
+ * ~~Ability to control running flows~~
74
+ * ~~cancel~~
75
+ * ~~pause~~
76
+ * ~~resume~~
77
+ * ~~Handler versioning~~
78
+ * ~~semver~~
79
+ * ~~specify handler versions in flow definitions~~
80
+ * ~~similar to gemfile~~
81
+
82
+ ### Organization
83
+
84
+ * Break this project into smaller parts.
85
+ * gem code
86
+ * ~~should not require infrastructure to run tests~~
87
+ * ~~enough infrastructure to run the code~~
88
+ * small running environment which uses the gem
89
+ * engine
90
+ * worker
91
+ * controller
92
+ * ~~infra~~
93
+ * ~~redis~~
94
+ * ~~rabbitmq~~
95
+ * ~~elasticsearch~~
96
+ * ~~kibana~~
97
+ * ~~status dashboard~~
98
+ * ~~show running flows~~
99
+ * ~~create a new flow~~
100
+
101
+
102
+ ## Notes
103
+
104
+ Clear out queues:
105
+
106
+ `sudo rabbitmqctl list_queues | grep distribot | awk '{print $1}' | xargs -I qn rabbitmqadmin delete queue name=qn`
107
+
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ include Rake::DSL
2
+
3
+ task :environment do
4
+ require 'bundler/setup'
5
+ lib = File.expand_path('../lib', __FILE__)
6
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
7
+ require 'distribot'
8
+ end
9
+
10
+ desc 'enter a REPL console within this project environment'
11
+ task :console => :environment do
12
+ require 'irb'
13
+ require 'irb/completion'
14
+ ARGV.clear
15
+ IRB.start
16
+ end
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'distribot'
4
+
5
+ Distribot.logger.info Distribot::FlowCreatedHandler.new
6
+ sleep
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'distribot'
4
+
5
+ Distribot.logger.info Distribot::FlowFinishedHandler.new
6
+ sleep
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'distribot'
4
+
5
+ Distribot.logger.info Distribot::HandlerFinishedHandler.new
6
+ sleep
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'distribot'
4
+
5
+ Distribot.logger.info Distribot::PhaseFinishedHandler.new
6
+ sleep
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'distribot'
4
+
5
+ Distribot.logger.info Distribot::PhaseStartedHandler.new
6
+ sleep
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'distribot'
4
+
5
+ Distribot.logger.info Distribot::TaskFinishedHandler.new
6
+ sleep
data/distribot.gemspec ADDED
@@ -0,0 +1,35 @@
1
+ Gem::Specification.new do |spec|
2
+ spec.name = 'distribot'
3
+ spec.version = '0.1.1'
4
+ spec.authors = ['John Drago']
5
+ spec.email = 'jdrago.999@gmail.com'
6
+ spec.homepage = 'https://github.com/jdrago999/distribot'
7
+ spec.summary = 'Distributed flow engine'
8
+ spec.description = 'Distributed flow engine based on redis and rabbitmq'
9
+ spec.required_rubygems_version = '>= 1.3.6'
10
+
11
+ spec.files = `git ls-files -z`.split("\x0")
12
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
13
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
14
+ spec.require_paths = ['lib']
15
+
16
+ spec.add_development_dependency 'bundler', '~> 1.7'
17
+ spec.add_development_dependency 'rake', '~> 10.0'
18
+ spec.add_development_dependency 'rspec'
19
+ spec.add_development_dependency 'shoulda-matchers'
20
+ spec.add_development_dependency 'byebug'
21
+ spec.add_development_dependency 'simplecov'
22
+ spec.add_development_dependency 'faker'
23
+ spec.add_development_dependency 'webmock'
24
+ spec.add_development_dependency 'rubocop'
25
+
26
+ spec.add_dependency 'eye'
27
+ spec.add_dependency 'dotenv'
28
+ spec.add_dependency 'activesupport'
29
+ spec.add_dependency 'bunny'
30
+ spec.add_dependency 'redis'
31
+ spec.add_dependency 'logstash-logger'
32
+ spec.add_dependency 'wrest'
33
+ spec.add_dependency 'semantic'
34
+ spec.add_dependency 'concurrent-ruby'
35
+ end
@@ -0,0 +1,29 @@
1
+
2
+ infra:
3
+ image: distribot/infra:latest
4
+ environment:
5
+ - TERM=xterm
6
+ - RABBITMQ_USERNAME=distribot
7
+ - RABBITMQ_PASSWORD=distribot
8
+ working_dir: /var/www/distribot
9
+ command: bash -c "./provision/infra.sh && tail -f /dev/null"
10
+ ports:
11
+ - 5672
12
+ - 15672
13
+ - 6379
14
+ - 443
15
+
16
+ code:
17
+ build: .
18
+ dockerfile: ./Dockerfile
19
+ volumes:
20
+ - ./:/var/www/distribot
21
+ environment:
22
+ - TERM=xterm
23
+ - INFRA_HOST=infra_1
24
+ - RABBITMQ_USERNAME=distribot
25
+ - RABBITMQ_PASSWORD=distribot
26
+ working_dir: /var/www/distribot
27
+ links:
28
+ - infra
29
+ command: bash -c "./provision/nodes.sh && tail -f /dev/null"