mirror of
https://github.com/graphql-hive/console
synced 2026-04-24 16:07:17 +00:00
78 lines
6.5 KiB
Markdown
78 lines
6.5 KiB
Markdown
# `@hive/schema`
|
|
|
|
Service for validating schemas or verifying whether a composite GraphQL schema can be composed out
|
|
of subschemas. Supports Federation, Schema Stitching and Monolithic Schemas.
|
|
|
|
## Configuration
|
|
|
|
| Name | Required | Description | Example Value |
|
|
| ----------------------------------- | -------- | -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
| `PORT` | **Yes** | The port on which this service runs. | `6250` |
|
|
| `REDIS_HOST` | **Yes** | The host of your redis instance. | `"127.0.0.1"` |
|
|
| `REDIS_PORT` | **Yes** | The port of your redis instance. | `6379` |
|
|
| `REDIS_PASSWORD` | **Yes** | The password of your redis instance. | `"apollorocks"` |
|
|
| `REDIS_TLS_ENABLED` | **No** | Enable TLS for redis connection (rediss://). | `"0"` |
|
|
| `ENCRYPTION_SECRET` | **Yes** | Secret for encrypting stuff. | `8ebe95cg21c1fee355e9fa32c8c33141` |
|
|
| `ENVIRONMENT` | No | The environment of your Hive app. (**Note:** This will be used for Sentry reporting.) | `staging` |
|
|
| `BODY_LIMIT` | No | Maximum payload size in bytes. Defaults to 11 MB. | `11000000` |
|
|
| `SENTRY` | No | Whether Sentry error reporting should be enabled. | `1` (enabled) or `0` (disabled) |
|
|
| `SENTRY_DSN` | No | The DSN for reporting errors to Sentry. | `https://dooobars@o557896.ingest.sentry.io/12121212` |
|
|
| `PROMETHEUS_METRICS` | No | Whether Prometheus metrics should be enabled | `1` (enabled) or `0` (disabled) |
|
|
| `PROMETHEUS_METRICS_LABEL_INSTANCE` | No | The instance label added for the prometheus metrics. | `schema` |
|
|
| `PROMETHEUS_METRICS_PORT` | No | Port on which prometheus metrics are exposed | Defaults to `10254` |
|
|
| `REQUEST_BROKER` | No | Whether Request Broker should be enabled. | `1` (enabled) or `0` (disabled) |
|
|
| `REQUEST_BROKER_ENDPOINT` | No | The address | `https://broker.worker.dev` |
|
|
| `REQUEST_BROKER_SIGNATURE` | No | A secret signature needed to verify the request origin | `hbsahdbzxch123` |
|
|
| `REQUEST_LOGGING` | No | Log http requests | `1` (enabled) or `0` (disabled) |
|
|
| `LOG_LEVEL` | No | The verbosity of the service logs. One of `trace`, `debug`, `info`, `warn` ,`error`, `fatal` or `silent` | `info` (default) |
|
|
| `OPENTELEMETRY_COLLECTOR_ENDPOINT` | No | OpenTelemetry Collector endpoint. The expected traces transport is HTTP (port `4318`). | `http://localhost:4318/v1/traces` |
|
|
|
|
## Documentation
|
|
|
|
### Composition Request Handling
|
|
|
|
The following diagram outlines how the service handles incoming composition requests via HTTP
|
|
(tRPC). It details the decision-making process around caching with Redis, reuse of in-progress
|
|
tasks, and task execution using a limited pool of worker threads.
|
|
|
|
Each composition task runs in an isolated worker thread with memory limits to prevent a single
|
|
malfunctioning task from affecting the stability of the entire service. This setup ensures robust
|
|
and efficient processing by avoiding redundant computation, serving cached results when possible,
|
|
and queuing tasks when resources are saturated.
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant Client
|
|
participant Service
|
|
participant Redis
|
|
participant TaskManager
|
|
participant WorkerPool
|
|
|
|
Client->>Service: Composition HTTP request (tRPC)
|
|
Service->>Redis: Check for cached result
|
|
alt Cached result found
|
|
Redis-->>Service: Return result
|
|
Service-->>Client: Send cached result
|
|
else Not cached
|
|
Service->>TaskManager: Check if task in progress
|
|
alt Task in progress
|
|
TaskManager-->>Service: Return existing task
|
|
Service->>TaskManager: Wait for task completion
|
|
TaskManager-->>Service: Return result
|
|
Service-->>Client: Send result
|
|
else No task in progress
|
|
TaskManager->>WorkerPool: Check for available worker
|
|
alt Worker available
|
|
WorkerPool-->>TaskManager: Assign task
|
|
else No workers available
|
|
TaskManager->>TaskManager: Enqueue task in memory
|
|
TaskManager->>WorkerPool: Wait for available worker
|
|
WorkerPool-->>TaskManager: Assign task when ready
|
|
end
|
|
WorkerPool->>TaskManager: Task completed
|
|
TaskManager->>Redis: Cache result
|
|
TaskManager-->>Service: Return result to pending requests
|
|
Service-->>Client: Send result
|
|
end
|
|
end
|
|
```
|