File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 66
77use LaravelTrace \LaravelTrace \Context \TraceContext ;
88use LaravelTrace \LaravelTrace \Span \Span ;
9+ use Throwable ;
910
1011final class SpanScope
1112{
@@ -22,16 +23,42 @@ public function span(): Span
2223 return $ this ->span ;
2324 }
2425
25- public function close (): void
26+ public function close (): Span
2627 {
2728 if ($ this ->closed ) {
28- return ;
29+ return $ this -> span ;
2930 }
3031
3132 $ this ->closed = true ;
3233
34+ $ completed = $ this ->tracer ->complete (
35+ $ this ->span ,
36+ );
37+
3338 $ this ->tracer ->setContext (
3439 $ this ->previousContext ,
3540 );
41+
42+ return $ completed ;
43+ }
44+
45+ public function fail (Throwable $ exception ): Span
46+ {
47+ if ($ this ->closed ) {
48+ return $ this ->span ;
49+ }
50+
51+ $ this ->closed = true ;
52+
53+ $ failed = $ this ->tracer ->fail (
54+ $ this ->span ,
55+ $ exception ,
56+ );
57+
58+ $ this ->tracer ->setContext (
59+ $ this ->previousContext ,
60+ );
61+
62+ return $ failed ;
3663 }
3764}
Original file line number Diff line number Diff line change 44
55namespace LaravelTrace \LaravelTrace \Tracing ;
66
7+ use DateTimeImmutable ;
78use LaravelTrace \LaravelTrace \Context \TraceContext ;
89use LaravelTrace \LaravelTrace \Contracts \TraceContextStore ;
910use LaravelTrace \LaravelTrace \Contracts \Tracer as TracerContract ;
@@ -20,7 +21,15 @@ public function __construct(
2021
2122 public function start (string $ name ): Trace
2223 {
23- return Trace::start ($ name );
24+ $ trace = Trace::start ($ name );
25+
26+ $ this ->setContext (
27+ new TraceContext (
28+ traceId: $ trace ->id ,
29+ ),
30+ );
31+
32+ return $ trace ;
2433 }
2534
2635 public function span (
@@ -67,4 +76,18 @@ public function clearContext(): void
6776 {
6877 $ this ->contextStore ->clear ();
6978 }
79+
80+ public function complete (Span $ span ): Span
81+ {
82+ return $ span ->complete (
83+ new DateTimeImmutable ,
84+ );
85+ }
86+
87+ public function fail (Span $ span ): Span
88+ {
89+ return $ span ->fail (
90+ new DateTimeImmutable ,
91+ );
92+ }
7093}
Original file line number Diff line number Diff line change 5151});
5252
5353it ('sets the trace context when starting a trace ' , function () {
54- $ store = new InMemoryTraceContextStore () ;
54+ $ store = new InMemoryTraceContextStore ;
5555 $ tracer = new Tracer ($ store );
5656
5757 $ trace = $ tracer ->start ('CreateOrder ' );
Original file line number Diff line number Diff line change 4949 ->and ($ child ->parentId )
5050 ->toBe ($ parent ->id );
5151});
52+
53+ it ('completes a span ' , function () {
54+ $ traceId = TraceId::generate ();
55+
56+ $ span = Span::start (
57+ traceId: $ traceId ,
58+ name: 'ReserveInventory ' ,
59+ type: SpanType::Action,
60+ );
61+
62+ $ finishedAt = new DateTimeImmutable ;
63+
64+ $ completed = $ span ->complete ($ finishedAt );
65+
66+ expect ($ completed ->status )
67+ ->toBe (SpanStatus::Completed)
68+ ->and ($ completed ->finishedAt )
69+ ->toBe ($ finishedAt )
70+ ->and ($ span ->status )
71+ ->toBe (SpanStatus::Running);
72+ });
73+
74+ it ('fails a span ' , function () {
75+ $ traceId = TraceId::generate ();
76+
77+ $ span = Span::start (
78+ traceId: $ traceId ,
79+ name: 'ReserveInventory ' ,
80+ type: SpanType::Action,
81+ );
82+
83+ $ finishedAt = new DateTimeImmutable ;
84+
85+ $ failed = $ span ->fail ($ finishedAt );
86+
87+ expect ($ failed ->status )
88+ ->toBe (SpanStatus::Failed)
89+ ->and ($ failed ->finishedAt )
90+ ->toBe ($ finishedAt )
91+ ->and ($ span ->status )
92+ ->toBe (SpanStatus::Running);
93+ });
Original file line number Diff line number Diff line change 44
55use LaravelTrace \LaravelTrace \Context \InMemoryTraceContextStore ;
66use LaravelTrace \LaravelTrace \Span \SpanType ;
7- use LaravelTrace \LaravelTrace \Tracing \SpanScope ;
87use LaravelTrace \LaravelTrace \Tracing \Tracer ;
98
109it ('restores the previous context when closed ' , function () {
11- $ store = new InMemoryTraceContextStore () ;
10+ $ store = new InMemoryTraceContextStore ;
1211 $ tracer = new Tracer ($ store );
1312
1413 $ tracer ->start ('CreateOrder ' );
Original file line number Diff line number Diff line change 22
33declare (strict_types=1 );
44
5+ use LaravelTrace \LaravelTrace \Context \InMemoryTraceContextStore ;
56use LaravelTrace \LaravelTrace \Span \SpanStatus ;
67use LaravelTrace \LaravelTrace \Span \SpanType ;
78use LaravelTrace \LaravelTrace \Trace \TraceStatus ;
89use LaravelTrace \LaravelTrace \Tracing \Tracer ;
910
10- it ('starts a trace ' , function (): void {
11- $ tracer = new Tracer ;
11+ it ('starts a trace ' , function () {
12+ $ tracer = new Tracer (
13+ new InMemoryTraceContextStore (),
14+ );
1215
1316 $ trace = $ tracer ->start ('CreateOrder ' );
1417
1821 ->toBe (TraceStatus::Running);
1922});
2023
21- it ('starts a span inside a trace ' , function (): void {
22- $ tracer = new Tracer ;
24+ it ('starts a span inside a trace ' , function () {
25+ $ tracer = new Tracer (
26+ new InMemoryTraceContextStore (),
27+ );
2328
2429 $ trace = $ tracer ->start ('CreateOrder ' );
2530
26- $ span = $ tracer ->startSpan (
27- trace: $ trace ,
28- name: 'ReserveInventory ' ,
29- type: SpanType::Action,
31+ $ scope = $ tracer ->span (
32+ 'ReserveInventory ' ,
33+ SpanType::Action,
3034 );
3135
36+ $ span = $ scope ->span ();
37+
3238 expect ($ span ->traceId )
3339 ->toBe ($ trace ->id )
3440 ->and ($ span ->name )
You can’t perform that action at this time.
0 commit comments