Skip to content

Commit c478586

Browse files
pbibraPriya Bibra
andauthored
new graph service skeleton (#53)
Co-authored-by: Priya Bibra <[email protected]>
1 parent 6859776 commit c478586

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.slack.astra.graphApi;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import com.fasterxml.jackson.databind.MapperFeature;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.databind.json.JsonMapper;
7+
import com.linecorp.armeria.common.HttpResponse;
8+
import com.linecorp.armeria.common.HttpStatus;
9+
import com.linecorp.armeria.common.MediaType;
10+
import com.linecorp.armeria.server.annotation.Get;
11+
import com.linecorp.armeria.server.annotation.Param;
12+
import com.linecorp.armeria.server.annotation.Path;
13+
import com.slack.astra.server.AstraQueryServiceBase;
14+
import java.io.IOException;
15+
import org.slf4j.Logger;
16+
import org.slf4j.LoggerFactory;
17+
18+
/*
19+
APIs for exposing traces and their spans as subgraph dependencies.
20+
*/
21+
public class GraphService {
22+
private static final Logger LOG = LoggerFactory.getLogger(GraphService.class);
23+
private final AstraQueryServiceBase searcher;
24+
25+
private static final ObjectMapper objectMapper =
26+
JsonMapper.builder()
27+
// sort alphabetically for easier test asserts
28+
.configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true)
29+
// don't serialize null values or empty maps
30+
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
31+
.build();
32+
33+
public GraphService(AstraQueryServiceBase searcher) {
34+
this.searcher = searcher;
35+
}
36+
37+
@Get
38+
@Path("/api/v1/trace/{traceId}/subgraph")
39+
public HttpResponse getSubgraph(@Param("traceId") String traceId) throws IOException {
40+
String output = "[]";
41+
return HttpResponse.of(HttpStatus.OK, MediaType.JSON_UTF_8, output);
42+
}
43+
}

astra/src/main/java/com/slack/astra/server/Astra.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import com.slack.astra.clusterManager.ReplicaRestoreService;
2424
import com.slack.astra.clusterManager.SnapshotDeletionService;
2525
import com.slack.astra.elasticsearchApi.ElasticsearchApiService;
26+
import com.slack.astra.graphApi.GraphService;
2627
import com.slack.astra.logstore.LogMessage;
2728
import com.slack.astra.logstore.schema.ReservedFields;
2829
import com.slack.astra.logstore.search.AstraDistributedQueryService;
@@ -251,6 +252,7 @@ private static Set<Service> getServices(
251252
astraConfig.getQueryConfig().getZipkinDefaultMaxSpans(),
252253
astraConfig.getQueryConfig().getZipkinDefaultLookbackMins(),
253254
astraConfig.getQueryConfig().getZipkinDefaultDataFreshnessSecs()))
255+
.withAnnotatedService(new GraphService(astraDistributedQueryService))
254256
.withGrpcService(astraDistributedQueryService)
255257
.build();
256258
services.add(armeriaService);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.slack.astra.graphApi;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.mockito.Mockito.spy;
5+
6+
import com.linecorp.armeria.common.AggregatedHttpResponse;
7+
import com.linecorp.armeria.common.HttpResponse;
8+
import com.linecorp.armeria.common.HttpStatus;
9+
import com.slack.astra.server.AstraQueryServiceBase;
10+
import java.io.IOException;
11+
import org.junit.jupiter.api.BeforeEach;
12+
import org.junit.jupiter.api.Test;
13+
import org.mockito.Mock;
14+
15+
public class GraphServiceTest {
16+
@Mock private AstraQueryServiceBase searcher;
17+
private GraphService graphService;
18+
19+
@BeforeEach
20+
public void setup() throws IOException {
21+
graphService = spy(new GraphService(searcher));
22+
}
23+
24+
@Test
25+
public void testGetSubgraphByTraceId_emptyResult() throws Exception {
26+
String traceId = "test_trace_1";
27+
28+
HttpResponse response = graphService.getSubgraph(traceId);
29+
AggregatedHttpResponse aggregatedResponse = response.aggregate().join();
30+
31+
assertEquals(HttpStatus.OK, aggregatedResponse.status());
32+
assertEquals("[]", aggregatedResponse.contentUtf8());
33+
}
34+
}

0 commit comments

Comments
 (0)