private static List<Status> buildStatusList() { TreeMap<Integer, Status> canonicalizer = new TreeMap<Integer, Status>(); for (CanonicalCode code : CanonicalCode.values()) { Status replaced = canonicalizer.put(code.value(), new Status(code, null)); if (replaced != null) { throw new IllegalStateException( "Code value duplication between " + replaced.getCanonicalCode().name() + " & " + code.name()); } } return Collections.unmodifiableList(new ArrayList<Status>(canonicalizer.values())); }
@InternalApi("Visible for testing") static Status convertErrorToStatus(Throwable error) { if (!(error instanceof ApiException)) { return Status.UNKNOWN.withDescription(error.getMessage()); } ApiException apiException = (ApiException) error; Status.CanonicalCode code; try { code = Status.CanonicalCode.valueOf(apiException.getStatusCode().getCode().name()); } catch (IllegalArgumentException e) { code = CanonicalCode.UNKNOWN; } return code.toStatus().withDescription(error.getMessage()); } }
private void populateError(Map<String, AttributeValue> attributes, Throwable error) { if (error == null) { attributes.put("status", null); return; } Status status = convertErrorToStatus(error); attributes.put( "status", AttributeValue.stringAttributeValue(status.getCanonicalCode().toString())); }
spanBuilder.putTag(STATUS_CODE, status.getCanonicalCode().toString()); if (status.getDescription() != null) { spanBuilder.putTag(STATUS_DESCRIPTION, status.getDescription());
@Test public void convertToGrpcStatus() { // Without description for (io.opencensus.trace.Status.CanonicalCode opencensusCanonicalCode : io.opencensus.trace.Status.CanonicalCode.values()) { io.opencensus.trace.Status opencensusStatus = opencensusCanonicalCode.toStatus(); io.grpc.Status grpcStatus = StatusConverter.toGrpcStatus(opencensusStatus); assertThat(grpcStatus.getCode().toString()) .isEqualTo(opencensusStatus.getCanonicalCode().toString()); assertThat(grpcStatus.getDescription()).isNull(); } // With description for (io.opencensus.trace.Status.CanonicalCode opencensusCanonicalCode : io.opencensus.trace.Status.CanonicalCode.values()) { io.opencensus.trace.Status opencensusStatus = opencensusCanonicalCode.toStatus().withDescription("This is my description"); io.grpc.Status grpcStatus = StatusConverter.toGrpcStatus(opencensusStatus); assertThat(grpcStatus.getCode().toString()) .isEqualTo(opencensusStatus.getCanonicalCode().toString()); assertThat(grpcStatus.getDescription()).isEqualTo(opencensusStatus.getDescription()); } } }
@Test public void convertFromGrpcStatus() { // Without description for (io.grpc.Status.Code grpcCanonicalCode : io.grpc.Status.Code.values()) { io.grpc.Status grpcStatus = io.grpc.Status.fromCode(grpcCanonicalCode); io.opencensus.trace.Status opencensusStatus = StatusConverter.fromGrpcStatus(grpcStatus); assertThat(opencensusStatus.getCanonicalCode().toString()) .isEqualTo(grpcStatus.getCode().toString()); assertThat(opencensusStatus.getDescription()).isNull(); } // With description for (io.grpc.Status.Code grpcCanonicalCode : io.grpc.Status.Code.values()) { io.grpc.Status grpcStatus = io.grpc.Status.fromCode(grpcCanonicalCode).withDescription("This is my description"); io.opencensus.trace.Status opencensusStatus = StatusConverter.fromGrpcStatus(grpcStatus); assertThat(opencensusStatus.getCanonicalCode().toString()) .isEqualTo(grpcStatus.getCode().toString()); assertThat(opencensusStatus.getDescription()).isEqualTo(grpcStatus.getDescription()); } }
@InternalApi("Visible for testing") static Status convertErrorToStatus(Throwable error) { if (!(error instanceof ApiException)) { return Status.UNKNOWN.withDescription(error.getMessage()); } ApiException apiException = (ApiException) error; Status.CanonicalCode code; try { code = Status.CanonicalCode.valueOf(apiException.getStatusCode().getCode().name()); } catch (IllegalArgumentException e) { code = CanonicalCode.UNKNOWN; } return code.toStatus().withDescription(error.getMessage()); } }
private Bucket getErrorBucket(CanonicalCode code) { return errorBuckets[code.value() - 1]; }
private Bucket getErrorBucket(CanonicalCode code) { return errorBuckets[code.value() - 1]; }
@Test public void testErrorConversion() { for (Code code : Code.values()) { ApiException error = new ApiException("fake message", null, new FakeStatusCode(code), false); Status opencensusStatus = OpencensusTracer.convertErrorToStatus(error); assertThat(opencensusStatus.getDescription()).isEqualTo("fake message"); assertThat(opencensusStatus.getCanonicalCode().toString()).isEqualTo(code.toString()); } } }
private static List<Status> buildStatusList() { TreeMap<Integer, Status> canonicalizer = new TreeMap<Integer, Status>(); for (CanonicalCode code : CanonicalCode.values()) { Status replaced = canonicalizer.put(code.value(), new Status(code, null)); if (replaced != null) { throw new IllegalStateException( "Code value duplication between " + replaced.getCanonicalCode().name() + " & " + code.name()); } } return Collections.unmodifiableList(new ArrayList<Status>(canonicalizer.values())); }
private static Status toStatusProto(io.opencensus.trace.Status status) { Status.Builder statusBuilder = Status.newBuilder().setCode(status.getCanonicalCode().value()); if (status.getDescription() != null) { statusBuilder.setMessage(status.getDescription()); } return statusBuilder.build(); }
private Map<CanonicalCode, Integer> getNumbersOfErrorSampledSpans() { Map<CanonicalCode, Integer> errorBucketSummaries = new EnumMap<CanonicalCode, Integer>(CanonicalCode.class); for (int i = 0; i < NUM_ERROR_BUCKETS; i++) { errorBucketSummaries.put(CanonicalCode.values()[i + 1], errorBuckets[i].getNumSamples()); } return errorBucketSummaries; }
private void populateError(Map<String, AttributeValue> attributes, Throwable error) { if (error == null) { attributes.put("status", null); return; } Status status = convertErrorToStatus(error); attributes.put( "status", AttributeValue.stringAttributeValue(status.getCanonicalCode().toString())); }
private static Status toStatusProto(io.opencensus.trace.Status status) { Status.Builder statusBuilder = Status.newBuilder().setCode(status.getCanonicalCode().value()); if (status.getDescription() != null) { statusBuilder.setMessage(status.getDescription()); } return statusBuilder.build(); }
private static Status toStatusProto(io.opencensus.trace.Status status) { Status.Builder statusBuilder = Status.newBuilder().setCode(status.getCanonicalCode().value()); if (status.getDescription() != null) { statusBuilder.setMessage(status.getDescription()); } return statusBuilder.build(); }
@Test public void convertFromGrpcCode() { for (io.grpc.Status.Code grpcCanonicalCode : io.grpc.Status.Code.values()) { io.opencensus.trace.Status.CanonicalCode opencensusCanonicalCode = StatusConverter.fromGrpcCode(grpcCanonicalCode); assertThat(opencensusCanonicalCode.toString()).isEqualTo(grpcCanonicalCode.toString()); } }