Hypertrace GraphQL service serves the GraphQL API which will be used by Hypertrace UI.
![]()  | 
|---|
| Hypertrace Query Architecture | 
Hypertrace-UI talks to hypertrace-GraphQL service which serves the GraphQL API which queries data from downstream services. GraphQL services talks to different grpc services to form the response including attribute-service, entity-service, gateway-service and config-service.
Here are some of the important GraphQL queries:
curl -s localhost:2020/graphql -H 'Content-Type: application/graphql' -d \
'{
  traces(
    type: API_TRACE
    between: {
      startTime: "2015-01-01T00:00:00.000Z"
      endTime: "2025-01-01T00:00:00.000Z"
    }
    filterBy: [
      {
        operator: EQUALS
        value: "348bae39282251a5"
        type: ID
        idType: API_TRACE
      }
    ]
  ) {
    total
  }
}'curl -s localhost:2020/graphql  -H 'Content-Type: application/graphql' -d \
'{
  entities(
    type: SERVICE 
    between: {
      startTime: "2015-01-01T00:00:00Z"
      endTime: "2025-01-01T00:00:00Z"
    }
  ) {
    results {
      name: attribute(key: "name")
    }
    total
  }
}'curl -s localhost:2020/graphql -H 'Content-Type: application/graphql' -d \
'{
  entities(
    type: BACKEND
    between: {
      startTime: "2015-01-01T00:00:00Z"
      endTime: "2025-01-01T00:00:00Z"
    }
  ) {
    results {
      name: attribute(key: "name")
    }
    total
  }
}'curl -s localhost:2020/graphql -H 'Content-Type: application/graphql' -d \
'{
  entities(
    type: API
    between: {
      startTime: "2015-01-01T00:00:00Z"
      endTime: "2025-01-01T00:00:00Z"
    }
  ) {
    results {
      name: attribute(key: "name")
    }
    total
  }
}'curl -s localhost:2020/graphql -H 'Content-Type: application/graphql' -d \
'{
  entities(
    type: SERVICE
    between: {
      startTime: "2015-01-01T00:00:00.000Z"
      endTime: "2025-01-01T00:00:00.000Z"
    }
  ) {
    results {
      id
      name: attribute(key: "name")
      outgoingEdges_SERVICE: outgoingEdges(neighborType: SERVICE) {
        results {
          neighbor {
            name: attribute(key: "name")
          }
        }
      }
      outgoingEdges_BACKEND: outgoingEdges(neighborType: BACKEND) {
        results {
          neighbor {
            name: attribute(key: "name")
          }
        }
      }
      incomingEdges_SERVICE: incomingEdges(neighborType: SERVICE) {
        results {
          neighbor {
            name: attribute(key: "name")
          }
        }
      }
    }
  }
}'The Hypertrace GraphQl service uses gradle to compile/install/distribute. Gradle wrapper is already part of the source code. To build Hypertrace GraphQL image, run:
./gradlew dockerBuildImages
Run ./gradlew test to execute unit tests.
To test your image using the docker-compose setup follow the steps:
- Commit you changes to a branch say 
graphql-service-test. - Go to hypertrace-service and checkout the above branch in the submodule.
 
cd hypertrace-graphql && git checkout graphql-service-test && cd ..
- Change tag for 
hypertrace-servicefrom:mainto:testin docker-compose file like this. 
  hypertrace-service:
    image: hypertrace/hypertrace-service:test
    container_name: hypertrace-service
    ...- and then run 
docker-compose upto test the setup. 
Add image repository and tag in values.yaml file here like below and then run ./hypertrace.sh install again and you can test your image!
hypertrace-graphql-service:
  image:
    repository: "hypertrace/hypertrace-graphql-service"
    tagOverride: "test"