soar_auditing_provider 1.1.5 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 263b7fc728885f0bc350e4c339cb70c365ab0181
4
- data.tar.gz: 2ef1bee6ad5a0b42568ceb41bdb6a621c3b9df77
3
+ metadata.gz: 68a71a4607fe41ceb5ecdca8da6bbb3286943eed
4
+ data.tar.gz: 447f4532707c1a4a5f27850af6a799c3588825b0
5
5
  SHA512:
6
- metadata.gz: 0bd74895116aaa81c4dc780f42a54a5a569a16d8a3040eb26affabffa64dc43d13cd9ad97ec48a34af55a91a8a4eadb2424806f5df5c79a4fb3b076cb9374ae4
7
- data.tar.gz: 53d08d6854c16b74168a711d9f85a0a7774737d6149c2f2916d2ef2c59fa56e8e40cc8fbaba6f71810140c8e41498fec41fec24287deba3c4cd7fe757bebce2d
6
+ metadata.gz: be08d976091be9c8a35d9a1cc57749f9e9072c54fefb7a013c86e26f81acc67cbc5dc30714434ef12de09e01b1b4eb88b4085d34658145cd2dde091fbf6f5a7c
7
+ data.tar.gz: 129400183873b8d08fe19d619197fc8aa96c907f770d431d9d33cfab650bdbf259b5a31f18e7ef5c3991a9d1155a97a18732dc238e74d3d2057b5d05607b1c3e
@@ -74,8 +74,8 @@ module SoarAuditingProvider
74
74
  detail
75
75
  end
76
76
 
77
- def flush
78
- @worker.flush
77
+ def flush(timeout: 1)
78
+ @worker.flush(timeout: timeout)
79
79
  end
80
80
 
81
81
  def audit_exception(exception:, level: :error, flow_id: nil)
@@ -130,7 +130,7 @@ module SoarAuditingProvider
130
130
  end
131
131
 
132
132
  def create_auditing_worker
133
- @worker = AuditingWorker.new
133
+ @worker = AuditingWorker.instance
134
134
  @worker.configure(queue_worker_configuration: @configuration['queue_worker'], auditor_audit_method: method(:super_class_caller))
135
135
  @worker.start
136
136
  end
@@ -1,19 +1,15 @@
1
1
  require 'soar_thread_worker/thread_worker'
2
+ require 'singleton'
2
3
 
3
4
  module SoarAuditingProvider
4
5
  class AuditingWorker < SoarThreadWorker::ThreadWorker
5
- attr_reader :failed_audit_attempts
6
- attr_reader :latest_failed_audit_timestamp
7
- attr_reader :latest_failed_audit_error_message
8
- attr_reader :successful_audits
9
- attr_reader :dequeued_audits
10
- attr_reader :latest_successful_audit_timespan
11
- attr_reader :latest_successful_audit_timestamp
6
+ include Singleton
12
7
 
13
8
  def initialize
14
9
  @queue = Queue.new
15
- @start_mutex = Mutex.new
10
+ @queue_mutex = Mutex.new
16
11
  initialize_metrics
12
+ super
17
13
  end
18
14
 
19
15
  def configure(queue_worker_configuration: ,auditor_audit_method: )
@@ -26,31 +22,27 @@ module SoarAuditingProvider
26
22
  end
27
23
 
28
24
  def enqueue(level, data)
