/** * Returns a {@link io.opencensus.trace.Status.CanonicalCode} from a {@link io.grpc.Status.Code}. * * @param grpcCode the given {@code io.grpc.Status.Code}. * @return a {@code io.opencensus.trace.Status.CanonicalCode} from a {@code io.grpc.Status.Code}. * @since 0.6 */ public static io.opencensus.trace.Status.CanonicalCode fromGrpcCode( io.grpc.Status.Code grpcCode) { return opencensusStatusFromGrpcCode(grpcCode).getCanonicalCode(); }
/** * Returns a {@link io.opencensus.trace.Status.CanonicalCode} from a {@link io.grpc.Status.Code}. * * @param grpcCode the given {@code io.grpc.Status.Code}. * @return a {@code io.opencensus.trace.Status.CanonicalCode} from a {@code io.grpc.Status.Code}. * @since 0.6 */ public static io.opencensus.trace.Status.CanonicalCode fromGrpcCode( io.grpc.Status.Code grpcCode) { return opencensusStatusFromGrpcCode(grpcCode).getCanonicalCode(); }
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 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 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 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())); }
/** * Returns a {@link io.grpc.Status} from a {@link io.opencensus.trace.Status}. * * @param opencensusStatus the given {@code io.opencensus.trace.Status}. * @return a {@code io.grpc.Status} from a {@code io.opencensus.trace.Status}. * @since 0.6 */ public static io.grpc.Status toGrpcStatus(io.opencensus.trace.Status opencensusStatus) { io.grpc.Status status = grpcStatusFromOpencensusCanonicalCode(opencensusStatus.getCanonicalCode()); if (opencensusStatus.getDescription() != null) { status = status.withDescription(opencensusStatus.getDescription()); } return status; }
/** * Returns a {@link io.grpc.Status} from a {@link io.opencensus.trace.Status}. * * @param opencensusStatus the given {@code io.opencensus.trace.Status}. * @return a {@code io.grpc.Status} from a {@code io.opencensus.trace.Status}. * @since 0.6 */ public static io.grpc.Status toGrpcStatus(io.opencensus.trace.Status opencensusStatus) { io.grpc.Status status = grpcStatusFromOpencensusCanonicalCode(opencensusStatus.getCanonicalCode()); if (opencensusStatus.getDescription() != null) { status = status.withDescription(opencensusStatus.getDescription()); } return status; }
@Test public void parseResponseStatusError_Others() { // some random status code assertThat(HttpTraceUtil.parseResponseStatus(434, null).getCanonicalCode()) .isEqualTo(CanonicalCode.UNKNOWN); assertThat(HttpTraceUtil.parseResponseStatus(517, null).getCanonicalCode()) .isEqualTo(CanonicalCode.UNKNOWN); } }
private static void parseResponseStatus( int code, CanonicalCode expectedCanonicalCode, String expectedDesc) { Status status = HttpTraceUtil.parseResponseStatus(code, null); assertThat(status.getCanonicalCode()).isEqualTo(expectedCanonicalCode); assertThat(status.getDescription()).isEqualTo(expectedDesc); }
private void considerForSampling(RecordEventsSpanImpl span) { Status status = span.getStatus(); // Null status means running Span, this should not happen in production, but the library // should not crash because of this. if (status != null) { Bucket bucket = status.isOk() ? getLatencyBucket(span.getLatencyNs()) : getErrorBucket(status.getCanonicalCode()); // If unable to find the bucket, ignore this Span. if (bucket != null) { bucket.considerForSampling(span); } } }
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 status_Ok() { assertThat(Status.OK.getCanonicalCode()).isEqualTo(Status.CanonicalCode.OK); assertThat(Status.OK.getDescription()).isNull(); assertThat(Status.OK.isOk()).isTrue(); }
private void considerForSampling(RecordEventsSpanImpl span) { Status status = span.getStatus(); // Null status means running Span, this should not happen in production, but the library // should not crash because of this. if (status != null) { Bucket bucket = status.isOk() ? getLatencyBucket(span.getLatencyNs()) : getErrorBucket(status.getCanonicalCode()); // If unable to find the bucket, ignore this Span. if (bucket != null) { bucket.considerForSampling(span); } } }
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 parseResponseStatusNoResponse() { assertThat(HttpTraceUtil.parseResponseStatus(0, null).getDescription()).isEqualTo(null); assertThat(HttpTraceUtil.parseResponseStatus(0, null).getCanonicalCode()) .isEqualTo(CanonicalCode.UNKNOWN); }
@Test public void createStatus_WithDescription() { Status status = Status.UNKNOWN.withDescription("This is an error."); assertThat(status.getCanonicalCode()).isEqualTo(Status.CanonicalCode.UNKNOWN); assertThat(status.getDescription()).isEqualTo("This is an error."); assertThat(status.isOk()).isFalse(); }
@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()); } } }
@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()); } }