Skip to content

Commit 4daa8f0

Browse files
authored
Merge pull request #8 from heismehrab/v2
refactor: Update middlewares and dependencies to be compatible with PHP 8.3
2 parents bfb0d60 + 990721d commit 4daa8f0

File tree

6 files changed

+43
-80
lines changed

6 files changed

+43
-80
lines changed

composer.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@
2020
"ramsey/uuid": "^3.8",
2121
"ralouphie/getallheaders": "^3.0",
2222
"ircmaxell/random-lib": "^1.2",
23-
"guzzlehttp/guzzle": "^6.3",
24-
"subzerobo/sabalim-action-wrapper": "^1.0"
23+
"guzzlehttp/guzzle": "^6.5",
24+
"subzerobo/sabalim-action-wrapper": "^1.0",
25+
"psr/http-server-handler": "^1.0"
2526
},
2627
"require-dev": {
27-
"phpunit/phpunit": "6.*"
28+
"phpunit/phpunit": "11.3.*"
2829
},
2930
"suggest": {
3031
"ext-xdebug": "Required for processing of request headers",

src/Middlewares/GuzzleAPMMiddleware.php

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88

99
namespace Subzerobo\ElasticApmPhpAgent\Middlewares;
1010

11-
use Psr\Http\Message\RequestInterface;
11+
use Psr\Http\Message\ResponseInterface as Response;
12+
use Psr\Http\Message\ServerRequestInterface as Request;
13+
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
14+
1215
use Subzerobo\ElasticApmPhpAgent\ActionWrappers\APMHandlerAbstract;
1316

1417
class GuzzleAPMMiddleware
@@ -23,35 +26,17 @@ public function __construct(APMHandlerAbstract $actionWrapper)
2326
$this->actionWrapper = $actionWrapper;
2427
}
2528

26-
public function __invoke(callable $handler) {
27-
28-
$apmActionWrapper = $this->actionWrapper;
29-
30-
$before = function($request, $options) use ($apmActionWrapper) {
31-
$type = $options['type'] ?? "General";
32-
$apmActionWrapper->handleBefore($request,$type,[]);
33-
//var_dump( "BTap " . microtime(true) );
34-
};
35-
36-
$after = function($request,$option,$response) use ($apmActionWrapper) {
37-
$type = $options['type'] ?? "General";
38-
$response->then(function (\Psr\Http\Message\ResponseInterface $response) use($apmActionWrapper,$type) {
39-
$apmActionWrapper->handleAfter($response,$type,[]);
40-
});
41-
};
42-
43-
// Tap Function of Guzzle
44-
45-
return function ($request, array $options) use ($handler, $before, $after) {
46-
if ($before) {
47-
$before($request, $options);
48-
}
49-
$response = $handler($request, $options);
50-
if ($after) {
51-
$after($request, $options, $response);
52-
}
53-
return $response;
54-
};
29+
public function __invoke(Request $request, RequestHandler $requestHandler): Response
30+
{
31+
$type = $options['type'] ?? "General";
32+
33+
$this->actionWrapper->handleBefore($request,$type,[]);
34+
35+
$response = $requestHandler->handle($request);
36+
37+
$this->actionWrapper->handleAfter($response,$type,[]);
38+
39+
return $response;
5540
}
5641

5742
}

src/Middlewares/PSR7Middleware.php

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,14 @@
99
namespace Subzerobo\ElasticApmPhpAgent\Middlewares;
1010

1111

12-
use Psr\Container\ContainerInterface;
13-
use Psr\Http\Message\ResponseInterface;
14-
use Psr\Http\Message\ServerRequestInterface;
12+
use Psr\Http\Message\ResponseInterface as Response;
13+
use Psr\Http\Message\ServerRequestInterface as Request;
14+
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
15+
1516
use Subzerobo\ElasticApmPhpAgent\ApmAgent;
16-
use Subzerobo\ElasticApmPhpAgent\Factories\DefaultTransactionNameFactoryAbstract;
17-
use Subzerobo\ElasticApmPhpAgent\Factories\TransactionNameGeneratorInterface;
1817

