Skip to content

Commit f627973

Browse files
author
Rishabh
authored
feat: Mock Api for log event (#55)
1 parent 5ce7ad3 commit f627973

File tree

17 files changed

+309
-0
lines changed

17 files changed

+309
-0
lines changed

hypertrace-core-graphql-impl/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ dependencies {
2121
implementation(project(":hypertrace-core-graphql-trace-schema"))
2222
implementation(project(":hypertrace-core-graphql-attribute-scope"))
2323
implementation(project(":hypertrace-core-graphql-rx-utils"))
24+
implementation(project(":hypertrace-core-graphql-log-event-schema"))
2425

2526
implementation("org.slf4j:slf4j-api")
2627
implementation("com.google.inject:guice")

hypertrace-core-graphql-impl/src/main/java/org/hypertrace/core/graphql/impl/GraphQlModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.hypertrace.core.graphql.common.utils.attributes.AttributeUtilsModule;
88
import org.hypertrace.core.graphql.context.GraphQlRequestContextModule;
99
import org.hypertrace.core.graphql.deserialization.GraphQlDeserializationRegistryModule;
10+
import org.hypertrace.core.graphql.log.event.LogEventSchemaModule;
1011
import org.hypertrace.core.graphql.metadata.MetadataSchemaModule;
1112
import org.hypertrace.core.graphql.rx.RxUtilModule;
1213
import org.hypertrace.core.graphql.schema.registry.GraphQlSchemaRegistryModule;
@@ -46,5 +47,6 @@ protected void configure() {
4647
install(new SpanSchemaModule());
4748
install(new TraceSchemaModule());
4849
install(new RxUtilModule());
50+
install(new LogEventSchemaModule());
4951
}
5052
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
plugins {
2+
`java-library`
3+
}
4+
5+
dependencies {
6+
api("com.google.inject:guice")
7+
api("com.graphql-java:graphql-java")
8+
api(project(":hypertrace-core-graphql-spi"))
9+
api("io.github.graphql-java:graphql-java-annotations")
10+
11+
annotationProcessor("org.projectlombok:lombok")
12+
compileOnly("org.projectlombok:lombok")
13+
14+
compileOnly(project(":hypertrace-core-graphql-attribute-scope-constants"))
15+
16+
implementation("org.slf4j:slf4j-api")
17+
implementation("io.reactivex.rxjava3:rxjava")
18+
implementation("org.hypertrace.gateway.service:gateway-service-api")
19+
implementation("com.google.protobuf:protobuf-java-util")
20+
21+
implementation(project(":hypertrace-core-graphql-context"))
22+
implementation(project(":hypertrace-core-graphql-grpc-utils"))
23+
implementation(project(":hypertrace-core-graphql-common-schema"))
24+
implementation(project(":hypertrace-core-graphql-attribute-store"))
25+
implementation(project(":hypertrace-core-graphql-deserialization"))
26+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.hypertrace.core.graphql.log.event;
2+
3+
import org.hypertrace.core.graphql.log.event.schema.LogEventSchema;
4+
import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment;
5+
6+
public class LogEventSchemaFragment implements GraphQlSchemaFragment {
7+
8+
@Override
9+
public String fragmentName() {
10+
return "LogEvent schema";
11+
}
12+
13+
@Override
14+
public Class<?> annotatedQueryClass() {
15+
return LogEventSchema.class;
16+
}
17+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.hypertrace.core.graphql.log.event;
2+
3+
import com.google.inject.AbstractModule;
4+
import com.google.inject.multibindings.Multibinder;
5+
import org.hypertrace.core.graphql.common.request.ResultSetRequestBuilder;
6+
import org.hypertrace.core.graphql.log.event.dao.LogEventDaoModule;
7+
import org.hypertrace.core.graphql.log.event.request.LogEventRequestModule;
8+
import org.hypertrace.core.graphql.spi.schema.GraphQlSchemaFragment;
9+
10+
public class LogEventSchemaModule extends AbstractModule {
11+
@Override
12+
protected void configure() {
13+
Multibinder.newSetBinder(binder(), GraphQlSchemaFragment.class)
14+
.addBinding()
15+
.to(LogEventSchemaFragment.class);
16+
17+
requireBinding(ResultSetRequestBuilder.class);
18+
install(new LogEventDaoModule());
19+
install(new LogEventRequestModule());
20+
}
21+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.hypertrace.core.graphql.log.event.dao;
2+
3+
import io.reactivex.rxjava3.core.Single;
4+
import org.hypertrace.core.graphql.log.event.request.LogEventRequest;
5+
import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet;
6+
7+
public interface LogEventDao {
8+
9+
Single<LogEventResultSet> getLogEvents(LogEventRequest request);
10+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.hypertrace.core.graphql.log.event.dao;
2+
3+
import com.google.inject.AbstractModule;
4+
5+
public class LogEventDaoModule extends AbstractModule {
6+
7+
@Override
8+
protected void configure() {
9+
bind(LogEventDao.class).to(MockLogEventDao.class);
10+
}
11+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package org.hypertrace.core.graphql.log.event.dao;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import io.reactivex.rxjava3.core.Single;
6+
import java.util.List;
7+
import java.util.Map;
8+
import lombok.experimental.Accessors;
9+
import org.hypertrace.core.graphql.log.event.request.LogEventRequest;
10+
import org.hypertrace.core.graphql.log.event.schema.LogEvent;
11+
import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet;
12+
13+
public class MockLogEventDao implements LogEventDao {
14+
15+
@Override
16+
public Single<LogEventResultSet> getLogEvents(LogEventRequest request) {
17+
ObjectMapper objectMapper = new ObjectMapper();
18+
Map<String, String> attributes =
19+
Map.of(
20+
"event", "Acquired lock with 0 transaction waiting",
21+
"network", "tcp",
22+
"message", "Slow transaction");
23+
String attributeString;
24+
try {
25+
attributeString = objectMapper.writeValueAsString(attributes);
26+
} catch (JsonProcessingException e) {
27+
attributeString = "";
28+
}
29+
30+
LogEvent logEvent1 =
31+
new MockLogEvent(
32+
Map.of(
33+
"spanId",
34+
"span-1",
35+
"traceId",
36+
"trace-1",
37+
"timestamp",
38+
System.nanoTime(),
39+
"attributes",
40+
attributeString));
41+
42+
LogEvent logEvent2 =
43+
new MockLogEvent(
44+
Map.of(
45+
"spanId",
46+
"span-2",
47+
"traceId",
48+
"trace-1",
49+
"timestamp",
50+
System.nanoTime(),
51+
"attributes",
52+
attributeString));
53+
LogEventResultSet logEventResultSet =
54+
new MockLogEventResultSet(List.of(logEvent1, logEvent2), 2, 2);
55+
56+
return Single.just(logEventResultSet);
57+
}
58+
59+
@lombok.Value
60+
@Accessors(fluent = true)
61+
private static class MockLogEvent implements LogEvent {
62+
Map<String, Object> attributeValues;
63+
64+
@Override
65+
public Object attribute(String key) {
66+
return this.attributeValues.get(key);
67+
}
68+
}
69+
70+
@lombok.Value
71+
@Accessors(fluent = true)
72+
private static class MockLogEventResultSet implements LogEventResultSet {
73+
List<LogEvent> results;
74+
long total;
75+
long count;
76+
}
77+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.hypertrace.core.graphql.log.event.fetcher;
2+
3+
import graphql.schema.DataFetcher;
4+
import graphql.schema.DataFetchingEnvironment;
5+
import java.util.concurrent.CompletableFuture;
6+
import javax.inject.Inject;
7+
import org.hypertrace.core.graphql.common.fetcher.InjectableDataFetcher;
8+
import org.hypertrace.core.graphql.log.event.dao.LogEventDao;
9+
import org.hypertrace.core.graphql.log.event.request.LogEventRequestBuilder;
10+
import org.hypertrace.core.graphql.log.event.schema.LogEventResultSet;
11+
12+
public class LogEventFetcher extends InjectableDataFetcher<LogEventResultSet> {
13+
14+
public LogEventFetcher() {
15+
super(LogEventFetcherImpl.class);
16+
}
17+
18+
static final class LogEventFetcherImpl
19+
implements DataFetcher<CompletableFuture<LogEventResultSet>> {
20+
private final LogEventRequestBuilder requestBuilder;
21+
private final LogEventDao logEventDao;
22+
23+
@Inject
24+
LogEventFetcherImpl(LogEventRequestBuilder requestBuilder, LogEventDao logEventDao) {
25+
this.requestBuilder = requestBuilder;
26+
this.logEventDao = logEventDao;
27+
}
28+
29+
@Override
30+
public CompletableFuture<LogEventResultSet> get(DataFetchingEnvironment environment) {
31+
return this.requestBuilder
32+
.build(environment.getContext(), environment.getArguments())
33+
.flatMap(this.logEventDao::getLogEvents)
34+
.toCompletionStage()
35+
.toCompletableFuture();
36+
}
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.hypertrace.core.graphql.log.event.request;
2+
3+
import io.reactivex.rxjava3.core.Single;
4+
import java.util.Map;
5+
import lombok.Value;
6+
import lombok.experimental.Accessors;
7+
import org.hypertrace.core.graphql.context.GraphQlRequestContext;
8+
9+
public class DefaultLogEventRequestBuilder implements LogEventRequestBuilder {
10+
11+
@Override
12+
public Single<LogEventRequest> build(
13+
GraphQlRequestContext context, Map<String, Object> arguments) {
14+
return Single.just(new DefaultLogEventRequest(context));
15+
}
16+
17+
@Value
18+
@Accessors(fluent = true)
19+
private static class DefaultLogEventRequest implements LogEventRequest {
20+
GraphQlRequestContext requestContext;
21+
}
22+
}

0 commit comments

Comments
 (0)