step-track 0.4.4 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/step_track.rb +39 -16
- data/lib/step_track/version.rb +1 -1
- data/test/step_track_test.rb +47 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fca015c0eda1a8f39a54e934b2c5240849b2bf4
|
4
|
+
data.tar.gz: 8a8bc2e016e62b963119984850982eb095ac9e9a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e47f3d294dc30f5e0bf67220ae39a44e4f70a7309abf511564e0ff29e7fe06b2e24d911792b32a7595875c38dc8075dd040833c8e979248dba615e4dc6c5f74
|
7
|
+
data.tar.gz: 1ebaa9ee674a619342c4ee674326776e17ef41f4aaaee6b30f2e5a77d6276195b95a76bfb8c7038a74e834bc96bfb4d2ce0ac32981643d75e14368919b1ceb1c
|
data/lib/step_track.rb
CHANGED
@@ -6,12 +6,22 @@ module StepTrack
|
|
6
6
|
REF = "step_track/%{track}"
|
7
7
|
DEFAULT_CONFIG = {merge_key: :merge, error_key: :error}.freeze
|
8
8
|
|
9
|
+
def get_caller
|
10
|
+
@caller ||= ->() { caller[1].sub(Dir.pwd + "/", "") }
|
11
|
+
end
|
12
|
+
|
13
|
+
def set_caller=(&blk)
|
14
|
+
@caller = blk
|
15
|
+
end
|
16
|
+
|
9
17
|
def init(track, config={})
|
10
18
|
raise ArgumentError, "callback block required" unless block_given?
|
11
19
|
Thread.current[ref(track)] = {
|
20
|
+
track_id: config[:track_id] || Thread.current.object_id,
|
12
21
|
steps: [],
|
13
22
|
callback: Proc.new,
|
14
|
-
time: Time.now
|
23
|
+
time: Time.now,
|
24
|
+
caller: config&.[](:caller) || get_caller.()
|
15
25
|
}.merge(DEFAULT_CONFIG).merge(config)
|
16
26
|
end
|
17
27
|
|
@@ -24,7 +34,7 @@ module StepTrack
|
|
24
34
|
split: Time.now.to_f - (last_step&.[](:time) || track_ref[:time]).to_f,
|
25
35
|
duration: Time.now.to_f - track_ref[:time].to_f,
|
26
36
|
time: Time.now,
|
27
|
-
caller: merge_step&.[](:caller) ||
|
37
|
+
caller: merge_step&.[](:caller) || get_caller.(),
|
28
38
|
step_name: merge_step&.[](:step_name) || name
|
29
39
|
).merge(payload)
|
30
40
|
end
|
@@ -35,28 +45,27 @@ module StepTrack
|
|
35
45
|
Thread.current[ref(track)] = nil
|
36
46
|
steps = track_ref.delete(:steps)
|
37
47
|
steps.each { |step| step.delete(:time) }
|
38
|
-
result = {
|
48
|
+
result = {
|
49
|
+
step_count: steps.count,
|
50
|
+
caller: track_ref[:caller],
|
51
|
+
duration: Time.now.to_f - track_ref[:time].to_f,
|
52
|
+
track_id: track_ref[:track_id]
|
53
|
+
}
|
39
54
|
if err = steps.detect { |s| s.key?(track_ref[:error_key]) }
|
40
55
|
last_step = err.dup
|
41
56
|
else
|
42
57
|
last_step = steps.last&.dup || {}
|
43
58
|
end
|
44
|
-
|
45
|
-
|
46
|
-
steps.each_with_index do |step, i|
|
47
|
-
name = name_dupe = step.delete(:step_name)
|
48
|
-
j = 0
|
49
|
-
while result.key?("step_#{name_dupe}_i".to_sym)
|
50
|
-
j += 1
|
51
|
-
name_dupe = "#{name}_#{j}"
|
52
|
-
end
|
53
|
-
name = name_dupe
|
54
|
-
result.merge!(step.merge(i: i + 1).
|
55
|
-
map { |k, v| ["step_#{name}_#{k}".to_sym, v] }.to_h)
|
56
|
-
end
|
59
|
+
result[:final_step_name] = last_step.delete(:step_name)
|
60
|
+
merge_down_steps!(result, steps)
|
57
61
|
return track_ref[:callback].call(result)
|
58
62
|
end
|
59
63
|
|
64
|
+
def track_id(track)
|
65
|
+
require_init!(track)
|
66
|
+
return Thread.current[ref(track)][:track_id]
|
67
|
+
end
|
68
|
+
|
60
69
|
def partition_into(payload, name)
|
61
70
|
payload, other = payload.partition do |k, _v|
|
62
71
|
k.to_s !~ /^step_#{name}_/
|
@@ -89,4 +98,18 @@ module StepTrack
|
|
89
98
|
def require_init!(track)
|
90
99
|
raise ArgumentError, "track not initialized" unless initialized?(track)
|
91
100
|
end
|
101
|
+
|
102
|
+
def merge_down_steps!(result, steps)
|
103
|
+
steps.each_with_index do |step, i|
|
104
|
+
name = name_dupe = step.delete(:step_name)
|
105
|
+
j = 0
|
106
|
+
while result.key?("step_#{name_dupe}_i".to_sym)
|
107
|
+
j += 1
|
108
|
+
name_dupe = "#{name}_#{j}"
|
109
|
+
end
|
110
|
+
name = name_dupe
|
111
|
+
result.merge!(step.merge(i: i + 1).
|
112
|
+
map { |k, v| ["step_#{name}_#{k}".to_sym, v] }.to_h)
|
113
|
+
end
|
114
|
+
end
|
92
115
|
end
|
data/lib/step_track/version.rb
CHANGED
data/test/step_track_test.rb
CHANGED
@@ -23,6 +23,15 @@ describe "StepTrack" do
|
|
23
23
|
"callback is no proc #{data[:callback].inspect}"
|
24
24
|
assert data[:time] <= Time.now,
|
25
25
|
"time #{data[:time].inspect} > #{Time.now.inspect}"
|
26
|
+
assert_equal data[:track_id], Thread.current.object_id,
|
27
|
+
"track id is #{StepTrack.track_id("test")}"
|
28
|
+
refute_empty data[:caller], "caller is empty"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "stores a track_id when given" do
|
32
|
+
StepTrack.init("test", track_id: "moobar") { }
|
33
|
+
assert_equal "moobar", StepTrack.track_id("test"),
|
34
|
+
"track id is #{StepTrack.track_id("test")}"
|
26
35
|
end
|
27
36
|
end
|
28
37
|
|
@@ -90,11 +99,26 @@ describe "StepTrack" do
|
|
90
99
|
assert_equal 2, result[:step_count]
|
91
100
|
end
|
92
101
|
|
93
|
-
it "
|
102
|
+
it "sets the final step name" do
|
94
103
|
result = StepTrack.done("test")
|
95
104
|
assert_equal "last", result[:final_step_name]
|
96
|
-
|
97
|
-
|
105
|
+
end
|
106
|
+
|
107
|
+
it "sets a duration" do
|
108
|
+
result = StepTrack.done("test")
|
109
|
+
assert result[:duration].is_a?(Float), "duration is no Float"
|
110
|
+
assert result[:duration] > 0.0, "duration is not positive"
|
111
|
+
assert result[:duration] < 1.0, "duration is too long"
|
112
|
+
end
|
113
|
+
|
114
|
+
it "sets a caller" do
|
115
|
+
result = StepTrack.done("test")
|
116
|
+
assert_match %r{#{Regexp.escape(__FILE__)}}, result[:caller]
|
117
|
+
end
|
118
|
+
|
119
|
+
it "does not merge final step into results" do
|
120
|
+
result = StepTrack.done("test")
|
121
|
+
assert !result.key?(:gnu), "merged gnu into result"
|
98
122
|
end
|
99
123
|
|
100
124
|
it "merges the error into result when available" do
|
@@ -106,7 +130,7 @@ describe "StepTrack" do
|
|
106
130
|
|
107
131
|
it "enumerates every step into result" do
|
108
132
|
result = StepTrack.done("test")
|
109
|
-
expected_key_parts = [:split, :duration, :caller]
|
133
|
+
expected_key_parts = [:i, :split, :duration, :caller]
|
110
134
|
|
111
135
|
["step", "last"].each_with_index do |n, i|
|
112
136
|
expected_keys = expected_key_parts.map { |k| "step_#{n}_#{k}".to_sym }
|
@@ -117,7 +141,7 @@ describe "StepTrack" do
|
|
117
141
|
it "enumerate duplicated step names with index in the result" do
|
118
142
|
StepTrack.push("test", "last", gnu: "blu")
|
119
143
|
result = StepTrack.done("test")
|
120
|
-
expected_key_parts = [:split, :duration, :caller]
|
144
|
+
expected_key_parts = [:i, :split, :duration, :caller]
|
121
145
|
|
122
146
|
["step", "last", "last_1"].each_with_index do |n, i|
|
123
147
|
expected_keys = expected_key_parts.map { |k| "step_#{n}_#{k}".to_sym }
|
@@ -125,4 +149,22 @@ describe "StepTrack" do
|
|
125
149
|
end
|
126
150
|
end
|
127
151
|
end
|
152
|
+
|
153
|
+
describe ".track_id" do
|
154
|
+
it "raises when not initialized" do
|
155
|
+
assert_raises ArgumentError do
|
156
|
+
StepTrack.track_id("test")
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
it "gives nil track_id when initialized without track_id" do
|
161
|
+
StepTrack.init("test") { }
|
162
|
+
assert_equal Thread.current.object_id, StepTrack.track_id("test")
|
163
|
+
end
|
164
|
+
|
165
|
+
it "gives configured track_id when initialized with track_id" do
|
166
|
+
StepTrack.init("test", track_id: "1234") { }
|
167
|
+
assert_equal "1234", StepTrack.track_id("test")
|
168
|
+
end
|
169
|
+
end
|
128
170
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: step-track
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthias Geier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|