diff --git a/src/Instrumentation/Laravel/src/Watchers/RedisCommand/Serializer.php b/src/Instrumentation/Laravel/src/Watchers/RedisCommand/Serializer.php index e15b4db6f..8472b09ab 100644 --- a/src/Instrumentation/Laravel/src/Watchers/RedisCommand/Serializer.php +++ b/src/Instrumentation/Laravel/src/Watchers/RedisCommand/Serializer.php @@ -70,7 +70,17 @@ public static function serializeCommand(string $command, array $params): string } // In some cases (for example when using LUA scripts) arrays are valid parameters - $paramsToSerialize = array_map(function ($param) { return is_array($param) ? json_encode($param) : $param; }, $paramsToSerialize); + // In additional cases, Closure are also valid parameters (Pipeline command) + $paramsToSerialize = array_map( + static function ($param) { + return match (true) { + is_array($param) => json_encode($param), + is_callable($param) => 'Callable', + default => $param, + }; + }, + $paramsToSerialize + ); return $command . ' ' . implode(' ', $paramsToSerialize); } diff --git a/src/Instrumentation/Laravel/tests/Unit/Watches/RedisCommand/SerializerTest.php b/src/Instrumentation/Laravel/tests/Unit/Watches/RedisCommand/SerializerTest.php index 3749f65e2..ea14ccd36 100644 --- a/src/Instrumentation/Laravel/tests/Unit/Watches/RedisCommand/SerializerTest.php +++ b/src/Instrumentation/Laravel/tests/Unit/Watches/RedisCommand/SerializerTest.php @@ -34,5 +34,7 @@ public function serializeCases(): iterable // Parameters of array type yield ['EVAL', ['param1', 'param2', ['arg1', 'arg2']], 'EVAL param1 param2 ["arg1","arg2"]']; + + yield ['pipeline', [function () {}], 'pipeline Callable']; } }