glider 0.1.0 → 0.1.1

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: 4aa4101f0537f562aa326ba31408d9ff2035b08a
4
- data.tar.gz: 9cf46b6473470aa0029b7b599c8b98763c228abb
3
+ metadata.gz: 56ade2823d9195bba93e1a16d53668fbd5ab541b
4
+ data.tar.gz: fed6293814d10e220b682c25e9dfe4c254df4f2a
5
5
  SHA512:
6
- metadata.gz: 14458f9f29b9c9f1ab8032d73ae189811c1cfe6448a7e5b712545df7764783ca301ba722defe2076950d6e32f0109b602162e7b697b25293a5b068ac3f39879f
7
- data.tar.gz: 72306154571324a022b22c3e09ddee1778602b4362e8cf985dee25e8e9a74f7a71803aa6fe2f3d600938b4c6447121bad60025ad5990b026ba27730efe6601f4
6
+ metadata.gz: 9e0293cddb527f040d040deb4a12915dbd0375c933ae573deeb313487bf64add68ba8452df80f57beae27b0aec6250414d6d3c8be69b112e39e55a5c9b532944
7
+ data.tar.gz: 2f667877f767f44b8a9ee09617e10ba6688700719146d2eb0b875b6737f0d9ebfda00f8f56d2964a8cdd4720dafb1a860b95ad844ad8affdd8a30fe15ebc3e47
data/Gemfile CHANGED
@@ -1,6 +1,11 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
- gem 'pry'
4
- gem 'aws-sdk'
5
- gem 'colorize'
6
- gem 'activesupport', '~> 4.0.1', require: 'active_support/inflector'
3
+ gem 'aws-sdk', '>= 1.0.0'
4
+ gem 'activesupport', '>= 4.0.0', require: 'active_support/inflector'
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "bundler", "~> 1.0"
10
+ gem "jeweler", "~> 1.8.7"
11
+ end
@@ -7,24 +7,55 @@ GEM
7
7
  multi_json (~> 1.3)
8
8
  thread_safe (~> 0.1)
9
9
  tzinfo (~> 0.3.37)
10
+ addressable (2.3.5)
10
11
  atomic (1.1.14)
11
- aws-sdk (1.26.0)
12
+ aws-sdk (1.28.1)
12
13
  json (~> 1.4)
13
- nokogiri (>= 1.4.4, < 1.6.0)
14
+ nokogiri (>= 1.4.4)
14
15
  uuidtools (~> 2.1)
15
- coderay (1.0.9)
16
- colorize (0.6.0)
16
+ builder (3.2.2)
17
+ faraday (0.8.8)
18
+ multipart-post (~> 1.2.0)
19
+ git (1.2.6)
20
+ github_api (0.10.1)
21
+ addressable
22
+ faraday (~> 0.8.1)
23
+ hashie (>= 1.2)
24
+ multi_json (~> 1.4)
25
+ nokogiri (~> 1.5.2)
26
+ oauth2
27
+ hashie (2.0.5)
28
+ highline (1.6.20)
29
+ httpauth (0.2.0)
17
30
  i18n (0.6.5)
31
+ jeweler (1.8.8)
32
+ builder
33
+ bundler (~> 1.0)
34
+ git (>= 1.2.5)
35
+ github_api (= 0.10.1)
36
+ highline (>= 1.6.15)
37
+ nokogiri (= 1.5.10)
38
+ rake
39
+ rdoc
18
40
  json (1.8.1)
19
- method_source (0.8.2)
41
+ jwt (0.1.8)
42
+ multi_json (>= 1.5)
20
43
  minitest (4.7.5)
21
44
  multi_json (1.8.2)
45
+ multi_xml (0.5.5)
46
+ multipart-post (1.2.0)
22
47
  nokogiri (1.5.10)
