quick_utils 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+
6
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in quick_utils.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,63 @@
1
+ require 'rubygems'
2
+ require 'daemons'
3
+ require 'optparse'
4
+ require 'logger'
5
+
6
+ module QuickUtils
7
+ class RailsDaemon
8
+
9
+ @@proc_name = ''
10
+ @@log_file = ''
11
+ @@rails_root = Dir.pwd
12
+
13
+ def self.set_process_name(pname)
14
+ @@proc_name = pname
15
+ @@log_file = File.join(@@rails_root, 'log', "#{@@proc_name}.log")
16
+ end
17
+
18
+ def self.set_rails_root(dir)
19
+ @@rails_root = dir
20
+ end
21
+
22
+ def initialize(args)
23
+ @options = {:worker_count => 1, :environment => :development, :delay => 5}
24
+
25
+ optparse = OptionParser.new do |opts|
26
+ opts.banner = "Usage: #{File.basename($0)} [options] start|stop|restart|run"
27
+
28
+ opts.on('-h', '--help', 'Show this message') do
29
+ puts opts
30
+ exit 1
31
+ end
32
+ opts.on('-e', '--environment=NAME', 'Specifies the environment to run this apn_sender under ([development]/production).') do |e|
33
+ @options[:environment] = e
34
+ end
35
+ opts.on('-n', '--number-of-workers=WORKERS', "Number of unique workers to spawn") do |worker_count|
36
+ @options[:worker_count] = worker_count.to_i rescue 1
37
+ end
38
+ opts.on('-v', '--verbose', "Turn on verbose mode") do
39
+ @options[:verbose] = true
40
+ end
41
+ opts.on('-d', '--delay=D', "Delay between rounds of work (seconds)") do |d|
42
+ @options[:delay] = d
43
+ end
44
+ end
45
+
46
+ # If no arguments, give help screen
47
+ @args = optparse.parse!(args.empty? ? ['-h'] : args)
48
+ end
49
+
50
+ def daemonize
51
+ @options[:worker_count].times do |worker_index|
52
+ process_name = @options[:worker_count] == 1 ? @@proc_name : "#{@@proc_name}.#{worker_index}"
53
+ Daemons.run_proc(process_name, :dir => "#{@@rails_root}/tmp/pids", :dir_mode => :normal, :ARGV => @args) do |*args|
54
+ run process_name
55
+ end
56
+ end
57
+ end
58
+
59
+ def run(worker_name = nil)
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,19 @@
1
+ module QuickUtils
2
+ class RakeDaemon < RailsDaemon
3
+
4
+ @@rake_task = ''
5
+
6
+ def self.set_rake_task(task)
7
+ @@rake_task = task
8
+ end
9
+
10
+ def run(worker_name = nil)
11
+
12
+ ENV['RAILS_ENV'] = @options[:environment].to_s
13
+ ENV['LOG_FILE'] = @@log_file
14
+
15
+ system "cd #{@@rails_root}; exec rake RAILS_ENV='#{@options[:environment].to_s}' LOG_FILE='#{@@log_file}' #{@@rake_task}"
16
+
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ module QuickUtils
2
+ class ThreadRunner
3
+
4
+ def self.run(dataset, nthreads)
5
+ threads = []
6
+ count = dataset.size
7
+ nthreads = 1 if count < nthreads
8
+ bin_size = count / nthreads
9
+ puts "Dividing #{count} items into sizes of #{bin_size} for #{nthreads} threads."
10
+ t = 0
11
+ while t < nthreads do
12
+ subset = dataset[t*bin_size..t*bin_size+bin_size - 1]
13
+ threads << Thread.new(subset) do |cs|
14
+ yield cs
15
+ end
16
+ t = t + 1
17
+ end
18
+ threads.each {|t| t.join}
19
+ end
20
+
21
+ end
22
+ end
23
+
@@ -0,0 +1,3 @@
1
+ module QuickUtils
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,32 @@
1
+ module QuickUtils
2
+ class Watcher < RailsDaemon
3
+ def self.set_app_name(app_name)
4
+ @@main_proc = app_name
5
+ end
6
+
7
+ def self.set_proc_list(plist)
8
+ @@processes = plist
9
+ end
10
+
11
+ def run(worker_name = nil)
12
+
13
+ logger = Logger.new(@@log_file)
14
+
15
+ while true
16
+ # get num thins running
17
+ thin_num = `ps -ef | grep "thin" | grep "#{@@main_proc}" | grep -v "grep" | wc | awk '{print $1}'`.to_i
18
+ needs_restart = false
19
+ @@processes.each do |proc|
20
+ pnum = `ps -ef | grep "#{proc}" | grep -v "grep" | wc | awk '{print $1}'`.to_i
21
+ needs_restart ||= (pnum == 0)
22
+ end
23
+ if thin_num == 0 || needs_restart
24
+ logger.info("Restarting #{main_proc} now...");
25
+ system "cd #{@@rails_root}; bundle exec script/restart;"
26
+ end
27
+ sleep @options[:delay]
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ require "quick_utils/version"
2
+ require "quick_utils/thread_runner"
3
+ require "quick_utils/rails_daemon"
4
+ require "quick_utils/rake_daemon"
5
+ require "quick_utils/watcher"
6
+
7
+ module QuickUtils
8
+ # Your code goes here...
9
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "quick_utils/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "quick_utils"
7
+ s.version = QuickUtils::VERSION
8
+ s.authors = ["Alan Graham"]
9
+ s.email = ["alangraham5@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Utility classes for a rails-deployed application}
12
+ s.description = %q{Utility classes for a rails-deployed application}
13
+
14
+ s.rubyforge_project = "quick_utils"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency "daemons"
22
+
23
+ # specify any dependencies here; for example:
24
+ # s.add_development_dependency "rspec"
25
+ # s.add_runtime_dependency "rest-client"
26
+ end
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quick_utils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Alan Graham
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-20 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: daemons
16
+ requirement: &70129914024040 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70129914024040
25
+ description: Utility classes for a rails-deployed application
26
+ email:
27
+ - alangraham5@gmail.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - Rakefile
35
+ - lib/quick_utils.rb
36
+ - lib/quick_utils/rails_daemon.rb
37
+ - lib/quick_utils/rake_daemon.rb
38
+ - lib/quick_utils/thread_runner.rb
39
+ - lib/quick_utils/version.rb
40
+ - lib/quick_utils/watcher.rb
41
+ - quick_utils.gemspec
42
+ homepage: ''
43
+ licenses: []
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ requirements: []
61
+ rubyforge_project: quick_utils
62
+ rubygems_version: 1.8.15
63
+ signing_key:
64
+ specification_version: 3
65
+ summary: Utility classes for a rails-deployed application
66
+ test_files: []