Skip to content

Commit

Permalink
Added device.management.response.stacktrace.show option
Browse files Browse the repository at this point in the history
Signed-off-by: Alberto Codutti <alberto.codutti@eurotech.com>
  • Loading branch information
Coduz committed Jan 26, 2021
1 parent 91a2518 commit 01b2b7a
Show file tree
Hide file tree
Showing 10 changed files with 55 additions and 38 deletions.
Expand Up @@ -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;

Expand All @@ -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();
}
Expand All @@ -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());
Expand Down
Expand Up @@ -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)
Expand Down
Expand Up @@ -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
Expand Down
Expand Up @@ -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;
}

Expand Down
Expand Up @@ -15,3 +15,4 @@ character.encoding=UTF-8

request.timeout=30000

device.management.response.stacktrace.show=false
Expand Up @@ -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) {
Expand Down
Expand Up @@ -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) {
Expand Down
Expand Up @@ -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);
}
}
}
Expand Up @@ -89,6 +89,7 @@ protected SnapshotResponsePayload translatePayload(KuraResponsePayload kuraRespo
throw new TranslatorException(TranslatorErrorCodes.INVALID_PAYLOAD, e, body);
}
}

translateBody(snapshotResponsePayload, charEncoding, snapshotIdResult);

// Return Kapua Payload
Expand Down
Expand Up @@ -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;
Expand All @@ -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() {
}
Expand Down Expand Up @@ -91,7 +95,12 @@ public static void validateKuraResponseChannel(KuraResponseChannel kuraResponseC
*/
public static <P extends KapuaResponsePayload> 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;
}

Expand Down

0 comments on commit 01b2b7a

Please sign in to comment.