29
- if @queue.size < @maximum_queue_size then
25
+ @queue_mutex.synchronize {
26
+ raise AuditingOverflowError if @queue.size >= @maximum_queue_size
30
27
  @queue.push({:level => level, :data => data})
31
- else
32
- raise AuditingOverflowError
33
- end
34
- ensure_worker_is_running
35
- end
36
-
37
- def start(verbose: false)
38
- @start_mutex.synchronize {
39
- if not running? then
40
- super()
41
- $stderr.puts("Auditing worker was not running and respawned") if verbose
42
- end
28
+ start
43
29
  }
44
30
  end
45
31
 
46
32
  def execute
47
- audit_event = @queue.pop
33
+ audit_event = nil
34
+ @queue_mutex.synchronize {
35
+ @thread.exit if @queue.empty?
36
+ audit_event = @queue.pop
37
+ }
48
38
  @dequeued_audits += 1
49
39
  failed_before = false
50
40
  begin
51
41
  if @stopping
52
- @queue.push(audit_event) if audit_event #push the event back into the queue so that fallback flush mechanism can deal with this audit event
53
- return true #indicates to thread worder that we are done executing since we are in the process of stopping
42
+ @queue_mutex.synchronize {
43
+ @queue.push(audit_event) if audit_event #push the event back into the queue so that fallback flush mechanism can deal with this audit event
44
+ @thread.exit
45
+ }
54
46
  end
55
47
  exponential_back_off(start_at_last_attempt: failed_before) {
56
48
  time_before_audit = Time.now
@@ -64,13 +56,20 @@ module SoarAuditingProvider
64
56
  failed_before = true
65
57
  retry
66
58
  end
67
- return false #indicates to thread worder that we are not done executing
59
+
60
+ @queue_mutex.synchronize {
61
+ return false if not @queue.empty? #indicates to thread worker that we are not done executing since the queue is not empty
62
+ @thread.exit
63
+ }
68
64
  end
69
65
 
70
- def flush(timeout = 1)
71
- ensure_worker_is_running
66
+ def flush(timeout:)
67
+ start #start the worker thread just in case there are items enqueued
68
+ sleep(0.1)
69
+ stop(immediate: false)
72
70
  wait_for_worker_to_clear_queue(timeout)
73
- fallback_flush_to_stderr if @queue.size > 0
71
+ stop(immediate: true)
72
+ fallback_flush_to_stderr (timeout) if not @queue.empty?
74
73
  end
75
74
 
76
75
  def status_detail
@@ -88,14 +87,14 @@ module SoarAuditingProvider
88
87
 
89
88
  private
90
89
 
91
- def wait_for_worker_to_clear_queue(timeout = 1)
90
+ def wait_for_worker_to_clear_queue(timeout)
92
91
  start_time = Time.now
93
- until ((@queue.size == 0) or ((Time.now - start_time) >= timeout)) do
92
+ until ((not @thread.alive?) or ((Time.now - start_time) >= timeout)) do
94
93
  sleep(0.1)
95
94
  end
96
95
  end
97
96
 
98
- def fallback_flush_to_stderr(timeout = 1)
97
+ def fallback_flush_to_stderr(timeout)
99
98
  $stderr.puts 'Unable to flush audit entries to auditor, stopping worker and flushing to stderr'
100
99
  ensure_worker_is_stopped
101
100
  start_time = Time.now
@@ -114,22 +113,10 @@ module SoarAuditingProvider
114
113
  $stderr.puts "#{notification}: #{message}"
115
114
  end
116
115
 
117
- def ensure_worker_is_running
118
- start(verbose: true)
119
- end
120
-
121
116
  def ensure_worker_is_stopped
122
- attempt_graceful_stop
123
- sleep_while_still_running(5)
124
- force_stop
125
- end
126
-
127
- def attempt_graceful_stop
128
- @stopping = true
129
- end
130
-
131
- def force_stop
132
- stop
117
+ stop(immediate: false)
118
+ sleep_while_still_running(2)
119
+ stop(immediate: true)
133
120
  end
134
121
 
135
122
  def validate_configuration(queue_worker_configuration)
@@ -175,7 +162,7 @@ module SoarAuditingProvider
175
162
 
176
163
  def sleep_while_still_running(desired_delay)
177
164
  start_time = Time.now
178
- until ((false == @running) or ((Time.now - start_time) >= desired_delay)) do
165
+ until ((false == running?) or ((Time.now - start_time) >= desired_delay)) do
179
166
  sleep(0.1)
180
167
  end
181
168
  end
@@ -1,3 +1,3 @@
1
1
  module SoarAuditingProvider
2
- VERSION = "1.1.5"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -22,12 +22,12 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency 'rake', '~> 10.0'
23
23
  spec.add_development_dependency 'rspec', '~> 3.0'
24
24
  spec.add_development_dependency 'byebug', '~> 9.0.5'
25
- spec.add_development_dependency 'log4r_auditor', '~> 0.0.4'
25
+ spec.add_development_dependency 'log4r_auditor', '~> 1.0.0'
26
26
  spec.add_development_dependency 'soar_flow', '~> 0.1.1'
27
27
  spec.add_development_dependency 'soar_xt', '~> 0.0.3'
28
28
 
29
29
  spec.add_dependency 'soar_auditing_provider_api', '~> 0.9.0'
30
30
  spec.add_dependency 'soar_auditing_format', '~> 0.0.5'
31
- spec.add_dependency 'soar_thread_worker', '~> 0.1'
31
+ spec.add_dependency 'soar_thread_worker', '~> 0.2'
32
32
  spec.add_dependency 'soar_configured_factory', '~> 0.1.0'
33
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soar_auditing_provider
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.5
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernst van Graan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-10-12 00:00:00.000000000 Z
12
+ date: 2016-10-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -73,14 +73,14 @@ dependencies:
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 0.0.4
76
+ version: 1.0.0
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 0.0.4
83
+ version: 1.0.0
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: soar_flow
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -143,14 +143,14 @@ dependencies:
143
143
  requirements:
144
144
  - - "~>"
145
145
  - !ruby/object:Gem::Version
146
- version: '0.1'
146
+ version: '0.2'
147
147
  type: :runtime
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - "~>"
152
152
  - !ruby/object:Gem::Version
153
- version: '0.1'
153
+ version: '0.2'
154
154
  - !ruby/object:Gem::Dependency
155
155
  name: soar_configured_factory
156
156
  requirement: !ruby/object:Gem::Requirement