Skip to content

Commit

Permalink
Merge branch 'phpunit'
Browse files Browse the repository at this point in the history
  • Loading branch information
jky-yy committed Jul 6, 2019
2 parents 51b6f40 + 15de37f commit c1e09dc
Show file tree
Hide file tree
Showing 25 changed files with 728 additions and 55 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
language: php

php:
- '5.6'
- '7.0'
- '7.1'
- '7.2'
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
[![Build Status](https://travis-ci.com/jukylin/jaeger-php.svg?branch=master)](https://travis-ci.com/jukylin/jaeger-php)

[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%205.6-8892BF.svg)](https://php.net/)
[![License](https://img.shields.io/github/license/jukylin/jaeger-php.svg)](https://github.com/jukylin/jaeger-php/blob/master/LICENSE)
[![Coverage Status](https://coveralls.io/repos/github/jukylin/jaeger-php/badge.svg?branch=master)](https://coveralls.io/github/jukylin/jaeger-php?branch=master)
# jaeger-php

## principle of Distributed Tracing
Expand Down Expand Up @@ -81,7 +83,7 @@ $config->setDisabled(true);

## Zipkin B3 Propagation

> not support ```128bit``` and ```Distributed context propagation ```
> not support ```Distributed context propagation ```
```
$config::$propagator = \Jaeger\Constants\PROPAGATOR_ZIPKIN;
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"test": "./vendor/bin/phpunit"
},
"require-dev": {
"phpunit/phpunit": "^6"
"phpunit/phpunit": "^5",
"php-coveralls/php-coveralls": "^1.0"
}
}
5 changes: 4 additions & 1 deletion example/HTTP.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,17 @@
$config = Config::getInstance();
$config->gen128bit();

$config::$propagator = Jaeger\Constants\PROPAGATOR_ZIPKIN;

$tracer = $config->initTracer('example', '0.0.0.0:6831');

$injectTarget = [];
$spanContext = $tracer->extract(Formats\TEXT_MAP, $_SERVER);
$serverSpan = $tracer->startSpan('example HTTP', ['child_of' => $spanContext]);
$serverSpan->addBaggageItem("version", "1.8.9");

print_r($serverSpan->getContext());
$tracer->inject($serverSpan->getContext(), Formats\TEXT_MAP, $_SERVER);
print_r($_SERVER);exit;
//init server span end
$clientTracer = $config->initTracer('HTTP');

Expand Down
12 changes: 10 additions & 2 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,12 @@
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
forceCoversAnnotation="false"
printerClass="PHPUnit\TextUI\ResultPrinter"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
stopOnRisky="false"
testSuiteLoaderClass="PHPUnit\Runner\StandardTestSuiteLoader"
timeoutForSmallTests="1"
timeoutForMediumTests="10"
timeoutForLargeTests="60"
Expand All @@ -29,8 +27,18 @@
</testsuite>
</testsuites>
<filter>
<blacklist>
<file>./src/Jaeger/Reporter/Reporter.php</file>
<file>./src/Jaeger/Sampler/Sampler.php</file>
<file>./src/Jaeger/Transport/Transport.php</file>
<file>./src/Jaeger/Thrift</file>
</blacklist>
<whitelist>
<directory>./src</directory>
</whitelist>
</filter>
<logging>
<log type="coverage-text" target="php://stdout" showUncoveredFiles="true" showOnlySummary="true"/>
<log type="coverage-clover" target="build/logs/clover.xml"/>
</logging>
</phpunit>
2 changes: 0 additions & 2 deletions src/Jaeger/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ class Config {

private $scopeManager = null;

private $tags = [];

private $gen128bit = false;

public static $tracer = null;
Expand Down
4 changes: 2 additions & 2 deletions src/Jaeger/Jaeger.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ public function inject(SpanContext $spanContext, $format, &$carrier){
if($format == Formats\TEXT_MAP){
$this->propagator->inject($spanContext, $format, $carrier);
}else{
throw new \Exception("not support format");
throw new \Exception("not support format $format");
}
}

Expand All @@ -155,7 +155,7 @@ public function extract($format, $carrier){
if($format == Formats\TEXT_MAP){
return $this->propagator->extract($format, $carrier);
}else{
throw new \Exception("not support format");
throw new \Exception("not support format $format");
}
}

Expand Down
16 changes: 11 additions & 5 deletions src/Jaeger/Propagator/JaegerPropagator.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public function inject(SpanContext $spanContext, $format, &$carrier){
public function extract($format, $carrier){
$spanContext = new SpanContext(0, 0, 0, null, 0);
foreach ($carrier as $k => $v){

$k = strtolower($k);
$v = urldecode($v);
if($k == Constants\Tracer_State_Header_Name){
Expand All @@ -50,7 +51,9 @@ public function extract($format, $carrier){

}elseif(stripos($k, Constants\Trace_Baggage_Header_Prefix) !== false){
$safeKey = str_replace(Constants\Trace_Baggage_Header_Prefix, "", $k);
$spanContext->withBaggageItem($safeKey, $v);
if($safeKey != "") {
$spanContext->withBaggageItem($safeKey, $v);
}
}elseif($k == Constants\Jaeger_Debug_Header){
$spanContext->debugId = $v;
}elseif($k == Constants\Jaeger_Baggage_Header){
Expand All @@ -60,12 +63,15 @@ public function extract($format, $carrier){
// "key2" : "value2",
// "key3" : "value3" }
$parseVal = explode(',', $v);
foreach ($parseVal as $val){
$kv = explode('=', trim($val));
if(count($kv)){
$spanContext->withBaggageItem($kv[0], $kv[1]);
foreach ($parseVal as $val) {
if(stripos($v, '=') !== false) {
$kv = explode('=', trim($val));
if (count($kv) == 2) {
$spanContext->withBaggageItem($kv[0], $kv[1]);
}
}
}

}
}

Expand Down
4 changes: 2 additions & 2 deletions src/Jaeger/Scope.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ class Scope implements \OpenTracing\Scope{
/**
* @var MockScopeManager
*/
private $scopeManager;
private $scopeManager = null;

/**
* @var span
*/
private $span;
private $span = null;

/**
* @var bool
Expand Down
2 changes: 1 addition & 1 deletion src/Jaeger/Span.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public function setTag($key, $value){
/**
* Adds a log record to the span
*
* @param array $fields
* @param array $fields [key => val]
* @param int|float|\DateTimeInterface $timestamp
* @throws SpanAlreadyFinished if the span is already finished
*/
Expand Down
2 changes: 2 additions & 0 deletions src/Jaeger/SpanContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class SpanContext implements \OpenTracing\SpanContext{
public $flags;

// Distributed Context baggage. The is a snapshot in time.
// key => val
public $baggage;

// debugID can be set to some correlation ID when the context is being
Expand Down Expand Up @@ -128,6 +129,7 @@ public function hexToSignedInt($hex)
return intval($bigAdd);
}


public function traceIdToString($traceId)
{
$len = strlen($traceId);
Expand Down
8 changes: 7 additions & 1 deletion src/Jaeger/Transport/TransportUdp.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
namespace Jaeger\Transport;

use Jaeger\Jaeger;
use Jaeger\Thrift\AgentClient;
use Jaeger\Thrift\JaegerThriftSpan;
use Jaeger\Thrift\Process;
use Jaeger\Thrift\Span;
Expand Down Expand Up @@ -147,7 +148,7 @@ public function flush(){
}

$spanNum = 0;
$udp = new UdpClient(self::$hostPort);
$udp = new UdpClient(self::$hostPort, new AgentClient());

foreach (self::$batchs as $batch){
$spanNum += count($batch['thriftSpans']);
Expand All @@ -159,4 +160,9 @@ public function flush(){

return $spanNum;
}


public function getBatchs(){
return self::$batchs;
}
}
11 changes: 7 additions & 4 deletions src/Jaeger/UdpClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
use Jaeger\Thrift\AgentClient;

/**
* 把数据发射到 jaeger-agent
* send thrift to jaeger-agent
* Class UdpClient
* @package Jaeger
*/
Expand All @@ -31,8 +31,11 @@ class UdpClient{

private $socket = '';

public function __construct($hostPost){
private $agentClient = null;

public function __construct($hostPost, AgentClient $agentClient){
list($this->host, $this->post) = explode(":", $hostPost);
$this->agentClient = $agentClient;
$this->socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
}

Expand All @@ -46,12 +49,12 @@ public function isOpen(){


/**
* 发送数据
* send thrift
* @param $batch
* @return bool
*/
public function emitBatch($batch){
$buildThrift = (new AgentClient())->buildThrift($batch);
$buildThrift = $this->agentClient->buildThrift($batch);
if(isset($buildThrift['len']) && $buildThrift['len'] && $this->isOpen()) {
$len = $buildThrift['len'];
$enitThrift = $buildThrift['thriftStr'];
Expand Down
115 changes: 112 additions & 3 deletions tests/JaegerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,134 @@
use Jaeger\Reporter\RemoteReporter;
use Jaeger\Sampler\ConstSampler;
use Jaeger\ScopeManager;
use Jaeger\Span;
use Jaeger\Transport\TransportUdp;
use PHPUnit\Framework\TestCase;
use OpenTracing\Formats;
use Jaeger\SpanContext;
use Jaeger\Constants;
use Jaeger\Propagator\JaegerPropagator;

class JaegerTest extends TestCase
{

public function testGetEnvTags(){

$_SERVER['JAEGER_TAGS'] = 'a=b,c=d';
public function getJaeger(){

$tranSport = new TransportUdp();
$reporter = new RemoteReporter($tranSport);
$sampler = new ConstSampler();
$scopeManager = new ScopeManager();

$Jaeger = new Jaeger('getEnvTags', $reporter, $sampler, $scopeManager);
return new Jaeger('jaeger', $reporter, $sampler, $scopeManager);
}


public function testNew(){
$Jaeger = $this->getJaeger();
$this->assertInstanceOf(Jaeger::class, $Jaeger);
}

public function testGetEnvTags(){

$_SERVER['JAEGER_TAGS'] = 'a=b,c=d';
$Jaeger = $this->getJaeger();
$tags = $Jaeger->getEnvTags();

$this->assertTrue(count($tags) > 0);
}


public function testSetTags(){
$Jaeger = $this->getJaeger();

$Jaeger->setTags(['version' => '2.0.0']);
$this->assertTrue($Jaeger->tags['version'] == '2.0.0');
}


public function testInject(){
$Jaeger = $this->getJaeger();
$Jaeger->setPropagator(new JaegerPropagator());

$context = new SpanContext(1, 1, 1, null, 1);

$Jaeger->inject($context, Formats\TEXT_MAP, $_SERVER);
$this->assertTrue('0:1:1:1' == $_SERVER[strtoupper(Constants\Tracer_State_Header_Name)]);
}


public function testInjectUnSupportFormat(){
$Jaeger = $this->getJaeger();
$Jaeger->setPropagator(new JaegerPropagator());

$context = new SpanContext(1, 1, 1, null, 1);
$this->expectExceptionMessage('not support format http_headers');

$Jaeger->inject($context, Formats\HTTP_HEADERS, $_SERVER);
}


public function testExtract(){
$Jaeger = $this->getJaeger();
$Jaeger->setPropagator(new JaegerPropagator());

$carrier[strtoupper(Constants\Tracer_State_Header_Name)] = '1:1:1:1';
$spanContext = $Jaeger->extract(Formats\TEXT_MAP, $carrier);
$this->assertTrue($spanContext->parentId == 1);
$this->assertTrue($spanContext->traceIdLow == 1);
$this->assertTrue($spanContext->flags == 1);
$this->assertTrue($spanContext->spanId == 1);
}


public function testExtractUnSupportFormat(){
$Jaeger = $this->getJaeger();
$Jaeger->setPropagator(new JaegerPropagator());

$_SERVER[strtoupper(Constants\Tracer_State_Header_Name)] = '1:1:1:1';
$this->expectExceptionMessage('not support format http_headers');

$Jaeger->extract(Formats\HTTP_HEADERS, $_SERVER);
}


public function testStartSpan(){
$Jaeger = $this->getJaeger();
$Jaeger->startSpan('test');
$this->assertNotEmpty($Jaeger->getSpans());
}


public function testReportSpan(){
$Jaeger = $this->getJaeger();
$Jaeger->startSpan('test');
$Jaeger->reportSpan();
$this->assertEmpty($Jaeger->getSpans());
}

public function testStartActiveSpan(){
$Jaeger = $this->getJaeger();
$Jaeger->startActiveSpan('test');

$this->assertNotEmpty($Jaeger->getSpans());
}


public function testGetActiveSpan(){
$Jaeger = $this->getJaeger();
$Jaeger->startActiveSpan('test');

$span = $Jaeger->getActiveSpan();

$this->assertInstanceOf(Span::class, $span);
}


public function testFlush(){
$Jaeger = $this->getJaeger();
$Jaeger->startSpan('test');
$Jaeger->flush();
$this->assertEmpty($Jaeger->getSpans());
}
}
Loading

0 comments on commit c1e09dc

Please sign in to comment.