Skip to content
This repository has been archived by the owner on Oct 3, 2023. It is now read-only.

SpanData now implements stackTraceHashId() #154

Merged
merged 3 commits into from
Apr 2, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/Trace/SpanData.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,14 @@ class SpanData
*/
private $kind;

/**
* An optional value to de-dup the stackTrace array. Represented as a
* hexadecimal string.
*
* @var string
*/
private $stackTraceHashId;

/**
* Instantiate a new SpanData instance.
*
Expand Down Expand Up @@ -303,6 +311,21 @@ public function stackTrace()
return $this->stackTrace;
}

/**
* Return a hash id for this span's stackTrace in hexadecimal
*
* @return string
*/
public function stackTraceHashId()
{
if (!isset($this->stackTraceHashId)) {
// take the lower 16 digits of the md5
$md5 = md5(serialize($this->stackTrace));
$this->stackTraceHashId = substr($md5, 16);
}
return $this->stackTraceHashId;
}

/**
* Whether or not this span is in the same process as its parent.
*
Expand Down
18 changes: 18 additions & 0 deletions tests/unit/Trace/SpanDataTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,22 @@ public function spanDataOptions()
['kind', Span::KIND_SERVER]
];
}

public function testStackTraceHashIdIsRepeatable()
{
$stackTrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
$startTime = new \DateTime();
$endTime = new \DateTime();
$spanData = new SpanData('span-name', 'aaa', 'bbb', $startTime, $endTime, [
'stackTrace' => $stackTrace
]);

$spanData2 = new SpanData('span-name2', 'aaa', 'bbb', $startTime, $endTime, [
'stackTrace' => $stackTrace
]);

$hashId = $spanData->stackTraceHashId();
$this->assertInternalType('string', $hashId);
$this->assertEquals($hashId, $spanData2->stackTraceHashId());
}
}