resque-telework 0.2.0
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.
- data/Gemfile +6 -0
- data/MIT-LICENSE +20 -0
- data/README.md +151 -0
- data/doc/screenshots/view_overview.png +0 -0
- data/lib/resque-telework/global.rb +10 -0
- data/lib/resque-telework/manager.rb +205 -0
- data/lib/resque-telework/railtie.rb +11 -0
- data/lib/resque-telework/redis.rb +354 -0
- data/lib/resque-telework/server/views/misc.erb +21 -0
- data/lib/resque-telework/server/views/revision.erb +25 -0
- data/lib/resque-telework/server/views/stopit.erb +35 -0
- data/lib/resque-telework/server/views/telework.erb +262 -0
- data/lib/resque-telework/server/views/worker.erb +38 -0
- data/lib/resque-telework/server.rb +220 -0
- data/lib/resque-telework.rb +10 -0
- data/lib/tasks/telework.rake +98 -0
- data/resque-telework.gemspec +26 -0
- metadata +93 -0
@@ -0,0 +1,10 @@
|
|
1
|
+
# Load required file
|
2
|
+
|
3
|
+
require 'resque'
|
4
|
+
require 'resque/server'
|
5
|
+
|
6
|
+
require 'resque-telework/redis'
|
7
|
+
require 'resque-telework/server'
|
8
|
+
require 'resque-telework/global'
|
9
|
+
require 'resque-telework/manager'
|
10
|
+
require 'resque-telework/railtie' if defined?(Rails)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
namespace :telework do
|
2
|
+
|
3
|
+
desc 'Register a new revision into Telework'
|
4
|
+
task :register_revision => :environment do
|
5
|
+
cfg= get_config
|
6
|
+
host= cfg['hostname']
|
7
|
+
cfg.delete('hostname')
|
8
|
+
TeleworkRedis.new.register_revision(host, cfg)
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Start a Telework daemon on this machine and returns'
|
12
|
+
task :start_daemon => :environment do
|
13
|
+
cfg= get_config
|
14
|
+
host= cfg['hostname']
|
15
|
+
daemon= Resque::Plugins::Telework::Manager.new(cfg)
|
16
|
+
if daemon.is_alive(host)
|
17
|
+
msg= "There is already a daemon running on #{host}"
|
18
|
+
daemon.send_status( 'Error', msg)
|
19
|
+
daemon.send_status( 'Error', "This daemon (PID #{Process.pid}) cannot be started and will terminare now")
|
20
|
+
return nil
|
21
|
+
end
|
22
|
+
logp= cfg['daemon_log_path']
|
23
|
+
logp||= "."
|
24
|
+
logf= "#{logp}/telework_daemon.log"
|
25
|
+
lpid= "#{logp}/telework_daemon.pid"
|
26
|
+
|
27
|
+
# Forking
|
28
|
+
pid = fork do
|
29
|
+
File.open(logf, 'w') do |lf|
|
30
|
+
$stdout.reopen(lf)
|
31
|
+
$stderr.reopen(lf)
|
32
|
+
end
|
33
|
+
Process.setsid # I'm grown up now
|
34
|
+
daemon.start # Start the daemon
|
35
|
+
File.delete(lpid) # Delete the pid file
|
36
|
+
end
|
37
|
+
open(lpid, 'w') { |f| f.write("#{pid}\n") } if pid # Create the pid file
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
desc 'Run the Telework daemon'
|
42
|
+
task :daemon => :environment do
|
43
|
+
Resque::Plugins::Telework::Manager.new(get_config).start
|
44
|
+
end
|
45
|
+
|
46
|
+
desc 'Register the local git installation'
|
47
|
+
task :local_config_from_git => :environment do
|
48
|
+
begin
|
49
|
+
rev_date= Time.parse(`git show --format=format:"%aD"`)
|
50
|
+
rescue
|
51
|
+
rev_date= nil
|
52
|
+
end
|
53
|
+
github_repo= "https://github.com/john/reputedly"
|
54
|
+
latest_revision= `git rev-parse HEAD`.chomp
|
55
|
+
cfg= { :hostname => find_hostname,
|
56
|
+
:revision => latest_revision,
|
57
|
+
:revision_small => latest_revision[0..6],
|
58
|
+
:revision_type => 'Rails:Resque',
|
59
|
+
:revision_path => pwd,
|
60
|
+
:revision_link => "#{github_repo}/commit/#{latest_revision}",
|
61
|
+
:revision_branch => ( $1 if /\* (\S+)\s/.match(`git branch`) ),
|
62
|
+
:revision_date => rev_date,
|
63
|
+
:revision_deployement_date => Time.now,
|
64
|
+
:revision_info => `git log -1`,
|
65
|
+
:revision_log_path => "#{pwd}/log",
|
66
|
+
:daemon_pooling_interval => 2,
|
67
|
+
:daemon_log_path => pwd }
|
68
|
+
# Create the config file
|
69
|
+
require 'json'
|
70
|
+
open("telework.conf", 'w') { |f| f.write(cfg.to_json) }
|
71
|
+
end
|
72
|
+
|
73
|
+
# Helper functions
|
74
|
+
def get_config
|
75
|
+
ch= { 'hostname' => find_hostname }
|
76
|
+
# TELEWORK_CONFIG_FILE
|
77
|
+
fn= ENV['TELEWORK_CONFIG_FILE']
|
78
|
+
# Local config file
|
79
|
+
fn||= "telework.conf" if File.exist?("telework.conf")
|
80
|
+
fn||= "telework_config.log" if File.exist?("telework_config.log") # Legacy, this will be removed
|
81
|
+
raise "Could not find Telework configuration file.. exiting" unless fn
|
82
|
+
ActiveSupport::JSON.decode(open(fn, "r").read).merge(ch)
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_hostname
|
86
|
+
# To find the hostname, we successively looks into
|
87
|
+
# 1) the environement variable TELEWORK_HOSTNAME
|
88
|
+
# 2) we get it through a Socket call
|
89
|
+
host= ENV['TELEWORK_HOSTNAME']
|
90
|
+
unless host
|
91
|
+
require 'socket'
|
92
|
+
host= Socket::gethostname()
|
93
|
+
end
|
94
|
+
raise "Could not find hostname.. exiting" unless host
|
95
|
+
host
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "resque-telework/global"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "resque-telework"
|
7
|
+
s.version = Resque::Plugins::Telework::Version
|
8
|
+
s.authors = "Gilles Pirio"
|
9
|
+
s.email = "gip.github@gmail.com"
|
10
|
+
s.date = Time.now.strftime('%Y-%m-%d')
|
11
|
+
s.homepage = "https://github.com/gip/resque-telework"
|
12
|
+
s.summary = %q{resque-telework: A Resque plugin aimed at controlling Resque workers from the web UI }
|
13
|
+
|
14
|
+
s.add_runtime_dependency 'resque', '>= 1.20.0'
|
15
|
+
s.add_runtime_dependency 'sys-cpu', '~> 0.7.0'
|
16
|
+
s.extra_rdoc_files = ["README.md", "MIT-LICENSE"]
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
s.description = <<description
|
21
|
+
Telework is a Resque plugin aimed at controlling Resque workers from the web UI. It makes it easy to manage workers on a
|
22
|
+
complex systems that may include several hosts, different queue(s) and an evolving source code that is deployed several times a day.
|
23
|
+
Beyond starting and stopping workers on remote hosts, the plugin makes it easy to switch between code revisions, gives a partial view of
|
24
|
+
each worker's log (stdout and stderr) and maintains a status of each workers.
|
25
|
+
description
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: resque-telework
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Gilles Pirio
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-07-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: resque
|
16
|
+
requirement: &70173135892440 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.20.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70173135892440
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: sys-cpu
|
27
|
+
requirement: &70173135891940 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.7.0
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70173135891940
|
36
|
+
description: ! " Telework is a Resque plugin aimed at controlling Resque workers
|
37
|
+
from the web UI. It makes it easy to manage workers on a \n complex systems that
|
38
|
+
may include several hosts, different queue(s) and an evolving source code that is
|
39
|
+
deployed several times a day. \n Beyond starting and stopping workers on remote
|
40
|
+
hosts, the plugin makes it easy to switch between code revisions, gives a partial
|
41
|
+
view of \n each worker's log (stdout and stderr) and maintains a status of each
|
42
|
+
workers.\n"
|
43
|
+
email: gip.github@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files:
|
47
|
+
- README.md
|
48
|
+
- MIT-LICENSE
|
49
|
+
files:
|
50
|
+
- Gemfile
|
51
|
+
- MIT-LICENSE
|
52
|
+
- README.md
|
53
|
+
- doc/screenshots/view_overview.png
|
54
|
+
- lib/resque-telework.rb
|
55
|
+
- lib/resque-telework/global.rb
|
56
|
+
- lib/resque-telework/manager.rb
|
57
|
+
- lib/resque-telework/railtie.rb
|
58
|
+
- lib/resque-telework/redis.rb
|
59
|
+
- lib/resque-telework/server.rb
|
60
|
+
- lib/resque-telework/server/views/misc.erb
|
61
|
+
- lib/resque-telework/server/views/revision.erb
|
62
|
+
- lib/resque-telework/server/views/stopit.erb
|
63
|
+
- lib/resque-telework/server/views/telework.erb
|
64
|
+
- lib/resque-telework/server/views/worker.erb
|
65
|
+
- lib/tasks/telework.rake
|
66
|
+
- resque-telework.gemspec
|
67
|
+
homepage: https://github.com/gip/resque-telework
|
68
|
+
licenses: []
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubyforge_project:
|
87
|
+
rubygems_version: 1.8.16
|
88
|
+
signing_key:
|
89
|
+
specification_version: 3
|
90
|
+
summary: ! 'resque-telework: A Resque plugin aimed at controlling Resque workers from
|
91
|
+
the web UI'
|
92
|
+
test_files: []
|
93
|
+
has_rdoc:
|