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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68a71a4607fe41ceb5ecdca8da6bbb3286943eed
|
4
|
+
data.tar.gz: 447f4532707c1a4a5f27850af6a799c3588825b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
|
-
|
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
|
-
@
|
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
|
-
|
25
|
+
@queue_mutex.synchronize {
|
26
|
+
raise AuditingOverflowError if @queue.size >= @maximum_queue_size
|
30
27
|
@queue.push({:level => level, :data => data})
|
31
|
-
|
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 =
|
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
|
-
@
|
53
|
-
|
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
|
-
|
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
|
71
|
-
|
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
|
-
|
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
|
90
|
+
def wait_for_worker_to_clear_queue(timeout)
|
92
91
|
start_time = Time.now
|
93
|
-
until ((@
|
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
|
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
|
-
|
123
|
-
sleep_while_still_running(
|
124
|
-
|
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 ==
|
165
|
+
until ((false == running?) or ((Time.now - start_time) >= desired_delay)) do
|
179
166
|
sleep(0.1)
|
180
167
|
end
|
181
168
|
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
|
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.
|
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.
|
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
|
+
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
|
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
|
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.
|
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.
|
153
|
+
version: '0.2'
|
154
154
|
- !ruby/object:Gem::Dependency
|
155
155
|
name: soar_configured_factory
|
156
156
|
requirement: !ruby/object:Gem::Requirement
|