step-track 0.4.4 → 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.
- 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
|