From a2003459ccd4d93ca79bddcb577b24bc29490d1b Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 11 Mar 2022 19:15:38 +0100
Subject: [PATCH] Common:

- improved loggers in decorators for client and server methods
- corrected error in delay_exponential for retry decorator
---
 src/common/rpc_method_wrapper/Decorator.py | 5 +++--
 src/common/tools/client/RetryDecorator.py  | 2 +-
 src/common/tools/grpc/Tools.py             | 5 +++--
 3 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/common/rpc_method_wrapper/Decorator.py b/src/common/rpc_method_wrapper/Decorator.py
index 212481b73..31dc4b82b 100644
--- a/src/common/rpc_method_wrapper/Decorator.py
+++ b/src/common/rpc_method_wrapper/Decorator.py
@@ -17,6 +17,7 @@ from enum import Enum
 from typing import Dict, List
 from prometheus_client import Counter, Histogram
 from prometheus_client.metrics import MetricWrapperBase
+from common.tools.grpc.Tools import grpc_message_to_json_string
 from .ServiceExceptions import ServiceException
 
 class RequestConditionEnum(Enum):
@@ -62,9 +63,9 @@ def safe_and_metered_rpc_method(metrics : Dict[str, MetricWrapperBase], logger :
         def inner_wrapper(self, request, grpc_context : grpc.ServicerContext):
             COUNTER_STARTED.inc()
             try:
-                logger.debug('{:s} request: {:s}'.format(function_name, str(request)))
+                logger.debug('{:s} request: {:s}'.format(function_name, grpc_message_to_json_string(request)))
                 reply = func(self, request, grpc_context)
-                logger.debug('{:s} reply: {:s}'.format(function_name, str(reply)))
+                logger.debug('{:s} reply: {:s}'.format(function_name, grpc_message_to_json_string(reply)))
                 COUNTER_COMPLETED.inc()
                 return reply
             except ServiceException as e:   # pragma: no cover (ServiceException not thrown)
diff --git a/src/common/tools/client/RetryDecorator.py b/src/common/tools/client/RetryDecorator.py
index d7bcdb42d..9a1c0d69f 100644
--- a/src/common/tools/client/RetryDecorator.py
+++ b/src/common/tools/client/RetryDecorator.py
@@ -57,7 +57,7 @@ def delay_linear(initial=0, increment=0, maximum=None):
 
 def delay_exponential(initial=1, increment=1, maximum=None):
     def compute(num_try):
-        delay = initial * pow((num_try - 1), increment)
+        delay = initial * pow(increment, (num_try - 1))
         if maximum is not None: delay = max(delay, maximum)
         return delay
     return compute
diff --git a/src/common/tools/grpc/Tools.py b/src/common/tools/grpc/Tools.py
index 7c6a74348..f0c72a36f 100644
--- a/src/common/tools/grpc/Tools.py
+++ b/src/common/tools/grpc/Tools.py
@@ -16,8 +16,9 @@ import json
 from google.protobuf.json_format import MessageToDict
 
 def grpc_message_to_json(
-    message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False):
-
+        message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False
+    ):
+    if not hasattr(message, 'DESCRIPTOR'): return json.dumps(str(message), sort_keys=True) # not a gRPC message
     return MessageToDict(
         message, including_default_value_fields=including_default_value_fields,
         preserving_proto_field_name=preserving_proto_field_name, use_integers_for_enums=use_integers_for_enums)
-- 
GitLab