1918
/**
20-
* Add this middleware as the first middleware to not loose any span
19+
* Add this middleware as the first middleware to not lose any span
2120
*
2221
* Class PSR7Middleware
2322
* @package Subzerobo\ElasticApmPhpAgent\Middlewares
@@ -38,27 +37,24 @@ public function __construct($container, ApmAgent $apmAgent)
3837
}
3938

4039
/**
41-
* @param ServerRequestInterface $request
42-
* @param ResponseInterface $response
43-
* @param callable|null $next
40+
* @param \Psr\Http\Message\ServerRequestInterface $request
41+
* @param \Psr\Http\Server\RequestHandlerInterface $requestHandler
4442
*
45-
* @return ResponseInterface
46-
* @throws \GuzzleHttp\Exception\GuzzleException
43+
* @return \Psr\Http\Message\ResponseInterface
4744
* @throws \Subzerobo\ElasticApmPhpAgent\Exceptions\DuplicateTransactionNameException
4845
* @throws \Subzerobo\ElasticApmPhpAgent\Exceptions\TimerNotStartedException
4946
* @throws \Subzerobo\ElasticApmPhpAgent\Exceptions\TimerNotStoppedException
50-
* @throws \Subzerobo\ElasticApmPhpAgent\Exceptions\UnknownTransactionException
47+
* @throws \Subzerobo\ElasticApmPhpAgent\Exceptions\UnknownTransactionException|\GuzzleHttp\Exception\GuzzleException
5148
* @author alikaviani <a.kaviani@sabavision.ir>
5249
* @since 2019-06-15 09:55
5350
*/
54-
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next=null)
51+
public function __invoke(Request $request, RequestHandler $requestHandler): Response
5552
{
5653
// Start Transaction
5754
$transactionEvent = $this->apmAgent->startTransaction();
5855

5956
// TODO: Implement __invoke() method.
60-
$response = $next($request, $response);
61-
57+
$response = $requestHandler->handle($request);
6258

6359
// Set and Stop Transaction
6460
$transactionEvent->setResult("HTTP " . $response->getStatusCode());
@@ -69,9 +65,12 @@ public function __invoke(ServerRequestInterface $request, ResponseInterface $res
6965
'headers_sent' => true,
7066
'status_code' => $response->getStatusCode(),]
7167
);
68+
7269
$transactionEvent->stop();
70+
7371
$this->apmAgent->renameTransaction();
7472
$this->apmAgent->send();
73+
7574
return $response;
7675
}
7776
}

src/Wrappers/SpanEvent.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,6 @@ public function getSpanID()
131131
*/
132132
public function setSpanName(string $name)
133133
{
134-
$name = strlen($name) > 1024 ? substr($name, 0, 1021).'...' : $name;
135-
136134
$this->span->setName($name);
137135
}
138136

@@ -555,4 +553,4 @@ public function getSpanObject()
555553

556554
return $this->span;
557555
}
558-
}
556+
}

src/Wrappers/Traits/EventTrait.php

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private function initContext(EventSharedData $sharedData) : Context
6969
{
7070
// Generate Random UUIDs
7171
$this->id = UID::Generate(16); //Uuid::uuid4()->toString();
72-
$this->trace_id = $this->trace_id = $_SERVER['HTTP_ELASTIC_APM_TRACEPARENT'] ? : UID::Generate(16); //Uuid::uuid4()->toString();
72+
$this->trace_id = UID::Generate(16); //Uuid::uuid4()->toString();
7373

7474
// Set Shared Context Variable for further use
7575
$this->sharedData = $sharedData;
@@ -278,19 +278,17 @@ final public function setRequest() {
278278
],
279279
'headers' => [
280280
'content_type' => $headers['Content-Type'] ?? '',
281-
'user_agent' => $this->clean_non_chars($headers['User-Agent']) ?? '',
281+
'user_agent' => $headers['User-Agent'] ?? '',
282282
'cookie' => $this->getCookieHeader($headers['Cookie'] ?? ''),
283283
],
284284
'env' => $this->getEnv(),
285285
'cookies' => $this->getCookies(),
286286
];
287-
287+
288288
$ctxRequest = new Context\Request();
289-
try {
290-
$ctxRequest->mergeFromJsonString(json_encode($contextRequestArr));
291-
$this->context->setRequest($ctxRequest);
292-
}catch(\Exception $ex){
293-
}
289+
$ctxRequest->mergeFromJsonString(json_encode($contextRequestArr));
290+
291+
$this->context->setRequest($ctxRequest);
294292
}
295293

296294
/**
@@ -319,11 +317,6 @@ final protected function getEnv()
319317
? $_SERVER
320318
: array_intersect_key($_SERVER, array_flip($envMask));
321319

322-
array_walk($env, function(&$value) {
323-
if (is_array($value)) {
324-
$value = json_encode($value);
325-
}
326-
});
327320
return (object) $env;
328321
}
329322

@@ -359,19 +352,6 @@ final protected function getCookieHeader(string $cookieHeader) : string
359352
// Returns an empty string if cookies are masked.
360353
return empty($cookieMask) ? $cookieHeader : '';
361354
}
362-
363-
/**
364-
* Clean Bad Characters
365-
*
366-
* @param string $string
367-
*
368-
* @return string
369-
* @author alikaviani <a.kaviani@sabavision.ir>
370-
* @since 2020-12-09 14:43
371-
*/
372-
final protected function clean_non_chars($string) {
373-
return preg_replace('/[^A-Za-z0-9\-\;\(\)\,\ \/\.]/', '', $string); // Removes special chars.
374-
}
375355

376356

377-
}
357+
}

src/Wrappers/TransactionEvent.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public function start()
7575
* @see https://github.com/elastic/apm-server/blob/v6.7.1/docs/spec/timestamp_epoch.json
7676
*/
7777
$this->setTimestamp();
78-
$this->timestamp = intval(microtime(true) * 1000000);
78+
$this->timestamp = microtime(true) * 1000000;
7979
$this->transaction->setTimestamp($this->getTimestamp());
8080
$this->timer->start();
8181
}
@@ -274,4 +274,4 @@ public function getProtoBufTransaction() {
274274
}
275275

276276

277-
}
277+
}

0 commit comments

Comments
 (0)