right_chimp 2.0.1 → 2.0.2
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.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
|