right_chimp 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +20 -1
- data/chimp.gemspec +1 -0
- data/lib/right_chimp/Chimp.rb +79 -48
- data/lib/right_chimp/daemon/ChimpDaemon.rb +3 -0
- data/lib/right_chimp/objects/ChimpObjects.rb +69 -39
- data/lib/right_chimp/version.rb +1 -1
- metadata +18 -2
data/Gemfile.lock
CHANGED
@@ -1,18 +1,34 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
right_chimp (2.0)
|
4
|
+
right_chimp (2.0.2)
|
5
5
|
nokogiri (~> 1.5.9)
|
6
6
|
progressbar (~> 0.11.0)
|
7
7
|
rake (~> 0.9.2.2)
|
8
|
+
right_api_client (> 1.5)
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
11
12
|
specs:
|
12
13
|
diff-lcs (1.1.3)
|
14
|
+
domain_name (0.5.24)
|
15
|
+
unf (>= 0.0.5, < 1.0.0)
|
16
|
+
http-cookie (1.0.2)
|
17
|
+
domain_name (~> 0.5)
|
18
|
+
json (1.8.2)
|
19
|
+
mime-types (1.25.1)
|
20
|
+
netrc (0.10.3)
|
13
21
|
nokogiri (1.5.11)
|
14
22
|
progressbar (0.11.0)
|
15
23
|
rake (0.9.2.2)
|
24
|
+
rest-client (1.8.0)
|
25
|
+
http-cookie (>= 1.0.2, < 2.0)
|
26
|
+
mime-types (>= 1.16, < 3.0)
|
27
|
+
netrc (~> 0.7)
|
28
|
+
right_api_client (1.5.26)
|
29
|
+
json (~> 1.0)
|
30
|
+
mime-types (~> 1.0)
|
31
|
+
rest-client (~> 1.6)
|
16
32
|
rspec (2.6.0)
|
17
33
|
rspec-core (~> 2.6.0)
|
18
34
|
rspec-expectations (~> 2.6.0)
|
@@ -21,6 +37,9 @@ GEM
|
|
21
37
|
rspec-expectations (2.6.0)
|
22
38
|
diff-lcs (~> 1.1.2)
|
23
39
|
rspec-mocks (2.6.0)
|
40
|
+
unf (0.1.4)
|
41
|
+
unf_ext
|
42
|
+
unf_ext (0.0.7.1)
|
24
43
|
|
25
44
|
PLATFORMS
|
26
45
|
ruby
|
data/chimp.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency "rake", "~> 0.9.2.2"
|
24
24
|
s.add_dependency "nokogiri", "~> 1.5.9"
|
25
25
|
s.add_dependency "progressbar", "~> 0.11.0"
|
26
|
+
s.add_dependency "right_api_client", "> 1.5"
|
26
27
|
|
27
28
|
s.add_development_dependency "rspec", "~> 2.6.0"
|
28
29
|
end
|
data/lib/right_chimp/Chimp.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
#
|
2
|
-
# The Chimp class encapsulates the command-line program logic
|
1
|
+
#The Chimp class encapsulates the command-line program logic
|
3
2
|
#
|
4
3
|
module Chimp
|
5
4
|
class Chimp
|
@@ -18,6 +17,7 @@ module Chimp
|
|
18
17
|
# Set up reasonable defaults
|
19
18
|
#
|
20
19
|
def initialize
|
20
|
+
|
21
21
|
#
|
22
22
|
# General configuration options
|
23
23
|
#
|
@@ -166,9 +166,9 @@ module Chimp
|
|
166
166
|
if Chimp.failure
|
167
167
|
#This is the failure point when executing standalone
|
168
168
|
Log.error "##################################################"
|
169
|
-
Log.error " API CALL FAILED FOR:"
|
170
|
-
Log.error " chimp #{@cli_args} "
|
171
|
-
Log.error " Run manually!"
|
169
|
+
Log.error "[#{Chimp.get_job_uuid}] API CALL FAILED FOR:"
|
170
|
+
Log.error "[#{Chimp.get_job_uuid}] chimp #{@cli_args} "
|
171
|
+
Log.error "[#{Chimp.get_job_uuid}] Run manually!"
|
172
172
|
Log.error "##################################################"
|
173
173
|
exit 1
|
174
174
|
end
|
@@ -215,13 +215,16 @@ module Chimp
|
|
215
215
|
# Then we filter on all the instances by this href
|
216
216
|
all_instances = Connection.all_instances() unless arrays_hrefs.empty?
|
217
217
|
if all_instances.nil?
|
218
|
-
Log.debug "No results from API query"
|
218
|
+
Log.debug "[#{Chimp.get_job_uuid}] No results from API query"
|
219
219
|
else
|
220
220
|
arrays_hrefs.each { |href|
|
221
221
|
@servers += all_instances.select {|s|
|
222
222
|
s['links']['incarnator']['href'] == href
|
223
223
|
}
|
224
224
|
}
|
225
|
+
|
226
|
+
Log.debug "[#{Chimp.get_job_uuid}] Found #{@servers.count} servers for that array query"
|
227
|
+
|
225
228
|
end
|
226
229
|
# The result will be stored (not returned) into @servers
|
227
230
|
end
|
@@ -269,8 +272,12 @@ module Chimp
|
|
269
272
|
s=Executable.new
|
270
273
|
s.params['right_script']['href']="right_script_href=/api/right_scripts/"+script_number
|
271
274
|
#Make an 1.5 call to extract name, by loading resource.
|
272
|
-
Log.debug "Making API 1.5 call : client.resource(#{s.params['right_script']['href'].scan(/=(.*)/).last.last})"
|
273
|
-
|
275
|
+
Log.debug "[#{Chimp.get_job_uuid}] Making API 1.5 call : client.resource(#{s.params['right_script']['href'].scan(/=(.*)/).last.last})"
|
276
|
+
begin
|
277
|
+
the_name = Connection.client.resource(s.params['right_script']['href'].scan(/=(.*)/).last.last).name
|
278
|
+
rescue
|
279
|
+
Log.error "[#{Chimp.get_job_uuid}] Failed to make 1.5 call for rightscript href"
|
280
|
+
end
|
274
281
|
s.params['right_script']['name'] = the_name
|
275
282
|
@executable=s
|
276
283
|
else
|
@@ -493,15 +500,15 @@ module Chimp
|
|
493
500
|
|
494
501
|
if servers.nil?
|
495
502
|
if @ignore_errors
|
496
|
-
Log.warn "[#{Chimp.get_job_uuid}]Tag query returned no results: #{tags.join(" ")}"
|
503
|
+
Log.warn "[#{Chimp.get_job_uuid}] Tag query returned no results: #{tags.join(" ")}"
|
497
504
|
else
|
498
|
-
raise "[#{Chimp.get_job_uuid}]Tag query returned no results: #{tags.join(" ")}\n"
|
505
|
+
raise "[#{Chimp.get_job_uuid}] Tag query returned no results: #{tags.join(" ")}\n"
|
499
506
|
end
|
500
507
|
elsif servers.empty?
|
501
508
|
if @ignore_errors
|
502
|
-
Log.warn "[#{Chimp.get_job_uuid}]Tag query returned no results: #{tags.join(" ")}"
|
509
|
+
Log.warn "[#{Chimp.get_job_uuid}] Tag query returned no results: #{tags.join(" ")}"
|
503
510
|
else
|
504
|
-
raise "[#{Chimp.get_job_uuid}]Tag query returned no results: #{tags.join(" ")}\n"
|
511
|
+
raise "[#{Chimp.get_job_uuid}] Tag query returned no results: #{tags.join(" ")}\n"
|
505
512
|
end
|
506
513
|
end
|
507
514
|
|
@@ -532,6 +539,8 @@ module Chimp
|
|
532
539
|
Log.error "[#{Chimp.get_job_uuid}] #{servers.size - matching_servers.size} instances didnt match tag selection."
|
533
540
|
Log.error "[#{Chimp.get_job_uuid}] #{tags.join(" ")}"
|
534
541
|
Chimp.set_failure(true)
|
542
|
+
Log.error "[#{Chimp.get_job_uuid}] Set failure to true because of discrepancy"
|
543
|
+
|
535
544
|
servers = []
|
536
545
|
else
|
537
546
|
raise "[#{Chimp.get_job_uuid}] #{servers.size - matching_servers.size} instances didnt match tag selection"
|
@@ -564,7 +573,7 @@ module Chimp
|
|
564
573
|
names.each do |array_name|
|
565
574
|
# Find if arrays exist, if not raise warning.
|
566
575
|
# One API call per array
|
567
|
-
Log.debug "Making API 1.5 call: client.server_arrays.index(:filter => [#{array_name}])"
|
576
|
+
Log.debug "[#{Chimp.get_job_uuid}] Making API 1.5 call: client.server_arrays.index(:filter => [#{array_name}])"
|
568
577
|
result = Connection.client.server_arrays.index(:filter => ["name==#{array_name}"])
|
569
578
|
# Result is an array with all the server arrays
|
570
579
|
if result.size != 0
|
@@ -591,7 +600,7 @@ module Chimp
|
|
591
600
|
#
|
592
601
|
def detect_server_template(servers)
|
593
602
|
|
594
|
-
Log.debug "Looking for server template"
|
603
|
+
Log.debug "[#{Chimp.get_job_uuid}] Looking for server template"
|
595
604
|
st = []
|
596
605
|
if servers[0].nil?
|
597
606
|
return (st)
|
@@ -605,7 +614,7 @@ module Chimp
|
|
605
614
|
# We return an array of server_template resources
|
606
615
|
# of the type [ st_href, st object ]
|
607
616
|
#
|
608
|
-
Log.debug "Found server templates"
|
617
|
+
Log.debug "[#{Chimp.get_job_uuid}] Found server templates"
|
609
618
|
|
610
619
|
return(st)
|
611
620
|
end
|
@@ -615,7 +624,7 @@ module Chimp
|
|
615
624
|
# the desired script against all server templates or the script URL
|
616
625
|
#
|
617
626
|
def detect_right_script(st, script)
|
618
|
-
Log.debug "Looking for rightscript"
|
627
|
+
Log.debug "[#{Chimp.get_job_uuid}] Looking for rightscript"
|
619
628
|
executable = nil
|
620
629
|
# In the event that chimpd find @op_scripts as nil, set it as an array.
|
621
630
|
if @op_scripts.nil?
|
@@ -652,7 +661,7 @@ module Chimp
|
|
652
661
|
s.params['right_script']['name'] = script_name
|
653
662
|
@script_to_run = s
|
654
663
|
|
655
|
-
Log.debug "Found rightscript"
|
664
|
+
Log.debug "[#{Chimp.get_job_uuid}] Found rightscript"
|
656
665
|
return @script_to_run
|
657
666
|
end
|
658
667
|
end
|
@@ -690,12 +699,16 @@ module Chimp
|
|
690
699
|
def search_for_script_in_sts(script, st)
|
691
700
|
# Loop and look inside every st
|
692
701
|
st.each do |s|
|
693
|
-
Log.debug "Making API 1.5 call: client.resource(#{s[1]['href']})"
|
694
|
-
|
702
|
+
Log.debug "[#{Chimp.get_job_uuid}] Making API 1.5 call: client.resource(#{s[1]['href']})"
|
703
|
+
begin
|
704
|
+
temp=Connection.client.resource(s[1]['href'])
|
705
|
+
rescue
|
706
|
+
Log.error "[#{Chimp.get_job_uuid}] Failed to load href for ST"
|
707
|
+
end
|
695
708
|
temp.runnable_bindings.index.each do |x|
|
696
709
|
# Look for first match
|
697
710
|
if x.raw['right_script']['name'].downcase.include?(script.downcase)
|
698
|
-
Log.debug "Found requested righscript: #{script}"
|
711
|
+
Log.debug "[#{Chimp.get_job_uuid}] Found requested righscript: #{script}"
|
699
712
|
# Provide the name + href
|
700
713
|
s = Executable.new
|
701
714
|
s.params['right_script']['href'] = x.raw['links'].find{|i| i['rel'] == 'right_script'}['href']
|
@@ -769,14 +782,20 @@ module Chimp
|
|
769
782
|
# "kind"=>"cm#server_template",
|
770
783
|
# "version"=>5,
|
771
784
|
# "href"=>"/api/server_templates/351930003"} ]
|
772
|
-
Log.debug "Making API 1.5 call: client.resource"
|
773
|
-
|
774
|
-
|
775
|
-
#
|
776
|
-
|
777
|
-
|
778
|
-
|
785
|
+
Log.debug "[#{Chimp.get_job_uuid}] Making API 1.5 call: client.resource (ST)"
|
786
|
+
begin
|
787
|
+
temp=Connection.client.resource(s[1]['href'])
|
788
|
+
Log.debug "[#{Chimp.get_job_uuid}] API 1.5 call client.resource (ST) complete"
|
789
|
+
temp.runnable_bindings.index.each do |x|
|
790
|
+
# only add the operational ones
|
791
|
+
if x.sequence == "operational"
|
792
|
+
name = x.raw['right_script']['name']
|
793
|
+
op_scripts.push([name, x])
|
794
|
+
end
|
779
795
|
end
|
796
|
+
rescue Exception => e
|
797
|
+
Log.error "[#{Chimp.get_job_uuid}] API 1.5 call client.resource (ST) failed"
|
798
|
+
Log.error "[#{Chimp.get_job_uuid}] #{e.message}"
|
780
799
|
end
|
781
800
|
end
|
782
801
|
|
@@ -796,7 +815,7 @@ module Chimp
|
|
796
815
|
def generate_jobs(queue_servers, queue_template, queue_executable)
|
797
816
|
counter = 0
|
798
817
|
tasks = []
|
799
|
-
Log.debug "Loading queue..."
|
818
|
+
Log.debug "[#{Chimp.get_job_uuid}] Loading queue..."
|
800
819
|
#
|
801
820
|
# Configure group
|
802
821
|
#
|
@@ -807,7 +826,7 @@ module Chimp
|
|
807
826
|
#
|
808
827
|
# Process Server selection
|
809
828
|
#
|
810
|
-
Log.debug("Processing server selection")
|
829
|
+
Log.debug("[#{Chimp.get_job_uuid}] Processing server selection for task creation")
|
811
830
|
|
812
831
|
queue_servers.sort! { |a,b| a['name'] <=> b['name'] }
|
813
832
|
queue_servers.each do |server|
|
@@ -853,8 +872,13 @@ module Chimp
|
|
853
872
|
s.params['datacenter'] = server['links']['datacenter']['name']
|
854
873
|
|
855
874
|
# This will be useful for later on when we need to run scripts
|
856
|
-
Log.debug "Making API 1.5 call: client.resource"
|
857
|
-
|
875
|
+
Log.debug "[#{Chimp.get_job_uuid}] Making API 1.5 call: client.resource (SERVER) for task creation"
|
876
|
+
begin
|
877
|
+
s.object = Connection.client.resource(server['href'])
|
878
|
+
Log.debug "[#{Chimp.get_job_uuid}] Making API 1.5 call: client.resource (SERVER) for task creation COMPLETE"
|
879
|
+
rescue
|
880
|
+
Log.error "[#{Chimp.get_job_uuid}] Failed to load server href via API1.5 for task creation"
|
881
|
+
end
|
858
882
|
|
859
883
|
e = nil
|
860
884
|
|
@@ -892,6 +916,7 @@ module Chimp
|
|
892
916
|
e.quiet = @@quiet
|
893
917
|
e.status = Executor::STATUS_HOLDING if @hold
|
894
918
|
|
919
|
+
Log.debug "[#{Chimp.get_job_uuid}] Pushing task (end of control)"
|
895
920
|
tasks.push(e)
|
896
921
|
end
|
897
922
|
end
|
@@ -1028,17 +1053,6 @@ module Chimp
|
|
1028
1053
|
puts "chimp run complete"
|
1029
1054
|
end
|
1030
1055
|
|
1031
|
-
#
|
1032
|
-
# Allow the set/retrieval of job_uuid from outside
|
1033
|
-
#
|
1034
|
-
def self.get_job_uuid
|
1035
|
-
@job_uuid
|
1036
|
-
end
|
1037
|
-
|
1038
|
-
def self.set_job_uuid(value)
|
1039
|
-
@job_uuid = value
|
1040
|
-
end
|
1041
|
-
|
1042
1056
|
#
|
1043
1057
|
# Completely process a non-interactive chimp object command
|
1044
1058
|
# This is used by chimpd, when processing a task.
|
@@ -1049,12 +1063,20 @@ module Chimp
|
|
1049
1063
|
|
1050
1064
|
Log.debug "[#{Chimp.get_job_uuid}] Processing task"
|
1051
1065
|
|
1066
|
+
Log.debug "[#{Chimp.get_job_uuid}] Trying to get array_info" unless Chimp.failure
|
1052
1067
|
get_array_info unless Chimp.failure
|
1068
|
+
|
1069
|
+
Log.debug "[#{Chimp.get_job_uuid}] Trying to get server_info" unless Chimp.failure
|
1053
1070
|
get_server_info unless Chimp.failure
|
1071
|
+
|
1072
|
+
Log.debug "[#{Chimp.get_job_uuid}] Trying to get template_info" unless Chimp.failure
|
1054
1073
|
get_template_info unless Chimp.failure
|
1074
|
+
|
1075
|
+
Log.debug "[#{Chimp.get_job_uuid}] Trying to get executable_info" unless Chimp.failure
|
1055
1076
|
get_executable_info unless Chimp.failure
|
1056
1077
|
|
1057
1078
|
if Chimp.failure
|
1079
|
+
|
1058
1080
|
Log.error "##################################################"
|
1059
1081
|
Log.error "["+self.job_uuid+"] API CALL FAILED FOR:"
|
1060
1082
|
Log.error "["+self.job_uuid+"] chimp #{@cli_args} "
|
@@ -1063,9 +1085,10 @@ module Chimp
|
|
1063
1085
|
return []
|
1064
1086
|
else
|
1065
1087
|
if @servers.first.nil? or @executable.nil?
|
1066
|
-
Log.warn "[
|
1088
|
+
Log.warn "[#{Chimp.get_job_uuid}] Nothing to do for \"chimp #{@cli_args}\"."
|
1067
1089
|
return []
|
1068
1090
|
else
|
1091
|
+
Log.debug "[#{Chimp.get_job_uuid}] Generating job..."
|
1069
1092
|
return generate_jobs(@servers, @server_template, @executable)
|
1070
1093
|
end
|
1071
1094
|
end
|
@@ -1167,18 +1190,26 @@ module Chimp
|
|
1167
1190
|
return 0
|
1168
1191
|
end
|
1169
1192
|
|
1170
|
-
def self.
|
1171
|
-
|
1193
|
+
def self.set_job_uuid(value)
|
1194
|
+
#This is a current thread variable to avoid cross-talk between threads
|
1195
|
+
Thread.current[:job_uuid] = value
|
1172
1196
|
end
|
1173
1197
|
|
1174
|
-
def self.
|
1175
|
-
return
|
1198
|
+
def self.get_job_uuid
|
1199
|
+
return Thread.current[:job_uuid]
|
1176
1200
|
end
|
1177
1201
|
|
1178
1202
|
def self.set_failure(status)
|
1179
|
-
|
1203
|
+
#This is a current thread variable to avoid cross-talk between threads
|
1204
|
+
Thread.current[:failure] = status
|
1205
|
+
end
|
1206
|
+
|
1207
|
+
def self.failure
|
1208
|
+
return Thread.current[:failure]
|
1180
1209
|
end
|
1181
1210
|
|
1211
|
+
|
1212
|
+
|
1182
1213
|
####################################################
|
1183
1214
|
#private
|
1184
1215
|
####################################################
|
@@ -51,7 +51,7 @@ module Chimp
|
|
51
51
|
|
52
52
|
@client = RightApi::Client.new(:email => creds[:user], :password => creds[:pass],
|
53
53
|
:account_id => creds[:account], :api_url => creds[:api_url],
|
54
|
-
:timeout =>
|
54
|
+
:timeout => 60, :enable_retry => true)
|
55
55
|
rescue
|
56
56
|
puts "##############################################################################"
|
57
57
|
puts "Error: "
|
@@ -76,24 +76,28 @@ module Chimp
|
|
76
76
|
#
|
77
77
|
def self.all_instances()
|
78
78
|
begin
|
79
|
+
Log.debug "[#{Chimp.get_job_uuid}] Requesting all instances"
|
80
|
+
|
79
81
|
filters_list = "state=operational"
|
80
82
|
filters = CGI::escape(filters_list)
|
81
83
|
|
82
84
|
query="/api/instances?view=full&filter="+filters
|
83
85
|
|
84
|
-
|
86
|
+
all_instances = Connection.api16_call(query)
|
85
87
|
|
86
88
|
rescue Exception => e
|
87
|
-
|
89
|
+
Log.error "[#{Chimp.get_job_uuid}] self.all_instaces"
|
90
|
+
Log.error "[#{Chimp.get_job_uuid}] #{e.message}"
|
88
91
|
end
|
89
92
|
|
90
|
-
return
|
93
|
+
return all_instances
|
91
94
|
end
|
92
95
|
|
93
96
|
#
|
94
97
|
# Returns every single operational instance in the account, matching the filters passed.
|
95
98
|
#
|
96
99
|
def self.instances(extra_filters)
|
100
|
+
Log.debug "[#{Chimp.get_job_uuid}] Requesting some instances"
|
97
101
|
begin
|
98
102
|
filters_list = "state=operational&"+extra_filters
|
99
103
|
filters = CGI::escape(filters_list)
|
@@ -103,7 +107,8 @@ module Chimp
|
|
103
107
|
instances = Connection.api16_call(query)
|
104
108
|
|
105
109
|
rescue Exception => e
|
106
|
-
|
110
|
+
Log.error "[#{Chimp.get_job_uuid}] self.instances"
|
111
|
+
Log.error "[#{Chimp.get_job_uuid}] #{e.message}"
|
107
112
|
end
|
108
113
|
|
109
114
|
return instances
|
@@ -114,7 +119,7 @@ module Chimp
|
|
114
119
|
#
|
115
120
|
def Connection.api16_call(query)
|
116
121
|
|
117
|
-
|
122
|
+
Thread.current[:retry] = true
|
118
123
|
retries = 5
|
119
124
|
attempts = 0
|
120
125
|
sleep_for = 20
|
@@ -128,56 +133,78 @@ module Chimp
|
|
128
133
|
http = Net::HTTP.new(@endpoint, 443)
|
129
134
|
http.use_ssl = true
|
130
135
|
|
131
|
-
Log.debug "Querying API for: #{query}"
|
132
|
-
|
136
|
+
Log.debug "[#{Chimp.get_job_uuid}] Querying API for: #{query}"
|
133
137
|
|
134
138
|
while attempts < retries
|
135
|
-
|
139
|
+
Log.debug "[#{Chimp.get_job_uuid}] Attempt is: #{attempts.to_s}"
|
140
|
+
Log.debug "[#{Chimp.get_job_uuid}] Retry is: #{Thread.current[:retry].to_s}"
|
141
|
+
if Thread.current[:retry]
|
136
142
|
if attempts > 0
|
137
|
-
Log.debug "Retrying..."
|
143
|
+
Log.debug "[#{Chimp.get_job_uuid}] Retrying..."
|
138
144
|
sleep_time = sleep_for * attempts
|
139
145
|
# Add a random amount to avoid staggering calls
|
140
146
|
sleep_time += rand(15)
|
141
147
|
|
142
|
-
Log.debug "Sleeping between retries for #{sleep_time}"
|
148
|
+
Log.debug "[#{Chimp.get_job_uuid}] Sleeping between retries for #{sleep_time}"
|
143
149
|
sleep(sleep_time)
|
144
150
|
end
|
145
151
|
|
146
|
-
Log.debug "Attempt # #{attempts+1} at querying the API" unless attempts == 0
|
152
|
+
Log.debug "[#{Chimp.get_job_uuid}] Attempt # #{attempts+1} at querying the API" unless attempts == 0
|
147
153
|
|
148
154
|
time = Benchmark.measure do
|
149
|
-
|
150
|
-
|
155
|
+
begin
|
156
|
+
Log.debug "[#{Chimp.get_job_uuid}] HTTP Making http request"
|
157
|
+
Thread.current[:response] = http.request(get)
|
158
|
+
Log.debug "[#{Chimp.get_job_uuid}] HTTP Request complete"
|
159
|
+
attempts += 1
|
160
|
+
rescue Exception => e
|
161
|
+
Log.error "[#{Chimp.get_job_uuid}] Exception when making the HTTP request"
|
162
|
+
end
|
163
|
+
|
151
164
|
end
|
152
165
|
|
153
|
-
Log.debug "API Request time: #{time.real} seconds"
|
166
|
+
Log.debug "[#{Chimp.get_job_uuid}] API Request time: #{time.real} seconds"
|
154
167
|
Log.debug "[#{Chimp.get_job_uuid}] API Query was: #{query}"
|
155
168
|
|
156
169
|
# Validate API response
|
157
|
-
|
170
|
+
Log.debug "[#{Chimp.get_job_uuid}] Validating..."
|
171
|
+
instances = validate_response(Thread.current[:response], query)
|
158
172
|
else
|
159
173
|
# We dont retry, exit the loop.
|
174
|
+
Log.debug "[#{Chimp.get_job_uuid}] Not retrying, exiting the loop."
|
175
|
+
Thread.current[:retry] = false
|
160
176
|
break
|
161
177
|
end
|
162
178
|
end
|
163
179
|
|
164
180
|
if attempts == retries
|
181
|
+
|
182
|
+
Log.error "[#{Chimp.get_job_uuid}] Api call failed more than #{retries} times."
|
183
|
+
|
165
184
|
Chimp.set_failure(true)
|
185
|
+
Log.error "[#{Chimp.get_job_uuid}] Set failure to true because of max retries"
|
186
|
+
|
166
187
|
instances = []
|
167
188
|
raise "[#{Chimp.get_job_uuid}] Api call failed more than #{retries} times."
|
168
189
|
end
|
169
190
|
|
170
191
|
rescue Exception => e
|
171
|
-
Log.
|
172
|
-
Log.
|
173
|
-
|
192
|
+
Log.error "[#{Chimp.get_job_uuid}] #{e.message}"
|
193
|
+
Log.error "[#{Chimp.get_job_uuid}] Catched exception on http request to the api, retrying"
|
194
|
+
|
195
|
+
# Failure to be set only on maximum retries
|
196
|
+
# Chimp.set_failure(true)
|
174
197
|
|
175
198
|
instances = []
|
176
199
|
attempts += 1
|
177
200
|
retry
|
178
201
|
end
|
179
202
|
|
180
|
-
Log.debug "[#{Chimp.get_job_uuid}] #{instances.count} instances
|
203
|
+
Log.debug "[#{Chimp.get_job_uuid}] API matched #{instances.count} instances" unless instances.nil?
|
204
|
+
|
205
|
+
if instances.nil?
|
206
|
+
Log.error "[#{Chimp.get_job_uuid}] instances is nil!"
|
207
|
+
end
|
181
208
|
|
182
209
|
return instances
|
183
210
|
end
|
@@ -187,8 +214,6 @@ module Chimp
|
|
187
214
|
#
|
188
215
|
def Connection.validate_response(response, query)
|
189
216
|
|
190
|
-
#Log.debug "Validating API response"
|
191
|
-
|
192
217
|
resp_code = response.code
|
193
218
|
# handle response codes we want to work with (200 or 404) and verify json hash from github
|
194
219
|
if resp_code == "200" || resp_code == "404"
|
@@ -199,48 +224,52 @@ module Chimp
|
|
199
224
|
if result.is_a?(Array)
|
200
225
|
# Operate on a 200 or 404 with valid JSON response, catch error messages from github in json hash
|
201
226
|
if result.include? 'message'
|
202
|
-
|
227
|
+
Log.error "[#{Chimp.get_job_uuid}] [CONTENT] Errot: Problem with API request: '#{resp_code} #{response.body}'."
|
228
|
+
raise "[#{Chimp.get_job_uuid}] [CONTENT] Error: Problem with API request: '#{resp_code} #{response.body}'"
|
203
229
|
end
|
204
230
|
if result.include? 'Error'
|
205
|
-
Log.error "[CONTENT] Warning BAD CONTENT: Response content: '#{response.body}'."
|
231
|
+
Log.error "[#{Chimp.get_job_uuid}] [CONTENT] Warning BAD CONTENT: Response content: '#{response.body}'."
|
206
232
|
return {} # Return an empty json
|
207
233
|
end
|
208
|
-
|
234
|
+
|
209
235
|
# Log.debug "We received a valid JSON response, therefore returning it."
|
210
|
-
|
236
|
+
|
237
|
+
Thread.current[:retry] = false
|
238
|
+
|
239
|
+
Log.debug "[#{Chimp.get_job_uuid}] Validated and returning size of #{result.size} "
|
211
240
|
return result
|
212
241
|
end
|
213
242
|
rescue JSON::ParserError
|
214
|
-
Log.error "Warning: Expected JSON response but was unable to parse!"
|
243
|
+
Log.error "[#{Chimp.get_job_uuid}] Warning: Expected JSON response but was unable to parse!"
|
215
244
|
#Log.error "Warning: #{response.body}!"
|
216
245
|
|
217
246
|
return {} # Return an empty result
|
218
247
|
end
|
219
248
|
|
220
249
|
elsif resp_code == "502"
|
221
|
-
Log.debug "Api returned code: 502"
|
222
|
-
Log.debug "Query was: #{query}"
|
250
|
+
Log.debug "[#{Chimp.get_job_uuid}] Api returned code: 502"
|
251
|
+
Log.debug "[#{Chimp.get_job_uuid}] Query was: #{query}"
|
223
252
|
|
224
|
-
|
253
|
+
Thread.current[:retry] = true
|
225
254
|
|
226
255
|
elsif resp_code == "500"
|
227
|
-
Log.debug "Api returned code: 500"
|
228
|
-
Log.debug "Query was: #{query}"
|
256
|
+
Log.debug "[#{Chimp.get_job_uuid}] Api returned code: 500"
|
257
|
+
Log.debug "[#{Chimp.get_job_uuid}] Query was: #{query}"
|
229
258
|
|
230
|
-
|
259
|
+
Thread.current[:retry] = true
|
231
260
|
|
232
261
|
elsif resp_code == "504"
|
233
|
-
Log.debug "Api returned code: 504"
|
234
|
-
Log.debug "Query was: #{query}"
|
262
|
+
Log.debug "[#{Chimp.get_job_uuid}] Api returned code: 504"
|
263
|
+
Log.debug "[#{Chimp.get_job_uuid}] Query was: #{query}"
|
235
264
|
|
236
|
-
|
265
|
+
Thread.current[:retry] = true
|
237
266
|
|
238
267
|
else
|
239
268
|
# We are here because response was not 200 or 404
|
240
269
|
# Any http response code that is not 200 / 404 / 500 / 502 should error out.
|
241
|
-
Log.error "ERROR: Got '#{resp_code} #{response.msg}' response from api! "
|
242
|
-
Log.error "Query was: #{query}"
|
243
|
-
raise "Couldnt contact the API"
|
270
|
+
Log.error "[#{Chimp.get_job_uuid}] ERROR: Got '#{resp_code} #{response.msg}' response from api! "
|
271
|
+
Log.error "[#{Chimp.get_job_uuid}] Query was: #{query}"
|
272
|
+
raise "[#{Chimp.get_job_uuid}] Couldnt contact the API"
|
244
273
|
return {}
|
245
274
|
end
|
246
275
|
end
|
@@ -386,6 +415,7 @@ module Chimp
|
|
386
415
|
params+="&ignore_lock=true"
|
387
416
|
end
|
388
417
|
# self is the actual Server object
|
418
|
+
Log.debug "[#{Chimp.get_job_uuid}] Running executable"
|
389
419
|
task = self.object.run_executable(script_href + params)
|
390
420
|
return task
|
391
421
|
end
|
data/lib/right_chimp/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_chimp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.2
|
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: 2015-
|
12
|
+
date: 2015-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 0.11.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: right_api_client
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>'
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '1.5'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>'
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '1.5'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: rspec
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|