From 511e6922f6312854bc2920a9b0c2767765d99eeb Mon Sep 17 00:00:00 2001 From: "Pawar, Prithviraj | Prithvi | ECMD" Date: Fri, 2 Nov 2018 15:01:11 +0900 Subject: [PATCH 1/3] Added instrumentation --- .../graphqldemo/GraphQLController.java | 2 +- .../graphqldemo/MyInstrumentation.java | 82 +++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/example/graphqldemo/MyInstrumentation.java diff --git a/src/main/java/com/example/graphqldemo/GraphQLController.java b/src/main/java/com/example/graphqldemo/GraphQLController.java index ef05f93..2486544 100644 --- a/src/main/java/com/example/graphqldemo/GraphQLController.java +++ b/src/main/java/com/example/graphqldemo/GraphQLController.java @@ -37,7 +37,7 @@ public Map myGraphql(@RequestBody String request) throws Exceptio SchemaGenerator schemaGenerator = new SchemaGenerator(); GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, wiring.buildRuntimeWiring()); - GraphQL build = GraphQL.newGraphQL(graphQLSchema).instrumentation(new TracingInstrumentation()).build(); + GraphQL build = GraphQL.newGraphQL(graphQLSchema).instrumentation(new MyInstrumentation()).build(); ExecutionInput executionInput=ExecutionInput.newExecutionInput().query(jsonRequest.getString("query")).build(); ExecutionResult executionResult=build.execute(executionInput); diff --git a/src/main/java/com/example/graphqldemo/MyInstrumentation.java b/src/main/java/com/example/graphqldemo/MyInstrumentation.java new file mode 100644 index 0000000..ab56b23 --- /dev/null +++ b/src/main/java/com/example/graphqldemo/MyInstrumentation.java @@ -0,0 +1,82 @@ +package com.example.graphqldemo; + +import graphql.ExecutionResult; +import graphql.ExecutionResultImpl; +import graphql.execution.instrumentation.Instrumentation; +import graphql.execution.instrumentation.InstrumentationContext; +import graphql.execution.instrumentation.InstrumentationState; +import graphql.execution.instrumentation.SimpleInstrumentationContext; +import graphql.execution.instrumentation.parameters.*; +import graphql.execution.instrumentation.tracing.TracingSupport; +import graphql.language.Document; +import graphql.validation.ValidationError; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.*; +import java.util.concurrent.CompletableFuture; + +import static graphql.execution.instrumentation.SimpleInstrumentationContext.whenCompleted; + +/** + * Created by quang.nguyen on 2017/12/13. + */ +public class MyInstrumentation implements Instrumentation { + private final static Logger LOGGER = LoggerFactory.getLogger(MyInstrumentation.class); + @Override + public InstrumentationState createState() { + return new TracingSupport(); + } + + @Override + public CompletableFuture instrumentExecutionResult(ExecutionResult executionResult, InstrumentationExecutionParameters parameters) { + TracingSupport tracingSupport = parameters.getInstrumentationState(); + LinkedHashMap tracing=new LinkedHashMap<> (); + LOGGER.debug("Appending duration"); + tracing.put ("Total-ResponseTime",(Long) tracingSupport.snapshotTracingData ().get ("duration")/1000000); + ArrayList fieldData=(ArrayList) ((Map) tracingSupport.snapshotTracingData ().get ("execution")).get("resolvers"); + for(int index=0;index)fieldData.get (index)).get ("fieldName").toString ()+"-Time",(Long) ((LinkedHashMap)fieldData.get (index)).get("duration")/1000000); + } + return CompletableFuture.completedFuture(new ExecutionResultImpl(executionResult.getData(), executionResult.getErrors(),tracing)); + } + + @Override + public InstrumentationContext beginFieldFetch(InstrumentationFieldFetchParameters parameters) { + TracingSupport tracingSupport = parameters.getInstrumentationState(); + TracingSupport.TracingContext ctx = tracingSupport.beginField(parameters.getEnvironment()); + return whenCompleted((result, t) -> ctx.onEnd()); + } + + + @Override + public InstrumentationContext beginExecution(InstrumentationExecutionParameters parameters) { + return new SimpleInstrumentationContext<>(); + } + + @Override + public InstrumentationContext beginParse(InstrumentationExecutionParameters parameters) { + return new SimpleInstrumentationContext<>(); + } + + @Override + public InstrumentationContext> beginValidation(InstrumentationValidationParameters parameters) { + return new SimpleInstrumentationContext<>(); + } + + @Override + public InstrumentationContext beginExecuteOperation(InstrumentationExecuteOperationParameters parameters) { + return new SimpleInstrumentationContext<>(); + } + + @Override + public InstrumentationContext beginExecutionStrategy(InstrumentationExecutionStrategyParameters parameters) { + return new SimpleInstrumentationContext<>(); + } + + @Override + public InstrumentationContext beginField(InstrumentationFieldParameters parameters) { + return new SimpleInstrumentationContext<>(); + } + +} From 43a3d8cb519b17bb5d93574cc5261678a47aa333 Mon Sep 17 00:00:00 2001 From: prithviraj Date: Tue, 5 May 2020 12:46:10 +0900 Subject: [PATCH 2/3] added schema relaoding method in graphql --- .idea/.gitignore | 2 + .idea/codeStyles/Project.xml | 9 +++ .idea/codeStyles/codeStyleConfig.xml | 5 ++ .idea/compiler.xml | 9 +++ .idea/google-java-format.xml | 6 ++ .idea/gradle.xml | 18 +++++ .idea/jarRepositories.xml | 20 +++++ .idea/misc.xml | 6 ++ .idea/modules/GraphQL-Java-Spring_main.iml | 26 +++++++ .idea/modules/GraphQL-Java-Spring_test.iml | 28 +++++++ .../00553c522da39be2e03372757534a4eb91e5c8cb | 2 + .../1cc8d2885fe55be8318d9bd8d18de1ec82f07619 | 0 .../8f0cfb49ff120e9da9ec379458a6f97a6923ba96 | 0 .../bea152ffdc330b959d5910169b9b2d623bc9fcf9 | 0 .../c824a35e7bb887e80e8a7f952898ba4aaf89d636 | 0 .../d2df242ee9cc6ce1dc005d3a6a66644cc2bf7382 | 3 + .../ecd544ecec47ffe05e1322fc079b950f8b486e42 | 0 .../f07866736216be0ee2aba49e392191aeae700a35 | 0 .../f5183b9b75f64d7f71cb6e4ddf8bde867c573df3 | 0 .../f84e45900b22179f5138acc44477a57aa1decd31 | 2 + .idea/sonarlint/issuestore/index.pb | 21 ++++++ .idea/vcs.xml | 6 ++ GraphQL-Java-Spring.iml | 13 ++++ build.gradle | 49 ++++++++----- .../example/graphqldemo/AuthDirective.java | 27 +++++++ .../graphqldemo/GraphQLController.java | 45 ++++++++---- .../graphqldemo/GraphqlDemoApplication.java | 6 +- .../graphqldemo/MyInstrumentation.java | 73 ++++++++++++++----- .../graphqldemo/fetch/WandFetcher.java | 12 ++- .../example/graphqldemo/magicSchool.graphql | 33 +++++---- .../example/graphqldemo/magicSchool1.graphql | 23 ++++++ .../example/graphqldemo/schema/Wiring.java | 14 ++-- .../GraphqlDemoApplicationTests.java | 6 +- 33 files changed, 377 insertions(+), 87 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/google-java-format.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules/GraphQL-Java-Spring_main.iml create mode 100644 .idea/modules/GraphQL-Java-Spring_test.iml create mode 100644 .idea/sonarlint/issuestore/0/0/00553c522da39be2e03372757534a4eb91e5c8cb create mode 100644 .idea/sonarlint/issuestore/1/c/1cc8d2885fe55be8318d9bd8d18de1ec82f07619 create mode 100644 .idea/sonarlint/issuestore/8/f/8f0cfb49ff120e9da9ec379458a6f97a6923ba96 create mode 100644 .idea/sonarlint/issuestore/b/e/bea152ffdc330b959d5910169b9b2d623bc9fcf9 create mode 100644 .idea/sonarlint/issuestore/c/8/c824a35e7bb887e80e8a7f952898ba4aaf89d636 create mode 100644 .idea/sonarlint/issuestore/d/2/d2df242ee9cc6ce1dc005d3a6a66644cc2bf7382 create mode 100644 .idea/sonarlint/issuestore/e/c/ecd544ecec47ffe05e1322fc079b950f8b486e42 create mode 100644 .idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 create mode 100644 .idea/sonarlint/issuestore/f/5/f5183b9b75f64d7f71cb6e4ddf8bde867c573df3 create mode 100644 .idea/sonarlint/issuestore/f/8/f84e45900b22179f5138acc44477a57aa1decd31 create mode 100644 .idea/sonarlint/issuestore/index.pb create mode 100644 .idea/vcs.xml create mode 100644 GraphQL-Java-Spring.iml create mode 100644 src/main/java/com/example/graphqldemo/AuthDirective.java create mode 100644 src/main/java/com/example/graphqldemo/magicSchool1.graphql diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..302a25a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..3585644 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/google-java-format.xml b/.idea/google-java-format.xml new file mode 100644 index 0000000..8b57f45 --- /dev/null +++ b/.idea/google-java-format.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..86e6572 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..fdc392f --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..99e93fb --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules/GraphQL-Java-Spring_main.iml b/.idea/modules/GraphQL-Java-Spring_main.iml new file mode 100644 index 0000000..33231d6 --- /dev/null +++ b/.idea/modules/GraphQL-Java-Spring_main.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules/GraphQL-Java-Spring_test.iml b/.idea/modules/GraphQL-Java-Spring_test.iml new file mode 100644 index 0000000..9fee31a --- /dev/null +++ b/.idea/modules/GraphQL-Java-Spring_test.iml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/0/0/00553c522da39be2e03372757534a4eb91e5c8cb b/.idea/sonarlint/issuestore/0/0/00553c522da39be2e03372757534a4eb91e5c8cb new file mode 100644 index 0000000..fc7d016 --- /dev/null +++ b/.idea/sonarlint/issuestore/0/0/00553c522da39be2e03372757534a4eb91e5c8cb @@ -0,0 +1,2 @@ + +esquid:UselessImportCheck"CRemove this unused import 'graphql.schema.DataFetchingEnvironment'.(¶Õ£³ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/1/c/1cc8d2885fe55be8318d9bd8d18de1ec82f07619 b/.idea/sonarlint/issuestore/1/c/1cc8d2885fe55be8318d9bd8d18de1ec82f07619 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/8/f/8f0cfb49ff120e9da9ec379458a6f97a6923ba96 b/.idea/sonarlint/issuestore/8/f/8f0cfb49ff120e9da9ec379458a6f97a6923ba96 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/b/e/bea152ffdc330b959d5910169b9b2d623bc9fcf9 b/.idea/sonarlint/issuestore/b/e/bea152ffdc330b959d5910169b9b2d623bc9fcf9 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/c/8/c824a35e7bb887e80e8a7f952898ba4aaf89d636 b/.idea/sonarlint/issuestore/c/8/c824a35e7bb887e80e8a7f952898ba4aaf89d636 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/d/2/d2df242ee9cc6ce1dc005d3a6a66644cc2bf7382 b/.idea/sonarlint/issuestore/d/2/d2df242ee9cc6ce1dc005d3a6a66644cc2bf7382 new file mode 100644 index 0000000..3a3fc4d --- /dev/null +++ b/.idea/sonarlint/issuestore/d/2/d2df242ee9cc6ce1dc005d3a6a66644cc2bf7382 @@ -0,0 +1,3 @@ + +a squid:S00112"FDefine and throw a dedicated exception instead of using a generic one.(àÅåöýÿÿÿÿ +a squid:S00112"FDefine and throw a dedicated exception instead of using a generic one.(ø×ß—øÿÿÿÿ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/e/c/ecd544ecec47ffe05e1322fc079b950f8b486e42 b/.idea/sonarlint/issuestore/e/c/ecd544ecec47ffe05e1322fc079b950f8b486e42 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 b/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/f/5/f5183b9b75f64d7f71cb6e4ddf8bde867c573df3 b/.idea/sonarlint/issuestore/f/5/f5183b9b75f64d7f71cb6e4ddf8bde867c573df3 new file mode 100644 index 0000000..e69de29 diff --git a/.idea/sonarlint/issuestore/f/8/f84e45900b22179f5138acc44477a57aa1decd31 b/.idea/sonarlint/issuestore/f/8/f84e45900b22179f5138acc44477a57aa1decd31 new file mode 100644 index 0000000..33e0966 --- /dev/null +++ b/.idea/sonarlint/issuestore/f/8/f84e45900b22179f5138acc44477a57aa1decd31 @@ -0,0 +1,2 @@ + +hsquid:ModifiersOrderCheck"EReorder the modifiers to comply with the Java Language Specification.(„ŽÁÀ \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb new file mode 100644 index 0000000..9c8691d --- /dev/null +++ b/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,21 @@ + +l + + + + + + \ No newline at end of file diff --git a/GraphQL-Java-Spring.iml b/GraphQL-Java-Spring.iml new file mode 100644 index 0000000..9482331 --- /dev/null +++ b/GraphQL-Java-Spring.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 59c77a4..ebdc4ce 100644 --- a/build.gradle +++ b/build.gradle @@ -1,33 +1,44 @@ +plugins { + id 'org.springframework.boot' version '2.2.5.RELEASE' + id 'io.spring.dependency-management' version '1.0.9.RELEASE' + id 'java' +} + group = 'com.example' version = '0.0.1-SNAPSHOT' - - -buildscript { - ext { - springBootVersion = '2.0.1.RELEASE' - } - repositories { - mavenCentral() - } - dependencies { - classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") - } -} +sourceCompatibility = '11' apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' -sourceCompatibility = 1.8 + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + repositories { mavenCentral() } - dependencies { - compile('org.springframework.boot:spring-boot-starter-web') - testCompile('org.springframework.boot:spring-boot-starter-test') - compile('com.graphql-java:graphql-java:8.0') - compile group: 'org.json', name: 'json', version: '20170516' + implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive' + implementation 'org.springframework.boot:spring-boot-starter-webflux' + implementation 'com.graphql-java:graphql-java:12.0' + compile group: 'org.json', name: 'json', version: '20190722' + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + testImplementation('org.springframework.boot:spring-boot-starter-test') { + exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' + } + testImplementation 'de.flapdoodle.embed:de.flapdoodle.embed.mongo' + testImplementation 'io.projectreactor:reactor-test' + testImplementation('junit:junit:4.13') +} +test { + useJUnitPlatform() } + diff --git a/src/main/java/com/example/graphqldemo/AuthDirective.java b/src/main/java/com/example/graphqldemo/AuthDirective.java new file mode 100644 index 0000000..9a210be --- /dev/null +++ b/src/main/java/com/example/graphqldemo/AuthDirective.java @@ -0,0 +1,27 @@ +package com.example.graphqldemo; + +import graphql.schema.DataFetcher; +import graphql.schema.GraphQLFieldDefinition; +import graphql.schema.idl.SchemaDirectiveWiring; +import graphql.schema.idl.SchemaDirectiveWiringEnvironment; + +import java.util.Map; + +public class AuthDirective implements SchemaDirectiveWiring { + + @Override + public GraphQLFieldDefinition onField(SchemaDirectiveWiringEnvironment directiveWiringEnvironment) { + String client = (String) directiveWiringEnvironment.getDirective().getArgument("client").getValue(); + GraphQLFieldDefinition field = directiveWiringEnvironment.getElement(); + + DataFetcher originalDF = field.getDataFetcher(); + DataFetcher authDF = environment -> { + Map contextMap = environment.getContext(); + if (client == contextMap.get("clientId")) + return originalDF.get(environment); + + else return null; + }; + return field.transform(builder -> builder.dataFetcher(authDF)); + } +} diff --git a/src/main/java/com/example/graphqldemo/GraphQLController.java b/src/main/java/com/example/graphqldemo/GraphQLController.java index 2486544..2ef61a4 100644 --- a/src/main/java/com/example/graphqldemo/GraphQLController.java +++ b/src/main/java/com/example/graphqldemo/GraphQLController.java @@ -4,44 +4,61 @@ import graphql.ExecutionInput; import graphql.ExecutionResult; import graphql.GraphQL; -import graphql.execution.instrumentation.tracing.TracingInstrumentation; import graphql.schema.GraphQLSchema; -import graphql.schema.StaticDataFetcher; -import graphql.schema.idl.RuntimeWiring; import graphql.schema.idl.SchemaGenerator; import graphql.schema.idl.SchemaParser; import graphql.schema.idl.TypeDefinitionRegistry; +import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import org.json.JSONObject; +import javax.annotation.PostConstruct; import java.io.File; import java.util.Map; - @RestController public class GraphQLController { @Autowired Wiring wiring; + private GraphQL graphQl; + + @PostConstruct + protected void init() { + graphQl = getGraphQl(); + } + @RequestMapping(value = "/graphql", method = RequestMethod.POST) - public Map myGraphql(@RequestBody String request) throws Exception { + public Map myGraphql(@RequestBody String request) throws Exception { + + JSONObject jsonRequest = new JSONObject(request); + ExecutionInput executionInput = ExecutionInput.newExecutionInput().query(jsonRequest.getString("query")).build(); + ExecutionResult executionResult = graphQl.execute(executionInput); - JSONObject jsonRequest = new JSONObject (request); + return executionResult.toSpecification(); + } + public GraphQL getGraphQl() { SchemaParser schemaParser = new SchemaParser(); File schemaFile = new File("src/main/java/com/example/graphqldemo/magicSchool.graphql"); + TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schemaFile); + SchemaGenerator schemaGenerator = new SchemaGenerator(); + GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, wiring.buildRuntimeWiring()); + return GraphQL.newGraphQL(graphQLSchema).build(); + } - TypeDefinitionRegistry typeDefinitionRegistry =schemaParser.parse(schemaFile); + @RequestMapping(value = "/graphql/reload", method = RequestMethod.POST, produces = "application/json") + public String myGraphqlReload(@RequestBody String request) throws Exception { + SchemaParser schemaParser = new SchemaParser(); + File schemaFile = new File("src/main/java/com/example/graphqldemo/magicSchool1.graphql"); + TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schemaFile); SchemaGenerator schemaGenerator = new SchemaGenerator(); + schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, wiring.buildRuntimeWiring()); GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, wiring.buildRuntimeWiring()); - GraphQL build = GraphQL.newGraphQL(graphQLSchema).instrumentation(new MyInstrumentation()).build(); - - ExecutionInput executionInput=ExecutionInput.newExecutionInput().query(jsonRequest.getString("query")).build(); - ExecutionResult executionResult=build.execute(executionInput); - - return executionResult.toSpecification(); + this.graphQl = GraphQL.newGraphQL(graphQLSchema).build(); + return "Successfully reloaded!!"; } } + diff --git a/src/main/java/com/example/graphqldemo/GraphqlDemoApplication.java b/src/main/java/com/example/graphqldemo/GraphqlDemoApplication.java index 6dac261..2753ea0 100644 --- a/src/main/java/com/example/graphqldemo/GraphqlDemoApplication.java +++ b/src/main/java/com/example/graphqldemo/GraphqlDemoApplication.java @@ -6,7 +6,7 @@ @SpringBootApplication public class GraphqlDemoApplication { - public static void main(String[] args) { - SpringApplication.run(GraphqlDemoApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(GraphqlDemoApplication.class, args); + } } diff --git a/src/main/java/com/example/graphqldemo/MyInstrumentation.java b/src/main/java/com/example/graphqldemo/MyInstrumentation.java index ab56b23..992e5b6 100644 --- a/src/main/java/com/example/graphqldemo/MyInstrumentation.java +++ b/src/main/java/com/example/graphqldemo/MyInstrumentation.java @@ -1,53 +1,83 @@ package com.example.graphqldemo; +import graphql.ExecutionInput; import graphql.ExecutionResult; import graphql.ExecutionResultImpl; -import graphql.execution.instrumentation.Instrumentation; -import graphql.execution.instrumentation.InstrumentationContext; -import graphql.execution.instrumentation.InstrumentationState; -import graphql.execution.instrumentation.SimpleInstrumentationContext; +import graphql.execution.ExecutionContext; +import graphql.execution.instrumentation.*; import graphql.execution.instrumentation.parameters.*; import graphql.execution.instrumentation.tracing.TracingSupport; import graphql.language.Document; +import graphql.schema.DataFetcher; +import graphql.schema.GraphQLSchema; import graphql.validation.ValidationError; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.CompletableFuture; import static graphql.execution.instrumentation.SimpleInstrumentationContext.whenCompleted; /** - * Created by quang.nguyen on 2017/12/13. + * */ public class MyInstrumentation implements Instrumentation { private final static Logger LOGGER = LoggerFactory.getLogger(MyInstrumentation.class); - @Override - public InstrumentationState createState() { - return new TracingSupport(); - } @Override public CompletableFuture instrumentExecutionResult(ExecutionResult executionResult, InstrumentationExecutionParameters parameters) { TracingSupport tracingSupport = parameters.getInstrumentationState(); - LinkedHashMap tracing=new LinkedHashMap<> (); + LinkedHashMap tracing = new LinkedHashMap<>(); LOGGER.debug("Appending duration"); - tracing.put ("Total-ResponseTime",(Long) tracingSupport.snapshotTracingData ().get ("duration")/1000000); - ArrayList fieldData=(ArrayList) ((Map) tracingSupport.snapshotTracingData ().get ("execution")).get("resolvers"); - for(int index=0;index)fieldData.get (index)).get ("fieldName").toString ()+"-Time",(Long) ((LinkedHashMap)fieldData.get (index)).get("duration")/1000000); + tracing.put("Total-ResponseTime", (Long) tracingSupport.snapshotTracingData().get("duration") / 1000000); + ArrayList fieldData = (ArrayList) ((Map) tracingSupport.snapshotTracingData().get("execution")).get("resolvers"); + for (int index = 0; index < fieldData.size(); index++) { + tracing.put(((LinkedHashMap) fieldData.get(index)).get("fieldName").toString() + "-Time", (Long) ((LinkedHashMap) fieldData.get(index)).get("duration") / 1000000); } - return CompletableFuture.completedFuture(new ExecutionResultImpl(executionResult.getData(), executionResult.getErrors(),tracing)); + return CompletableFuture.completedFuture(new ExecutionResultImpl(executionResult.getData(), executionResult.getErrors(), tracing)); } @Override public InstrumentationContext beginFieldFetch(InstrumentationFieldFetchParameters parameters) { TracingSupport tracingSupport = parameters.getInstrumentationState(); - TracingSupport.TracingContext ctx = tracingSupport.beginField(parameters.getEnvironment()); + TracingSupport.TracingContext ctx = tracingSupport.beginField(parameters.getEnvironment(),true); return whenCompleted((result, t) -> ctx.onEnd()); } + @Override + public InstrumentationContext beginFieldComplete(InstrumentationFieldCompleteParameters parameters) { + return null; + } + + @Override + public InstrumentationContext beginFieldListComplete(InstrumentationFieldCompleteParameters parameters) { + return null; + } + + @Override + public ExecutionInput instrumentExecutionInput(ExecutionInput executionInput, InstrumentationExecutionParameters parameters) { + return null; + } + + @Override + public GraphQLSchema instrumentSchema(GraphQLSchema schema, InstrumentationExecutionParameters parameters) { + return null; + } + + @Override + public ExecutionContext instrumentExecutionContext(ExecutionContext executionContext, InstrumentationExecutionParameters parameters) { + return null; + } + + @Override + public DataFetcher instrumentDataFetcher(DataFetcher dataFetcher, InstrumentationFieldFetchParameters parameters) { + return null; + } + @Override public InstrumentationContext beginExecution(InstrumentationExecutionParameters parameters) { @@ -70,8 +100,13 @@ public InstrumentationContext beginExecuteOperation(Instrumenta } @Override - public InstrumentationContext beginExecutionStrategy(InstrumentationExecutionStrategyParameters parameters) { - return new SimpleInstrumentationContext<>(); + public ExecutionStrategyInstrumentationContext beginExecutionStrategy(InstrumentationExecutionStrategyParameters parameters) { + return null; + } + + @Override + public DeferredFieldInstrumentationContext beginDeferredField(InstrumentationDeferredFieldParameters parameters) { + return null; } @Override diff --git a/src/main/java/com/example/graphqldemo/fetch/WandFetcher.java b/src/main/java/com/example/graphqldemo/fetch/WandFetcher.java index 03d1390..5c2fd75 100644 --- a/src/main/java/com/example/graphqldemo/fetch/WandFetcher.java +++ b/src/main/java/com/example/graphqldemo/fetch/WandFetcher.java @@ -1,7 +1,6 @@ package com.example.graphqldemo.fetch; import graphql.schema.DataFetcher; -import graphql.schema.DataFetchingEnvironment; import org.springframework.stereotype.Component; import java.util.HashMap; @@ -9,13 +8,12 @@ @Component public class WandFetcher { - public DataFetcher getData() - { + public DataFetcher getData() { return environment -> { - Map wand=new HashMap<>(); - wand.put("name","Elder Wand"); - wand.put("origin","elder wood"); - return wand; + Map wand = new HashMap<>(); + wand.put("name", "Elder Wand"); + wand.put("origin", "elder wood"); + return wand; }; } diff --git a/src/main/java/com/example/graphqldemo/magicSchool.graphql b/src/main/java/com/example/graphqldemo/magicSchool.graphql index b281b1a..c5e86e9 100644 --- a/src/main/java/com/example/graphqldemo/magicSchool.graphql +++ b/src/main/java/com/example/graphqldemo/magicSchool.graphql @@ -1,26 +1,27 @@ +directive @auth(client: String!) on FIELD_DEFINITION type Query{ -magicSchool:MagicSchool + magicSchool:MagicSchool } -type MagicSchool{ + type MagicSchool{ name: String -HeadMaster:String -student(id:String):Student + HeadMaster:String +student(id:String):Student @auth(client: "android") } -type Student{ -name:String -wand:Wand -house:House + type Student{ + name:String + wand:Wand + house:House } -type House{ -name:String -color:String -points:Int + type House{ + name:String + color:String + points:Int } -type Wand{ -name:String -origin:String + type Wand{ + name:String + origin:String } -type Mutation{ + type Mutation{ enrollStudent(name:String!,age:Int!): String } \ No newline at end of file diff --git a/src/main/java/com/example/graphqldemo/magicSchool1.graphql b/src/main/java/com/example/graphqldemo/magicSchool1.graphql new file mode 100644 index 0000000..011a61f --- /dev/null +++ b/src/main/java/com/example/graphqldemo/magicSchool1.graphql @@ -0,0 +1,23 @@ +directive @auth(client: String!) on FIELD_DEFINITION + + + type Query{ + magicSchool:MagicSchool + } + type MagicSchool{ +name: String + HeadMistress:String +student(id:String):Student @auth(client: "android") + } + type Student{ + name:String + wand:Wand + } + type Wand{ + name:String + origin:String + } + + type Mutation{ +enrollStudent(name:String!,age:Int!): String + } \ No newline at end of file diff --git a/src/main/java/com/example/graphqldemo/schema/Wiring.java b/src/main/java/com/example/graphqldemo/schema/Wiring.java index d915058..759cdf2 100644 --- a/src/main/java/com/example/graphqldemo/schema/Wiring.java +++ b/src/main/java/com/example/graphqldemo/schema/Wiring.java @@ -1,6 +1,7 @@ package com.example.graphqldemo.schema; +import com.example.graphqldemo.AuthDirective; import com.example.graphqldemo.fetch.HouseFetcher; import com.example.graphqldemo.fetch.MagicSchoolFetcher; import com.example.graphqldemo.fetch.StudentFetcher; @@ -22,19 +23,20 @@ public class Wiring { public RuntimeWiring buildRuntimeWiring() { return RuntimeWiring.newRuntimeWiring() - .type("Query",typeWiring -> typeWiring - .dataFetcher("magicSchool",magicSchoolFetcher.getData()) + .type("Query", typeWiring -> typeWiring + .dataFetcher("magicSchool", magicSchoolFetcher.getData()) ) .type("MagicSchool", typeWiring -> typeWiring .dataFetcher("student", studentFetcher.getData()) ) - .type("Student",typeWiring -> typeWiring + .type("Student", typeWiring -> typeWiring .dataFetcher("wand", wandFetcher.getData()) - .dataFetcher("house",houseFetcher.getData()) + .dataFetcher("house", houseFetcher.getData()) ) - .type("Mutation",typeWiring -> typeWiring - .dataFetcher("enrollStudent",studentFetcher.putData()) + .type("Mutation", typeWiring -> typeWiring + .dataFetcher("enrollStudent", studentFetcher.putData()) ) + .directive("auth", new AuthDirective()) .build(); } } diff --git a/src/test/java/com/example/graphqldemo/GraphqlDemoApplicationTests.java b/src/test/java/com/example/graphqldemo/GraphqlDemoApplicationTests.java index ce2117d..e278d0f 100644 --- a/src/test/java/com/example/graphqldemo/GraphqlDemoApplicationTests.java +++ b/src/test/java/com/example/graphqldemo/GraphqlDemoApplicationTests.java @@ -9,8 +9,8 @@ @SpringBootTest public class GraphqlDemoApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } From 626d7dd07df76090fc2ecc4253d4b04d2e3cd583 Mon Sep 17 00:00:00 2001 From: prithviraj Date: Tue, 5 May 2020 13:09:43 +0900 Subject: [PATCH 3/3] added gitIgnore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..79ad755 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.idea +.gradle +build +gradle +**.iml +out/