From 01b2b7acf9557b44b2ba5279545a17fabb1cc914 Mon Sep 17 00:00:00 2001 From: Alberto Codutti Date: Fri, 22 Jan 2021 16:49:56 +0100 Subject: [PATCH] Added device.management.response.stacktrace.show option Signed-off-by: Alberto Codutti --- .../core/exception/model/ThrowableInfo.java | 17 ++++------ .../response/KapuaResponsePayload.java | 4 +-- .../response/KapuaResponsePayloadImpl.java | 4 +-- .../setting/DeviceManagementSettingKey.java | 32 +++++++++++++------ .../device-management-setting.properties | 1 + .../kapua/TranslatorAppBundleKuraKapua.java | 6 ++-- .../kapua/TranslatorAppCommandKuraKapua.java | 3 -- .../kapua/TranslatorAppResponseKuraKapua.java | 14 ++++---- .../kapua/TranslatorAppSnapshotKuraKapua.java | 1 + .../kura/kapua/TranslatorKuraKapuaUtils.java | 11 ++++++- 10 files changed, 55 insertions(+), 38 deletions(-) diff --git a/rest-api/core/src/main/java/org/eclipse/kapua/app/api/core/exception/model/ThrowableInfo.java b/rest-api/core/src/main/java/org/eclipse/kapua/app/api/core/exception/model/ThrowableInfo.java index 5cdff4de665..5e412bca894 100644 --- a/rest-api/core/src/main/java/org/eclipse/kapua/app/api/core/exception/model/ThrowableInfo.java +++ b/rest-api/core/src/main/java/org/eclipse/kapua/app/api/core/exception/model/ThrowableInfo.java @@ -12,23 +12,23 @@ *******************************************************************************/ package org.eclipse.kapua.app.api.core.exception.model; -import java.io.PrintWriter; -import java.io.StringWriter; +import org.eclipse.kapua.app.api.core.settings.KapuaApiSetting; +import org.eclipse.kapua.app.api.core.settings.KapuaApiSettingKeys; import javax.ws.rs.core.Response.Status; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - -import org.eclipse.kapua.app.api.core.settings.KapuaApiSetting; -import org.eclipse.kapua.app.api.core.settings.KapuaApiSettingKeys; +import java.io.PrintWriter; +import java.io.StringWriter; @XmlRootElement(name = "throwableInfo") @XmlAccessorType(XmlAccessType.FIELD) public class ThrowableInfo { + private static final boolean SHOW_STACKTRACE = KapuaApiSetting.getInstance().getBoolean(KapuaApiSettingKeys.API_EXCEPTION_STACKTRACE_SHOW, false); + @XmlElement(name = "httpErrorCode") private int httpErrorCode; @@ -38,9 +38,6 @@ public class ThrowableInfo { @XmlElement(name = "stackTrace") private String stackTrace; - @XmlTransient - private final boolean showStacktrace = KapuaApiSetting.getInstance().getBoolean(KapuaApiSettingKeys.API_EXCEPTION_STACKTRACE_SHOW, false); - protected ThrowableInfo() { super(); } @@ -49,7 +46,7 @@ public ThrowableInfo(Status httpStatus, Throwable throwable) { this.httpErrorCode = httpStatus.getStatusCode(); this.message = throwable.getMessage(); // Print stack trace - if (showStacktrace) { + if (SHOW_STACKTRACE) { StringWriter stringWriter = new StringWriter(); throwable.printStackTrace(new PrintWriter(stringWriter)); setStackTrace(stringWriter.toString()); diff --git a/service/device/api/src/main/java/org/eclipse/kapua/service/device/management/message/response/KapuaResponsePayload.java b/service/device/api/src/main/java/org/eclipse/kapua/service/device/management/message/response/KapuaResponsePayload.java index d44fc21c2c2..c7676e6a2cf 100644 --- a/service/device/api/src/main/java/org/eclipse/kapua/service/device/management/message/response/KapuaResponsePayload.java +++ b/service/device/api/src/main/java/org/eclipse/kapua/service/device/management/message/response/KapuaResponsePayload.java @@ -33,9 +33,9 @@ public interface KapuaResponsePayload extends KapuaPayload { /** * Set the exception message (if present) * - * @param setExecptionMessage + * @param exceptionMessage */ - void setExceptionMessage(String setExecptionMessage); + void setExceptionMessage(String exceptionMessage); /** * Get the exception stack trace (if present) diff --git a/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/message/response/KapuaResponsePayloadImpl.java b/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/message/response/KapuaResponsePayloadImpl.java index bcc4a72ca50..2b3b9041ea6 100644 --- a/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/message/response/KapuaResponsePayloadImpl.java +++ b/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/message/response/KapuaResponsePayloadImpl.java @@ -29,8 +29,8 @@ public String getExceptionMessage() { } @Override - public void setExceptionMessage(String setExecptionMessage) { - getMetrics().put(ResponseProperties.RESP_PROPERTY_EXCEPTION_MESSAGE.getValue(), setExecptionMessage); + public void setExceptionMessage(String exceptionMessage) { + getMetrics().put(ResponseProperties.RESP_PROPERTY_EXCEPTION_MESSAGE.getValue(), exceptionMessage); } @Override diff --git a/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/setting/DeviceManagementSettingKey.java b/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/setting/DeviceManagementSettingKey.java index 1eea40e3888..36acb47de0a 100644 --- a/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/setting/DeviceManagementSettingKey.java +++ b/service/device/commons/src/main/java/org/eclipse/kapua/service/device/management/commons/setting/DeviceManagementSettingKey.java @@ -15,31 +15,43 @@ import org.eclipse.kapua.commons.setting.SettingKey; /** - * Available settings key for device management service - * - * @since 1.0 + * Device Management {@link SettingKey}s for {@link DeviceManagementSetting}. * + * @since 1.0.0 */ public enum DeviceManagementSettingKey implements SettingKey { /** - * Character encoding + * Character encoding. + * + * @since 1.0.0 */ CHAR_ENCODING("character.encoding"), /** - * Request timeout + * Request timeout. + * + * @since 1.0.0 + */ + REQUEST_TIMEOUT("request.timeout"), + + /** + * Request timeout. + * + * @since 1.0.0 */ - REQUEST_TIMEOUT("request.timeout"); + SHOW_STACKTRACE("device.management.response.stacktrace.show"), + ; - private String key; + private final String key; /** - * Constructor + * Constructor. * - * @param key + * @param key The value of the {@link DeviceManagementSettingKey}. + * @since 1.0.0 */ - private DeviceManagementSettingKey(String key) { + DeviceManagementSettingKey(String key) { this.key = key; } diff --git a/service/device/commons/src/main/resources/device-management-setting.properties b/service/device/commons/src/main/resources/device-management-setting.properties index 0e4dba98ff0..076b5b2305f 100644 --- a/service/device/commons/src/main/resources/device-management-setting.properties +++ b/service/device/commons/src/main/resources/device-management-setting.properties @@ -15,3 +15,4 @@ character.encoding=UTF-8 request.timeout=30000 +device.management.response.stacktrace.show=false \ No newline at end of file diff --git a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppBundleKuraKapua.java b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppBundleKuraKapua.java index f6dadf12a5b..b203de567e1 100644 --- a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppBundleKuraKapua.java +++ b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppBundleKuraKapua.java @@ -77,14 +77,14 @@ protected BundleResponsePayload translatePayload(KuraResponsePayload kuraRespons DeviceManagementSetting config = DeviceManagementSetting.getInstance(); String charEncoding = config.getString(DeviceManagementSettingKey.CHAR_ENCODING); - String body = null; + String body; try { body = new String(kuraResponsePayload.getBody(), charEncoding); } catch (Exception e) { - throw new TranslatorException(TranslatorErrorCodes.INVALID_PAYLOAD, e, (Object) kuraResponsePayload.getBody()); + throw new TranslatorException(TranslatorErrorCodes.INVALID_PAYLOAD, e, kuraResponsePayload.getBody()); } - KuraBundles kuraBundles = null; + KuraBundles kuraBundles; try { kuraBundles = XmlUtil.unmarshal(body, KuraBundles.class); } catch (Exception e) { diff --git a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppCommandKuraKapua.java b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppCommandKuraKapua.java index 3dc7f358a27..74166c45fbc 100644 --- a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppCommandKuraKapua.java +++ b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppCommandKuraKapua.java @@ -68,9 +68,6 @@ protected CommandResponsePayload translatePayload(KuraResponsePayload kuraRespon commandResponsePayload.setTimedout(timedout); } - commandResponsePayload.setExceptionMessage(kuraResponsePayload.getExceptionMessage()); - commandResponsePayload.setExceptionStack(kuraResponsePayload.getExceptionStack()); - // Return Kapua Payload return commandResponsePayload; } catch (Exception e) { diff --git a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppResponseKuraKapua.java b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppResponseKuraKapua.java index 0f5bb77a565..761c6cdc53e 100644 --- a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppResponseKuraKapua.java +++ b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppResponseKuraKapua.java @@ -66,18 +66,18 @@ protected GenericResponseChannel translateChannel(KuraResponseChannel kuraChanne } @Override - protected GenericResponsePayload translatePayload(KuraResponsePayload kuraPayload) throws InvalidPayloadException { + protected GenericResponsePayload translatePayload(KuraResponsePayload kuraResponsePayload) throws InvalidPayloadException { try { GenericRequestFactory genericRequestFactory = LOCATOR.getFactory(GenericRequestFactory.class); - GenericResponsePayload genericResponsePayload = genericRequestFactory.newResponsePayload(); - genericResponsePayload.setBody(kuraPayload.getBody()); - genericResponsePayload.setMetrics(kuraPayload.getMetrics()); - genericResponsePayload.setExceptionMessage(kuraPayload.getExceptionMessage()); - genericResponsePayload.setExceptionStack(kuraPayload.getExceptionStack()); + GenericResponsePayload genericResponsePayload = TranslatorKuraKapuaUtils.buildBaseResponsePayload(kuraResponsePayload, genericRequestFactory.newResponsePayload()); + + genericResponsePayload.setBody(kuraResponsePayload.getBody()); + genericResponsePayload.setMetrics(kuraResponsePayload.getMetrics()); + return genericResponsePayload; } catch (Exception e) { - throw new InvalidPayloadException(e, kuraPayload); + throw new InvalidPayloadException(e, kuraResponsePayload); } } } diff --git a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppSnapshotKuraKapua.java b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppSnapshotKuraKapua.java index 6ac6d3a8c99..7c8f638bd6a 100644 --- a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppSnapshotKuraKapua.java +++ b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorAppSnapshotKuraKapua.java @@ -89,6 +89,7 @@ protected SnapshotResponsePayload translatePayload(KuraResponsePayload kuraRespo throw new TranslatorException(TranslatorErrorCodes.INVALID_PAYLOAD, e, body); } } + translateBody(snapshotResponsePayload, charEncoding, snapshotIdResult); // Return Kapua Payload diff --git a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorKuraKapuaUtils.java b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorKuraKapuaUtils.java index 5dc47403e70..1791b7eac34 100644 --- a/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorKuraKapuaUtils.java +++ b/translator/kapua/kura/src/main/java/org/eclipse/kapua/translator/kura/kapua/TranslatorKuraKapuaUtils.java @@ -22,7 +22,10 @@ import org.eclipse.kapua.service.device.call.message.app.DeviceAppMetrics; import org.eclipse.kapua.service.device.call.message.kura.app.response.KuraResponseChannel; import org.eclipse.kapua.service.device.call.message.kura.app.response.KuraResponseCode; +import org.eclipse.kapua.service.device.call.message.kura.app.response.KuraResponseMetrics; import org.eclipse.kapua.service.device.call.message.kura.app.response.KuraResponsePayload; +import org.eclipse.kapua.service.device.management.commons.setting.DeviceManagementSetting; +import org.eclipse.kapua.service.device.management.commons.setting.DeviceManagementSettingKey; import org.eclipse.kapua.service.device.management.message.response.KapuaResponseCode; import org.eclipse.kapua.service.device.management.message.response.KapuaResponsePayload; import org.eclipse.kapua.translator.exception.TranslatorErrorCodes; @@ -40,6 +43,7 @@ public final class TranslatorKuraKapuaUtils { private static final KapuaMessageFactory KAPUA_MESSAGE_FACTORY = LOCATOR.getFactory(KapuaMessageFactory.class); private static final String CONTROL_MESSAGE_CLASSIFIER = SystemSetting.getInstance().getMessageClassifier(); + private static final boolean SHOW_STACKTRACE = DeviceManagementSetting.getInstance().getBoolean(DeviceManagementSettingKey.SHOW_STACKTRACE, false); private TranslatorKuraKapuaUtils() { } @@ -91,7 +95,12 @@ public static void validateKuraResponseChannel(KuraResponseChannel kuraResponseC */ public static

P buildBaseResponsePayload(KuraResponsePayload kuraResponsePayload, P appResponsePayload) { appResponsePayload.setExceptionMessage(kuraResponsePayload.getExceptionMessage()); - appResponsePayload.setExceptionStack(kuraResponsePayload.getExceptionStack()); + + if (SHOW_STACKTRACE) { + appResponsePayload.setExceptionStack(kuraResponsePayload.getExceptionStack()); + kuraResponsePayload.getMetrics().remove(KuraResponseMetrics.EXCEPTION_STACK.getName()); + } + return appResponsePayload; }