Skip to content

Commit 182ddb0

Browse files
authored
Fix broken Serializer when using Laravel Illuminate\Queue\LuaScripts (open-telemetry#309)
Since introduction of RedisCommandWatcher, auto-instrumentation for Laravel fails when using Lua scripts for Queue management, since command argument array can contains arrays.
1 parent 2d2c37b commit 182ddb0

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

src/Instrumentation/Laravel/src/Watchers/RedisCommand/Serializer.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ public static function serializeCommand(string $command, array $params): string
6969
$paramsToSerialize[] = '[' . (count($params) - $paramsToSerializeNum) . ' other arguments]';
7070
}
7171

72+
// In some cases (for example when using LUA scripts) arrays are valid parameters
73+
$paramsToSerialize = array_map(function($param) { return is_array($param) ? json_encode($param) : $param; }, $paramsToSerialize);
74+
7275
return $command . ' ' . implode(' ', $paramsToSerialize);
7376
}
7477
}

src/Instrumentation/Laravel/tests/Unit/Watches/RedisCommand/SerializerTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,8 @@ public function serializeCases(): iterable
3131

3232
// Serialize all params
3333
yield ['DEL', ['param1', 'param2', 'param3', 'param4'], 'DEL param1 param2 param3 param4'];
34+
35+
// Parameters of array type
36+
yield ['EVAL', ['param1', 'param2', ['arg1', 'arg2']], 'EVAL param1 param2 ["arg1","arg2"]'];
3437
}
3538
}

0 commit comments

Comments
 (0)