Improve error handling - root cause and stack trace delivered to cloud from edge in case of errors
This commit is contained in:
		
							parent
							
								
									1b191acace
								
							
						
					
					
						commit
						1d9a2bad84
					
				@ -244,7 +244,7 @@ public final class EdgeGrpcSession implements Closeable {
 | 
			
		||||
 | 
			
		||||
            @Override
 | 
			
		||||
            public void onFailure(Throwable t) {
 | 
			
		||||
                String errorMsg = t.getMessage() != null ? t.getMessage() : "";
 | 
			
		||||
                String errorMsg = EdgeUtils.createErrorMsgFromRootCauseAndStackTrace(t);
 | 
			
		||||
                UplinkResponseMsg uplinkResponseMsg = UplinkResponseMsg.newBuilder()
 | 
			
		||||
                        .setUplinkMsgId(uplinkMsg.getUplinkMsgId())
 | 
			
		||||
                        .setSuccess(false).setErrorMsg(errorMsg).build();
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@
 | 
			
		||||
package org.thingsboard.server.common.data;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
			
		||||
import com.google.common.base.Throwables;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
			
		||||
@ -29,6 +30,8 @@ import java.util.concurrent.ThreadLocalRandom;
 | 
			
		||||
@Slf4j
 | 
			
		||||
public final class EdgeUtils {
 | 
			
		||||
 | 
			
		||||
    private static final int STACK_TRACE_LIMIT = 10;
 | 
			
		||||
 | 
			
		||||
    private EdgeUtils() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -93,4 +96,20 @@ public final class EdgeUtils {
 | 
			
		||||
        edgeEvent.setBody(body);
 | 
			
		||||
        return edgeEvent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String createErrorMsgFromRootCauseAndStackTrace(Throwable t) {
 | 
			
		||||
        Throwable rootCause = Throwables.getRootCause(t);
 | 
			
		||||
        StringBuilder errorMsg = new StringBuilder(rootCause.getMessage() != null ? rootCause.getMessage() : "");
 | 
			
		||||
        if (rootCause.getStackTrace().length > 0) {
 | 
			
		||||
            int idx = 0;
 | 
			
		||||
            for (StackTraceElement stackTraceElement : rootCause.getStackTrace()) {
 | 
			
		||||
                errorMsg.append("\n").append(stackTraceElement.toString());
 | 
			
		||||
                idx++;
 | 
			
		||||
                if (idx > STACK_TRACE_LIMIT) {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return errorMsg.toString();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user