soar_auditing_provider 1.1.5 → 1.2.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.
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