palo_alto 0.3.2 → 0.5.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/lib/palo_alto/log.rb CHANGED
@@ -12,7 +12,7 @@ module PaloAlto
12
12
  class Log < Enumerator
13
13
  def initialize(client:, query:, log_type:, nlogs: 20, dir: :backward, show_detail: false, days: 7) # rubocop:disable Metrics/MethodLength,Metrics/ParameterLists
14
14
  @client = client
15
- payload = {
15
+ @log_query_payload = {
16
16
  type: 'log',
17
17
  'log-type': log_type,
18
18
  nlogs: nlogs,
@@ -22,15 +22,22 @@ module PaloAlto
22
22
  }
23
23
 
24
24
  if days
25
- payload[:query] += " AND (receive_time geq '#{(Time.now - days * 3600 * 24).strftime('%Y/%m/%d %H:%M:%S')}')"
25
+ @log_query_payload[:query] += " AND (receive_time geq '#{(Time.now - days * 3600 * 24).strftime('%Y/%m/%d %H:%M:%S')}')"
26
26
  end
27
27
 
28
- result = @client.execute(payload)
28
+ run_query
29
+
30
+ @first_result = fetch_result
31
+ super
32
+ end
33
+
34
+ def run_query
35
+ result = @client.execute(@log_query_payload)
29
36
  @job_id = result.at_xpath('response/result/job').text
37
+ warn "#{@client.host} #{Time.now}: Got job id #{@job_id} for log query"
38
+
30
39
  @count = nil
31
40
  @skip = 0
32
- @first_result = fetch_result
33
- super
34
41
  end
35
42
 
36
43
  def restore_first
@@ -46,17 +53,24 @@ module PaloAlto
46
53
  def fetch_result # rubocop:disable Metrics/MethodLength
47
54
  return nil if @count && @skip == @count
48
55
 
49
- payload = {
50
- type: 'log',
51
- action: 'get',
52
- 'job-id': @job_id,
53
- skip: @skip
54
- }
55
-
56
56
  i = 0
57
57
  loop do
58
58
  sleep 0.5 if i.positive?
59
- @current_result = @client.execute(payload)
59
+ begin
60
+ payload = {
61
+ type: 'log',
62
+ action: 'get',
63
+ 'job-id': @job_id,
64
+ skip: @skip
65
+ }
66
+ @current_result = @client.execute(payload)
67
+ rescue PaloAlto::UnknownErrorException => e
68
+ if e.message == 'Query timed out'
69
+ warn 'Retrying log query'
70
+ run_query
71
+ retry
72
+ end
73
+ end
60
74
  i += 1
61
75
  break if @current_result.at_xpath('response/result/job/status').text == 'FIN'
62
76
  end