mobilize-base 1.361 → 1.363
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/lib/mobilize-base.rb +5 -5
- data/lib/mobilize-base/extensions/google_drive/worksheet.rb +2 -1
- data/lib/mobilize-base/extensions/string.rb +5 -2
- data/lib/mobilize-base/handlers/{gbook.rb → google/gbook.rb} +0 -0
- data/lib/mobilize-base/handlers/{gdrive.rb → google/gdrive.rb} +0 -0
- data/lib/mobilize-base/handlers/{gfile.rb → google/gfile.rb} +0 -0
- data/lib/mobilize-base/handlers/{email.rb → google/gmail.rb} +1 -1
- data/lib/mobilize-base/handlers/{gsheet.rb → google/gsheet.rb} +3 -1
- data/lib/mobilize-base/handlers/gridfs.rb +3 -1
- data/lib/mobilize-base/helpers/jobtracker_helper.rb +4 -4
- data/lib/mobilize-base/jobtracker.rb +12 -26
- data/lib/mobilize-base/models/job.rb +3 -4
- data/lib/mobilize-base/models/user.rb +1 -16
- data/lib/mobilize-base/tasks.rb +5 -11
- data/lib/mobilize-base/version.rb +1 -1
- data/lib/samples/jobtracker.yml +3 -0
- data/test/fixtures/is_due.yml +0 -6
- data/test/test_helper.rb +2 -0
- data/test/unit/mobilize-base_test.rb +1 -0
- metadata +9 -9
data/lib/mobilize-base.rb
CHANGED
@@ -87,13 +87,13 @@ require "mobilize-base/handlers/resque"
|
|
87
87
|
Resque.redis = "127.0.0.1:#{Mobilize::Resque.config['redis_port']}"
|
88
88
|
require 'popen4'
|
89
89
|
require "mobilize-base/jobtracker"
|
90
|
-
require "mobilize-base/handlers/gdrive"
|
91
|
-
require "mobilize-base/handlers/gfile"
|
92
|
-
require "mobilize-base/handlers/gbook"
|
93
|
-
require "mobilize-base/handlers/gsheet"
|
90
|
+
require "mobilize-base/handlers/google/gdrive"
|
91
|
+
require "mobilize-base/handlers/google/gfile"
|
92
|
+
require "mobilize-base/handlers/google/gbook"
|
93
|
+
require "mobilize-base/handlers/google/gsheet"
|
94
|
+
require "mobilize-base/handlers/google/gmail"
|
94
95
|
require "mobilize-base/extensions/google_drive/acl"
|
95
96
|
require "mobilize-base/extensions/google_drive/client_login_fetcher"
|
96
97
|
require "mobilize-base/extensions/google_drive/file"
|
97
98
|
require "mobilize-base/extensions/google_drive/worksheet"
|
98
99
|
require "mobilize-base/handlers/gridfs"
|
99
|
-
require "mobilize-base/handlers/email"
|
@@ -33,9 +33,12 @@ class String
|
|
33
33
|
new_str.gsub!(c,"\\#{c}")}
|
34
34
|
new_str
|
35
35
|
end
|
36
|
-
|
36
|
+
#makes everything alphanumeric
|
37
|
+
#except spaces, slashes, and underscores
|
38
|
+
#which are made into underscores
|
39
|
+
def alphanunderscore
|
37
40
|
str = self
|
38
|
-
str.
|
41
|
+
str.gsub(/[^A-Za-z0-9_ \/]/,"").gsub(/[ \/]/,"_")
|
39
42
|
end
|
40
43
|
def googlesafe
|
41
44
|
v=self
|
File without changes
|
File without changes
|
File without changes
|
@@ -81,9 +81,11 @@ module Mobilize
|
|
81
81
|
|
82
82
|
def Gsheet.write_temp(target_path,gdrive_slot,tsv)
|
83
83
|
#find and delete temp sheet, if any
|
84
|
-
temp_book_title = target_path.
|
84
|
+
temp_book_title = target_path.downcase.alphanunderscore
|
85
85
|
#create book and sheet
|
86
86
|
temp_book = Gdrive.root(gdrive_slot).create_spreadsheet(temp_book_title)
|
87
|
+
#add admin acl so we can look at it if it fails
|
88
|
+
temp_book.add_admin_acl
|
87
89
|
rows, cols = tsv.split("\n").ie{|t| [t.length,t.first.split("\t").length]}
|
88
90
|
temp_sheet = temp_book.add_worksheet("temp",rows,cols)
|
89
91
|
#this step has a tendency to fail; if it does,
|
@@ -21,11 +21,13 @@ module Mobilize
|
|
21
21
|
if curr_zs != zs
|
22
22
|
Mongoid::GridFs.delete(curr_file.id) if curr_file
|
23
23
|
#create temp file w zstring
|
24
|
-
temp_file = ::Tempfile.new("#{
|
24
|
+
temp_file = ::Tempfile.new("#{dst_path.downcase.alphanunderscore}_#{Time.now.to_f}")
|
25
25
|
temp_file.print(zs)
|
26
26
|
temp_file.close
|
27
27
|
#put data in file
|
28
28
|
Mongoid::GridFs.put(temp_file.path,:filename=>dst_path)
|
29
|
+
#remove temp file
|
30
|
+
`rm #{temp_file.path}`
|
29
31
|
end
|
30
32
|
return true
|
31
33
|
end
|
@@ -35,6 +35,10 @@ module Mobilize
|
|
35
35
|
Resque.workers(state)
|
36
36
|
end
|
37
37
|
|
38
|
+
def Jobtracker.disabled_methods
|
39
|
+
Jobtracker.config['disabled_methods']
|
40
|
+
end
|
41
|
+
|
38
42
|
def Jobtracker.status
|
39
43
|
args = Jobtracker.get_args
|
40
44
|
return args['status'] if args
|
@@ -73,10 +77,6 @@ module Mobilize
|
|
73
77
|
Resque.kill_idle_workers
|
74
78
|
end
|
75
79
|
|
76
|
-
def Jobtracker.kill_idle_and_stale_workers
|
77
|
-
Resque.kill_idle_and_stale_workers
|
78
|
-
end
|
79
|
-
|
80
80
|
def Jobtracker.prep_workers
|
81
81
|
Resque.prep_workers
|
82
82
|
end
|
@@ -60,7 +60,7 @@ module Mobilize
|
|
60
60
|
#deliver each email generated
|
61
61
|
notifs.each do |notif|
|
62
62
|
begin
|
63
|
-
|
63
|
+
Gmail.write(notif).deliver
|
64
64
|
rescue
|
65
65
|
#log email on failure
|
66
66
|
Jobtracker.update_status("Failed to deliver #{notif.to_s}")
|
@@ -82,7 +82,17 @@ module Mobilize
|
|
82
82
|
users.sort_by{rand}.each do |u|
|
83
83
|
r = u.runner
|
84
84
|
Jobtracker.update_status("Checking #{r.path}")
|
85
|
-
|
85
|
+
#check for run_now file
|
86
|
+
run_now_dir = "/home/#{u.name}/mobilize/"
|
87
|
+
run_now_path = "#{run_now_dir}run_now"
|
88
|
+
run_now = if File.exists?(run_now_dir) and File.exists?(run_now_path)
|
89
|
+
#delete user's run now file
|
90
|
+
`sudo rm -rf #{run_now_path}`
|
91
|
+
true
|
92
|
+
else
|
93
|
+
false
|
94
|
+
end
|
95
|
+
if r.is_due? or run_now
|
86
96
|
r.enqueue!
|
87
97
|
Jobtracker.update_status("Enqueued #{r.path}")
|
88
98
|
end
|
@@ -92,29 +102,5 @@ module Mobilize
|
|
92
102
|
Jobtracker.update_status("told to stop")
|
93
103
|
return true
|
94
104
|
end
|
95
|
-
|
96
|
-
def Jobtracker.deployed_at
|
97
|
-
#assumes deploy is as of last commit, or as of last deploy time
|
98
|
-
#as given by the REVISION file in the root folder
|
99
|
-
deploy_time = begin
|
100
|
-
%{git log -1 --format="%cd"}.bash
|
101
|
-
rescue
|
102
|
-
revision_path = "#{ENV['PWD']}/REVISION"
|
103
|
-
"touch #{revision_path}".bash unless File.exists?(revision_path)
|
104
|
-
revision_string = "ls -l #{revision_path}".bash
|
105
|
-
revision_rows = revision_string.split("\n").map{|lss| lss.strip.split(" ")}
|
106
|
-
mod_time = revision_rows.map do |lsr|
|
107
|
-
if lsr.length == 8
|
108
|
-
#ubuntu
|
109
|
-
lsr[5..6].join(" ")
|
110
|
-
elsif lsr.length == 9
|
111
|
-
#osx
|
112
|
-
lsr[5..7].join(" ")
|
113
|
-
end
|
114
|
-
end.first
|
115
|
-
mod_time
|
116
|
-
end.to_s.strip
|
117
|
-
Time.parse(deploy_time)
|
118
|
-
end
|
119
105
|
end
|
120
106
|
end
|
@@ -79,11 +79,10 @@ module Mobilize
|
|
79
79
|
return false
|
80
80
|
end
|
81
81
|
|
82
|
-
#if job contains
|
83
|
-
|
84
|
-
job_handlers = j.stages.map{|s| s.handler}.uniq
|
82
|
+
#if job contains methods in disabled_methods, not due
|
83
|
+
job_methods = j.stages.map{|s| "#{s.handler}.#{s.call}"}.uniq
|
85
84
|
#base handlers are the ones in mobilize-base/handlers
|
86
|
-
if (
|
85
|
+
if (Jobtracker.disabled_methods & job_methods).length>0
|
87
86
|
return false
|
88
87
|
end
|
89
88
|
|
@@ -4,6 +4,7 @@ module Mobilize
|
|
4
4
|
include Mongoid::Timestamps
|
5
5
|
field :active, type: Boolean
|
6
6
|
field :name, type: String
|
7
|
+
field :ssh_public_key, type: String
|
7
8
|
field :last_run, type: Time
|
8
9
|
|
9
10
|
def User.find_or_create_by_name(name)
|
@@ -27,22 +28,6 @@ module Mobilize
|
|
27
28
|
return u.runner.jobs
|
28
29
|
end
|
29
30
|
|
30
|
-
def creds(gdrive_slot)
|
31
|
-
u = self
|
32
|
-
creds_path = "#{u.runner.path.split("/").first}/creds"
|
33
|
-
begin
|
34
|
-
creds_sheet = Gsheet.find_by_path(creds_path,gdrive_slot)
|
35
|
-
cred_array = creds_sheet.read(u.name).tsv_to_hash_array.map{|h| {h['name']=>{'user'=>h['user'],'password'=>h['password']}}}
|
36
|
-
result = {}
|
37
|
-
cred_array.each do |cred|
|
38
|
-
result[cred.keys.first] = cred.values.first
|
39
|
-
end
|
40
|
-
return result
|
41
|
-
rescue
|
42
|
-
return {}
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
31
|
def runner_path
|
47
32
|
u = self
|
48
33
|
prefix = "Runner_"
|
data/lib/mobilize-base/tasks.rb
CHANGED
@@ -26,12 +26,6 @@ namespace :mobilize do
|
|
26
26
|
require 'mobilize-base'
|
27
27
|
Mobilize::Jobtracker.kill_workers
|
28
28
|
end
|
29
|
-
desc "Kill idle workers not in sync with repo"
|
30
|
-
task :kill_idle_and_stale_workers, :env do |t,args|
|
31
|
-
ENV['MOBILIZE_ENV']=args.env
|
32
|
-
require 'mobilize-base'
|
33
|
-
Mobilize::Jobtracker.kill_idle_and_stale_workers
|
34
|
-
end
|
35
29
|
desc "Kill idle workers"
|
36
30
|
task :kill_idle_workers, :env do |t,args|
|
37
31
|
ENV['MOBILIZE_ENV']=args.env
|
@@ -70,11 +64,11 @@ namespace :mobilize do
|
|
70
64
|
require 'mobilize-base'
|
71
65
|
Mobilize::Jobtracker.restart!
|
72
66
|
end
|
73
|
-
desc "Add a user"
|
74
|
-
task :
|
67
|
+
desc "Add a user and set up local files"
|
68
|
+
task :add_base_user, :name, :env do |t,args|
|
75
69
|
ENV['MOBILIZE_ENV']=args.env
|
76
70
|
require 'mobilize-base'
|
77
|
-
Mobilize::User.find_or_create_by_name(args.name)
|
71
|
+
u = Mobilize::User.find_or_create_by_name(args.name)
|
78
72
|
end
|
79
73
|
desc "Enqueue a user's runner"
|
80
74
|
task :enqueue_user, :name, :env do |t,args|
|
@@ -87,7 +81,7 @@ namespace :mobilize do
|
|
87
81
|
ENV['MOBILIZE_ENV']=args.env
|
88
82
|
require 'mobilize-base'
|
89
83
|
user,job,stage = args.path.split("/")
|
90
|
-
Mobilize::Stage.where(path: "Runner_#{user}/jobs/#{job}/#{stage}").first.
|
84
|
+
Mobilize::Stage.where(path: "Runner_#{user}/jobs/#{job}/#{stage}").first.enqueue!
|
91
85
|
end
|
92
86
|
desc "kill all old resque web processes, start new one with resque_web.rb extension file"
|
93
87
|
task :resque_web, :env do |t,args|
|
@@ -126,7 +120,7 @@ namespace :mobilize do
|
|
126
120
|
"Mobilize::#{m}".constantize.create_indexes
|
127
121
|
end
|
128
122
|
end
|
129
|
-
desc "Set up config and log folders and files
|
123
|
+
desc "Set up base config and log folders and files"
|
130
124
|
task :setup_base do
|
131
125
|
config_dir = (ENV['MOBILIZE_CONFIG_DIR'] ||= "config/mobilize/")
|
132
126
|
log_dir = (ENV['MOBILIZE_LOG_DIR'] ||= "log/")
|
data/lib/samples/jobtracker.yml
CHANGED
@@ -5,15 +5,18 @@ development:
|
|
5
5
|
runner_read_freq: 300 #5 min between runner reads
|
6
6
|
max_run_time: 14400 # if a job runs for 4h+, notification will be sent
|
7
7
|
extensions: [] #additional Mobilize modules to load workers with
|
8
|
+
disabled_methods: [] #methods for jobs that should be ignored (used for outages)
|
8
9
|
test:
|
9
10
|
cycle_freq: 10 #time between Jobtracker sweeps
|
10
11
|
notification_freq: 3600 #1 hour between failure/timeout notifications
|
11
12
|
runner_read_freq: 300 #5 min between runner reads
|
12
13
|
max_run_time: 14400 # if a job runs for 4h+, notification will be sent
|
13
14
|
extensions: [] #additional Mobilize modules to load workers with
|
15
|
+
disabled_methods: [] #methods for jobs that should be ignored (used for outages)
|
14
16
|
production:
|
15
17
|
cycle_freq: 10 #time between Jobtracker sweeps
|
16
18
|
notification_freq: 3600 #1 hour between failure/timeout notifications
|
17
19
|
runner_read_freq: 300 #5 min between runner reads
|
18
20
|
max_run_time: 14400 # if a job runs for 4h+, notification will be sent
|
19
21
|
extensions: [] #additional Mobilize modules to load workers with
|
22
|
+
disabled_methods: [] #methods for jobs that should be ignored (used for outages)
|
data/test/fixtures/is_due.yml
CHANGED
data/test/test_helper.rb
CHANGED
@@ -10,6 +10,8 @@ require 'mobilize-base'
|
|
10
10
|
$TESTING = true
|
11
11
|
module TestHelper
|
12
12
|
def TestHelper.confirm_expected_jobs(expected_fixture_name,time_limit=600)
|
13
|
+
#clear all failures
|
14
|
+
::Resque::Failure.clear
|
13
15
|
jobs = {}
|
14
16
|
jobs['expected'] = TestHelper.load_fixture(expected_fixture_name)
|
15
17
|
jobs['pending'] = jobs['expected'].select{|j| j['confirmed_ats'].length < j['count']}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobilize-base
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.363'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -184,12 +184,12 @@ files:
|
|
184
184
|
- lib/mobilize-base/extensions/string.rb
|
185
185
|
- lib/mobilize-base/extensions/time.rb
|
186
186
|
- lib/mobilize-base/extensions/yaml.rb
|
187
|
-
- lib/mobilize-base/handlers/
|
188
|
-
- lib/mobilize-base/handlers/
|
189
|
-
- lib/mobilize-base/handlers/
|
190
|
-
- lib/mobilize-base/handlers/
|
187
|
+
- lib/mobilize-base/handlers/google/gbook.rb
|
188
|
+
- lib/mobilize-base/handlers/google/gdrive.rb
|
189
|
+
- lib/mobilize-base/handlers/google/gfile.rb
|
190
|
+
- lib/mobilize-base/handlers/google/gmail.rb
|
191
|
+
- lib/mobilize-base/handlers/google/gsheet.rb
|
191
192
|
- lib/mobilize-base/handlers/gridfs.rb
|
192
|
-
- lib/mobilize-base/handlers/gsheet.rb
|
193
193
|
- lib/mobilize-base/handlers/resque.rb
|
194
194
|
- lib/mobilize-base/helpers/job_helper.rb
|
195
195
|
- lib/mobilize-base/helpers/jobtracker_helper.rb
|
@@ -234,7 +234,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
234
234
|
version: '0'
|
235
235
|
segments:
|
236
236
|
- 0
|
237
|
-
hash:
|
237
|
+
hash: 1540799042957557582
|
238
238
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
239
239
|
none: false
|
240
240
|
requirements:
|
@@ -243,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
243
243
|
version: '0'
|
244
244
|
segments:
|
245
245
|
- 0
|
246
|
-
hash:
|
246
|
+
hash: 1540799042957557582
|
247
247
|
requirements: []
|
248
248
|
rubyforge_project: mobilize-base
|
249
249
|
rubygems_version: 1.8.25
|