23
- pry (0.9.12.2)
24
- coderay (~> 1.0.5)
25
- method_source (~> 0.8)
26
- slop (~> 3.4)
27
- slop (3.4.6)
48
+ oauth2 (0.9.2)
49
+ faraday (~> 0.8)
50
+ httpauth (~> 0.2)
51
+ jwt (~> 0.1.4)
52
+ multi_json (~> 1.0)
53
+ multi_xml (~> 0.5)
54
+ rack (~> 1.2)
55
+ rack (1.5.2)
56
+ rake (10.1.0)
57
+ rdoc (4.0.1)
58
+ json (~> 1.4)
28
59
  thread_safe (0.1.3)
29
60
  atomic
30
61
  tzinfo (0.3.38)
@@ -34,7 +65,7 @@ PLATFORMS
34
65
  ruby
35
66
 
36
67
  DEPENDENCIES
37
- activesupport (~> 4.0.1)
38
- aws-sdk
39
- colorize
40
- pry
68
+ activesupport (>= 4.0.0)
69
+ aws-sdk (>= 1.0.0)
70
+ bundler (~> 1.0)
71
+ jeweler (~> 1.8.7)
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "glider"
18
+ gem.homepage = "http://github.com/vlipco/glider"
19
+ gem.license = "MIT"
20
+ gem.summary = "Minimal opinionated wrapper around SimpleWorkflow"
21
+ gem.description = "Minimal opinionated wrapper around SimpleWorkflow"
22
+ gem.email = "david@vlipco.co"
23
+ gem.authors = ["David Pelaez"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ #require 'rake/testtask'
29
+ #Rake::TestTask.new(:test) do |test|
30
+ # test.libs << 'lib' << 'test'
31
+ # test.pattern = 'test/**/test_*.rb'
32
+ # test.verbose = true
33
+ #end
34
+ #
35
+ #task :default => :test
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.1
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'pry'
4
+ gem 'aws-sdk'
5
+ gem 'colorize'
6
+ gem 'glider', '0.1.0'#, path: '../pkg/'
@@ -0,0 +1,43 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ activesupport (4.0.1)
5
+ i18n (~> 0.6, >= 0.6.4)
6
+ minitest (~> 4.2)
7
+ multi_json (~> 1.3)
8
+ thread_safe (~> 0.1)
9
+ tzinfo (~> 0.3.37)
10
+ atomic (1.1.14)
11
+ aws-sdk (1.26.0)
12
+ json (~> 1.4)
13
+ nokogiri (>= 1.4.4, < 1.6.0)
14
+ uuidtools (~> 2.1)
15
+ coderay (1.1.0)
16
+ colorize (0.6.0)
17
+ glider (0.1.0)
18
+ activesupport (>= 4.0.0)
19
+ aws-sdk (>= 1.0.0)
20
+ i18n (0.6.5)
21
+ json (1.8.1)
22
+ method_source (0.8.2)
23
+ minitest (4.7.5)
24
+ multi_json (1.8.2)
25
+ nokogiri (1.5.10)
26
+ pry (0.9.12.4)
27
+ coderay (~> 1.0)
28
+ method_source (~> 0.8)
29
+ slop (~> 3.4)
30
+ slop (3.4.7)
31
+ thread_safe (0.1.3)
32
+ atomic
33
+ tzinfo (0.3.38)
34
+ uuidtools (2.1.4)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ aws-sdk
41
+ colorize
42
+ glider (= 0.1.0)
43
+ pry
@@ -0,0 +1,19 @@
1
+ require_relative 'shared_boot'
2
+
3
+ class MySWF < Glider::Component
4
+
5
+ workers 10
6
+ domain :gt3
7
+
8
+ register_activity :hello_world, '1.5'
9
+
10
+ def hello_world(input)
11
+ $logger.warn "Executing hello_world."
12
+ sleep 2
13
+ $logger.warn "Completed hello_world."
14
+ "Hello!"
15
+ end
16
+
17
+ end
18
+
19
+ Glider::ProcessManager.start_workers
@@ -0,0 +1,40 @@
1
+ require 'logger'
2
+ require 'rubygems'
3
+ require 'bundler/setup'
4
+ Bundler.require :default
5
+
6
+ $logger = Logger.new STDOUT
7
+ $logger.level = Logger::INFO
8
+
9
+ $logger.formatter = proc do |severity, datetime, progname, msg|
10
+ color = case severity.to_s
11
+ when "INFO"
12
+ :blue
13
+ when "WARN"
14
+ :yellow
15
+ when "ERROR"
16
+ :red
17
+ else
18
+ :default
19
+ end
20
+
21
+ severity == "NONE" ? "\n" : "#{Process.pid} #{severity} #{datetime.strftime '%H:%M:%S'} \t#{msg.to_s.colorize color}\n"
22
+ end
23
+
24
+ env_crendentials = (AWS::Core::CredentialProviders::ENVProvider.new "AWS").get_credentials
25
+
26
+ if env_crendentials[:access_key_id] && env_crendentials[:secret_access_key]
27
+
28
+ AWS.config({ :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
29
+ :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
30
+ :dynamo_db_endpoint => 'dynamodb.us-east-1.amazonaws.com',
31
+ :log_level => :debug })
32
+ else
33
+
34
+ AWS.config(:credential_provider => AWS::Core::CredentialProviders::EC2Provider.new,
35
+ :dynamo_db_endpoint => 'dynamodb.us-east-1.amazonaws.com',
36
+ :log_level => :debug)
37
+
38
+ end
39
+
40
+
@@ -0,0 +1,28 @@
1
+ require_relative 'shared_boot'
2
+
3
+ def trigger
4
+ puts "TRIGGER!"
5
+ execution = Glider.execute :gt3, :say_hi, '1.5', "ALOHA"
6
+ #Glider.signal :glider_test, execution.workflow_id, :test
7
+ return execution
8
+ end
9
+
10
+ def massive_trigger
11
+ threads = []
12
+ 4.times do
13
+ threads << Thread.new do
14
+ #begin
15
+ 50.times do
16
+ trigger
17
+ end
18
+ #ensure
19
+ #exit 0
20
+ #end
21
+ end
22
+ end
23
+ threads.map &:join
24
+ end
25
+ $logger.info "call trigger to execute :say_hi"
26
+
27
+ pry
28
+
@@ -0,0 +1,23 @@
1
+ require_relative 'shared_boot'
2
+
3
+ class MySWF < Glider::Component
4
+
5
+ workers 10
6
+ domain :gt3
7
+
8
+ register_workflow :say_hi, '1.5'
9
+
10
+ def say_hi(event_name, event, data)
11
+ case event_name
12
+ when :workflow_execution_started, :hello_world_activity_timed_out
13
+ act = {name: 'hello_world', version: '1.5'}
14
+ task.schedule_activity_task act
15
+ when :test_signal
16
+ # do what?
17
+ when :hello_world_activity_completed
18
+ task.complete_workflow_execution result: data
19
+ end
20
+ end
21
+ end
22
+
23
+ Glider::ProcessManager.start_workers
@@ -1,6 +1,9 @@
1
- $LOAD_PATH << File.dirname(__FILE__)
1
+ #$LOAD_PATH << File.dirname(__FILE__)
2
2
 
3
- require 'pry'
3
+ #require 'active_support/all'
4
+ require 'aws-sdk'
5
+ require 'active_support/inflector'
6
+ #require 'act'
4
7
 
5
8
  require 'glider/utils'
6
9
 
@@ -0,0 +1,80 @@
1
+ # singleton class handling all children, useful for daemonization
2
+
3
+ module Glider
4
+
5
+ module ProcessManager
6
+
7
+ class << self
8
+
9
+ # tracks forks/threads started as workers
10
+ def children
11
+ @children ||= []
12
+ end
13
+
14
+ def kill_children
15
+ if $leader_pid == Process.pid
16
+ @end_monit = true
17
+ children.each do |child|
18
+ begin
19
+ pid, worker_proc = child
20
+ Process.kill('USR1', pid)
21
+ rescue Errno::ESRCH => e
22
+ # process already killed
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ def workers
29
+ @workers ||= []
30
+ end
31
+
32
+
33
+ def monitor_children
34
+ loop do
35
+ break if @end_monit
36
+ children.each_with_index do |child, index|
37
+ pid, worker_proc = child
38
+ begin
39
+ Process.kill 0, pid
40
+ rescue Errno::ESRCH
41
+ children.delete_at index
42
+ $logger.info "Restarting worker...."
43
+ start worker_proc
44
+ end
45
+ end
46
+ sleep 1
47
+ end
48
+ Glider::ProcessManager.kill_children
49
+ end
50
+
51
+ def register_worker(worker_proc)
52
+ workers << worker_proc
53
+ end
54
+
55
+ def start(worker_proc)
56
+ pid = fork do
57
+ worker_proc.call
58
+ end
59
+ children << [pid, worker_proc]
60
+ end
61
+
62
+ def start_workers
63
+ $leader_pid ||= Process.pid
64
+ Signal.trap('TERM') {Glider::ProcessManager.kill_children}
65
+ Signal.trap('INT') {Glider::ProcessManager.kill_children}
66
+ # todo start workers as forks
67
+ @workers.each do |worker_proc|
68
+ start worker_proc
69
+ end
70
+ Thread.new do
71
+ monitor_children
72
+ end
73
+ Process.waitall
74
+ end
75
+
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -3,8 +3,10 @@
3
3
  module Glider
4
4
 
5
5
  class Component
6
-
7
-
6
+ #require 'rubygems'
7
+ #require 'active_support'
8
+ #require 'active_support/inflector'
9
+
8
10
 
9
11
  class << self
10
12
  def workflows
@@ -142,5 +144,4 @@ module Glider
142
144
  end
143
145
 
144
146
  end
145
-
146
147
  end
data/readme.md CHANGED
@@ -1,36 +1,18 @@
1
- Useful documentation links:
1
+ = glider
2
2
 
3
- http://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html
3
+ Description goes here.
4
4
 
5
- http://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html
5
+ == Contributing to glider
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
9
+ * Fork the project.
10
+ * Start a feature/bugfix branch.
11
+ * Commit and push until you are happy with your contribution.
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
6
14
 
7
- http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dev-workflow-exec-lifecycle.html
15
+ == Copyright
8
16
 
9
- USEFUL TO DECIDE WHAT TO PASS TO THE METHOD
17
+ Released by Vlipco under The MIT License
10
18
 
11
- INFO 15:16:05 Starting workers for ["hello_world-1.0"] and ["say_hi-1.0"]
12
- INFO 15:16:05 Startig worker for say_hi (class: MySWF)
13
- INFO 15:16:42 Processing decision task workflow_id=bb235559-9ee6-4a80-96c5-9eed168046d5
14
- INFO 15:16:42 say_hi event=workflow_execution_started data=ALOHA
15
- WARN 15:16:42 No result for decision_task_scheduled, attributes: {:task_list=>"say_hi", :start_to_close_timeout=>5}
16
- WARN 15:16:42 say_hi event=decision_task_scheduled data=
17
- WARN 15:16:42 No result for decision_task_started, attributes: {:identity=>"dmb.local:49424", :scheduled_event_id=>2}
18
- WARN 15:16:42 say_hi event=decision_task_started data=
19
- WARN 15:16:42 No result for decision_task_timed_out, attributes: {:timeout_type=>"START_TO_CLOSE", :scheduled_event_id=>2, :started_event_id=>3}
20
- WARN 15:16:42 say_hi event=decision_task_timed_out data=
21
- WARN 15:16:42 No result for decision_task_scheduled, attributes: {:task_list=>"say_hi", :start_to_close_timeout=>5}
22
- WARN 15:16:42 say_hi event=decision_task_scheduled data=
23
- WARN 15:16:42 No result for decision_task_started, attributes: {:identity=>"dmb.local:49461", :scheduled_event_id=>5}
24
- WARN 15:16:42 say_hi event=decision_task_started data=
25
- DEBUG 15:16:42 [{:decision_type=>"CompleteWorkflowExecution", :complete_workflow_execution_decision_attributes=>{}}]
26
-
27
- terminations dont trigger decisions
28
-
29
-
30
- TODO:
31
-
32
- Proces monitoring
33
- activity task signaling
34
-
35
- Exec scoped logger
36
- instance methods
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Pelaez
@@ -70,19 +70,26 @@ description: Minimal opinionated wrapper around SimpleWorkflow
70
70
  email: david@vlipco.co
71
71
  executables: []
72
72
  extensions: []
73
- extra_rdoc_files:
74
- - README.md
73
+ extra_rdoc_files: []
75
74
  files:
76
75
  - Gemfile
77
76
  - Gemfile.lock
77
+ - Rakefile
78
+ - VERSION
78
79
  - docs/event_names.md
80
+ - examples/Gemfile
81
+ - examples/Gemfile.lock
82
+ - examples/activity.rb
83
+ - examples/shared_boot.rb
84
+ - examples/trigger.rb
85
+ - examples/workflow.rb
79
86
  - lib/glider.rb
80
87
  - lib/glider/activities.rb
81
88
  - lib/glider/component.rb
89
+ - lib/glider/process_manager.rb
82
90
  - lib/glider/utils.rb
83
91
  - lib/glider/workflows.rb
84
92
  - readme.md
85
- - README.md
86
93
  homepage: http://github.com/vlipco/glider
87
94
  licenses:
88
95
  - MIT
data/README.md DELETED
@@ -1,36 +0,0 @@
1
- Useful documentation links:
2
-
3
- http://docs.aws.amazon.com/amazonswf/latest/apireference/API_RespondDecisionTaskCompleted.html
4
-
5
- http://docs.aws.amazon.com/amazonswf/latest/apireference/API_HistoryEvent.html
6
-
7
- http://docs.aws.amazon.com/amazonswf/latest/developerguide/swf-dev-workflow-exec-lifecycle.html
8
-
9
- USEFUL TO DECIDE WHAT TO PASS TO THE METHOD
10
-
11
- INFO 15:16:05 Starting workers for ["hello_world-1.0"] and ["say_hi-1.0"]
12
- INFO 15:16:05 Startig worker for say_hi (class: MySWF)
13
- INFO 15:16:42 Processing decision task workflow_id=bb235559-9ee6-4a80-96c5-9eed168046d5
14
- INFO 15:16:42 say_hi event=workflow_execution_started data=ALOHA
15
- WARN 15:16:42 No result for decision_task_scheduled, attributes: {:task_list=>"say_hi", :start_to_close_timeout=>5}
16
- WARN 15:16:42 say_hi event=decision_task_scheduled data=
17
- WARN 15:16:42 No result for decision_task_started, attributes: {:identity=>"dmb.local:49424", :scheduled_event_id=>2}
18
- WARN 15:16:42 say_hi event=decision_task_started data=
19
- WARN 15:16:42 No result for decision_task_timed_out, attributes: {:timeout_type=>"START_TO_CLOSE", :scheduled_event_id=>2, :started_event_id=>3}
20
- WARN 15:16:42 say_hi event=decision_task_timed_out data=
21
- WARN 15:16:42 No result for decision_task_scheduled, attributes: {:task_list=>"say_hi", :start_to_close_timeout=>5}
22
- WARN 15:16:42 say_hi event=decision_task_scheduled data=
23
- WARN 15:16:42 No result for decision_task_started, attributes: {:identity=>"dmb.local:49461", :scheduled_event_id=>5}
24
- WARN 15:16:42 say_hi event=decision_task_started data=
25
- DEBUG 15:16:42 [{:decision_type=>"CompleteWorkflowExecution", :complete_workflow_execution_decision_attributes=>{}}]
26
-
27
- terminations dont trigger decisions
28
-
29
-
30
- TODO:
31
-
32
- Proces monitoring
33
- activity task signaling
34
-
35
- Exec scoped logger
36
- instance methods