Skip to content
This repository was archived by the owner on Jun 26, 2024. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
package org.hypertrace.gateway.service;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;
import com.google.protobuf.ServiceException;
import com.typesafe.config.Config;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;
import io.micrometer.core.instrument.Counter;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import org.apache.commons.lang3.StringUtils;
import org.hypertrace.core.attribute.service.client.AttributeServiceClient;
import org.hypertrace.core.attribute.service.client.config.AttributeServiceClientConfig;
import org.hypertrace.core.query.service.client.QueryServiceClient;
import org.hypertrace.core.query.service.client.QueryServiceConfig;
import org.hypertrace.core.serviceframework.metrics.PlatformMetricsRegistry;
import org.hypertrace.entity.query.service.client.EntityQueryServiceClient;
import org.hypertrace.entity.service.client.config.EntityServiceClientConfig;
import org.hypertrace.gateway.service.baseline.BaselineService;
Expand Down Expand Up @@ -61,6 +64,11 @@ public class GatewayServiceImpl extends GatewayServiceGrpc.GatewayServiceImplBas
private static final String REQUEST_TIMEOUT_CONFIG_KEY = "request.timeout";
private static final int DEFAULT_REQUEST_TIMEOUT_MILLIS = 10000;

private Counter requestStatusErrorCounter;
private Counter requestStatusSuccessCounter;
private static final String SERVICE_REQUESTS_STATUS_COUNTER =
"hypertrace.gateway.service.requests.status";

private final TracesService traceService;
private final SpanService spanService;
private final EntityService entityService;
Expand Down Expand Up @@ -134,6 +142,16 @@ public GatewayServiceImpl(Config appConfig) {
entityIdColumnsConfigs);
this.logEventsService =
new LogEventsService(queryServiceClient, qsRequestTimeout, attributeMetadataProvider);
initMetrics();
}

private void initMetrics() {
requestStatusErrorCounter =
PlatformMetricsRegistry.registerCounter(
SERVICE_REQUESTS_STATUS_COUNTER, ImmutableMap.of("error", "true"));
requestStatusSuccessCounter =
PlatformMetricsRegistry.registerCounter(
SERVICE_REQUESTS_STATUS_COUNTER, ImmutableMap.of("error", "false"));
}

private static int getRequestTimeoutMillis(Config config) {
Expand All @@ -152,6 +170,7 @@ public void getTraces(
Optional<String> tenantId =
org.hypertrace.core.grpcutils.context.RequestContext.CURRENT.get().getTenantId();
if (tenantId.isEmpty()) {
requestStatusErrorCounter.increment();
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
Expand All @@ -167,8 +186,10 @@ public void getTraces(
TracesResponse response = traceService.getTracesByFilter(requestContext, request);
responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling traces request: {}", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand All @@ -181,6 +202,7 @@ public void getSpans(
Optional<String> tenantId =
org.hypertrace.core.grpcutils.context.RequestContext.CURRENT.get().getTenantId();
if (tenantId.isEmpty()) {
requestStatusErrorCounter.increment();
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
Expand All @@ -195,8 +217,10 @@ public void getSpans(
SpansResponse response = spanService.getSpansByFilter(context, request);
responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling spans request: {}", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand All @@ -211,6 +235,7 @@ public void getEntities(
Optional<String> tenantId =
org.hypertrace.core.grpcutils.context.RequestContext.CURRENT.get().getTenantId();
if (tenantId.isEmpty()) {
requestStatusErrorCounter.increment();
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
Expand Down Expand Up @@ -241,8 +266,10 @@ public void getEntities(

responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling entities request: {}.", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand All @@ -257,6 +284,7 @@ public void updateEntity(
Optional<String> tenantId =
org.hypertrace.core.grpcutils.context.RequestContext.CURRENT.get().getTenantId();
if (tenantId.isEmpty()) {
requestStatusErrorCounter.increment();
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
Expand All @@ -275,8 +303,10 @@ public void updateEntity(
}
responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling UpdateEntityRequest: {}.", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand Down Expand Up @@ -305,8 +335,10 @@ public void bulkUpdateEntities(
LOG.debug("Received response: {}", response);
responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling bulkUpdateEntities: {}.", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand All @@ -317,6 +349,7 @@ public void getBaselineForEntities(
Optional<String> tenantId =
org.hypertrace.core.grpcutils.context.RequestContext.CURRENT.get().getTenantId();
if (tenantId.isEmpty()) {
requestStatusErrorCounter.increment();
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
Expand All @@ -334,8 +367,10 @@ public void getBaselineForEntities(

responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling entities request: {}.", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand All @@ -345,6 +380,7 @@ public void explore(ExploreRequest request, StreamObserver<ExploreResponse> resp
Optional<String> tenantId =
org.hypertrace.core.grpcutils.context.RequestContext.CURRENT.get().getTenantId();
if (tenantId.isEmpty()) {
requestStatusErrorCounter.increment();
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
Expand All @@ -359,8 +395,10 @@ public void explore(ExploreRequest request, StreamObserver<ExploreResponse> resp
.getRequestHeaders());
responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling explore request: {}", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand All @@ -371,6 +409,7 @@ public void getLogEvents(
Optional<String> tenantId =
org.hypertrace.core.grpcutils.context.RequestContext.CURRENT.get().getTenantId();
if (tenantId.isEmpty()) {
requestStatusErrorCounter.increment();
responseObserver.onError(new ServiceException("Tenant id is missing in the request."));
return;
}
Expand All @@ -385,8 +424,10 @@ public void getLogEvents(
LogEventsResponse response = logEventsService.getLogEventsByFilter(context, request);
responseObserver.onNext(response);
responseObserver.onCompleted();
requestStatusSuccessCounter.increment();
} catch (Exception e) {
LOG.error("Error while handling logEvents request: {}", request, e);
requestStatusErrorCounter.increment();
responseObserver.onError(e);
}
}
Expand Down