1111use Psr \Log \LoggerInterface ;
1212use ScayTrase \Api \Rpc \ResponseCollectionInterface ;
1313use ScayTrase \Api \Rpc \RpcRequestInterface ;
14+ use ScayTrase \Api \Rpc \RpcResponseInterface ;
1415
1516final class LoggableResponseCollection implements \IteratorAggregate, ResponseCollectionInterface
1617{
1718 /** @var LoggerInterface */
1819 private $ logger ;
1920 /** @var ResponseCollectionInterface */
2021 private $ decoratedCollection ;
22+ /** @var string[] */
23+ private $ loggedResponses = [];
2124
2225 /**
2326 * LoggableResponseCollection constructor.
@@ -35,43 +38,72 @@ public function __construct(ResponseCollectionInterface $decoratedCollection, Lo
3538 public function getResponse (RpcRequestInterface $ request )
3639 {
3740 $ response = $ this ->decoratedCollection ->getResponse ($ request );
41+ $ this ->logResponseWithRequest ($ request , $ response );
42+
43+ return $ response ;
44+ }
45+
46+ /** {@inheritdoc} */
47+ public function getIterator ()
48+ {
49+ foreach ($ this ->decoratedCollection as $ response ) {
50+ $ this ->logResponse ($ response );
51+ yield $ response ;
52+ }
53+ }
54+
55+ /**
56+ * @param RpcRequestInterface $request
57+ * @param RpcResponseInterface $response
58+ */
59+ private function logResponseWithRequest (RpcRequestInterface $ request , RpcResponseInterface $ response )
60+ {
61+ $ hash = spl_object_hash ($ response );
62+ if (in_array ($ hash , $ this ->loggedResponses , true )) {
63+ return ;
64+ }
3865
39- $ this ->logger ->debug (
40- sprintf (
41- '%s Response for RPC method "%s" is %s ' ,
42- spl_object_hash ($ request ),
43- $ request ->getMethod (),
44- $ response ->isSuccessful () ? 'Successful ' : 'Failed '
45- ),
46- json_decode (json_encode ($ response ->getBody ()), true )
47- );
4866 if ($ response ->isSuccessful ()) {
67+ $ this ->logger ->info (
68+ sprintf ('Method "%s" call was successful ' , $ request ->getMethod ()),
69+ ['request_hash ' => spl_object_hash ($ request )]
70+ );
4971 $ this ->logger ->debug (
50- sprintf (' %s Response for RPC method " %s"' , spl_object_hash ( $ request ), $ request -> getMethod ( )),
51- json_decode ( json_encode ( $ response -> getBody ()), true )
72+ sprintf (" Resposne: \n %s ", json_encode ( $ response -> getBody (), JSON_PRETTY_PRINT )),
73+ [ ' request_hash ' => spl_object_hash ( $ request )]
5274 );
5375 } else {
54- $ this ->logger ->debug (
55- sprintf ('%s Response for RPC method "%s" ' , spl_object_hash ($ request ), $ request ->getMethod ()),
56- json_decode (json_encode ($ response ->getError ()), true )
76+ $ this ->logger ->info (
77+ sprintf ('Method "%s" call was failed ' , $ request ->getMethod ()),
78+ ['request_hash ' => spl_object_hash ($ request )]
79+ );
80+ $ this ->logger ->error (
81+ sprintf ('ERROR %s: %s ' , $ response ->getError ()->getCode (), $ response ->getError ()->getMessage ()),
82+ ['request_hash ' => spl_object_hash ($ request )]
5783 );
5884 }
5985
60- return $ response ;
86+ $ this -> loggedResponses [] = $ hash ;
6187 }
6288
63- /** {@inheritdoc} */
64- public function count ()
89+ private function logResponse (RpcResponseInterface $ response )
6590 {
66- return $ this ->decoratedCollection ->count ();
67- }
91+ $ hash = spl_object_hash ($ response );
92+ if (in_array ($ hash , $ this ->loggedResponses , true )) {
93+ return ;
94+ }
6895
69- /** {@inheritdoc} */
70- public function getIterator ()
71- {
72- foreach ($ this ->decoratedCollection as $ response ) {
73- //todo: log
74- yield $ response ;
96+ if ($ response ->isSuccessful ()) {
97+ $ this ->logger ->info ('Successful RPC call ' );
98+ $ this ->logger ->debug (
99+ sprintf ("Resposne: \n%s " , json_encode ($ response ->getBody (), JSON_PRETTY_PRINT ))
100+ );
101+ } else {
102+ $ this ->logger ->error (
103+ sprintf ('RPC Error %s: %s ' , $ response ->getError ()->getCode (), $ response ->getError ()->getMessage ())
104+ );
75105 }
106+
107+ $ this ->loggedResponses [] = $ hash ;
76108 }
77109}
0 commit comments