diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..2210eb00 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,38 @@ +version: "2" + +run: + timeout: 5m + +formatters: + enable: + - gofumpt # gofumpt formatter + + settings: + gofumpt: + module-path: github.com/ClusterCockpit/cc-backend + +linters: + enable: + - staticcheck # staticcheck = true + - unparam # unusedparams = true + - nilnil # nilness = true (catches nil returns of nil interface values) + - govet # base vet; nilness + unusedwrite via govet analyzers + + settings: + staticcheck: + checks: ["ST1003"] + + govet: + enable: + - nilness + - unusedwrite + +exclusions: + paths: + - .git + - .vscode + - .idea + - node_modules + - internal/graph/generated # gqlgen generated code + - internal/api/docs\.go # swaggo generated code + - _test\.go # test files excluded from all linters diff --git a/.goreleaser.yaml b/.goreleaser.yaml index afc70dc8..5a37c27a 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -5,6 +5,7 @@ before: builds: - env: - CGO_ENABLED=1 + - CC=x86_64-linux-musl-gcc goos: - linux goarch: diff --git a/CLAUDE.md b/CLAUDE.md index 061d056b..658b0bde 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -314,6 +314,24 @@ job,function=stop_job event="{\"jobId\":123,\"cluster\":\"test\",\"startTime\":1 - Messages are logged; no responses are sent back to publishers - If NATS client is unavailable, API subscriptions are skipped (logged as warning) +### Security Considerations + +**The NATS API has no application-layer authentication or authorization.** Unlike +the REST endpoints (which require a JWT with `RoleAPI`), the subscribers process +any message delivered on the configured subjects. Anyone with publish rights to +those subjects on the broker can: + +- Insert arbitrary jobs (potentially attributed to other users) +- Mark running jobs as stopped, triggering archive/finalization +- Overwrite node state and health metadata for any cluster + +Operators MUST restrict publish ACLs at the NATS broker (per-account or +per-subject permissions) so that only trusted producers — e.g. the scheduler +integration on a known host or service account — can publish to the configured +`subject-job-event` and `subject-node-state` subjects. A shared, unrestricted +NATS broker is not a safe deployment topology for this API. A startup warning +is logged when these subscriptions are enabled. + ## Development Guidelines ### Performance @@ -323,6 +341,21 @@ records, archives) at scale. All code changes must prioritize maximum throughput and minimal latency. Avoid unnecessary allocations, prefer streaming over buffering, and be mindful of lock contention. When in doubt, benchmark. +### Commit Message Convention + +Commits must use conventional commit prefixes so goreleaser can generate the +changelog automatically. Only commits with these prefixes appear in releases: + +| Prefix | Changelog group | +|---------|------------------------| +| `feat:` | New Features | +| `fix:` | Bug fixes | +| `sec:` | Security updates | +| `docs:` | Documentation updates | + +Scoped variants are also recognised, e.g. `feat(api):`, `fix(deps):`. +Commits without one of these prefixes are excluded from the changelog. + ### Change Impact Analysis For any significant change, you MUST: diff --git a/Makefile b/Makefile index 61e74c71..04ad954c 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ TARGET = ./cc-backend FRONTEND = ./web/frontend -VERSION = 1.5.2 +VERSION = 1.5.4 GIT_HASH := $(shell git rev-parse --short HEAD || echo 'development') CURRENT_TIME = $(shell date +"%Y-%m-%d:T%H:%M:%S") LD_FLAGS = '-s -X main.date=${CURRENT_TIME} -X main.version=${VERSION} -X main.commit=${GIT_HASH}' @@ -36,7 +36,7 @@ SVELTE_SRC = $(wildcard $(FRONTEND)/src/*.svelte) \ $(wildcard $(FRONTEND)/src/header/*.svelte) \ $(wildcard $(FRONTEND)/src/job/*.svelte) -.PHONY: clean distclean test tags frontend swagger graphql $(TARGET) +.PHONY: clean distclean fmt lint test tags frontend swagger graphql $(TARGET) .NOTPARALLEL: @@ -75,6 +75,14 @@ test: @go vet ./... @go test ./... +fmt: + $(info ===> FORMAT) + @gofumpt -l -w . + +lint: + $(info ===> LINT) + @golangci-lint run ./... + tags: $(info ===> TAGS) @ctags -R diff --git a/README.md b/README.md index 030c9bd3..86b12034 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ # NOTE -While we do our best to keep the master branch in a usable state, there is no guarantee the master branch works. -Please do not use it for production! +While we do our best to keep the main branch in a usable state, there is no +guarantee the main branch works. Please do not use it for production! -Please have a look at the [Release -Notes](https://github.com/ClusterCockpit/cc-backend/blob/master/ReleaseNotes.md) +Please have a look at the [Release Notes](https://github.com/ClusterCockpit/cc-backend/blob/main/ReleaseNotes.md) for breaking changes! # ClusterCockpit REST and GraphQL API backend @@ -41,7 +40,7 @@ For real-time integration with HPC systems, the backend can subscribe to state updates, providing an alternative to REST API polling. Completed batch jobs are stored in a file-based job archive according to -[this specification](https://github.com/ClusterCockpit/cc-specifications/tree/master/job-archive). +[this specification](https://github.com/ClusterCockpit/cc-specifications/tree/main/job-archive). The backend supports authentication via local accounts, an external LDAP directory, and JWT tokens. Authorization for APIs is implemented with [JWT](https://jwt.io/) tokens created with public/private key encryption. @@ -100,6 +99,26 @@ the following targets: frontend source files will result in a complete rebuild. - `make clean`: Clean go build cache and remove binary. - `make test`: Run the tests that are also run in the GitHub workflow setup. +- `make fmt`: Format all Go source files using + [gofumpt](https://github.com/mvdan/gofumpt), a stricter superset of `gofmt`. + Requires `gofumpt` to be installed (see below). +- `make lint`: Run [golangci-lint](https://golangci-lint.run/) with the project + configuration in `.golangci.yml`. Requires `golangci-lint` to be installed + (see below). + +### Installing development tools + +`gofumpt` and `golangci-lint` are not part of the Go module and must be +installed separately: + +```sh +# Formatter (gofumpt) +go install mvdan.cc/gofumpt@latest + +# Linter (golangci-lint) — use the official install script to get a +# pre-built binary; installing via `go install` is not supported upstream. +curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh | sh -s -- -b $(go env GOPATH)/bin +``` A common workflow for setting up cc-backend from scratch is: @@ -223,73 +242,73 @@ The effective configuration is logged at startup for verification. ## Project file structure -- [`.github/`](https://github.com/ClusterCockpit/cc-backend/tree/master/.github) +- [`.github/`](https://github.com/ClusterCockpit/cc-backend/tree/main/.github) GitHub Actions workflows and dependabot configuration for CI/CD. -- [`api/`](https://github.com/ClusterCockpit/cc-backend/tree/master/api) +- [`api/`](https://github.com/ClusterCockpit/cc-backend/tree/main/api) contains the API schema files for the REST and GraphQL APIs. The REST API is documented in the OpenAPI 3.0 format in [./api/swagger.yaml](./api/swagger.yaml). The GraphQL schema is in [./api/schema.graphqls](./api/schema.graphqls). -- [`cmd/cc-backend`](https://github.com/ClusterCockpit/cc-backend/tree/master/cmd/cc-backend) +- [`cmd/cc-backend`](https://github.com/ClusterCockpit/cc-backend/tree/main/cmd/cc-backend) contains the main application entry point and CLI implementation. -- [`configs/`](https://github.com/ClusterCockpit/cc-backend/tree/master/configs) +- [`configs/`](https://github.com/ClusterCockpit/cc-backend/tree/main/configs) contains documentation about configuration and command line options and required environment variables. Sample configuration files are provided. -- [`init/`](https://github.com/ClusterCockpit/cc-backend/tree/master/init) +- [`init/`](https://github.com/ClusterCockpit/cc-backend/tree/main/init) contains an example of setting up systemd for production use. -- [`internal/`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal) +- [`internal/`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal) contains library source code that is not intended for use by others. - - [`api`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/api) + - [`api`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/api) REST API handlers and NATS integration - - [`archiver`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/archiver) + - [`archiver`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/archiver) Job archiving functionality - - [`auth`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/auth) + - [`auth`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/auth) Authentication (local, LDAP, OIDC) and JWT token handling - - [`config`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/config) + - [`config`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/config) Configuration management and validation - - [`graph`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/graph) + - [`graph`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/graph) GraphQL schema and resolvers - - [`importer`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/importer) + - [`importer`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/importer) Job data import and database initialization - - [`metricdispatch`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/metricdispatch) + - [`metricdispatch`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/metricdispatch) Dispatches metric data loading to appropriate backends - - [`repository`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/repository) + - [`repository`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/repository) Database repository layer for jobs and metadata - - [`routerConfig`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/routerConfig) + - [`routerConfig`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/routerConfig) HTTP router configuration and middleware - - [`tagger`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/tagger) + - [`tagger`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/tagger) Job classification and application detection - - [`taskmanager`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/taskmanager) + - [`taskmanager`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/taskmanager) Background task management and scheduled jobs - - [`metricstoreclient`](https://github.com/ClusterCockpit/cc-backend/tree/master/internal/metricstoreclient) + - [`metricstoreclient`](https://github.com/ClusterCockpit/cc-backend/tree/main/internal/metricstoreclient) Client for cc-metric-store queries -- [`pkg/`](https://github.com/ClusterCockpit/cc-backend/tree/master/pkg) +- [`pkg/`](https://github.com/ClusterCockpit/cc-backend/tree/main/pkg) contains Go packages that can be used by other projects. - - [`archive`](https://github.com/ClusterCockpit/cc-backend/tree/master/pkg/archive) + - [`archive`](https://github.com/ClusterCockpit/cc-backend/tree/main/pkg/archive) Job archive backend implementations (filesystem, S3, SQLite) - - [`metricstore`](https://github.com/ClusterCockpit/cc-backend/tree/master/pkg/metricstore) + - [`metricstore`](https://github.com/ClusterCockpit/cc-backend/tree/main/pkg/metricstore) In-memory metric data store with checkpointing and metric loading -- [`tools/`](https://github.com/ClusterCockpit/cc-backend/tree/master/tools) +- [`tools/`](https://github.com/ClusterCockpit/cc-backend/tree/main/tools) Additional command line helper tools. - - [`archive-manager`](https://github.com/ClusterCockpit/cc-backend/tree/master/tools/archive-manager) + - [`archive-manager`](https://github.com/ClusterCockpit/cc-backend/tree/main/tools/archive-manager) Commands for getting infos about an existing job archive, importing jobs between archive backends, and converting archives between JSON and Parquet formats. - - [`archive-migration`](https://github.com/ClusterCockpit/cc-backend/tree/master/tools/archive-migration) + - [`archive-migration`](https://github.com/ClusterCockpit/cc-backend/tree/main/tools/archive-migration) Tool for migrating job archives between formats. - - [`convert-pem-pubkey`](https://github.com/ClusterCockpit/cc-backend/tree/master/tools/convert-pem-pubkey) + - [`convert-pem-pubkey`](https://github.com/ClusterCockpit/cc-backend/tree/main/tools/convert-pem-pubkey) Tool to convert external pubkey for use in `cc-backend`. - - [`gen-keypair`](https://github.com/ClusterCockpit/cc-backend/tree/master/tools/gen-keypair) + - [`gen-keypair`](https://github.com/ClusterCockpit/cc-backend/tree/main/tools/gen-keypair) contains a small application to generate a compatible JWT keypair. You find documentation on how to use it - [here](https://github.com/ClusterCockpit/cc-backend/blob/master/docs/JWT-Handling.md). -- [`web/`](https://github.com/ClusterCockpit/cc-backend/tree/master/web) - Server-side templates and frontend-related files: - - [`frontend`](https://github.com/ClusterCockpit/cc-backend/tree/master/web/frontend) + [here](https://github.com/ClusterCockpit/cc-backend/blob/main/docs/JWT-Handling.md). + - [`web/`](https://github.com/ClusterCockpit/cc-backend/tree/main/web) + Server-side templates and frontend-related files: + - [`frontend`](https://github.com/ClusterCockpit/cc-backend/tree/main/web/frontend) Svelte components and static assets for the frontend UI - - [`templates`](https://github.com/ClusterCockpit/cc-backend/tree/master/web/templates) + - [`templates`](https://github.com/ClusterCockpit/cc-backend/tree/main/web/templates) Server-side Go templates, including monitoring views -- [`gqlgen.yml`](https://github.com/ClusterCockpit/cc-backend/blob/master/gqlgen.yml) +- [`gqlgen.yml`](https://github.com/ClusterCockpit/cc-backend/blob/main/gqlgen.yml) Configures the behaviour and generation of [gqlgen](https://github.com/99designs/gqlgen). -- [`startDemo.sh`](https://github.com/ClusterCockpit/cc-backend/blob/master/startDemo.sh) +- [`startDemo.sh`](https://github.com/ClusterCockpit/cc-backend/blob/main/startDemo.sh) is a shell script that sets up demo data, and builds and starts `cc-backend`. diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 1ac2f229..6eea3bf2 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,16 +1,173 @@ -# `cc-backend` version 1.5.2 +# `cc-backend` version 1.5.4 Supports job archive version 3 and database version 11. -This is a bugfix release of `cc-backend`, the API backend and frontend -implementation of ClusterCockpit. +This is a security and bugfix release of `cc-backend`, the API backend and +frontend implementation of ClusterCockpit. For release specific notes visit the [ClusterCockpit Documentation](https://clusterockpit.org/docs/release/). If you are upgrading from v1.5.1 no database migration is required. If you are upgrading from v1.5.0 you need to do another DB migration. This should not take long. For optimal database performance after the migration it is recommended to apply the new `optimize-db` flag, which runs the sqlite `ANALYZE` and `VACUUM` commands. Depending on your database size (more then 40GB) the -`VACUUM` may take up to 2h. +`VACUUM` may take up to 2h. You can also run the `ANALYZE` command manually. +While we are confident that the memory issue with the metricstore cleanup move +policy is fixed, it is still recommended to use delete policy for cleanup. +This is also the default. + +## Changes in 1.5.4 + +### Security fixes + +- **JWT HMAC empty-key bypass (critical)**: `jwtSession.go` now refuses to + register when `CROSS_LOGIN_JWT_HS512_KEY` is unset. Previously, an empty HMAC + key allowed unauthenticated admin token forgery because `golang-jwt` verifies + any HS256/HS512 signature against an empty key. +- **SQL injection via metric names (critical)**: Metric names supplied through + GraphQL (`[String!]`) were interpolated raw into `json_extract` SQL expressions. + Names are now validated against `^[a-zA-Z0-9_]+$` in + `jobsMetricStatisticsHistogram` and `buildFloatJSONCondition`. +- **Path traversal via line-protocol tags (critical)**: `cluster` and `host` + tags from the metric line protocol flowed unvalidated into `path.Join` for + checkpoint/WAL file paths, enabling arbitrary file writes outside the + checkpoint root via NATS (unauthenticated) or `POST /api/write`. Path-traversal + sequences are now rejected in `DecodeLine` before the tags become path + components. +- **CORS `AllowCredentials` disabled**: CORS middleware no longer sets + `AllowCredentials: true`, which was incompatible with `AllowedOrigins: ["*"]` + and could enable cross-origin credential theft. +- **HSTS header added**: `Strict-Transport-Security` is now set for all + HTTPS connections. +- **Security response headers**: Added `X-Content-Type-Options: nosniff`, + `X-Frame-Options: DENY`, `Referrer-Policy: same-origin`, and a conservative + `Content-Security-Policy` (blocks `frame-ancestors`, `object-src`, `base-uri`) + to harden against clickjacking and base-tag injection. +- **Stored XSS in job message**: `job.metaData.message` is now rendered as + escaped text (CSS `white-space: pre-wrap`) instead of raw `{@html ...}` in + `Job.root` and `JobFootprint`. +- **SQL injection in tag queries**: The tag-scope `IN` list and manager project + subquery in `CountTags` are now parameterized instead of interpolating + `user.Username` / `user.Projects` values sourced from OIDC/LDAP. +- **GraphQL DoS hardening**: Query cost is bounded with `FixedComplexityLimit` + (5000). Non-positive `items-per-page` and `page` values are rejected with HTTP + 400 to prevent integer underflow into unbounded `LIMIT`/`OFFSET` queries. +- **CSRF defense-in-depth**: State-changing requests with a cross-site + `Sec-Fetch-Site` header are now rejected (fails open for non-browser clients), + complementing the existing `SameSite=Lax` session cookie. +- **NATS API security warning**: A startup warning is now logged when NATS + subscriptions are enabled, reminding operators that the NATS API has no + application-layer authentication and that publish ACLs must be restricted at + the broker. + +### Bug fixes + +- **Roofline legend placement**: Roofline plot legends now use fixed + coordinates instead of dynamic placement, preventing the legend from + overlapping data points or being rendered off-canvas (#546). +- **Subcluster usage tab labels**: Subcluster names in the status dashboard + usage tabs are no longer force-capitalized; the original cluster-defined + casing is preserved. +- **NodeListRow host filter**: The running-jobs query in the node list row now + filters by exact node hostname (`eq`) instead of substring match + (`contains`), avoiding incorrect matches when one hostname is a prefix of + another. +- **WAL files not reset on shutdown**: On graceful shutdown the metricstore wrote + a final binary snapshot but never rotated the per-host `current.wal` files (the + `RotateWALFilesAfterShutdown` helper was defined but never called). The stale + WAL files were replayed and then appended to again on the next start, so they + grew without bound across restarts and were only ever reset at the next periodic + checkpoint. `Shutdown` now rotates the WAL files for all successfully + snapshotted hosts. + +### Dependencies + +- **Go module upgrades**: Refreshed Go module dependencies to their latest + compatible versions. + +## Changes in 1.5.3 + +### Bug fixes + +- **OIDC role extraction**: Fixed role extraction from OIDC tokens where roles + were not correctly parsed from the token claims. Roles are now always + requested from the token regardless of other configuration. +- **OIDC user sync role changes**: `SyncUser` and `UpdateUser` callbacks now + allow all role changes, removing a restriction that prevented role updates + during OIDC-driven user synchronization. +- **OIDC projects array**: Projects array from the OIDC token is now submitted + and applied when syncing user attributes. +- **WAL message drops during checkpoint**: WAL writes are now paused during + binary checkpoint creation. Previously, disk I/O contention between + checkpoint writes and WAL staging caused over 1.4 million dropped messages + per checkpoint cycle. +- **WAL rotation skipped for all nodes**: `RotateWALFiles` used a non-blocking + send on a small channel. With thousands of nodes, the channel filled instantly + and nearly all hosts were skipped, leaving WAL files unrotated. Replaced with + a blocking send using a shared 2-minute deadline. +- **Log viewer auto-refresh**: Fixed the log viewer component not auto-refreshing + correctly. +- **SameSite cookie setting**: Relaxed the SameSite cookie attribute to improve + compatibility with OIDC redirect flows. +- **WAL not rotated on partial checkpoint failure**: When binary checkpointing + failed for some hosts, WAL files for successfully checkpointed hosts were not + rotated and the checkpoint timestamp was not advanced. Partial successes now + correctly advance the checkpoint and rotate WAL files for completed hosts. +- **Unbounded WAL file growth**: If binary checkpointing consistently failed for + a host, its `current.wal` file grew without limit until disk exhaustion. A new + `max-wal-size` configuration option (in the `checkpoints` block) allows setting + a per-host WAL size cap in bytes. When exceeded, the WAL is force-rotated. + Defaults to 0 (unlimited) for backward compatibility. + +- **Doubleranged filter fixes**: Range filters now correctly handle zero as a + boundary value. Improved validation and UI text for "more than equal" and + "less than equal" range selections. +- **Lineprotocol body parsing interrupted**: Switched from `ReadTimeout` to + `ReadHeaderTimeout` so that long-running metric submissions are no longer + cut off mid-stream. +- **Checkpoint archiving continues on error**: A single cluster's archiving + failure no longer aborts the entire cleanup operation. Errors are collected + and reported per cluster. +- **Parquet row group overflow**: Added periodic flush during checkpoint + archiving to prevent exceeding the parquet-go 32k column-write limit. +- **Removed metrics excluded from subcluster config**: Metrics removed from a + subcluster are no longer returned by `GetMetricConfigSubCluster`. + +### MetricStore performance + +- **WAL writer throughput**: Decoupled WAL file flushing from message processing + using a periodic 5-second batch flush (up to 4096 messages per cycle), + significantly increasing metric ingestion throughput. +- **Improved shutdown time**: HTTP shutdown timeout reduced; metricstore and + archiver now shut down concurrently. Overall shutdown deadline raised to + 60 seconds. + +### New features + +- **Manual checkpoint cleanup flag**: New `-cleanup-checkpoints` CLI flag + triggers checkpoint cleanup without starting the server, useful for + maintenance windows or automated cleanup scripts. +- **Explicit node state queries in node view**: Node health and scheduler state + are now fetched independently from metric data for fresher status information. + +### Development tooling + +- **Make targets for formatting and linting**: New `make fmt` and `make lint` + targets using `gofumpt` and `golangci-lint`. Configuration added in + `.golangci.yml` and `gopls.json`. + +### New tools + +- **binaryCheckpointReader**: New utility tool (`tools/binaryCheckpointReader`) + that reads `.wal` or `.bin` checkpoint files produced by the metricstore + WAL/snapshot system and dumps their contents to a human-readable `.txt` file. + Useful for debugging and inspecting checkpoint data. Usage: + `go run ./tools/binaryCheckpointReader ` + +### Logging improvements + +- **Reduced tagger log noise**: Missing metrics and expression evaluation errors + in the job classification tagger are now logged at debug level instead of + error level. ## Changes in 1.5.2 @@ -19,6 +176,14 @@ and `VACUUM` commands. Depending on your database size (more then 40GB) the - **Memory spike in parquet writer**: Fixed memory spikes when using the metricstore move (archive) policy with the parquet writer. The writer now processes data in a streaming fashion to avoid accumulating large allocations. +- **Top list query fixes**: Fixed top list queries in analysis and dashboard + views. +- **Exclude down nodes from HealthCheck**: Down nodes are now excluded from + health checks in both the REST and NATS handlers. +- **Node state priority order**: Node state determination now enforces a + priority order. Exception: idle+down results in idle. +- **Blocking ReceiveNats call**: Fixed a blocking NATS receive call in the + metricstore. ### Database performance @@ -33,6 +198,16 @@ and `VACUUM` commands. Depending on your database size (more then 40GB) the write load. - **Increased default SQLite timeout**: The default SQLite connection timeout has been raised to reduce spurious timeout errors under load. +- **Optimized stats queries**: Improved sortby handling in stats queries, fixed + cache key passing, and simplified a stats query condition that caused an + expensive unnecessary subquery. + +### MetricStore performance + +- **Sharded WAL consumer**: The WAL consumer is now sharded for significantly + higher write throughput. +- **NATS contention fix**: Fixed contention in the metricstore NATS ingestion + path. ### NATS API @@ -52,6 +227,24 @@ and `VACUUM` commands. Depending on your database size (more then 40GB) the operation. - **Checkpoint archiving log**: Added an informational log message when the metricstore checkpoint archiving process runs. +- **Auth failure context**: Auth failure log messages now include more context + information. + +### Behavior changes + +- **DB-based metricHealth**: Replaced heuristic-based metric health with + DB-based metric health for the node view, providing more accurate health + status information. +- **Removed minRunningFor filter remnants**: Cleaned up remaining `minRunningFor` + references from the GraphQL schema and query builder. + +### Frontend + +- **Streamlined statsSeries**: Unified stats series calculation and rendering + across plot components. +- **Clarified plot titles**: Improved titles in dashboard and health views. +- **Bumped frontend dependencies**: Updated frontend dependencies to latest + versions. ### Dependencies @@ -67,7 +260,7 @@ and `VACUUM` commands. Depending on your database size (more then 40GB) the running has to be allowed to execute the journalctl command. - The user configuration keys for the ui have changed. Therefore old user configuration persisted in the database is not used anymore. It is recommended - to configure the metrics shown in the ui-config sestion and remove all records + to configure the metrics shown in the ui-config section and remove all records in the table after the update. - Currently energy footprint metrics of type energy are ignored for calculating total energy. diff --git a/api/swagger.json b/api/swagger.json index c9c36de1..262ec9ba 100644 --- a/api/swagger.json +++ b/api/swagger.json @@ -391,11 +391,6 @@ }, "/api/jobs/edit_meta/": { "patch": { - "security": [ - { - "ApiKeyAuth": [] - } - ], "description": "Edit key value pairs in metadata json of job specified by jobID, StartTime and Cluster\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" @@ -406,7 +401,7 @@ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json by request", + "summary": "Edit meta-data json of job identified by request", "parameters": [ { "description": "Specifies job and payload to add or update", @@ -449,12 +444,17 @@ "$ref": "#/definitions/api.ErrorResponse" } } - } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ] } }, "/api/jobs/edit_meta/{id}": { "patch": { - "description": "Edit key value pairs in job metadata json\nIf a key already exists its content will be overwritten", + "description": "Edit key value pairs in job metadata json of job specified by database id\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" ], @@ -464,7 +464,7 @@ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json", + "summary": "Edit meta-data json of job identified by database id", "parameters": [ { "type": "integer", @@ -474,7 +474,7 @@ "required": true }, { - "description": "Kay value pair to add", + "description": "Metadata Key value pair to add or update", "name": "request", "in": "body", "required": true, @@ -736,6 +736,64 @@ ] } }, + "/api/jobs/used_nodes": { + "get": { + "description": "Get a map of cluster names to lists of unique hostnames that are currently in use by running jobs that started before the specified timestamp.", + "produces": [ + "application/json" + ], + "tags": [ + "Job query" + ], + "summary": "Lists used nodes by cluster", + "parameters": [ + { + "type": "integer", + "description": "Unix timestamp to filter jobs (jobs with start_time \u003c ts)", + "name": "ts", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Map of cluster names to hostname lists", + "schema": { + "$ref": "#/definitions/api.GetUsedNodesAPIResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ] + } + }, "/api/jobs/{id}": { "get": { "description": "Job to get is specified by database ID\nReturns full job resource information according to 'Job' scheme and all metrics according to 'JobData'.", @@ -958,8 +1016,11 @@ "/api/user/{id}": { "post": { "description": "Allows admins to add/remove roles and projects for a user", + "consumes": [ + "application/json" + ], "produces": [ - "text/plain" + "application/json" ], "tags": [ "User" @@ -974,35 +1035,26 @@ "required": true }, { - "type": "string", - "description": "Role to add", - "name": "add-role", - "in": "formData" - }, - { - "type": "string", - "description": "Role to remove", - "name": "remove-role", - "in": "formData" - }, - { - "type": "string", - "description": "Project to add", - "name": "add-project", - "in": "formData" - }, - { - "type": "string", - "description": "Project to remove", - "name": "remove-project", - "in": "formData" + "description": "Single Field Changes", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/api.UpdateUserAPIRequest" + } } ], "responses": { "200": { - "description": "Success message", + "description": "OK", "schema": { - "type": "string" + "$ref": "#/definitions/api.DefaultAPIResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" } }, "403": { @@ -1374,63 +1426,6 @@ ] } }, - "/healthcheck/": { - "get": { - "description": "This endpoint allows the users to check if a node is healthy", - "produces": [ - "application/json" - ], - "tags": [ - "healthcheck" - ], - "summary": "HealthCheck endpoint", - "parameters": [ - { - "type": "string", - "description": "Selector", - "name": "selector", - "in": "query" - } - ], - "responses": { - "200": { - "description": "Debug dump", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ] - } - }, "/jobs/tag_job/{id}": { "delete": { "description": "Removes tag(s) from a job specified by DB ID. Name and Type of Tag(s) must match.\nTag Scope is required for matching, options: \"global\", \"admin\". Private tags can not be deleted via API.\nIf tagged job is already finished: Tag will be removed from respective archive files.", @@ -1933,6 +1928,31 @@ } } }, + "api.UpdateUserAPIRequest": { + "type": "object", + "properties": { + "add-role": { + "description": "Role to add to user $ID", + "type": "string", + "example": "user" + }, + "remove-role": { + "description": "Role to remove from user $ID", + "type": "string", + "example": "user" + }, + "add-project": { + "description": "Project to add to user $ID managed array", + "type": "string", + "example": "abcd100" + }, + "remove-project": { + "description": "Project to remove from user $ID managed array", + "type": "string", + "example": "abcd100" + } + } + }, "api.DefaultAPIResponse": { "type": "object", "properties": { @@ -2036,6 +2056,52 @@ } } }, + "api.GetUsedNodesAPIResponse": { + "type": "object", + "properties": { + "usedNodes": { + "description": "Map of cluster names to lists of used node hostnames", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "api.JobMetaRequest": { + "type": "object", + "required": [ + "jobId" + ], + "properties": { + "cluster": { + "description": "Cluster of job", + "type": "string", + "example": "fritz" + }, + "jobId": { + "description": "Cluster Job ID of job", + "type": "integer", + "example": 123000 + }, + "payload": { + "description": "Content to Add to Job Meta_Data", + "allOf": [ + { + "$ref": "#/definitions/api.EditMetaRequest" + } + ] + }, + "startTime": { + "description": "Start Time of job as epoch", + "type": "integer", + "example": 1649723812 + } + } + }, "api.JobMetricWithName": { "type": "object", "properties": { @@ -2168,13 +2234,6 @@ "format": "float64" } }, - "exclusive": { - "description": "for backwards compatibility", - "type": "integer", - "maximum": 2, - "minimum": 0, - "example": 1 - }, "footprint": { "type": "object", "additionalProperties": { diff --git a/api/swagger.yaml b/api/swagger.yaml index def939dd..d5068b53 100644 --- a/api/swagger.yaml +++ b/api/swagger.yaml @@ -31,6 +31,25 @@ definitions: example: Debug type: string type: object + api.UpdateUserAPIRequest: + properties: + add-project: + description: Project to add to user $ID managed array + example: abcd100 + type: string + add-role: + description: Role to add to user $ID + example: user + type: string + remove-project: + description: Project to remove from user $ID managed array + example: abcd100 + type: string + remove-role: + description: Role to remove from user $ID + example: user + type: string + type: object api.DefaultAPIResponse: properties: msg: @@ -102,6 +121,16 @@ definitions: description: Page id returned type: integer type: object + api.GetUsedNodesAPIResponse: + properties: + usedNodes: + additionalProperties: + items: + type: string + type: array + description: Map of cluster names to lists of used node hostnames + type: object + type: object api.JobMetaRequest: properties: cluster: @@ -214,12 +243,6 @@ definitions: format: float64 type: number type: object - exclusive: - description: for backwards compatibility - example: 1 - maximum: 2 - minimum: 0 - type: integer footprint: additionalProperties: format: float64 @@ -1151,7 +1174,7 @@ paths: $ref: '#/definitions/api.ErrorResponse' security: - ApiKeyAuth: [] - summary: Edit meta-data json by request + summary: Edit meta-data json of job identified by request tags: - Job add and modify /api/jobs/edit_meta/{id}: @@ -1159,7 +1182,7 @@ paths: consumes: - application/json description: |- - Edit key value pairs in job metadata json + Edit key value pairs in job metadata json of job specified by database id If a key already exists its content will be overwritten parameters: - description: Job Database ID @@ -1167,7 +1190,7 @@ paths: name: id required: true type: integer - - description: Kay value pair to add + - description: Metadata Key value pair to add or update in: body name: request required: true @@ -1198,7 +1221,7 @@ paths: $ref: '#/definitions/api.ErrorResponse' security: - ApiKeyAuth: [] - summary: Edit meta-data json + summary: Edit meta-data json of job identified by database id tags: - Job add and modify /api/jobs/start_job/: @@ -1346,6 +1369,44 @@ paths: summary: Adds one or more tags to a job tags: - Job add and modify + /api/jobs/used_nodes: + get: + description: Get a map of cluster names to lists of unique hostnames that are + currently in use by running jobs that started before the specified timestamp. + parameters: + - description: Unix timestamp to filter jobs (jobs with start_time < ts) + in: query + name: ts + required: true + type: integer + produces: + - application/json + responses: + "200": + description: Map of cluster names to hostname lists + schema: + $ref: '#/definitions/api.GetUsedNodesAPIResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/api.ErrorResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/api.ErrorResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/api.ErrorResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/api.ErrorResponse' + security: + - ApiKeyAuth: [] + summary: Lists used nodes by cluster + tags: + - Job query /api/nodestats/: post: description: |- @@ -1388,6 +1449,8 @@ paths: - Nodestates /api/user/{id}: post: + consumes: + - application/json description: Allows admins to add/remove roles and projects for a user parameters: - description: Username @@ -1395,29 +1458,23 @@ paths: name: id required: true type: string - - description: Role to add - in: formData - name: add-role - type: string - - description: Role to remove - in: formData - name: remove-role - type: string - - description: Project to add - in: formData - name: add-project - type: string - - description: Project to remove - in: formData - name: remove-project - type: string + - description: Single Field Changes + in: body + name: request + required: true + schema: + $ref: '#/definitions/api.UpdateUserAPIRequest' produces: - - text/plain + - application/json responses: "200": - description: Success message + description: OK schema: - type: string + $ref: '#/definitions/api.DefaultAPIResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/api.ErrorResponse' "403": description: Forbidden schema: @@ -1657,42 +1714,6 @@ paths: - ApiKeyAuth: [] tags: - free - /healthcheck/: - get: - description: This endpoint allows the users to check if a node is healthy - parameters: - - description: Selector - in: query - name: selector - type: string - produces: - - application/json - responses: - "200": - description: Debug dump - schema: - type: string - "400": - description: Bad Request - schema: - $ref: '#/definitions/api.ErrorResponse' - "401": - description: Unauthorized - schema: - $ref: '#/definitions/api.ErrorResponse' - "403": - description: Forbidden - schema: - $ref: '#/definitions/api.ErrorResponse' - "500": - description: Internal Server Error - schema: - $ref: '#/definitions/api.ErrorResponse' - security: - - ApiKeyAuth: [] - summary: HealthCheck endpoint - tags: - - healthcheck /jobs/tag_job/{id}: delete: consumes: diff --git a/cmd/cc-backend/cli.go b/cmd/cc-backend/cli.go index 47f534be..3896383a 100644 --- a/cmd/cc-backend/cli.go +++ b/cmd/cc-backend/cli.go @@ -11,7 +11,8 @@ import "flag" var ( flagReinitDB, flagInit, flagServer, flagSyncLDAP, flagGops, flagMigrateDB, flagRevertDB, - flagForceDB, flagDev, flagVersion, flagLogDateTime, flagApplyTags, flagOptimizeDB bool + flagForceDB, flagDev, flagVersion, flagLogDateTime, flagApplyTags, flagOptimizeDB, + flagCleanupCheckpoints bool flagNewUser, flagDelUser, flagGenJWT, flagConfigFile, flagImportJob, flagLogLevel string ) @@ -28,6 +29,7 @@ func cliInit() { flag.BoolVar(&flagApplyTags, "apply-tags", false, "Run taggers on all completed jobs and exit") flag.BoolVar(&flagForceDB, "force-db", false, "Force database version, clear dirty flag and exit") flag.BoolVar(&flagOptimizeDB, "optimize-db", false, "Optimize database: run VACUUM to reclaim space, then ANALYZE to update query planner statistics") + flag.BoolVar(&flagCleanupCheckpoints, "cleanup-checkpoints", false, "Clean up old checkpoint files (delete or archive) based on retention settings, then exit") flag.BoolVar(&flagLogDateTime, "logdate", false, "Set this flag to add date and time to log messages") flag.StringVar(&flagConfigFile, "config", "./config.json", "Specify alternative path to `config.json`") flag.StringVar(&flagNewUser, "add-user", "", "Add a new user. Argument format: :[admin,support,manager,api,user]:") diff --git a/cmd/cc-backend/main.go b/cmd/cc-backend/main.go index 12faeae5..b950e473 100644 --- a/cmd/cc-backend/main.go +++ b/cmd/cc-backend/main.go @@ -14,6 +14,7 @@ import ( "fmt" "os" "os/signal" + goruntime "runtime" "runtime/debug" "strings" "sync" @@ -171,14 +172,20 @@ func handleUserCommands() error { return fmt.Errorf("--add-user and --del-user can only be used if authentication is enabled") } - if !config.Keys.DisableAuthentication { - if cfg := ccconf.GetPackageConfig("auth"); cfg != nil { - auth.Init(&cfg) - } else { - cclog.Warn("Authentication disabled due to missing configuration") - auth.Init(nil) + // Always initialize the auth subsystem so the HTTP server and REST API have a + // valid (non-nil) auth instance, even when authentication is disabled. With + // authentication disabled, Init only sets up an ephemeral session store and + // registers no authenticators (see auth.Init). + if cfg := ccconf.GetPackageConfig("auth"); cfg != nil { + auth.Init(&cfg) + } else { + if !config.Keys.DisableAuthentication { + cclog.Warn("Authentication enabled but no auth configuration found") } + auth.Init(nil) + } + if !config.Keys.DisableAuthentication { // Check for default security keys checkDefaultSecurityKeys() @@ -336,6 +343,12 @@ func initSubsystems() error { } func runServer(ctx context.Context) error { + // Derive a cancelable context so the startup-error path below can trigger the + // same graceful-shutdown sequence as a signal (via the signal handler that + // waits on ctx.Done()). + ctx, cancel := context.WithCancel(ctx) + defer cancel() + var wg sync.WaitGroup // Initialize metric store if configuration is provided @@ -437,26 +450,32 @@ func runServer(ctx context.Context) error { // Wait for either: // 1. An error from server startup // 2. Completion of all goroutines (normal shutdown or crash) + var runErr error select { - case err := <-errChan: + case runErr = <-errChan: // errChan will be closed when waitDone is closed, which happens // when all goroutines complete (either from normal shutdown or error) - if err != nil { - return err - } case <-time.After(100 * time.Millisecond): // Give the server 100ms to start and report any immediate startup errors // After that, just wait for normal shutdown completion select { - case err := <-errChan: - if err != nil { - return err - } + case runErr = <-errChan: case <-waitDone: // Normal shutdown completed } } + if runErr != nil { + // A subsystem failed (e.g. the HTTP server could not bind). Trigger the + // graceful-shutdown path for the subsystems that were already started + // (metricstore checkpoint, archiver flush, taskmanager) by cancelling the + // context the signal handler waits on, then wait for it to finish so we + // don't exit before the final checkpoint is written. + cancel() + <-waitDone + return runErr + } + cclog.Print("Graceful shutdown completed!") return nil } @@ -536,6 +555,43 @@ func run() error { return err } + // Handle checkpoint cleanup + if flagCleanupCheckpoints { + mscfg := ccconf.GetPackageConfig("metric-store") + if mscfg == nil { + return fmt.Errorf("metric-store configuration required for checkpoint cleanup") + } + if err := json.Unmarshal(mscfg, &metricstore.Keys); err != nil { + return fmt.Errorf("decoding metric-store config: %w", err) + } + if metricstore.Keys.NumWorkers <= 0 { + metricstore.Keys.NumWorkers = min(goruntime.NumCPU()/2+1, metricstore.DefaultMaxWorkers) + } + + d, err := time.ParseDuration(metricstore.Keys.RetentionInMemory) + if err != nil { + return fmt.Errorf("parsing retention-in-memory: %w", err) + } + from := time.Now().Add(-d) + deleteMode := metricstore.Keys.Cleanup == nil || metricstore.Keys.Cleanup.Mode != "archive" + cleanupDir := "" + if !deleteMode { + cleanupDir = metricstore.Keys.Cleanup.RootDir + } + + cclog.Infof("Cleaning up checkpoints older than %s...", from.Format(time.RFC3339)) + n, err := metricstore.CleanupCheckpoints( + metricstore.Keys.Checkpoints.RootDir, cleanupDir, from.Unix(), deleteMode) + if err != nil { + return fmt.Errorf("checkpoint cleanup: %w", err) + } + if deleteMode { + cclog.Exitf("Cleanup done: %d checkpoint files deleted.", n) + } else { + cclog.Exitf("Cleanup done: %d checkpoint files archived to parquet.", n) + } + } + // Exit if start server is not requested if !flagServer { cclog.Exit("No errors, server flag not set. Exiting cc-backend.") diff --git a/cmd/cc-backend/server.go b/cmd/cc-backend/server.go index bdbb8a7e..4a9e71b1 100644 --- a/cmd/cc-backend/server.go +++ b/cmd/cc-backend/server.go @@ -18,10 +18,12 @@ import ( "net/http" "os" "strings" + "sync" "time" "github.com/99designs/gqlgen/graphql" "github.com/99designs/gqlgen/graphql/handler" + "github.com/99designs/gqlgen/graphql/handler/extension" "github.com/99designs/gqlgen/graphql/handler/transport" "github.com/99designs/gqlgen/graphql/playground" "github.com/ClusterCockpit/cc-backend/internal/api" @@ -49,6 +51,12 @@ const ( envDebug = "DEBUG" ) +// maxQueryComplexity bounds the cost of a single GraphQL query to mitigate +// denial-of-service via deeply nested or heavily aliased queries. The default +// per-field cost is 1, so this leaves ample headroom for legitimate dashboard +// queries while rejecting pathological ones. +const maxQueryComplexity = 5000 + // Server encapsulates the HTTP server state and dependencies type Server struct { router chi.Router @@ -89,6 +97,7 @@ func (s *Server) init() error { generated.NewExecutableSchema(generated.Config{Resolvers: resolver})) graphQLServer.AddTransport(transport.POST{}) + graphQLServer.Use(extension.FixedComplexityLimit(maxQueryComplexity)) // Inject a per-request stats cache so that grouped statistics queries // sharing the same (filter, groupBy) pair are executed only once. @@ -128,11 +137,49 @@ func (s *Server) init() error { s.router.Use(middleware.Compress(5)) s.router.Use(middleware.Recoverer) s.router.Use(cors.Handler(cors.Options{ - AllowCredentials: true, + AllowCredentials: false, AllowedHeaders: []string{"X-Requested-With", "Content-Type", "Authorization", "Origin"}, AllowedMethods: []string{"GET", "POST", "HEAD", "OPTIONS"}, AllowedOrigins: []string{"*"}, })) + s.router.Use(func(next http.Handler) http.Handler { + return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + h := rw.Header() + h.Set("X-Content-Type-Options", "nosniff") + h.Set("X-Frame-Options", "DENY") + h.Set("Referrer-Policy", "same-origin") + // Conservative CSP: blocks clickjacking (frame-ancestors), plugin + // content (object-src) and injection (base-uri) without + // restricting scripts/styles, so it cannot break the self-hosted + // SPA which relies on inline scripts. A full script-src policy needs + // per-template nonces and should be added separately. + h.Set("Content-Security-Policy", "frame-ancestors 'none'; object-src 'none'; base-uri 'self'") + if r.TLS != nil || r.Header.Get("X-Forwarded-Proto") == "https" { + h.Set("Strict-Transport-Security", "max-age=31536000; includeSubDomains") + } + next.ServeHTTP(rw, r) + }) + }) + + // CSRF defense-in-depth on top of the SameSite=Lax session cookie: reject + // cross-site state-changing requests. Modern browsers set Sec-Fetch-Site on + // every request, so this stops a malicious site from driving cookie- + // authenticated POST/PUT/DELETE/PATCH calls. It fails open when the header is + // absent or not "cross-site", so non-browser API clients and the same-origin + // SPA are unaffected. + s.router.Use(func(next http.Handler) http.Handler { + return http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { + switch r.Method { + case http.MethodGet, http.MethodHead, http.MethodOptions, http.MethodTrace: + default: + if r.Header.Get("Sec-Fetch-Site") == "cross-site" { + http.Error(rw, "cross-site request blocked", http.StatusForbidden) + return + } + } + next.ServeHTTP(rw, r) + }) + }) s.restAPIHandle = api.New() @@ -344,20 +391,20 @@ func (s *Server) init() error { // Server timeout defaults (in seconds) const ( - defaultReadTimeout = 20 - defaultWriteTimeout = 20 + defaultReadHeaderTimeout = 20 + defaultWriteTimeout = 20 ) func (s *Server) Start(ctx context.Context) error { // Use configurable timeouts with defaults - readTimeout := time.Duration(defaultReadTimeout) * time.Second + readHeaderTimeout := time.Duration(defaultReadHeaderTimeout) * time.Second writeTimeout := time.Duration(defaultWriteTimeout) * time.Second s.server = &http.Server{ - ReadTimeout: readTimeout, - WriteTimeout: writeTimeout, - Handler: s.router, - Addr: config.Keys.Addr, + ReadHeaderTimeout: readHeaderTimeout, + WriteTimeout: writeTimeout, + Handler: s.router, + Addr: config.Keys.Addr, } // Start http or https server @@ -368,7 +415,9 @@ func (s *Server) Start(ctx context.Context) error { if !strings.HasSuffix(config.Keys.Addr, ":80") && config.Keys.RedirectHTTPTo != "" { go func() { - http.ListenAndServe(":80", http.RedirectHandler(config.Keys.RedirectHTTPTo, http.StatusMovedPermanently)) + if err := http.ListenAndServe(":80", http.RedirectHandler(config.Keys.RedirectHTTPTo, http.StatusMovedPermanently)); err != nil { + cclog.Errorf("HTTP-to-HTTPS redirect listener on :80 failed: %v", err) + } }() } @@ -399,16 +448,6 @@ func (s *Server) Start(ctx context.Context) error { return fmt.Errorf("dropping privileges: %w", err) } - // Handle context cancellation for graceful shutdown - go func() { - <-ctx.Done() - shutdownCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - if err := s.server.Shutdown(shutdownCtx); err != nil { - cclog.Errorf("Server shutdown error: %v", err) - } - }() - if err = s.server.Serve(listener); err != nil && err != http.ErrServerClosed { return fmt.Errorf("server failed: %w", err) } @@ -416,29 +455,58 @@ func (s *Server) Start(ctx context.Context) error { } func (s *Server) Shutdown(ctx context.Context) { - // Create a shutdown context with timeout - shutdownCtx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() + shutdownStart := time.Now() + natsStart := time.Now() nc := nats.GetClient() if nc != nil { nc.Close() } + // Stop the NATS API worker goroutines after the client is closed (no more + // subscription callbacks can enqueue once the connection is down). + if s.natsAPIHandle != nil { + s.natsAPIHandle.Shutdown() + } + cclog.Infof("Shutdown: NATS closed (%v)", time.Since(natsStart)) - // First shut down the server gracefully (waiting for all ongoing requests) + httpStart := time.Now() + shutdownCtx, cancel := context.WithTimeout(ctx, 60*time.Second) + defer cancel() if err := s.server.Shutdown(shutdownCtx); err != nil { cclog.Errorf("Server shutdown error: %v", err) } + cclog.Infof("Shutdown: HTTP server stopped (%v)", time.Since(httpStart)) - // Archive all the metric store data - ms := metricstore.GetMemoryStore() + // Run metricstore and archiver shutdown concurrently. + // They are independent: metricstore writes .bin snapshots, + // archiver flushes pending job archives. + storeStart := time.Now() + done := make(chan struct{}) + go func() { + defer close(done) + var wg sync.WaitGroup - if ms != nil { - metricstore.Shutdown() + if ms := metricstore.GetMemoryStore(); ms != nil { + wg.Go(func() { + metricstore.Shutdown() + }) + } + + wg.Go(func() { + if err := archiver.Shutdown(60 * time.Second); err != nil { + cclog.Warnf("Archiver shutdown: %v", err) + } + }) + + wg.Wait() + }() + + select { + case <-done: + cclog.Infof("Shutdown: metricstore + archiver completed (%v)", time.Since(storeStart)) + case <-time.After(60 * time.Second): + cclog.Warnf("Shutdown deadline exceeded after %v, forcing exit", time.Since(shutdownStart)) } - // Shutdown archiver with 10 second timeout for fast shutdown - if err := archiver.Shutdown(10 * time.Second); err != nil { - cclog.Warnf("Archiver shutdown: %v", err) - } + cclog.Infof("Shutdown: total time %v", time.Since(shutdownStart)) } diff --git a/go.mod b/go.mod index 72cb5f60..54aec9c4 100644 --- a/go.mod +++ b/go.mod @@ -8,19 +8,19 @@ tool ( ) require ( - github.com/99designs/gqlgen v0.17.88 - github.com/ClusterCockpit/cc-lib/v2 v2.10.0 + github.com/99designs/gqlgen v0.17.90 + github.com/ClusterCockpit/cc-lib/v2 v2.12.0 github.com/ClusterCockpit/cc-line-protocol/v2 v2.4.0 github.com/Masterminds/squirrel v1.5.4 - github.com/aws/aws-sdk-go-v2 v1.41.4 - github.com/aws/aws-sdk-go-v2/config v1.32.12 - github.com/aws/aws-sdk-go-v2/credentials v1.19.12 - github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 - github.com/coreos/go-oidc/v3 v3.17.0 + github.com/aws/aws-sdk-go-v2 v1.41.7 + github.com/aws/aws-sdk-go-v2/config v1.32.18 + github.com/aws/aws-sdk-go-v2/credentials v1.19.17 + github.com/aws/aws-sdk-go-v2/service/s3 v1.102.0 + github.com/coreos/go-oidc/v3 v3.18.0 github.com/expr-lang/expr v1.17.8 - github.com/go-chi/chi/v5 v5.2.5 + github.com/go-chi/chi/v5 v5.3.0 github.com/go-chi/cors v1.2.2 - github.com/go-co-op/gocron/v2 v2.19.1 + github.com/go-co-op/gocron/v2 v2.21.2 github.com/go-ldap/ldap/v3 v3.4.13 github.com/golang-jwt/jwt/v5 v5.3.1 github.com/golang-migrate/migrate/v4 v4.19.1 @@ -28,56 +28,55 @@ require ( github.com/gorilla/sessions v1.4.0 github.com/jmoiron/sqlx v1.4.0 github.com/joho/godotenv v1.5.1 - github.com/mattn/go-sqlite3 v1.14.37 - github.com/parquet-go/parquet-go v0.29.0 + github.com/mattn/go-sqlite3 v1.14.44 + github.com/parquet-go/parquet-go v0.30.1 github.com/qustavo/sqlhooks/v2 v2.1.0 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/stretchr/testify v1.11.1 github.com/swaggo/http-swagger v1.3.4 github.com/swaggo/swag v1.16.6 - github.com/vektah/gqlparser/v2 v2.5.32 - golang.org/x/crypto v0.49.0 + github.com/vektah/gqlparser/v2 v2.5.33 + golang.org/x/crypto v0.52.0 golang.org/x/oauth2 v0.36.0 golang.org/x/sync v0.20.0 golang.org/x/time v0.15.0 ) require ( - github.com/Azure/go-ntlmssp v0.1.0 // indirect + github.com/Azure/go-ntlmssp v0.1.1 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/agnivade/levenshtein v1.2.1 // indirect - github.com/andybalholm/brotli v1.2.0 // indirect + github.com/andybalholm/brotli v1.2.1 // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect - github.com/aws/smithy-go v1.24.2 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.16 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect + github.com/aws/smithy-go v1.26.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/fsnotify/fsnotify v1.10.1 // indirect github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 // indirect - github.com/go-jose/go-jose/v4 v4.1.3 // indirect - github.com/go-openapi/jsonpointer v0.22.5 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect + github.com/go-openapi/jsonpointer v0.23.1 // indirect github.com/go-openapi/jsonreference v0.21.5 // indirect github.com/go-openapi/spec v0.22.4 // indirect - github.com/go-openapi/swag/conv v0.25.5 // indirect - github.com/go-openapi/swag/jsonname v0.25.5 // indirect - github.com/go-openapi/swag/jsonutils v0.25.5 // indirect - github.com/go-openapi/swag/loading v0.25.5 // indirect - github.com/go-openapi/swag/stringutils v0.25.5 // indirect - github.com/go-openapi/swag/typeutils v0.25.5 // indirect - github.com/go-openapi/swag/yamlutils v0.25.5 // indirect + github.com/go-openapi/swag/conv v0.26.0 // indirect + github.com/go-openapi/swag/jsonname v0.26.0 // indirect + github.com/go-openapi/swag/jsonutils v0.26.0 // indirect + github.com/go-openapi/swag/loading v0.26.0 // indirect + github.com/go-openapi/swag/stringutils v0.26.0 // indirect + github.com/go-openapi/swag/typeutils v0.26.0 // indirect + github.com/go-openapi/swag/yamlutils v0.26.0 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect github.com/goccy/go-yaml v1.19.2 // indirect github.com/google/uuid v1.6.0 // indirect @@ -87,36 +86,36 @@ require ( github.com/influxdata/influxdb-client-go/v2 v2.14.0 // indirect github.com/influxdata/line-protocol v0.0.0-20210922203350-b1ad95c89adf // indirect github.com/jonboulle/clockwork v0.5.0 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.6 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect - github.com/nats-io/nats.go v1.49.0 // indirect + github.com/nats-io/nats.go v1.52.0 // indirect github.com/nats-io/nkeys v0.4.15 // indirect github.com/nats-io/nuid v1.0.1 // indirect - github.com/oapi-codegen/runtime v1.3.0 // indirect + github.com/oapi-codegen/runtime v1.4.1 // indirect github.com/parquet-go/bitpack v1.0.0 // indirect - github.com/parquet-go/jsonlite v1.5.0 // indirect + github.com/parquet-go/jsonlite v1.5.2 // indirect github.com/pierrec/lz4/v4 v4.1.26 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sosodev/duration v1.4.0 // indirect - github.com/stmcginnis/gofish v0.21.4 // indirect + github.com/stmcginnis/gofish v0.22.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/swaggo/files v1.0.1 // indirect github.com/twpayne/go-geom v1.6.1 // indirect github.com/urfave/cli/v2 v2.27.7 // indirect - github.com/urfave/cli/v3 v3.7.0 // indirect + github.com/urfave/cli/v3 v3.8.0 // indirect github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.52.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/text v0.35.0 // indirect - golang.org/x/tools v0.43.0 // indirect + golang.org/x/mod v0.36.0 // indirect + golang.org/x/net v0.55.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/text v0.37.0 // indirect + golang.org/x/tools v0.45.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/yaml v1.6.0 // indirect diff --git a/go.sum b/go.sum index 818b9759..2d0719f8 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,11 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= -github.com/99designs/gqlgen v0.17.88 h1:neMQDgehMwT1vYIOx/w5ZYPUU/iMNAJzRO44I5Intoc= -github.com/99designs/gqlgen v0.17.88/go.mod h1:qeqYFEgOeSKqWedOjogPizimp2iu4E23bdPvl4jTYic= -github.com/Azure/go-ntlmssp v0.1.0 h1:DjFo6YtWzNqNvQdrwEyr/e4nhU3vRiwenz5QX7sFz+A= -github.com/Azure/go-ntlmssp v0.1.0/go.mod h1:NYqdhxd/8aAct/s4qSYZEerdPuH1liG2/X9DiVTbhpk= -github.com/ClusterCockpit/cc-lib/v2 v2.10.0 h1:McCcEwc1j942hV54JAzsB/pcArP6A5FoQtjzW2H7K9U= -github.com/ClusterCockpit/cc-lib/v2 v2.10.0/go.mod h1:Oj+N2lpFqiBOBzjfrLIGJ2YSWT400TX4M0ii4lNl81A= +github.com/99designs/gqlgen v0.17.90 h1:wSv6blm/PoplU6QoNw83EcQpNtC0HX3/+44vITJOzpk= +github.com/99designs/gqlgen v0.17.90/go.mod h1:GqYrEwYsqCG8VaOsq2kJUCUKwAE1T+u2i+Nj7NtXiVI= +github.com/Azure/go-ntlmssp v0.1.1 h1:l+FM/EEMb0U9QZE7mKNEDw5Mu3mFiaa2GKOoTSsNDPw= +github.com/Azure/go-ntlmssp v0.1.1/go.mod h1:NYqdhxd/8aAct/s4qSYZEerdPuH1liG2/X9DiVTbhpk= +github.com/ClusterCockpit/cc-lib/v2 v2.12.0 h1:ZbGD68nDniuvzFjJCdyYawpCBrabdSyWOg5FFSyFbjQ= +github.com/ClusterCockpit/cc-lib/v2 v2.12.0/go.mod h1:ml8xtcYa5WhPM7JDQ+M9/R9ZBxITCR/5xqGJ//GxXJI= github.com/ClusterCockpit/cc-line-protocol/v2 v2.4.0 h1:hIzxgTBWcmCIHtoDKDkSCsKCOCOwUC34sFsbD2wcW0Q= github.com/ClusterCockpit/cc-line-protocol/v2 v2.4.0/go.mod h1:y42qUu+YFmu5fdNuUAS4VbbIKxVjxCvbVqFdpdh8ahY= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= @@ -16,8 +16,8 @@ github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8 github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= github.com/NVIDIA/go-nvml v0.13.0-1 h1:OLX8Jq3dONuPOQPC7rndB6+iDmDakw0XTYgzMxObkEw= github.com/NVIDIA/go-nvml v0.13.0-1/go.mod h1:+KNA7c7gIBH7SKSJ1ntlwkfN80zdx8ovl4hrK3LmPt4= -github.com/PuerkitoBio/goquery v1.11.0 h1:jZ7pwMQXIITcUXNH83LLk+txlaEy6NVOfTuP43xxfqw= -github.com/PuerkitoBio/goquery v1.11.0/go.mod h1:wQHgxUOU3JGuj3oD/QFfxUdlzW6xPHfqyHre6VMY4DQ= +github.com/PuerkitoBio/goquery v1.12.0 h1:pAcL4g3WRXekcB9AU/y1mbKez2dbY2AajVhtkO8RIBo= +github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM= github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= @@ -29,61 +29,61 @@ github.com/alexbrainman/sspi v0.0.0-20250919150558-7d374ff0d59e h1:4dAU9FXIyQktp github.com/alexbrainman/sspi v0.0.0-20250919150558-7d374ff0d59e/go.mod h1:cEWa1LVoE5KvSD9ONXsZrj0z6KqySlCCNKHlLzbqAt4= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= -github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro= +github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= -github.com/antithesishq/antithesis-sdk-go v0.5.0-default-no-op h1:Ucf+QxEKMbPogRO5guBNe5cgd9uZgfoJLOYs8WWhtjM= -github.com/antithesishq/antithesis-sdk-go v0.5.0-default-no-op/go.mod h1:IUpT2DPAKh6i/YhSbt6Gl3v2yvUZjmKncl7U91fup7E= +github.com/antithesishq/antithesis-sdk-go v0.6.0-default-no-op h1:kpBdlEPbRvff0mDD1gk7o9BhI16b9p5yYAXRlidpqJE= +github.com/antithesishq/antithesis-sdk-go v0.6.0-default-no-op/go.mod h1:IUpT2DPAKh6i/YhSbt6Gl3v2yvUZjmKncl7U91fup7E= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= -github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= -github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= -github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk= -github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= -github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= +github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10/go.mod h1:qqY157uZoqm5OXq/amuaBJyC9hgBCBQnsaWnPe905GY= +github.com/aws/aws-sdk-go-v2/config v1.32.18 h1:Hcia46bxhGgF3BaSnG8nSNCWmqTK6bj9xN9/FJ3WK6Q= +github.com/aws/aws-sdk-go-v2/config v1.32.18/go.mod h1:zEjCAYmxqDadH1WX8CdBvmLKhUEUVFgKRQG38zjDmrY= +github.com/aws/aws-sdk-go-v2/credentials v1.19.17 h1:gP2nkGsS+KMvF/jfFz2Vv2qiiOqWKyPACSzPsqHgoW8= +github.com/aws/aws-sdk-go-v2/credentials v1.19.17/go.mod h1:Bsew3S/moG5iT77giPj1q8wb/s0RE5/QfH+ASjYtuQc= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 h1:UuSfcORqNSz/ey3VPRS8TcVH2Ikf0/sC+Hdj400QI6U= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23/go.mod h1:+G/OSGiOFnSOkYloKj/9M35s74LgVAdJBSD5lsFfqKg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 h1:GpT/TrnBYuE5gan2cZbTtvP+JlHsutdmlV2YfEyNde0= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23/go.mod h1:xYWD6BS9ywC5bS3sz9Xh04whO/hzK2plt2Zkyrp4JuA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 h1:bpd8vxhlQi2r1hiueOw02f/duEPTMK59Q4QMAoTTtTo= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23/go.mod h1:15DfR2nw+CRHIk0tqNyifu3G1YdAOy68RftkhMDDwYk= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu8Ti4pcLPIIyoKZrA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 h1:FLudkZLt5ci0ozzgkVo8BJGwvqNaZbTWb3UcucAateA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9/go.mod h1:w7wZ/s9qK7c8g4al+UyoF1Sp/Z45UwMGcqIzLWVQHWk= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.16 h1:tX68nPDCoX0s2ksM7CipWP0QFw2hGDWwUdxI6+eT9ZU= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.16/go.mod h1:e3IzZvQ3kAWNykvE0Tr0RDZCMFInMvhku3qNpcIQXhM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/kuIwgEsOPLkaHu0O+m4fNgLU8B3vxQ+72jTPw= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 h1:03xatSQO4+AM1lTAbnRg5OK528EUg744nW7F73U8DKw= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23/go.mod h1:M8l3mwgx5ToK7wot2sBBce/ojzgnPzZXUV445gTSyE8= +github.com/aws/aws-sdk-go-v2/service/s3 v1.102.0 h1:gfPQ6do5PZTCc5n/vZUHz/G8McrNrfERGSO+iHvVbCA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.102.0/go.mod h1:wO6U9egJtCtsZEHG2AAcFf1kUWDRrH0Iif6K3bVmmdE= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.17/go.mod h1:xNWknVi4Ezm1vg1QsB/5EWpAJURq22uqd38U8qKvOJc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0 h1:nDARhv/oF55bcxF7rCI/4PDxOKnVXVWwDuDwCs2I2SQ= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0/go.mod h1:4vIRDq+CJB2xFAXZ+YgGUTiEft7oAQlhIs71xcSeuVg= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 h1:F/M5Y9I3nwr2IEpshZgh1GeHpOItExNM9L1euNuh/fk= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.1/go.mod h1:mTNxImtovCOEEuD65mKW7DCsL+2gjEH+RPEAexAzAio= +github.com/aws/smithy-go v1.26.0 h1:9ouqbi+NyKP7fV3Te7UElCwdAb6Y8uk7LGwPE5tVe/s= +github.com/aws/smithy-go v1.26.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/coreos/go-oidc/v3 v3.17.0 h1:hWBGaQfbi0iVviX4ibC7bk8OKT5qNr4klBaCHVNvehc= -github.com/coreos/go-oidc/v3 v3.17.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSwyXJqZH+sI8= +github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= +github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= +github.com/coreos/go-oidc/v3 v3.18.0 h1:V9orjXynvu5wiC9SemFTWnG4F45v403aIcjWo0d41+A= +github.com/coreos/go-oidc/v3 v3.18.0/go.mod h1:DYCf24+ncYi+XkIH97GY1+dqoRlbaSI26KVTCI9SrY4= github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -97,47 +97,47 @@ github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM github.com/expr-lang/expr v1.17.8/go.mod h1:8/vRC7+7HBzESEqt5kKpYXxrxkr31SaO8r40VO/1IT4= github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667 h1:BP4M0CvQ4S3TGls2FvczZtj5Re/2ZzkV9VwqPHH/3Bo= github.com/go-asn1-ber/asn1-ber v1.5.8-0.20250403174932-29230038a667/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-chi/chi/v5 v5.2.5 h1:Eg4myHZBjyvJmAFjFvWgrqDTXFyOzjj7YIm3L3mu6Ug= -github.com/go-chi/chi/v5 v5.2.5/go.mod h1:X7Gx4mteadT3eDOMTsXzmI4/rwUpOwBHLpAfupzFJP0= +github.com/go-chi/chi/v5 v5.3.0 h1:halUjDxhshgXHMrao5bB8eNBXo/rnzwr8m5m36glehM= +github.com/go-chi/chi/v5 v5.3.0/go.mod h1:R+tYY2hNuVUUjxoPtqUdgBqevM9s9njzkTLutVsOCto= github.com/go-chi/cors v1.2.2 h1:Jmey33TE+b+rB7fT8MUy1u0I4L+NARQlK6LhzKPSyQE= github.com/go-chi/cors v1.2.2/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= -github.com/go-co-op/gocron/v2 v2.19.1 h1:B4iLeA0NB/2iO3EKQ7NfKn5KsQgZfjb2fkvoZJU3yBI= -github.com/go-co-op/gocron/v2 v2.19.1/go.mod h1:5lEiCKk1oVJV39Zg7/YG10OnaVrDAV5GGR6O0663k6U= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-co-op/gocron/v2 v2.21.2 h1:bD8/YwkojYHgXFr3iEulL148KBdTbKVxUZzFKpXcdbY= +github.com/go-co-op/gocron/v2 v2.21.2/go.mod h1:5lEiCKk1oVJV39Zg7/YG10OnaVrDAV5GGR6O0663k6U= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-ldap/ldap/v3 v3.4.13 h1:+x1nG9h+MZN7h/lUi5Q3UZ0fJ1GyDQYbPvbuH38baDQ= github.com/go-ldap/ldap/v3 v3.4.13/go.mod h1:LxsGZV6vbaK0sIvYfsv47rfh4ca0JXokCoKjZxsszv0= -github.com/go-openapi/jsonpointer v0.22.5 h1:8on/0Yp4uTb9f4XvTrM2+1CPrV05QPZXu+rvu2o9jcA= -github.com/go-openapi/jsonpointer v0.22.5/go.mod h1:gyUR3sCvGSWchA2sUBJGluYMbe1zazrYWIkWPjjMUY0= +github.com/go-openapi/jsonpointer v0.23.1 h1:1HBACs7XIwR2RcmItfdSFlALhGbe6S92p0ry4d1GWg4= +github.com/go-openapi/jsonpointer v0.23.1/go.mod h1:iWRmZTrGn7XwYhtPt/fvdSFj1OfNBngqRT2UG3BxSqY= github.com/go-openapi/jsonreference v0.21.5 h1:6uCGVXU/aNF13AQNggxfysJ+5ZcU4nEAe+pJyVWRdiE= github.com/go-openapi/jsonreference v0.21.5/go.mod h1:u25Bw85sX4E2jzFodh1FOKMTZLcfifd1Q+iKKOUxExw= github.com/go-openapi/spec v0.22.4 h1:4pxGjipMKu0FzFiu/DPwN3CTBRlVM2yLf/YTWorYfDQ= github.com/go-openapi/spec v0.22.4/go.mod h1:WQ6Ai0VPWMZgMT4XySjlRIE6GP1bGQOtEThn3gcWLtQ= github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= -github.com/go-openapi/swag/conv v0.25.5 h1:wAXBYEXJjoKwE5+vc9YHhpQOFj2JYBMF2DUi+tGu97g= -github.com/go-openapi/swag/conv v0.25.5/go.mod h1:CuJ1eWvh1c4ORKx7unQnFGyvBbNlRKbnRyAvDvzWA4k= -github.com/go-openapi/swag/jsonname v0.25.5 h1:8p150i44rv/Drip4vWI3kGi9+4W9TdI3US3uUYSFhSo= -github.com/go-openapi/swag/jsonname v0.25.5/go.mod h1:jNqqikyiAK56uS7n8sLkdaNY/uq6+D2m2LANat09pKU= -github.com/go-openapi/swag/jsonutils v0.25.5 h1:XUZF8awQr75MXeC+/iaw5usY/iM7nXPDwdG3Jbl9vYo= -github.com/go-openapi/swag/jsonutils v0.25.5/go.mod h1:48FXUaz8YsDAA9s5AnaUvAmry1UcLcNVWUjY42XkrN4= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.5 h1:SX6sE4FrGb4sEnnxbFL/25yZBb5Hcg1inLeErd86Y1U= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.5/go.mod h1:/2KvOTrKWjVA5Xli3DZWdMCZDzz3uV/T7bXwrKWPquo= -github.com/go-openapi/swag/loading v0.25.5 h1:odQ/umlIZ1ZVRteI6ckSrvP6e2w9UTF5qgNdemJHjuU= -github.com/go-openapi/swag/loading v0.25.5/go.mod h1:I8A8RaaQ4DApxhPSWLNYWh9NvmX2YKMoB9nwvv6oW6g= -github.com/go-openapi/swag/stringutils v0.25.5 h1:NVkoDOA8YBgtAR/zvCx5rhJKtZF3IzXcDdwOsYzrB6M= -github.com/go-openapi/swag/stringutils v0.25.5/go.mod h1:PKK8EZdu4QJq8iezt17HM8RXnLAzY7gW0O1KKarrZII= -github.com/go-openapi/swag/typeutils v0.25.5 h1:EFJ+PCga2HfHGdo8s8VJXEVbeXRCYwzzr9u4rJk7L7E= -github.com/go-openapi/swag/typeutils v0.25.5/go.mod h1:itmFmScAYE1bSD8C4rS0W+0InZUBrB2xSPbWt6DLGuc= -github.com/go-openapi/swag/yamlutils v0.25.5 h1:kASCIS+oIeoc55j28T4o8KwlV2S4ZLPT6G0iq2SSbVQ= -github.com/go-openapi/swag/yamlutils v0.25.5/go.mod h1:Gek1/SjjfbYvM+Iq4QGwa/2lEXde9n2j4a3wI3pNuOQ= -github.com/go-openapi/testify/enable/yaml/v2 v2.4.0 h1:7SgOMTvJkM8yWrQlU8Jm18VeDPuAvB/xWrdxFJkoFag= -github.com/go-openapi/testify/enable/yaml/v2 v2.4.0/go.mod h1:14iV8jyyQlinc9StD7w1xVPW3CO3q1Gj04Jy//Kw4VM= -github.com/go-openapi/testify/v2 v2.4.0 h1:8nsPrHVCWkQ4p8h1EsRVymA2XABB4OT40gcvAu+voFM= -github.com/go-openapi/testify/v2 v2.4.0/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= +github.com/go-openapi/swag/conv v0.26.0 h1:5yGGsPYI1ZCva93U0AoKi/iZrNhaJEjr324YVsiD89I= +github.com/go-openapi/swag/conv v0.26.0/go.mod h1:tpAmIL7X58VPnHHiSO4uE3jBeRamGsFsfdDeDtb5ECE= +github.com/go-openapi/swag/jsonname v0.26.0 h1:gV1NFX9M8avo0YSpmWogqfQISigCmpaiNci8cGECU5w= +github.com/go-openapi/swag/jsonname v0.26.0/go.mod h1:urBBR8bZNoDYGr653ynhIx+gTeIz0ARZxHkAPktJK2M= +github.com/go-openapi/swag/jsonutils v0.26.0 h1:FawFML2iAXsPqmERscuMPIHmFsoP1tOqWkxBaKNMsnA= +github.com/go-openapi/swag/jsonutils v0.26.0/go.mod h1:2VmA0CJlyFqgawOaPI9psnjFDqzyivIqLYN34t9p91E= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.0 h1:apqeINu/ICHouqiRZbyFvuDge5jCmmLTqGQ9V95EaOM= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.26.0/go.mod h1:AyM6QT8uz5IdKxk5akv0y6u4QvcL9GWERt0Jx/F/R8Y= +github.com/go-openapi/swag/loading v0.26.0 h1:Apg6zaKhCJurpJer0DCxq99qwmhFddBhaMX7kilDcko= +github.com/go-openapi/swag/loading v0.26.0/go.mod h1:dBxQ/6V2uBaAQdevN18VELE6xSpJWZxLX4txe12JwDg= +github.com/go-openapi/swag/stringutils v0.26.0 h1:qZQngLxs5s7SLijc3N2ZO+fUq2o8LjuWAASSrJuh+xg= +github.com/go-openapi/swag/stringutils v0.26.0/go.mod h1:sWn5uY+QIIspwPhvgnqJsH8xqFT2ZbYcvbcFanRyhFE= +github.com/go-openapi/swag/typeutils v0.26.0 h1:2kdEwdiNWy+JJdOvu5MA2IIg2SylWAFuuyQIKYybfq4= +github.com/go-openapi/swag/typeutils v0.26.0/go.mod h1:oovDuIUvTrEHVMqWilQzKzV4YlSKgyZmFh7AlfABNVE= +github.com/go-openapi/swag/yamlutils v0.26.0 h1:H7O8l/8NJJQ/oiReEN+oMpnGMyt8G0hl460nRZxhLMQ= +github.com/go-openapi/swag/yamlutils v0.26.0/go.mod h1:1evKEGAtP37Pkwcc7EWMF0hedX0/x3Rkvei2wtG/TbU= +github.com/go-openapi/testify/enable/yaml/v2 v2.4.2 h1:5zRca5jw7lzVREKCZVNBpysDNBjj74rBh0N2BGQbSR0= +github.com/go-openapi/testify/enable/yaml/v2 v2.4.2/go.mod h1:XVevPw5hUXuV+5AkI1u1PeAm27EQVrhXTTCPAF85LmE= +github.com/go-openapi/testify/v2 v2.4.2 h1:tiByHpvE9uHrrKjOszax7ZvKB7QOgizBWGBLuq0ePx4= +github.com/go-openapi/testify/v2 v2.4.2/go.mod h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= @@ -151,8 +151,8 @@ github.com/golang-migrate/migrate/v4 v4.19.1 h1:OCyb44lFuQfYXYLx1SCxPZQGU7mcaZ7g github.com/golang-migrate/migrate/v4 v4.19.1/go.mod h1:CTcgfjxhaUtsLipnLoQRWCrjYXycRz/g5+RWDuYgPrE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-tpm v0.9.7 h1:u89J4tUUeDTlH8xxC3CTW7OHZjbjKoHdQ9W7gCUhtxA= -github.com/google/go-tpm v0.9.7/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/google/go-tpm v0.9.8 h1:slArAR9Ft+1ybZu0lBwpSmpwhRXaa85hWtMinMyRAWo= +github.com/google/go-tpm v0.9.8/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gops v0.3.29 h1:n98J2qSOK1NJvRjdLDcjgDryjpIBGhbaqph1mXKL0rY= @@ -198,8 +198,8 @@ github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwA github.com/jonboulle/clockwork v0.5.0 h1:Hyh9A8u51kptdkR+cqRpT1EebBwTn1oK9YfGYbdFz6I= github.com/jonboulle/clockwork v0.5.0/go.mod h1:3mZlmanh0g2NDKO5TWZVJAfofYk64M7XN3SzBPjZF60= github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -213,31 +213,33 @@ github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/mattn/go-sqlite3 v1.14.37 h1:3DOZp4cXis1cUIpCfXLtmlGolNLp2VEqhiB/PARNBIg= -github.com/mattn/go-sqlite3 v1.14.37/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.44 h1:3VSe+xafpbzsLbdr2AWlAZk9yRHiBhTBakioXaCKTF8= +github.com/mattn/go-sqlite3 v1.14.44/go.mod h1:pjEuOr8IwzLJP2MfGeTb0A35jauH+C2kbHKBr7yXKVQ= github.com/minio/highwayhash v1.0.4-0.20251030100505-070ab1a87a76 h1:KGuD/pM2JpL9FAYvBrnBBeENKZNh6eNtjqytV6TYjnk= github.com/minio/highwayhash v1.0.4-0.20251030100505-070ab1a87a76/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/nats-io/jwt/v2 v2.8.0 h1:K7uzyz50+yGZDO5o772eRE7atlcSEENpL7P+b74JV1g= -github.com/nats-io/jwt/v2 v2.8.0/go.mod h1:me11pOkwObtcBNR8AiMrUbtVOUGkqYjMQZ6jnSdVUIA= -github.com/nats-io/nats-server/v2 v2.12.3 h1:KRv+1n7lddMVgkJPQer+pt36TcO0ENxjilBmeWdjcHs= -github.com/nats-io/nats-server/v2 v2.12.3/go.mod h1:MQXjG9WjyXKz9koWzUc3jYUMKD8x3CLmTNy91IQQz3Y= -github.com/nats-io/nats.go v1.49.0 h1:yh/WvY59gXqYpgl33ZI+XoVPKyut/IcEaqtsiuTJpoE= -github.com/nats-io/nats.go v1.49.0/go.mod h1:fDCn3mN5cY8HooHwE2ukiLb4p4G4ImmzvXyJt+tGwdw= +github.com/nats-io/jwt/v2 v2.8.1 h1:V0xpGuD/N8Mi+fQNDynXohVvp7ZztevW5io8CUWlPmU= +github.com/nats-io/jwt/v2 v2.8.1/go.mod h1:nWnOEEiVMiKHQpnAy4eXlizVEtSfzacZ1Q43LIRavZg= +github.com/nats-io/nats-server/v2 v2.12.7 h1:prQ9cPiWHcnwfT81Wi5lU9LL8TLY+7pxDru6fQYLCQQ= +github.com/nats-io/nats-server/v2 v2.12.7/go.mod h1:dOnmkprKMluTmTF7/QHZioxlau3sKHUM/LBPy9AiBPw= +github.com/nats-io/nats.go v1.52.0 h1:n3avV4VBsCgsdwh71TppsTwtv+QdPs7ntSKM8qJLGsc= +github.com/nats-io/nats.go v1.52.0/go.mod h1:26HypzazeOkyO3/mqd1zZd53STJN0EjCYF9Uy2ZOBno= github.com/nats-io/nkeys v0.4.15 h1:JACV5jRVO9V856KOapQ7x+EY8Jo3qw1vJt/9Jpwzkk4= github.com/nats-io/nkeys v0.4.15/go.mod h1:CpMchTXC9fxA5zrMo4KpySxNjiDVvr8ANOSZdiNfUrs= github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/oapi-codegen/runtime v1.3.0 h1:vyK1zc0gDWWXgk2xoQa4+X4RNNc5SL2RbTpJS/4vMYA= -github.com/oapi-codegen/runtime v1.3.0/go.mod h1:kOdeacKy7t40Rclb1je37ZLFboFxh+YLy0zaPCMibPY= +github.com/oapi-codegen/nullable v1.1.0 h1:eAh8JVc5430VtYVnq00Hrbpag9PFRGWLjxR1/3KntMs= +github.com/oapi-codegen/nullable v1.1.0/go.mod h1:KUZ3vUzkmEKY90ksAmit2+5juDIhIZhfDl+0PwOQlFY= +github.com/oapi-codegen/runtime v1.4.1 h1:9nwLoI+KrWxzbBcp0jO/R8uXqbik/HUyCvPeU68Y/qo= +github.com/oapi-codegen/runtime v1.4.1/go.mod h1:GwV7hC2hviaMzj+ITfHVRESK5J2W/GefVwIND/bMGvU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/parquet-go/bitpack v1.0.0 h1:AUqzlKzPPXf2bCdjfj4sTeacrUwsT7NlcYDMUQxPcQA= github.com/parquet-go/bitpack v1.0.0/go.mod h1:XnVk9TH+O40eOOmvpAVZ7K2ocQFrQwysLMnc6M/8lgs= -github.com/parquet-go/jsonlite v1.5.0 h1:ulS7lNWdPwiqDMLzTiXHYmIUhu99mavZh2iAVdXet3g= -github.com/parquet-go/jsonlite v1.5.0/go.mod h1:nDjpkpL4EOtqs6NQugUsi0Rleq9sW/OtC1NnZEnxzF0= -github.com/parquet-go/parquet-go v0.29.0 h1:xXlPtFVR51jpSVzf+cgHnNIcb7Xet+iuvkbe0HIm90Y= -github.com/parquet-go/parquet-go v0.29.0/go.mod h1:navtkAYr2LGoJVp141oXPlO/sxLvaOe3la2JEoD8+rg= +github.com/parquet-go/jsonlite v1.5.2 h1:8TZzYknFOHUpgjTLf80qbzc+8GdeT/3a3fdXSzhMylE= +github.com/parquet-go/jsonlite v1.5.2/go.mod h1:nDjpkpL4EOtqs6NQugUsi0Rleq9sW/OtC1NnZEnxzF0= +github.com/parquet-go/parquet-go v0.30.1 h1:Oy6ganNrAdFiVwy7wNmWagfPTWA2X9Z3tVHBc7JtuX8= +github.com/parquet-go/parquet-go v0.30.1/go.mod h1:navtkAYr2LGoJVp141oXPlO/sxLvaOe3la2JEoD8+rg= github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY= github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -252,6 +254,8 @@ github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTU github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= +github.com/questdb/go-questdb-client/v4 v4.2.0 h1:+d0HJwCjUWMj7zmY6qmhoqTJzTyoYKl+LSTYGN0T8T8= +github.com/questdb/go-questdb-client/v4 v4.2.0/go.mod h1:/2x93LK1wjM4JX/b5c6q7Yqk22htjWY1lE6p1X8iLbE= github.com/qustavo/sqlhooks/v2 v2.1.0 h1:54yBemHnGHp/7xgT+pxwmIlMSDNYKx5JW5dfRAiCZi0= github.com/qustavo/sqlhooks/v2 v2.1.0/go.mod h1:aMREyKo7fOKTwiLuWPsaHRXEmtqG4yREztO0idF83AU= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= @@ -268,8 +272,8 @@ github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NF github.com/sosodev/duration v1.4.0 h1:35ed0KiVFriGHHzZZJaZLgmTEEICIyt8Sx0RQfj9IjE= github.com/sosodev/duration v1.4.0/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= -github.com/stmcginnis/gofish v0.21.4 h1:daexK8sh31CgeSMkPUNs21HWHHA9ecCPJPyLCTxukCg= -github.com/stmcginnis/gofish v0.21.4/go.mod h1:PzF5i8ecRG9A2ol8XT64npKUunyraJ+7t0kYMpQAtqU= +github.com/stmcginnis/gofish v0.22.0 h1:OahXohfrIzAXOsWuKDQ7lm/QvdZBg1P2OzFYmbKAd/0= +github.com/stmcginnis/gofish v0.22.0/go.mod h1:PzF5i8ecRG9A2ol8XT64npKUunyraJ+7t0kYMpQAtqU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= @@ -288,10 +292,10 @@ github.com/twpayne/go-geom v1.6.1 h1:iLE+Opv0Ihm/ABIcvQFGIiFBXd76oBIar9drAwHFhR4 github.com/twpayne/go-geom v1.6.1/go.mod h1:Kr+Nly6BswFsKM5sd31YaoWS5PeDDH2NftJTK7Gd028= github.com/urfave/cli/v2 v2.27.7 h1:bH59vdhbjLv3LAvIu6gd0usJHgoTTPhCFib8qqOwXYU= github.com/urfave/cli/v2 v2.27.7/go.mod h1:CyNAG/xg+iAOg0N4MPGZqVmv2rCoP267496AOXUZjA4= -github.com/urfave/cli/v3 v3.7.0 h1:AGSnbUyjtLiM+WJUb4dzXKldl/gL+F8OwmRDtVr6g2U= -github.com/urfave/cli/v3 v3.7.0/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso= -github.com/vektah/gqlparser/v2 v2.5.32 h1:k9QPJd4sEDTL+qB4ncPLflqTJ3MmjB9SrVzJrawpFSc= -github.com/vektah/gqlparser/v2 v2.5.32/go.mod h1:c1I28gSOVNzlfc4WuDlqU7voQnsqI6OG2amkBAFmgts= +github.com/urfave/cli/v3 v3.8.0 h1:XqKPrm0q4P0q5JpoclYoCAv0/MIvH/jZ2umzuf8pNTI= +github.com/urfave/cli/v3 v3.8.0/go.mod h1:ysVLtOEmg2tOy6PknnYVhDoouyC/6N42TMeoMzskhso= +github.com/vektah/gqlparser/v2 v2.5.33 h1:lRp8aIeNUNbimf/axZd7ETg24q06hBtPaas+TcvI/7E= +github.com/vektah/gqlparser/v2 v2.5.33/go.mod h1:c1I28gSOVNzlfc4WuDlqU7voQnsqI6OG2amkBAFmgts= github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342 h1:FnBeRrxr7OU4VvAzt5X7s6266i6cSVkkFPS0TuXWbIg= github.com/xrash/smetrics v0.0.0-20250705151800-55b8f293f342/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= @@ -305,17 +309,17 @@ go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -328,8 +332,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -337,15 +341,15 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= diff --git a/gopls.json b/gopls.json new file mode 100644 index 00000000..cea2d908 --- /dev/null +++ b/gopls.json @@ -0,0 +1,49 @@ +{ + "gofumpt": true, + "codelenses": { + "gc_details": false, + "generate": true, + "regenerate_cgo": true, + "run_govulncheck": true, + "test": true, + "tidy": true, + "upgrade_dependency": true, + "vendor": true + }, + "hints": { + "assignVariableTypes": true, + "compositeLiteralFields": true, + "compositeLiteralTypes": true, + "constantValues": true, + "functionTypeParameters": true, + "parameterNames": true, + "rangeVariableTypes": true + }, + "analyses": { + "nilness": true, + "unusedparams": true, + "unusedwrite": true, + "useany": true + }, + "usePlaceholders": true, + "completeUnimported": true, + "staticcheck": true, + "directoryFilters": [ + "-.git", + "-.vscode", + "-.idea", + "-.vscode-test", + "-node_modules", + "-web/frontend", + "-web/templates", + "-var", + "-api", + "-configs", + "-init", + "-internal/repository/migrations", + "-internal/repository/testdata", + "-internal/importer/testdata", + "-pkg/archive/testdata" + ], + "semanticTokens": true +} diff --git a/internal/api/api_test.go b/internal/api/api_test.go index ec3f55ff..7ede49cb 100644 --- a/internal/api/api_test.go +++ b/internal/api/api_test.go @@ -170,6 +170,7 @@ func setup(t *testing.T) *api.RestAPI { archiver.Start(repository.GetJobRepository(), context.Background()) + t.Setenv("SESSION_KEY", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") if cfg := ccconf.GetPackageConfig("auth"); cfg != nil { auth.Init(&cfg) } else { diff --git a/internal/api/docs.go b/internal/api/docs.go index de3cf506..d905e462 100644 --- a/internal/api/docs.go +++ b/internal/api/docs.go @@ -398,11 +398,6 @@ const docTemplate = `{ }, "/api/jobs/edit_meta/": { "patch": { - "security": [ - { - "ApiKeyAuth": [] - } - ], "description": "Edit key value pairs in metadata json of job specified by jobID, StartTime and Cluster\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" @@ -413,7 +408,7 @@ const docTemplate = `{ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json by request", + "summary": "Edit meta-data json of job identified by request", "parameters": [ { "description": "Specifies job and payload to add or update", @@ -456,12 +451,17 @@ const docTemplate = `{ "$ref": "#/definitions/api.ErrorResponse" } } - } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ] } }, "/api/jobs/edit_meta/{id}": { "patch": { - "description": "Edit key value pairs in job metadata json\nIf a key already exists its content will be overwritten", + "description": "Edit key value pairs in job metadata json of job specified by database id\nIf a key already exists its content will be overwritten", "consumes": [ "application/json" ], @@ -471,7 +471,7 @@ const docTemplate = `{ "tags": [ "Job add and modify" ], - "summary": "Edit meta-data json", + "summary": "Edit meta-data json of job identified by database id", "parameters": [ { "type": "integer", @@ -481,7 +481,7 @@ const docTemplate = `{ "required": true }, { - "description": "Kay value pair to add", + "description": "Metadata Key value pair to add or update", "name": "request", "in": "body", "required": true, @@ -743,6 +743,64 @@ const docTemplate = `{ ] } }, + "/api/jobs/used_nodes": { + "get": { + "description": "Get a map of cluster names to lists of unique hostnames that are currently in use by running jobs that started before the specified timestamp.", + "produces": [ + "application/json" + ], + "tags": [ + "Job query" + ], + "summary": "Lists used nodes by cluster", + "parameters": [ + { + "type": "integer", + "description": "Unix timestamp to filter jobs (jobs with start_time \u003c ts)", + "name": "ts", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "Map of cluster names to hostname lists", + "schema": { + "$ref": "#/definitions/api.GetUsedNodesAPIResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + }, + "401": { + "description": "Unauthorized", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + }, + "403": { + "description": "Forbidden", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" + } + } + }, + "security": [ + { + "ApiKeyAuth": [] + } + ] + } + }, "/api/jobs/{id}": { "get": { "description": "Job to get is specified by database ID\nReturns full job resource information according to 'Job' scheme and all metrics according to 'JobData'.", @@ -965,8 +1023,11 @@ const docTemplate = `{ "/api/user/{id}": { "post": { "description": "Allows admins to add/remove roles and projects for a user", + "consumes": [ + "application/json" + ], "produces": [ - "text/plain" + "application/json" ], "tags": [ "User" @@ -981,35 +1042,26 @@ const docTemplate = `{ "required": true }, { - "type": "string", - "description": "Role to add", - "name": "add-role", - "in": "formData" - }, - { - "type": "string", - "description": "Role to remove", - "name": "remove-role", - "in": "formData" - }, - { - "type": "string", - "description": "Project to add", - "name": "add-project", - "in": "formData" - }, - { - "type": "string", - "description": "Project to remove", - "name": "remove-project", - "in": "formData" + "description": "Single Field Changes", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/api.UpdateUserAPIRequest" + } } ], "responses": { "200": { - "description": "Success message", + "description": "OK", "schema": { - "type": "string" + "$ref": "#/definitions/api.DefaultAPIResponse" + } + }, + "400": { + "description": "Bad Request", + "schema": { + "$ref": "#/definitions/api.ErrorResponse" } }, "403": { @@ -1381,63 +1433,6 @@ const docTemplate = `{ ] } }, - "/healthcheck/": { - "get": { - "description": "This endpoint allows the users to check if a node is healthy", - "produces": [ - "application/json" - ], - "tags": [ - "healthcheck" - ], - "summary": "HealthCheck endpoint", - "parameters": [ - { - "type": "string", - "description": "Selector", - "name": "selector", - "in": "query" - } - ], - "responses": { - "200": { - "description": "Debug dump", - "schema": { - "type": "string" - } - }, - "400": { - "description": "Bad Request", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - }, - "401": { - "description": "Unauthorized", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - }, - "403": { - "description": "Forbidden", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - }, - "500": { - "description": "Internal Server Error", - "schema": { - "$ref": "#/definitions/api.ErrorResponse" - } - } - }, - "security": [ - { - "ApiKeyAuth": [] - } - ] - } - }, "/jobs/tag_job/{id}": { "delete": { "description": "Removes tag(s) from a job specified by DB ID. Name and Type of Tag(s) must match.\nTag Scope is required for matching, options: \"global\", \"admin\". Private tags can not be deleted via API.\nIf tagged job is already finished: Tag will be removed from respective archive files.", @@ -1940,6 +1935,31 @@ const docTemplate = `{ } } }, + "api.UpdateUserAPIRequest": { + "type": "object", + "properties": { + "add-role": { + "description": "Role to add to user $ID", + "type": "string", + "example": "user" + }, + "remove-role": { + "description": "Role to remove from user $ID", + "type": "string", + "example": "user" + }, + "add-project": { + "description": "Project to add to user $ID managed array", + "type": "string", + "example": "abcd100" + }, + "remove-project": { + "description": "Project to remove from user $ID managed array", + "type": "string", + "example": "abcd100" + } + } + }, "api.DefaultAPIResponse": { "type": "object", "properties": { @@ -2043,6 +2063,52 @@ const docTemplate = `{ } } }, + "api.GetUsedNodesAPIResponse": { + "type": "object", + "properties": { + "usedNodes": { + "description": "Map of cluster names to lists of used node hostnames", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "api.JobMetaRequest": { + "type": "object", + "required": [ + "jobId" + ], + "properties": { + "cluster": { + "description": "Cluster of job", + "type": "string", + "example": "fritz" + }, + "jobId": { + "description": "Cluster Job ID of job", + "type": "integer", + "example": 123000 + }, + "payload": { + "description": "Content to Add to Job Meta_Data", + "allOf": [ + { + "$ref": "#/definitions/api.EditMetaRequest" + } + ] + }, + "startTime": { + "description": "Start Time of job as epoch", + "type": "integer", + "example": 1649723812 + } + } + }, "api.JobMetricWithName": { "type": "object", "properties": { @@ -2175,13 +2241,6 @@ const docTemplate = `{ "format": "float64" } }, - "exclusive": { - "description": "for backwards compatibility", - "type": "integer", - "maximum": 2, - "minimum": 0, - "example": 1 - }, "footprint": { "type": "object", "additionalProperties": { diff --git a/internal/api/job.go b/internal/api/job.go index ec76549d..b5695f7a 100644 --- a/internal/api/job.go +++ b/internal/api/job.go @@ -166,6 +166,10 @@ func (api *RestAPI) getJobs(rw http.ResponseWriter, r *http.Request) { handleError(err, http.StatusBadRequest, rw) return } + if x < 1 { + handleError(fmt.Errorf("page must be >= 1"), http.StatusBadRequest, rw) + return + } page.Page = x case "items-per-page": x, err := strconv.Atoi(vals[0]) @@ -173,6 +177,10 @@ func (api *RestAPI) getJobs(rw http.ResponseWriter, r *http.Request) { handleError(err, http.StatusBadRequest, rw) return } + if x < 1 { + handleError(fmt.Errorf("items-per-page must be >= 1"), http.StatusBadRequest, rw) + return + } page.ItemsPerPage = x case "with-metadata": withMetadata = true diff --git a/internal/api/nats.go b/internal/api/nats.go index db33c0e2..7de85785 100644 --- a/internal/api/nats.go +++ b/internal/api/nats.go @@ -78,6 +78,12 @@ type NatsAPI struct { jobCh chan natsMessage // nodeCh receives node state messages for processing by worker goroutines. nodeCh chan natsMessage + // stop signals worker goroutines and subscription callbacks to stop. + // Closing it (via Shutdown) makes workers exit and callbacks drop further + // messages instead of blocking; the channels are never closed so in-flight + // callbacks can never send on a closed channel. + stop chan struct{} + stopOnce sync.Once } // NewNatsAPI creates a new NatsAPI instance with channel-based worker pools. @@ -99,6 +105,7 @@ func NewNatsAPI() *NatsAPI { JobRepository: repository.GetJobRepository(), jobCh: make(chan natsMessage, jobConc), nodeCh: make(chan natsMessage, nodeConc), + stop: make(chan struct{}), } // Start worker goroutines @@ -112,17 +119,36 @@ func NewNatsAPI() *NatsAPI { return api } +// Shutdown stops the worker goroutines and tells subscription callbacks to stop +// enqueueing. It is safe to call multiple times. Callers must ensure the NATS +// client is closed first so no new callbacks are invoked. +func (api *NatsAPI) Shutdown() { + api.stopOnce.Do(func() { + close(api.stop) + }) +} + // jobWorker processes job event messages from the job channel. func (api *NatsAPI) jobWorker() { - for msg := range api.jobCh { - api.handleJobEvent(msg.subject, msg.data) + for { + select { + case <-api.stop: + return + case msg := <-api.jobCh: + api.handleJobEvent(msg.subject, msg.data) + } } } // nodeWorker processes node state messages from the node channel. func (api *NatsAPI) nodeWorker() { - for msg := range api.nodeCh { - api.handleNodeState(msg.subject, msg.data) + for { + select { + case <-api.stop: + return + case msg := <-api.nodeCh: + api.handleNodeState(msg.subject, msg.data) + } } } @@ -140,18 +166,27 @@ func (api *NatsAPI) StartSubscriptions() error { s := config.Keys.APISubjects if err := client.Subscribe(s.SubjectJobEvent, func(subject string, data []byte) { - api.jobCh <- natsMessage{subject: subject, data: data} + select { + case api.jobCh <- natsMessage{subject: subject, data: data}: + case <-api.stop: + } }); err != nil { return err } if err := client.Subscribe(s.SubjectNodeState, func(subject string, data []byte) { - api.nodeCh <- natsMessage{subject: subject, data: data} + select { + case api.nodeCh <- natsMessage{subject: subject, data: data}: + case <-api.stop: + } }); err != nil { return err } - cclog.Info("NATS API subscriptions started") + cclog.Warnf("NATS API subscriptions started on subjects %q and %q — these are UNAUTHENTICATED: "+ + "anyone with publish rights on the broker can start/stop jobs and update node state. "+ + "Restrict publish ACLs on the NATS broker to trusted producers only.", + s.SubjectJobEvent, s.SubjectNodeState) } return nil } diff --git a/internal/api/nats_test.go b/internal/api/nats_test.go index b1d2a624..cc0bdf90 100644 --- a/internal/api/nats_test.go +++ b/internal/api/nats_test.go @@ -156,6 +156,7 @@ func setupNatsTest(t *testing.T) *NatsAPI { archiver.Start(repository.GetJobRepository(), context.Background()) + t.Setenv("SESSION_KEY", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") if cfg := ccconf.GetPackageConfig("auth"); cfg != nil { auth.Init(&cfg) } else { diff --git a/internal/api/rest.go b/internal/api/rest.go index cb041012..93a7ab52 100644 --- a/internal/api/rest.go +++ b/internal/api/rest.go @@ -79,6 +79,8 @@ func (api *RestAPI) MountAPIRoutes(r chi.Router) { // REST API Uses TokenAuth // User List r.Get("/users/", api.getUsers) + // User Edit + r.Post("/user/{id}", api.updateUserByRequest) // Cluster List r.Get("/clusters/", api.getClusters) // Slurm node state @@ -152,7 +154,7 @@ func (api *RestAPI) MountConfigAPIRoutes(r chi.Router) { r.Put("/config/users/", api.createUser) r.Get("/config/users/", api.getUsers) r.Delete("/config/users/", api.deleteUser) - r.Post("/config/user/{id}", api.updateUser) + r.Post("/config/user/{id}", api.updateUserByForm) r.Post("/config/notice/", api.editNotice) r.Get("/config/taggers/", api.getTaggers) r.Post("/config/taggers/run/", api.runTagger) diff --git a/internal/api/user.go b/internal/api/user.go index e2f78165..a81eb029 100644 --- a/internal/api/user.go +++ b/internal/api/user.go @@ -24,6 +24,14 @@ type APIReturnedUser struct { Projects []string `json:"projects"` } +// UpdateUserAPIRequest model +type UpdateUserAPIRequest struct { + NewRole string `json:"add-role" example:"user"` // Role to add to user $ID + DelRole string `json:"remove-role" example:"user"` // Role to remove from user $ID + NewProj string `json:"add-project" example:"abcd100"` // Project to add to user $ID managed array + DelProj string `json:"remove-project" example:"abcd100"` // Project to remove from user $ID managed array +} + // getUsers godoc // @summary Returns a list of users // @tags User @@ -58,22 +66,74 @@ func (api *RestAPI) getUsers(rw http.ResponseWriter, r *http.Request) { } } -// updateUser godoc +// updateUserByRequest godoc // @summary Update user roles and projects // @tags User // @description Allows admins to add/remove roles and projects for a user -// @produce plain -// @param id path string true "Username" -// @param add-role formData string false "Role to add" -// @param remove-role formData string false "Role to remove" -// @param add-project formData string false "Project to add" -// @param remove-project formData string false "Project to remove" +// @accept json +// @produce json +// @param id path string true "Username" +// @param request body api.UpdateUserAPIRequest true "Single Field Changes" // @success 200 {string} string "Success message" // @failure 403 {object} api.ErrorResponse "Forbidden" // @failure 422 {object} api.ErrorResponse "Unprocessable Entity" // @security ApiKeyAuth // @router /api/user/{id} [post] -func (api *RestAPI) updateUser(rw http.ResponseWriter, r *http.Request) { +func (api *RestAPI) updateUserByRequest(rw http.ResponseWriter, r *http.Request) { + + if user := repository.GetUserFromContext(r.Context()); !user.HasRole(schema.RoleAdmin) { + handleError(fmt.Errorf("only admins are allowed to update a user"), http.StatusForbidden, rw) + return + } + + // Get Values + var req UpdateUserAPIRequest + if err := decode(r.Body, &req); err != nil { + handleError(fmt.Errorf("decoding request failed: %w", err), http.StatusBadRequest, rw) + return + } + + rw.Header().Set("Content-Type", "application/json") + + // Handle role updates + if req.NewRole != "" { + if err := repository.GetUserRepository().AddRole(r.Context(), chi.URLParam(r, "id"), req.NewRole); err != nil { + handleError(fmt.Errorf("adding role failed: %w", err), http.StatusUnprocessableEntity, rw) + return + } + if err := json.NewEncoder(rw).Encode(DefaultAPIResponse{Message: fmt.Sprintf("Add Role Success for user %s", chi.URLParam(r, "id"))}); err != nil { + cclog.Errorf("Failed to encode response: %v", err) + } + } else if req.DelRole != "" { + if err := repository.GetUserRepository().RemoveRole(r.Context(), chi.URLParam(r, "id"), req.DelRole); err != nil { + handleError(fmt.Errorf("removing role failed: %w", err), http.StatusUnprocessableEntity, rw) + return + } + if err := json.NewEncoder(rw).Encode(DefaultAPIResponse{Message: fmt.Sprintf("Remove Role Success for user %s", chi.URLParam(r, "id"))}); err != nil { + cclog.Errorf("Failed to encode response: %v", err) + } + } else if req.NewProj != "" { + if err := repository.GetUserRepository().AddProject(r.Context(), chi.URLParam(r, "id"), req.NewProj); err != nil { + handleError(fmt.Errorf("adding project failed: %w", err), http.StatusUnprocessableEntity, rw) + return + } + if err := json.NewEncoder(rw).Encode(DefaultAPIResponse{Message: fmt.Sprintf("Add Project Success for user %s", chi.URLParam(r, "id"))}); err != nil { + cclog.Errorf("Failed to encode response: %v", err) + } + } else if req.DelProj != "" { + if err := repository.GetUserRepository().RemoveProject(r.Context(), chi.URLParam(r, "id"), req.DelProj); err != nil { + handleError(fmt.Errorf("removing project failed: %w", err), http.StatusUnprocessableEntity, rw) + return + } + if err := json.NewEncoder(rw).Encode(DefaultAPIResponse{Message: fmt.Sprintf("Remove Project Success for user %s", chi.URLParam(r, "id"))}); err != nil { + cclog.Errorf("Failed to encode response: %v", err) + } + } else { + handleError(fmt.Errorf("no operation specified: must provide add-role, remove-role, add-project, or remove-project"), http.StatusBadRequest, rw) + } +} + +func (api *RestAPI) updateUserByForm(rw http.ResponseWriter, r *http.Request) { // SecuredCheck() only worked with TokenAuth: Removed if user := repository.GetUserFromContext(r.Context()); !user.HasRole(schema.RoleAdmin) { diff --git a/internal/archiver/archiveWorker.go b/internal/archiver/archiveWorker.go index 0639757d..d97a14f3 100644 --- a/internal/archiver/archiveWorker.go +++ b/internal/archiver/archiveWorker.go @@ -222,6 +222,13 @@ func TriggerArchiving(job *schema.Job) { func Shutdown(timeout time.Duration) error { cclog.Info("Initiating archiver shutdown...") + // Guard against Shutdown being called when Start was never run: closing a nil + // channel and receiving from a nil workerDone would panic/block forever. + if archiveChannel == nil { + cclog.Warn("Archiver shutdown called but archiver was never started") + return nil + } + // Close channel to signal no more jobs will be accepted close(archiveChannel) diff --git a/internal/auth/auth.go b/internal/auth/auth.go index 327e48a3..efb72d85 100644 --- a/internal/auth/auth.go +++ b/internal/auth/auth.go @@ -17,6 +17,7 @@ import ( "fmt" "net" "net/http" + "net/url" "os" "sync" "time" @@ -164,12 +165,17 @@ func (auth *Authentication) AuthViaSession( return nil, errors.New("invalid session data") } + authSourceInt, ok := session.Values["authSource"].(int) + if !ok { + authSourceInt = int(schema.AuthViaLocalPassword) + } + return &schema.User{ Username: username, Projects: projects, Roles: roles, AuthType: schema.AuthSession, - AuthSource: -1, + AuthSource: schema.AuthSource(authSourceInt), }, nil } @@ -182,24 +188,37 @@ func Init(authCfg *json.RawMessage) { sessKey := os.Getenv("SESSION_KEY") if sessKey == "" { - cclog.Warn("environment variable 'SESSION_KEY' not set (will use non-persistent random key)") - bytes := make([]byte, 32) - if _, err := rand.Read(bytes); err != nil { - cclog.Fatal("Error while initializing authentication -> failed to generate random bytes for session key") + if !config.Keys.DisableAuthentication { + cclog.Fatal("environment variable 'SESSION_KEY' not set: refusing to start with an ephemeral session key. " + + "Set SESSION_KEY in .env (base64-encoded 32 random bytes); a random key would invalidate all sessions on every restart " + + "and prevent sessions from validating across replicas.") } - authInstance.sessionStore = sessions.NewCookieStore(bytes) + // Authentication is disabled: no user sessions are issued, so an + // ephemeral random key is sufficient and SESSION_KEY is not required. + ephemeralKey := make([]byte, 32) + if _, err := rand.Read(ephemeralKey); err != nil { + cclog.Fatalf("Error while initializing authentication -> generating ephemeral session key failed: %v", err) + } + authInstance.sessionStore = sessions.NewCookieStore(ephemeralKey) } else { - bytes, err := base64.StdEncoding.DecodeString(sessKey) + keyBytes, err := base64.StdEncoding.DecodeString(sessKey) if err != nil { cclog.Fatal("Error while initializing authentication -> decoding session key failed") } - authInstance.sessionStore = sessions.NewCookieStore(bytes) + authInstance.sessionStore = sessions.NewCookieStore(keyBytes) } if d, err := time.ParseDuration(config.Keys.SessionMaxAge); err == nil { authInstance.SessionMaxAge = d } + // When authentication is disabled no authenticators are required; the + // session store created above is enough for the server to run with a + // valid (non-nil) auth instance. + if config.Keys.DisableAuthentication { + return + } + if authCfg == nil { return } @@ -319,10 +338,12 @@ func (auth *Authentication) SaveSession(rw http.ResponseWriter, r *http.Request, } session.Options.Secure = false } - session.Options.SameSite = http.SameSiteStrictMode + session.Options.SameSite = http.SameSiteLaxMode + session.Options.HttpOnly = true session.Values["username"] = user.Username session.Values["projects"] = user.Projects session.Values["roles"] = user.Roles + session.Values["authSource"] = int(user.AuthSource) if err := auth.sessionStore.Save(r, rw, session); err != nil { cclog.Warnf("session save failed: %s", err.Error()) http.Error(rw, err.Error(), http.StatusInternalServerError) @@ -382,9 +403,12 @@ func (auth *Authentication) Login( cclog.Infof("login successfull: user: %#v (roles: %v, projects: %v)", user.Username, user.Roles, user.Projects) ctx := context.WithValue(r.Context(), repository.ContextUserKey, user) - if r.FormValue("redirect") != "" { - http.RedirectHandler(r.FormValue("redirect"), http.StatusFound).ServeHTTP(rw, r.WithContext(ctx)) - return + if redirect := r.FormValue("redirect"); redirect != "" { + if u, perr := url.Parse(redirect); perr == nil && u.Scheme == "" && u.Host == "" { + http.RedirectHandler(redirect, http.StatusFound).ServeHTTP(rw, r.WithContext(ctx)) + return + } + cclog.Warnf("login redirect rejected (not a relative path): %q", redirect) } http.RedirectHandler("/", http.StatusFound).ServeHTTP(rw, r.WithContext(ctx)) @@ -626,7 +650,7 @@ func securedCheck(user *schema.User, r *http.Request) error { } // If SplitHostPort fails, IPAddress is already just a host (no port) - // If nothing declared in config: Continue + // If nothing declared in config: Continue // FIXME: Allow All If Not Declared? if len(config.Keys.APIAllowedIPs) == 0 { return nil } diff --git a/internal/auth/jwtCookieSession.go b/internal/auth/jwtCookieSession.go index 4c4bbeb6..f16dbe5e 100644 --- a/internal/auth/jwtCookieSession.go +++ b/internal/auth/jwtCookieSession.go @@ -9,6 +9,7 @@ import ( "crypto/ed25519" "encoding/base64" "errors" + "fmt" "net/http" "os" @@ -119,22 +120,26 @@ func (ja *JWTCookieSessionAuthenticator) Login( rawtoken = jwtCookie.Value } - token, err := jwt.Parse(rawtoken, func(t *jwt.Token) (any, error) { - if t.Method != jwt.SigningMethodEdDSA { - return nil, errors.New("only Ed25519/EdDSA supported") - } + parser := jwt.NewParser(jwt.WithValidMethods([]string{jwt.SigningMethodEdDSA.Alg()})) - unvalidatedIssuer, success := t.Claims.(jwt.MapClaims)["iss"].(string) - if success && unvalidatedIssuer == jc.TrustedIssuer { - // The (unvalidated) issuer seems to be the expected one, - // use public cross login key from config - return ja.publicKeyCrossLogin, nil - } + unverified, _, perr := parser.ParseUnverified(rawtoken, jwt.MapClaims{}) + if perr != nil { + cclog.Warn("JWT cookie session: error while parsing token") + return nil, perr + } + issuer, _ := unverified.Claims.(jwt.MapClaims)["iss"].(string) - // No cross login key configured or issuer not expected - // Try own key - return ja.publicKey, nil - }) + var key any + switch issuer { + case jc.TrustedIssuer: + key = ja.publicKeyCrossLogin + case "": + key = ja.publicKey + default: + return nil, fmt.Errorf("untrusted JWT issuer: %q", issuer) + } + + token, err := parser.Parse(rawtoken, func(*jwt.Token) (any, error) { return key, nil }) if err != nil { cclog.Warn("JWT cookie session: error while parsing token") return nil, err diff --git a/internal/auth/jwtSession.go b/internal/auth/jwtSession.go index de7e985b..8fae61e1 100644 --- a/internal/auth/jwtSession.go +++ b/internal/auth/jwtSession.go @@ -25,15 +25,21 @@ type JWTSessionAuthenticator struct { var _ Authenticator = (*JWTSessionAuthenticator)(nil) func (ja *JWTSessionAuthenticator) Init() error { - if pubKey := os.Getenv("CROSS_LOGIN_JWT_HS512_KEY"); pubKey != "" { - bytes, err := base64.StdEncoding.DecodeString(pubKey) - if err != nil { - cclog.Warn("Could not decode cross login JWT HS512 key") - return err - } - ja.loginTokenKey = bytes + pubKey := os.Getenv("CROSS_LOGIN_JWT_HS512_KEY") + if pubKey == "" { + // Without a configured key the HMAC verification below would run against + // an empty key, which lets anyone forge a valid token. Refuse to register + // the authenticator in that case so JWT session login is simply disabled. + return errors.New("CROSS_LOGIN_JWT_HS512_KEY not set: JWT session login disabled") } + bytes, err := base64.StdEncoding.DecodeString(pubKey) + if err != nil { + cclog.Warn("Could not decode cross login JWT HS512 key") + return err + } + ja.loginTokenKey = bytes + cclog.Info("JWT Session authenticator successfully registered") return nil } @@ -60,6 +66,12 @@ func (ja *JWTSessionAuthenticator) Login( token, err := jwt.Parse(rawtoken, func(t *jwt.Token) (any, error) { if t.Method == jwt.SigningMethodHS256 || t.Method == jwt.SigningMethodHS512 { + // Defense in depth: an empty key would verify any HMAC signature. + // Init() already refuses to register without a key, so this should + // never trigger, but guard explicitly rather than trust the chain. + if len(ja.loginTokenKey) == 0 { + return nil, errors.New("HS login key not configured") + } return ja.loginTokenKey, nil } return nil, fmt.Errorf("unkown signing method for login token: %s (known: HS256, HS512, EdDSA)", t.Method.Alg()) diff --git a/internal/auth/oidc.go b/internal/auth/oidc.go index ec6c77a7..934c8542 100644 --- a/internal/auth/oidc.go +++ b/internal/auth/oidc.go @@ -79,7 +79,7 @@ func NewOIDC(a *Authentication) *OIDC { ClientID: clientID, ClientSecret: clientSecret, Endpoint: provider.Endpoint(), - Scopes: []string{oidc.ScopeOpenID, "profile"}, + Scopes: []string{oidc.ScopeOpenID, "profile", "roles"}, } oa := &OIDC{provider: provider, client: client, clientID: clientID, authentication: a} @@ -162,36 +162,76 @@ func (oa *OIDC) OAuth2Callback(rw http.ResponseWriter, r *http.Request) { return } - projects := make([]string, 0) + // projects is populated below from ID token claims + var projects []string - // Extract custom claims from userinfo - var claims struct { + // Extract profile claims from userinfo (username, name) + var userInfoClaims struct { + Username string `json:"preferred_username"` + Name string `json:"name"` + } + if err := userInfo.Claims(&userInfoClaims); err != nil { + cclog.Errorf("failed to extract userinfo claims: %s", err.Error()) + http.Error(rw, "Failed to extract user claims", http.StatusInternalServerError) + return + } + + // Extract role claims from the ID token. + // Keycloak includes realm_access and resource_access in the ID token (JWT), + // but NOT in the UserInfo endpoint response by default. + var idTokenClaims struct { Username string `json:"preferred_username"` Name string `json:"name"` // Keycloak realm-level roles RealmAccess struct { Roles []string `json:"roles"` } `json:"realm_access"` - // Keycloak client-level roles - ResourceAccess struct { - Client struct { - Roles []string `json:"roles"` - } `json:"clustercockpit"` + // Keycloak client-level roles: map from client-id to role list + ResourceAccess map[string]struct { + Roles []string `json:"roles"` } `json:"resource_access"` + // Custom multi-valued user attribute mapped via a Keycloak User Attribute mapper + Projects []string `json:"projects"` } - if err := userInfo.Claims(&claims); err != nil { - cclog.Errorf("failed to extract claims: %s", err.Error()) - http.Error(rw, "Failed to extract user claims", http.StatusInternalServerError) + if err := idToken.Claims(&idTokenClaims); err != nil { + cclog.Errorf("failed to extract ID token claims: %s", err.Error()) + http.Error(rw, "Failed to extract ID token claims", http.StatusInternalServerError) return } - if claims.Username == "" { + cclog.Debugf("OIDC userinfo claims: username=%q name=%q", userInfoClaims.Username, userInfoClaims.Name) + cclog.Debugf("OIDC ID token realm_access roles: %v", idTokenClaims.RealmAccess.Roles) + cclog.Debugf("OIDC ID token resource_access: %v", idTokenClaims.ResourceAccess) + cclog.Debugf("OIDC ID token projects: %v", idTokenClaims.Projects) + + projects = idTokenClaims.Projects + if projects == nil { + projects = []string{} + } + + // Prefer username from userInfo; fall back to ID token claim + username := userInfoClaims.Username + if username == "" { + username = idTokenClaims.Username + } + name := userInfoClaims.Name + if name == "" { + name = idTokenClaims.Name + } + + if username == "" { http.Error(rw, "Username claim missing from OIDC provider", http.StatusBadRequest) return } - // Merge roles from both client-level and realm-level access - oidcRoles := append(claims.ResourceAccess.Client.Roles, claims.RealmAccess.Roles...) + // Collect roles from realm_access (realm roles) in the ID token + oidcRoles := append([]string{}, idTokenClaims.RealmAccess.Roles...) + + // Also collect roles from resource_access (client roles) for all clients + for clientID, access := range idTokenClaims.ResourceAccess { + cclog.Debugf("OIDC ID token resource_access[%q] roles: %v", clientID, access.Roles) + oidcRoles = append(oidcRoles, access.Roles...) + } roleSet := make(map[string]bool) for _, r := range oidcRoles { @@ -217,8 +257,8 @@ func (oa *OIDC) OAuth2Callback(rw http.ResponseWriter, r *http.Request) { } user := &schema.User{ - Username: claims.Username, - Name: claims.Name, + Username: username, + Name: name, Roles: roles, Projects: projects, AuthSource: schema.AuthViaOIDC, diff --git a/internal/graph/generated/generated.go b/internal/graph/generated/generated.go index c8354b8a..1e54dd20 100644 --- a/internal/graph/generated/generated.go +++ b/internal/graph/generated/generated.go @@ -7,6 +7,7 @@ import ( "context" "errors" "fmt" + "math" "strconv" "sync/atomic" "time" @@ -2260,8 +2261,8 @@ func newExecutionContext( opCtx *graphql.OperationContext, execSchema *executableSchema, deferredResults chan graphql.DeferredResult, -) executionContext { - return executionContext{ +) *executionContext { + return &executionContext{ ExecutionContextState: graphql.NewExecutionContextState[ResolverRoot, DirectiveRoot, ComplexityRoot]( opCtx, (*graphql.ExecutableSchemaState[ResolverRoot, DirectiveRoot, ComplexityRoot])(execSchema), @@ -2848,6 +2849,818 @@ input PageRequest { } var parsedSchema = gqlparser.MustLoadSchema(sources...) +// childFields_* functions provide shared child field context lookups. +// Each function is generated once per unique object type, deduplicating the +// switch statements that were previously inlined in every fieldContext_* function. + +func (ec *executionContext) childFields_Accelerator(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_Accelerator_id(ctx, field) + case "type": + return ec.fieldContext_Accelerator_type(ctx, field) + case "model": + return ec.fieldContext_Accelerator_model(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Accelerator", field.Name) +} + +func (ec *executionContext) childFields_Cluster(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_Cluster_name(ctx, field) + case "partitions": + return ec.fieldContext_Cluster_partitions(ctx, field) + case "subClusters": + return ec.fieldContext_Cluster_subClusters(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Cluster", field.Name) +} + +func (ec *executionContext) childFields_ClusterMetricWithName(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_ClusterMetricWithName_name(ctx, field) + case "unit": + return ec.fieldContext_ClusterMetricWithName_unit(ctx, field) + case "timestep": + return ec.fieldContext_ClusterMetricWithName_timestep(ctx, field) + case "data": + return ec.fieldContext_ClusterMetricWithName_data(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ClusterMetricWithName", field.Name) +} + +func (ec *executionContext) childFields_ClusterMetrics(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "nodeCount": + return ec.fieldContext_ClusterMetrics_nodeCount(ctx, field) + case "metrics": + return ec.fieldContext_ClusterMetrics_metrics(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ClusterMetrics", field.Name) +} + +func (ec *executionContext) childFields_ClusterSupport(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "cluster": + return ec.fieldContext_ClusterSupport_cluster(ctx, field) + case "subClusters": + return ec.fieldContext_ClusterSupport_subClusters(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ClusterSupport", field.Name) +} + +func (ec *executionContext) childFields_Count(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_Count_name(ctx, field) + case "count": + return ec.fieldContext_Count_count(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Count", field.Name) +} + +func (ec *executionContext) childFields_EnergyFootprintValue(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "hardware": + return ec.fieldContext_EnergyFootprintValue_hardware(ctx, field) + case "metric": + return ec.fieldContext_EnergyFootprintValue_metric(ctx, field) + case "value": + return ec.fieldContext_EnergyFootprintValue_value(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type EnergyFootprintValue", field.Name) +} + +func (ec *executionContext) childFields_FootprintValue(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_FootprintValue_name(ctx, field) + case "stat": + return ec.fieldContext_FootprintValue_stat(ctx, field) + case "value": + return ec.fieldContext_FootprintValue_value(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type FootprintValue", field.Name) +} + +func (ec *executionContext) childFields_Footprints(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "timeWeights": + return ec.fieldContext_Footprints_timeWeights(ctx, field) + case "metrics": + return ec.fieldContext_Footprints_metrics(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Footprints", field.Name) +} + +func (ec *executionContext) childFields_GlobalMetricListItem(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_GlobalMetricListItem_name(ctx, field) + case "unit": + return ec.fieldContext_GlobalMetricListItem_unit(ctx, field) + case "scope": + return ec.fieldContext_GlobalMetricListItem_scope(ctx, field) + case "footprint": + return ec.fieldContext_GlobalMetricListItem_footprint(ctx, field) + case "availability": + return ec.fieldContext_GlobalMetricListItem_availability(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type GlobalMetricListItem", field.Name) +} + +func (ec *executionContext) childFields_HistoPoint(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "count": + return ec.fieldContext_HistoPoint_count(ctx, field) + case "value": + return ec.fieldContext_HistoPoint_value(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type HistoPoint", field.Name) +} + +func (ec *executionContext) childFields_Job(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_Job_id(ctx, field) + case "jobId": + return ec.fieldContext_Job_jobId(ctx, field) + case "user": + return ec.fieldContext_Job_user(ctx, field) + case "project": + return ec.fieldContext_Job_project(ctx, field) + case "cluster": + return ec.fieldContext_Job_cluster(ctx, field) + case "subCluster": + return ec.fieldContext_Job_subCluster(ctx, field) + case "startTime": + return ec.fieldContext_Job_startTime(ctx, field) + case "duration": + return ec.fieldContext_Job_duration(ctx, field) + case "walltime": + return ec.fieldContext_Job_walltime(ctx, field) + case "numNodes": + return ec.fieldContext_Job_numNodes(ctx, field) + case "numHWThreads": + return ec.fieldContext_Job_numHWThreads(ctx, field) + case "numAcc": + return ec.fieldContext_Job_numAcc(ctx, field) + case "energy": + return ec.fieldContext_Job_energy(ctx, field) + case "SMT": + return ec.fieldContext_Job_SMT(ctx, field) + case "shared": + return ec.fieldContext_Job_shared(ctx, field) + case "partition": + return ec.fieldContext_Job_partition(ctx, field) + case "arrayJobId": + return ec.fieldContext_Job_arrayJobId(ctx, field) + case "monitoringStatus": + return ec.fieldContext_Job_monitoringStatus(ctx, field) + case "state": + return ec.fieldContext_Job_state(ctx, field) + case "tags": + return ec.fieldContext_Job_tags(ctx, field) + case "resources": + return ec.fieldContext_Job_resources(ctx, field) + case "concurrentJobs": + return ec.fieldContext_Job_concurrentJobs(ctx, field) + case "footprint": + return ec.fieldContext_Job_footprint(ctx, field) + case "energyFootprint": + return ec.fieldContext_Job_energyFootprint(ctx, field) + case "metaData": + return ec.fieldContext_Job_metaData(ctx, field) + case "userData": + return ec.fieldContext_Job_userData(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Job", field.Name) +} + +func (ec *executionContext) childFields_JobLink(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_JobLink_id(ctx, field) + case "jobId": + return ec.fieldContext_JobLink_jobId(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type JobLink", field.Name) +} + +func (ec *executionContext) childFields_JobLinkResultList(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "listQuery": + return ec.fieldContext_JobLinkResultList_listQuery(ctx, field) + case "items": + return ec.fieldContext_JobLinkResultList_items(ctx, field) + case "count": + return ec.fieldContext_JobLinkResultList_count(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type JobLinkResultList", field.Name) +} + +func (ec *executionContext) childFields_JobMetric(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "unit": + return ec.fieldContext_JobMetric_unit(ctx, field) + case "timestep": + return ec.fieldContext_JobMetric_timestep(ctx, field) + case "series": + return ec.fieldContext_JobMetric_series(ctx, field) + case "statisticsSeries": + return ec.fieldContext_JobMetric_statisticsSeries(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type JobMetric", field.Name) +} + +func (ec *executionContext) childFields_JobMetricWithName(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_JobMetricWithName_name(ctx, field) + case "scope": + return ec.fieldContext_JobMetricWithName_scope(ctx, field) + case "metric": + return ec.fieldContext_JobMetricWithName_metric(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type JobMetricWithName", field.Name) +} + +func (ec *executionContext) childFields_JobResultList(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "items": + return ec.fieldContext_JobResultList_items(ctx, field) + case "offset": + return ec.fieldContext_JobResultList_offset(ctx, field) + case "limit": + return ec.fieldContext_JobResultList_limit(ctx, field) + case "count": + return ec.fieldContext_JobResultList_count(ctx, field) + case "hasNextPage": + return ec.fieldContext_JobResultList_hasNextPage(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type JobResultList", field.Name) +} + +func (ec *executionContext) childFields_JobStats(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_JobStats_id(ctx, field) + case "jobId": + return ec.fieldContext_JobStats_jobId(ctx, field) + case "startTime": + return ec.fieldContext_JobStats_startTime(ctx, field) + case "duration": + return ec.fieldContext_JobStats_duration(ctx, field) + case "cluster": + return ec.fieldContext_JobStats_cluster(ctx, field) + case "subCluster": + return ec.fieldContext_JobStats_subCluster(ctx, field) + case "numNodes": + return ec.fieldContext_JobStats_numNodes(ctx, field) + case "numHWThreads": + return ec.fieldContext_JobStats_numHWThreads(ctx, field) + case "numAccelerators": + return ec.fieldContext_JobStats_numAccelerators(ctx, field) + case "stats": + return ec.fieldContext_JobStats_stats(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type JobStats", field.Name) +} + +func (ec *executionContext) childFields_JobsStatistics(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_JobsStatistics_id(ctx, field) + case "name": + return ec.fieldContext_JobsStatistics_name(ctx, field) + case "totalUsers": + return ec.fieldContext_JobsStatistics_totalUsers(ctx, field) + case "totalJobs": + return ec.fieldContext_JobsStatistics_totalJobs(ctx, field) + case "runningJobs": + return ec.fieldContext_JobsStatistics_runningJobs(ctx, field) + case "shortJobs": + return ec.fieldContext_JobsStatistics_shortJobs(ctx, field) + case "totalWalltime": + return ec.fieldContext_JobsStatistics_totalWalltime(ctx, field) + case "totalNodes": + return ec.fieldContext_JobsStatistics_totalNodes(ctx, field) + case "totalNodeHours": + return ec.fieldContext_JobsStatistics_totalNodeHours(ctx, field) + case "totalCores": + return ec.fieldContext_JobsStatistics_totalCores(ctx, field) + case "totalCoreHours": + return ec.fieldContext_JobsStatistics_totalCoreHours(ctx, field) + case "totalAccs": + return ec.fieldContext_JobsStatistics_totalAccs(ctx, field) + case "totalAccHours": + return ec.fieldContext_JobsStatistics_totalAccHours(ctx, field) + case "histDuration": + return ec.fieldContext_JobsStatistics_histDuration(ctx, field) + case "histNumNodes": + return ec.fieldContext_JobsStatistics_histNumNodes(ctx, field) + case "histNumCores": + return ec.fieldContext_JobsStatistics_histNumCores(ctx, field) + case "histNumAccs": + return ec.fieldContext_JobsStatistics_histNumAccs(ctx, field) + case "histMetrics": + return ec.fieldContext_JobsStatistics_histMetrics(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type JobsStatistics", field.Name) +} + +func (ec *executionContext) childFields_MetricConfig(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_MetricConfig_name(ctx, field) + case "unit": + return ec.fieldContext_MetricConfig_unit(ctx, field) + case "scope": + return ec.fieldContext_MetricConfig_scope(ctx, field) + case "aggregation": + return ec.fieldContext_MetricConfig_aggregation(ctx, field) + case "timestep": + return ec.fieldContext_MetricConfig_timestep(ctx, field) + case "peak": + return ec.fieldContext_MetricConfig_peak(ctx, field) + case "normal": + return ec.fieldContext_MetricConfig_normal(ctx, field) + case "caution": + return ec.fieldContext_MetricConfig_caution(ctx, field) + case "alert": + return ec.fieldContext_MetricConfig_alert(ctx, field) + case "lowerIsBetter": + return ec.fieldContext_MetricConfig_lowerIsBetter(ctx, field) + case "subClusters": + return ec.fieldContext_MetricConfig_subClusters(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MetricConfig", field.Name) +} + +func (ec *executionContext) childFields_MetricFootprints(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "metric": + return ec.fieldContext_MetricFootprints_metric(ctx, field) + case "data": + return ec.fieldContext_MetricFootprints_data(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MetricFootprints", field.Name) +} + +func (ec *executionContext) childFields_MetricHistoPoint(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "bin": + return ec.fieldContext_MetricHistoPoint_bin(ctx, field) + case "count": + return ec.fieldContext_MetricHistoPoint_count(ctx, field) + case "min": + return ec.fieldContext_MetricHistoPoint_min(ctx, field) + case "max": + return ec.fieldContext_MetricHistoPoint_max(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MetricHistoPoint", field.Name) +} + +func (ec *executionContext) childFields_MetricHistoPoints(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "metric": + return ec.fieldContext_MetricHistoPoints_metric(ctx, field) + case "unit": + return ec.fieldContext_MetricHistoPoints_unit(ctx, field) + case "stat": + return ec.fieldContext_MetricHistoPoints_stat(ctx, field) + case "data": + return ec.fieldContext_MetricHistoPoints_data(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MetricHistoPoints", field.Name) +} + +func (ec *executionContext) childFields_MetricStatistics(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "avg": + return ec.fieldContext_MetricStatistics_avg(ctx, field) + case "min": + return ec.fieldContext_MetricStatistics_min(ctx, field) + case "max": + return ec.fieldContext_MetricStatistics_max(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MetricStatistics", field.Name) +} + +func (ec *executionContext) childFields_MetricValue(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_MetricValue_name(ctx, field) + case "unit": + return ec.fieldContext_MetricValue_unit(ctx, field) + case "value": + return ec.fieldContext_MetricValue_value(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MetricValue", field.Name) +} + +func (ec *executionContext) childFields_NamedStats(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_NamedStats_name(ctx, field) + case "data": + return ec.fieldContext_NamedStats_data(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type NamedStats", field.Name) +} + +func (ec *executionContext) childFields_NamedStatsWithScope(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_NamedStatsWithScope_name(ctx, field) + case "scope": + return ec.fieldContext_NamedStatsWithScope_scope(ctx, field) + case "stats": + return ec.fieldContext_NamedStatsWithScope_stats(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type NamedStatsWithScope", field.Name) +} + +func (ec *executionContext) childFields_Node(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_Node_id(ctx, field) + case "hostname": + return ec.fieldContext_Node_hostname(ctx, field) + case "cluster": + return ec.fieldContext_Node_cluster(ctx, field) + case "subCluster": + return ec.fieldContext_Node_subCluster(ctx, field) + case "jobsRunning": + return ec.fieldContext_Node_jobsRunning(ctx, field) + case "cpusAllocated": + return ec.fieldContext_Node_cpusAllocated(ctx, field) + case "memoryAllocated": + return ec.fieldContext_Node_memoryAllocated(ctx, field) + case "gpusAllocated": + return ec.fieldContext_Node_gpusAllocated(ctx, field) + case "schedulerState": + return ec.fieldContext_Node_schedulerState(ctx, field) + case "healthState": + return ec.fieldContext_Node_healthState(ctx, field) + case "metaData": + return ec.fieldContext_Node_metaData(ctx, field) + case "healthData": + return ec.fieldContext_Node_healthData(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Node", field.Name) +} + +func (ec *executionContext) childFields_NodeMetrics(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "host": + return ec.fieldContext_NodeMetrics_host(ctx, field) + case "nodeState": + return ec.fieldContext_NodeMetrics_nodeState(ctx, field) + case "metricHealth": + return ec.fieldContext_NodeMetrics_metricHealth(ctx, field) + case "subCluster": + return ec.fieldContext_NodeMetrics_subCluster(ctx, field) + case "metrics": + return ec.fieldContext_NodeMetrics_metrics(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type NodeMetrics", field.Name) +} + +func (ec *executionContext) childFields_NodeStateResultList(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "items": + return ec.fieldContext_NodeStateResultList_items(ctx, field) + case "count": + return ec.fieldContext_NodeStateResultList_count(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type NodeStateResultList", field.Name) +} + +func (ec *executionContext) childFields_NodeStates(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "state": + return ec.fieldContext_NodeStates_state(ctx, field) + case "count": + return ec.fieldContext_NodeStates_count(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type NodeStates", field.Name) +} + +func (ec *executionContext) childFields_NodeStatesTimed(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "state": + return ec.fieldContext_NodeStatesTimed_state(ctx, field) + case "counts": + return ec.fieldContext_NodeStatesTimed_counts(ctx, field) + case "times": + return ec.fieldContext_NodeStatesTimed_times(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type NodeStatesTimed", field.Name) +} + +func (ec *executionContext) childFields_NodesResultList(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "items": + return ec.fieldContext_NodesResultList_items(ctx, field) + case "offset": + return ec.fieldContext_NodesResultList_offset(ctx, field) + case "limit": + return ec.fieldContext_NodesResultList_limit(ctx, field) + case "count": + return ec.fieldContext_NodesResultList_count(ctx, field) + case "totalNodes": + return ec.fieldContext_NodesResultList_totalNodes(ctx, field) + case "hasNextPage": + return ec.fieldContext_NodesResultList_hasNextPage(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type NodesResultList", field.Name) +} + +func (ec *executionContext) childFields_Resource(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "hostname": + return ec.fieldContext_Resource_hostname(ctx, field) + case "hwthreads": + return ec.fieldContext_Resource_hwthreads(ctx, field) + case "accelerators": + return ec.fieldContext_Resource_accelerators(ctx, field) + case "configuration": + return ec.fieldContext_Resource_configuration(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Resource", field.Name) +} + +func (ec *executionContext) childFields_ScopedStats(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "hostname": + return ec.fieldContext_ScopedStats_hostname(ctx, field) + case "id": + return ec.fieldContext_ScopedStats_id(ctx, field) + case "data": + return ec.fieldContext_ScopedStats_data(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ScopedStats", field.Name) +} + +func (ec *executionContext) childFields_Series(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "hostname": + return ec.fieldContext_Series_hostname(ctx, field) + case "id": + return ec.fieldContext_Series_id(ctx, field) + case "statistics": + return ec.fieldContext_Series_statistics(ctx, field) + case "data": + return ec.fieldContext_Series_data(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Series", field.Name) +} + +func (ec *executionContext) childFields_StatsSeries(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "mean": + return ec.fieldContext_StatsSeries_mean(ctx, field) + case "median": + return ec.fieldContext_StatsSeries_median(ctx, field) + case "min": + return ec.fieldContext_StatsSeries_min(ctx, field) + case "max": + return ec.fieldContext_StatsSeries_max(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type StatsSeries", field.Name) +} + +func (ec *executionContext) childFields_SubCluster(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_SubCluster_name(ctx, field) + case "nodes": + return ec.fieldContext_SubCluster_nodes(ctx, field) + case "numberOfNodes": + return ec.fieldContext_SubCluster_numberOfNodes(ctx, field) + case "processorType": + return ec.fieldContext_SubCluster_processorType(ctx, field) + case "socketsPerNode": + return ec.fieldContext_SubCluster_socketsPerNode(ctx, field) + case "coresPerSocket": + return ec.fieldContext_SubCluster_coresPerSocket(ctx, field) + case "threadsPerCore": + return ec.fieldContext_SubCluster_threadsPerCore(ctx, field) + case "flopRateScalar": + return ec.fieldContext_SubCluster_flopRateScalar(ctx, field) + case "flopRateSimd": + return ec.fieldContext_SubCluster_flopRateSimd(ctx, field) + case "memoryBandwidth": + return ec.fieldContext_SubCluster_memoryBandwidth(ctx, field) + case "topology": + return ec.fieldContext_SubCluster_topology(ctx, field) + case "metricConfig": + return ec.fieldContext_SubCluster_metricConfig(ctx, field) + case "footprint": + return ec.fieldContext_SubCluster_footprint(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type SubCluster", field.Name) +} + +func (ec *executionContext) childFields_SubClusterConfig(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext_SubClusterConfig_name(ctx, field) + case "peak": + return ec.fieldContext_SubClusterConfig_peak(ctx, field) + case "normal": + return ec.fieldContext_SubClusterConfig_normal(ctx, field) + case "caution": + return ec.fieldContext_SubClusterConfig_caution(ctx, field) + case "alert": + return ec.fieldContext_SubClusterConfig_alert(ctx, field) + case "remove": + return ec.fieldContext_SubClusterConfig_remove(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type SubClusterConfig", field.Name) +} + +func (ec *executionContext) childFields_Tag(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_Tag_id(ctx, field) + case "type": + return ec.fieldContext_Tag_type(ctx, field) + case "name": + return ec.fieldContext_Tag_name(ctx, field) + case "scope": + return ec.fieldContext_Tag_scope(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Tag", field.Name) +} + +func (ec *executionContext) childFields_TimeWeights(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "nodeHours": + return ec.fieldContext_TimeWeights_nodeHours(ctx, field) + case "accHours": + return ec.fieldContext_TimeWeights_accHours(ctx, field) + case "coreHours": + return ec.fieldContext_TimeWeights_coreHours(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type TimeWeights", field.Name) +} + +func (ec *executionContext) childFields_Topology(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "node": + return ec.fieldContext_Topology_node(ctx, field) + case "socket": + return ec.fieldContext_Topology_socket(ctx, field) + case "memoryDomain": + return ec.fieldContext_Topology_memoryDomain(ctx, field) + case "die": + return ec.fieldContext_Topology_die(ctx, field) + case "core": + return ec.fieldContext_Topology_core(ctx, field) + case "accelerators": + return ec.fieldContext_Topology_accelerators(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Topology", field.Name) +} + +func (ec *executionContext) childFields_Unit(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "base": + return ec.fieldContext_Unit_base(ctx, field) + case "prefix": + return ec.fieldContext_Unit_prefix(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Unit", field.Name) +} + +func (ec *executionContext) childFields_User(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "username": + return ec.fieldContext_User_username(ctx, field) + case "name": + return ec.fieldContext_User_name(ctx, field) + case "email": + return ec.fieldContext_User_email(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type User", field.Name) +} + +func (ec *executionContext) childFields___Directive(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___Directive_name(ctx, field) + case "description": + return ec.fieldContext___Directive_description(ctx, field) + case "isRepeatable": + return ec.fieldContext___Directive_isRepeatable(ctx, field) + case "locations": + return ec.fieldContext___Directive_locations(ctx, field) + case "args": + return ec.fieldContext___Directive_args(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Directive", field.Name) +} + +func (ec *executionContext) childFields___EnumValue(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___EnumValue_name(ctx, field) + case "description": + return ec.fieldContext___EnumValue_description(ctx, field) + case "isDeprecated": + return ec.fieldContext___EnumValue_isDeprecated(ctx, field) + case "deprecationReason": + return ec.fieldContext___EnumValue_deprecationReason(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __EnumValue", field.Name) +} + +func (ec *executionContext) childFields___Field(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___Field_name(ctx, field) + case "description": + return ec.fieldContext___Field_description(ctx, field) + case "args": + return ec.fieldContext___Field_args(ctx, field) + case "type": + return ec.fieldContext___Field_type(ctx, field) + case "isDeprecated": + return ec.fieldContext___Field_isDeprecated(ctx, field) + case "deprecationReason": + return ec.fieldContext___Field_deprecationReason(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Field", field.Name) +} + +func (ec *executionContext) childFields___InputValue(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "name": + return ec.fieldContext___InputValue_name(ctx, field) + case "description": + return ec.fieldContext___InputValue_description(ctx, field) + case "type": + return ec.fieldContext___InputValue_type(ctx, field) + case "defaultValue": + return ec.fieldContext___InputValue_defaultValue(ctx, field) + case "isDeprecated": + return ec.fieldContext___InputValue_isDeprecated(ctx, field) + case "deprecationReason": + return ec.fieldContext___InputValue_deprecationReason(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __InputValue", field.Name) +} + +func (ec *executionContext) childFields___Schema(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "description": + return ec.fieldContext___Schema_description(ctx, field) + case "types": + return ec.fieldContext___Schema_types(ctx, field) + case "queryType": + return ec.fieldContext___Schema_queryType(ctx, field) + case "mutationType": + return ec.fieldContext___Schema_mutationType(ctx, field) + case "subscriptionType": + return ec.fieldContext___Schema_subscriptionType(ctx, field) + case "directives": + return ec.fieldContext___Schema_directives(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Schema", field.Name) +} + +func (ec *executionContext) childFields___Type(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "kind": + return ec.fieldContext___Type_kind(ctx, field) + case "name": + return ec.fieldContext___Type_name(ctx, field) + case "description": + return ec.fieldContext___Type_description(ctx, field) + case "specifiedByURL": + return ec.fieldContext___Type_specifiedByURL(ctx, field) + case "fields": + return ec.fieldContext___Type_fields(ctx, field) + case "interfaces": + return ec.fieldContext___Type_interfaces(ctx, field) + case "possibleTypes": + return ec.fieldContext___Type_possibleTypes(ctx, field) + case "enumValues": + return ec.fieldContext___Type_enumValues(ctx, field) + case "inputFields": + return ec.fieldContext___Type_inputFields(ctx, field) + case "ofType": + return ec.fieldContext___Type_ofType(ctx, field) + case "isOneOf": + return ec.fieldContext___Type_isOneOf(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) +} + // endregion ************************** generated!.gotpl ************************** // region ***************************** args.gotpl ***************************** @@ -2855,12 +3668,18 @@ var parsedSchema = gqlparser.MustLoadSchema(sources...) func (ec *executionContext) field_Mutation_addTagsToJob_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "job", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "job", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } args["job"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "tagIds", ec.unmarshalNID2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "tagIds", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalNID2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -2871,17 +3690,26 @@ func (ec *executionContext) field_Mutation_addTagsToJob_args(ctx context.Context func (ec *executionContext) field_Mutation_createTag_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "type", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "type", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["type"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "name", ec.unmarshalNString2string) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "name", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["name"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scope", ec.unmarshalNString2string) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scope", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } @@ -2892,7 +3720,10 @@ func (ec *executionContext) field_Mutation_createTag_args(ctx context.Context, r func (ec *executionContext) field_Mutation_deleteTag_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } @@ -2903,7 +3734,10 @@ func (ec *executionContext) field_Mutation_deleteTag_args(ctx context.Context, r func (ec *executionContext) field_Mutation_removeTagFromList_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "tagIds", ec.unmarshalNID2ᚕstringᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "tagIds", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalNID2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -2914,12 +3748,18 @@ func (ec *executionContext) field_Mutation_removeTagFromList_args(ctx context.Co func (ec *executionContext) field_Mutation_removeTagsFromJob_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "job", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "job", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } args["job"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "tagIds", ec.unmarshalNID2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "tagIds", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalNID2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -2930,12 +3770,18 @@ func (ec *executionContext) field_Mutation_removeTagsFromJob_args(ctx context.Co func (ec *executionContext) field_Mutation_updateConfiguration_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "name", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "name", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["name"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "value", ec.unmarshalNString2string) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "value", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } @@ -2946,7 +3792,10 @@ func (ec *executionContext) field_Mutation_updateConfiguration_args(ctx context. func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "name", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "name", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } @@ -2957,7 +3806,10 @@ func (ec *executionContext) field_Query___type_args(ctx context.Context, rawArgs func (ec *executionContext) field_Query_allocatedNodes_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } @@ -2968,22 +3820,34 @@ func (ec *executionContext) field_Query_allocatedNodes_args(ctx context.Context, func (ec *executionContext) field_Query_clusterMetrics_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["cluster"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } args["metrics"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "from", ec.unmarshalNTime2timeᚐTime) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "from", + func(ctx context.Context, v any) (time.Time, error) { + return ec.unmarshalNTime2timeᚐTime(ctx, v) + }) if err != nil { return nil, err } args["from"] = arg2 - arg3, err := graphql.ProcessArgField(ctx, rawArgs, "to", ec.unmarshalNTime2timeᚐTime) + arg3, err := graphql.ProcessArgField(ctx, rawArgs, "to", + func(ctx context.Context, v any) (time.Time, error) { + return ec.unmarshalNTime2timeᚐTime(ctx, v) + }) if err != nil { return nil, err } @@ -2994,22 +3858,34 @@ func (ec *executionContext) field_Query_clusterMetrics_args(ctx context.Context, func (ec *executionContext) field_Query_jobMetrics_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } args["id"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } args["metrics"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", + func(ctx context.Context, v any) ([]schema.MetricScope, error) { + return ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ(ctx, v) + }) if err != nil { return nil, err } args["scopes"] = arg2 - arg3, err := graphql.ProcessArgField(ctx, rawArgs, "resolution", ec.unmarshalOInt2ᚖint) + arg3, err := graphql.ProcessArgField(ctx, rawArgs, "resolution", + func(ctx context.Context, v any) (*int, error) { + return ec.unmarshalOInt2ᚖint(ctx, v) + }) if err != nil { return nil, err } @@ -3025,12 +3901,18 @@ func (ec *executionContext) field_Query_jobMetrics_args(ctx context.Context, raw func (ec *executionContext) field_Query_jobStats_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } args["id"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -3041,7 +3923,10 @@ func (ec *executionContext) field_Query_jobStats_args(ctx context.Context, rawAr func (ec *executionContext) field_Query_job_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } @@ -3052,12 +3937,18 @@ func (ec *executionContext) field_Query_job_args(ctx context.Context, rawArgs ma func (ec *executionContext) field_Query_jobsFootprints_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.JobFilter, error) { + return ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalNString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalNString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -3068,12 +3959,18 @@ func (ec *executionContext) field_Query_jobsFootprints_args(ctx context.Context, func (ec *executionContext) field_Query_jobsMetricStats_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.JobFilter, error) { + return ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -3084,37 +3981,58 @@ func (ec *executionContext) field_Query_jobsMetricStats_args(ctx context.Context func (ec *executionContext) field_Query_jobsStatistics_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.JobFilter, error) { + return ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } args["metrics"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "page", ec.unmarshalOPageRequest2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐPageRequest) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "page", + func(ctx context.Context, v any) (*model.PageRequest, error) { + return ec.unmarshalOPageRequest2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐPageRequest(ctx, v) + }) if err != nil { return nil, err } args["page"] = arg2 - arg3, err := graphql.ProcessArgField(ctx, rawArgs, "sortBy", ec.unmarshalOSortByAggregate2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐSortByAggregate) + arg3, err := graphql.ProcessArgField(ctx, rawArgs, "sortBy", + func(ctx context.Context, v any) (*model.SortByAggregate, error) { + return ec.unmarshalOSortByAggregate2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐSortByAggregate(ctx, v) + }) if err != nil { return nil, err } args["sortBy"] = arg3 - arg4, err := graphql.ProcessArgField(ctx, rawArgs, "groupBy", ec.unmarshalOAggregate2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐAggregate) + arg4, err := graphql.ProcessArgField(ctx, rawArgs, "groupBy", + func(ctx context.Context, v any) (*model.Aggregate, error) { + return ec.unmarshalOAggregate2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐAggregate(ctx, v) + }) if err != nil { return nil, err } args["groupBy"] = arg4 - arg5, err := graphql.ProcessArgField(ctx, rawArgs, "numDurationBins", ec.unmarshalOString2ᚖstring) + arg5, err := graphql.ProcessArgField(ctx, rawArgs, "numDurationBins", + func(ctx context.Context, v any) (*string, error) { + return ec.unmarshalOString2ᚖstring(ctx, v) + }) if err != nil { return nil, err } args["numDurationBins"] = arg5 - arg6, err := graphql.ProcessArgField(ctx, rawArgs, "numMetricBins", ec.unmarshalOInt2ᚖint) + arg6, err := graphql.ProcessArgField(ctx, rawArgs, "numMetricBins", + func(ctx context.Context, v any) (*int, error) { + return ec.unmarshalOInt2ᚖint(ctx, v) + }) if err != nil { return nil, err } @@ -3125,17 +4043,26 @@ func (ec *executionContext) field_Query_jobsStatistics_args(ctx context.Context, func (ec *executionContext) field_Query_jobs_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.JobFilter, error) { + return ec.unmarshalOJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "page", ec.unmarshalOPageRequest2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐPageRequest) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "page", + func(ctx context.Context, v any) (*model.PageRequest, error) { + return ec.unmarshalOPageRequest2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐPageRequest(ctx, v) + }) if err != nil { return nil, err } args["page"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "order", ec.unmarshalOOrderByInput2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐOrderByInput) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "order", + func(ctx context.Context, v any) (*model.OrderByInput, error) { + return ec.unmarshalOOrderByInput2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐOrderByInput(ctx, v) + }) if err != nil { return nil, err } @@ -3146,52 +4073,82 @@ func (ec *executionContext) field_Query_jobs_args(ctx context.Context, rawArgs m func (ec *executionContext) field_Query_nodeMetricsList_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["cluster"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "subCluster", ec.unmarshalNString2string) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "subCluster", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["subCluster"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "stateFilter", ec.unmarshalNString2string) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "stateFilter", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["stateFilter"] = arg2 - arg3, err := graphql.ProcessArgField(ctx, rawArgs, "nodeFilter", ec.unmarshalNString2string) + arg3, err := graphql.ProcessArgField(ctx, rawArgs, "nodeFilter", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["nodeFilter"] = arg3 - arg4, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ) + arg4, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", + func(ctx context.Context, v any) ([]schema.MetricScope, error) { + return ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ(ctx, v) + }) if err != nil { return nil, err } args["scopes"] = arg4 - arg5, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg5, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } args["metrics"] = arg5 - arg6, err := graphql.ProcessArgField(ctx, rawArgs, "from", ec.unmarshalNTime2timeᚐTime) + arg6, err := graphql.ProcessArgField(ctx, rawArgs, "from", + func(ctx context.Context, v any) (time.Time, error) { + return ec.unmarshalNTime2timeᚐTime(ctx, v) + }) if err != nil { return nil, err } args["from"] = arg6 - arg7, err := graphql.ProcessArgField(ctx, rawArgs, "to", ec.unmarshalNTime2timeᚐTime) + arg7, err := graphql.ProcessArgField(ctx, rawArgs, "to", + func(ctx context.Context, v any) (time.Time, error) { + return ec.unmarshalNTime2timeᚐTime(ctx, v) + }) if err != nil { return nil, err } args["to"] = arg7 - arg8, err := graphql.ProcessArgField(ctx, rawArgs, "page", ec.unmarshalOPageRequest2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐPageRequest) + arg8, err := graphql.ProcessArgField(ctx, rawArgs, "page", + func(ctx context.Context, v any) (*model.PageRequest, error) { + return ec.unmarshalOPageRequest2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐPageRequest(ctx, v) + }) if err != nil { return nil, err } args["page"] = arg8 - arg9, err := graphql.ProcessArgField(ctx, rawArgs, "resolution", ec.unmarshalOInt2ᚖint) + arg9, err := graphql.ProcessArgField(ctx, rawArgs, "resolution", + func(ctx context.Context, v any) (*int, error) { + return ec.unmarshalOInt2ᚖint(ctx, v) + }) if err != nil { return nil, err } @@ -3207,32 +4164,50 @@ func (ec *executionContext) field_Query_nodeMetricsList_args(ctx context.Context func (ec *executionContext) field_Query_nodeMetrics_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "cluster", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } args["cluster"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "nodes", ec.unmarshalOString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "nodes", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } args["nodes"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", + func(ctx context.Context, v any) ([]schema.MetricScope, error) { + return ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ(ctx, v) + }) if err != nil { return nil, err } args["scopes"] = arg2 - arg3, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg3, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } args["metrics"] = arg3 - arg4, err := graphql.ProcessArgField(ctx, rawArgs, "from", ec.unmarshalNTime2timeᚐTime) + arg4, err := graphql.ProcessArgField(ctx, rawArgs, "from", + func(ctx context.Context, v any) (time.Time, error) { + return ec.unmarshalNTime2timeᚐTime(ctx, v) + }) if err != nil { return nil, err } args["from"] = arg4 - arg5, err := graphql.ProcessArgField(ctx, rawArgs, "to", ec.unmarshalNTime2timeᚐTime) + arg5, err := graphql.ProcessArgField(ctx, rawArgs, "to", + func(ctx context.Context, v any) (time.Time, error) { + return ec.unmarshalNTime2timeᚐTime(ctx, v) + }) if err != nil { return nil, err } @@ -3243,12 +4218,18 @@ func (ec *executionContext) field_Query_nodeMetrics_args(ctx context.Context, ra func (ec *executionContext) field_Query_nodeStatesTimed_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.NodeFilter, error) { + return ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "type", ec.unmarshalNString2string) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "type", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } @@ -3259,7 +4240,10 @@ func (ec *executionContext) field_Query_nodeStatesTimed_args(ctx context.Context func (ec *executionContext) field_Query_nodeStates_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.NodeFilter, error) { + return ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -3270,7 +4254,10 @@ func (ec *executionContext) field_Query_nodeStates_args(ctx context.Context, raw func (ec *executionContext) field_Query_node_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } @@ -3281,12 +4268,18 @@ func (ec *executionContext) field_Query_node_args(ctx context.Context, rawArgs m func (ec *executionContext) field_Query_nodesWithMeta_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.NodeFilter, error) { + return ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "order", ec.unmarshalOOrderByInput2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐOrderByInput) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "order", + func(ctx context.Context, v any) (*model.OrderByInput, error) { + return ec.unmarshalOOrderByInput2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐOrderByInput(ctx, v) + }) if err != nil { return nil, err } @@ -3297,12 +4290,18 @@ func (ec *executionContext) field_Query_nodesWithMeta_args(ctx context.Context, func (ec *executionContext) field_Query_nodes_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.NodeFilter, error) { + return ec.unmarshalONodeFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "order", ec.unmarshalOOrderByInput2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐOrderByInput) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "order", + func(ctx context.Context, v any) (*model.OrderByInput, error) { + return ec.unmarshalOOrderByInput2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐOrderByInput(ctx, v) + }) if err != nil { return nil, err } @@ -3313,37 +4312,58 @@ func (ec *executionContext) field_Query_nodes_args(ctx context.Context, rawArgs func (ec *executionContext) field_Query_rooflineHeatmap_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", ec.unmarshalNJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "filter", + func(ctx context.Context, v any) ([]*model.JobFilter, error) { + return ec.unmarshalNJobFilter2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobFilterᚄ(ctx, v) + }) if err != nil { return nil, err } args["filter"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "rows", ec.unmarshalNInt2int) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "rows", + func(ctx context.Context, v any) (int, error) { + return ec.unmarshalNInt2int(ctx, v) + }) if err != nil { return nil, err } args["rows"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "cols", ec.unmarshalNInt2int) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "cols", + func(ctx context.Context, v any) (int, error) { + return ec.unmarshalNInt2int(ctx, v) + }) if err != nil { return nil, err } args["cols"] = arg2 - arg3, err := graphql.ProcessArgField(ctx, rawArgs, "minX", ec.unmarshalNFloat2float64) + arg3, err := graphql.ProcessArgField(ctx, rawArgs, "minX", + func(ctx context.Context, v any) (float64, error) { + return ec.unmarshalNFloat2float64(ctx, v) + }) if err != nil { return nil, err } args["minX"] = arg3 - arg4, err := graphql.ProcessArgField(ctx, rawArgs, "minY", ec.unmarshalNFloat2float64) + arg4, err := graphql.ProcessArgField(ctx, rawArgs, "minY", + func(ctx context.Context, v any) (float64, error) { + return ec.unmarshalNFloat2float64(ctx, v) + }) if err != nil { return nil, err } args["minY"] = arg4 - arg5, err := graphql.ProcessArgField(ctx, rawArgs, "maxX", ec.unmarshalNFloat2float64) + arg5, err := graphql.ProcessArgField(ctx, rawArgs, "maxX", + func(ctx context.Context, v any) (float64, error) { + return ec.unmarshalNFloat2float64(ctx, v) + }) if err != nil { return nil, err } args["maxX"] = arg5 - arg6, err := graphql.ProcessArgField(ctx, rawArgs, "maxY", ec.unmarshalNFloat2float64) + arg6, err := graphql.ProcessArgField(ctx, rawArgs, "maxY", + func(ctx context.Context, v any) (float64, error) { + return ec.unmarshalNFloat2float64(ctx, v) + }) if err != nil { return nil, err } @@ -3354,17 +4374,26 @@ func (ec *executionContext) field_Query_rooflineHeatmap_args(ctx context.Context func (ec *executionContext) field_Query_scopedJobStats_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", ec.unmarshalNID2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "id", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNID2string(ctx, v) + }) if err != nil { return nil, err } args["id"] = arg0 - arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", ec.unmarshalOString2ᚕstringᚄ) + arg1, err := graphql.ProcessArgField(ctx, rawArgs, "metrics", + func(ctx context.Context, v any) ([]string, error) { + return ec.unmarshalOString2ᚕstringᚄ(ctx, v) + }) if err != nil { return nil, err } args["metrics"] = arg1 - arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ) + arg2, err := graphql.ProcessArgField(ctx, rawArgs, "scopes", + func(ctx context.Context, v any) ([]schema.MetricScope, error) { + return ec.unmarshalOMetricScope2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScopeᚄ(ctx, v) + }) if err != nil { return nil, err } @@ -3375,7 +4404,10 @@ func (ec *executionContext) field_Query_scopedJobStats_args(ctx context.Context, func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "username", ec.unmarshalNString2string) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "username", + func(ctx context.Context, v any) (string, error) { + return ec.unmarshalNString2string(ctx, v) + }) if err != nil { return nil, err } @@ -3386,7 +4418,10 @@ func (ec *executionContext) field_Query_user_args(ctx context.Context, rawArgs m func (ec *executionContext) field___Directive_args_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", ec.unmarshalOBoolean2ᚖbool) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", + func(ctx context.Context, v any) (*bool, error) { + return ec.unmarshalOBoolean2ᚖbool(ctx, v) + }) if err != nil { return nil, err } @@ -3397,7 +4432,10 @@ func (ec *executionContext) field___Directive_args_args(ctx context.Context, raw func (ec *executionContext) field___Field_args_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", ec.unmarshalOBoolean2ᚖbool) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", + func(ctx context.Context, v any) (*bool, error) { + return ec.unmarshalOBoolean2ᚖbool(ctx, v) + }) if err != nil { return nil, err } @@ -3408,7 +4446,10 @@ func (ec *executionContext) field___Field_args_args(ctx context.Context, rawArgs func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", ec.unmarshalOBoolean2bool) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", + func(ctx context.Context, v any) (bool, error) { + return ec.unmarshalOBoolean2bool(ctx, v) + }) if err != nil { return nil, err } @@ -3419,7 +4460,10 @@ func (ec *executionContext) field___Type_enumValues_args(ctx context.Context, ra func (ec *executionContext) field___Type_fields_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} - arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", ec.unmarshalOBoolean2bool) + arg0, err := graphql.ProcessArgField(ctx, rawArgs, "includeDeprecated", + func(ctx context.Context, v any) (bool, error) { + return ec.unmarshalOBoolean2bool(ctx, v) + }) if err != nil { return nil, err } @@ -3440,28 +4484,22 @@ func (ec *executionContext) _Accelerator_id(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_Accelerator_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Accelerator_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Accelerator_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Accelerator", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Accelerator", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Accelerator_type(ctx context.Context, field graphql.CollectedField, obj *schema.Accelerator) (ret graphql.Marshaler) { @@ -3469,28 +4507,22 @@ func (ec *executionContext) _Accelerator_type(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_Accelerator_type, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Accelerator_type(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Type, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Accelerator_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Accelerator", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Accelerator", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Accelerator_model(ctx context.Context, field graphql.CollectedField, obj *schema.Accelerator) (ret graphql.Marshaler) { @@ -3498,28 +4530,22 @@ func (ec *executionContext) _Accelerator_model(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_Accelerator_model, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Accelerator_model(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Model, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Accelerator_model(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Accelerator", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Accelerator", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Cluster_name(ctx context.Context, field graphql.CollectedField, obj *schema.Cluster) (ret graphql.Marshaler) { @@ -3527,28 +4553,22 @@ func (ec *executionContext) _Cluster_name(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Cluster_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Cluster_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Cluster_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Cluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Cluster", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Cluster_partitions(ctx context.Context, field graphql.CollectedField, obj *schema.Cluster) (ret graphql.Marshaler) { @@ -3556,28 +4576,22 @@ func (ec *executionContext) _Cluster_partitions(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Cluster_partitions, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Cluster_partitions(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Cluster().Partitions(ctx, obj) }, nil, - ec.marshalNString2ᚕstringᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []string) graphql.Marshaler { + return ec.marshalNString2ᚕstringᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Cluster_partitions(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Cluster", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Cluster", field, true, true, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Cluster_subClusters(ctx context.Context, field graphql.CollectedField, obj *schema.Cluster) (ret graphql.Marshaler) { @@ -3585,17 +4599,20 @@ func (ec *executionContext) _Cluster_subClusters(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_Cluster_subClusters, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Cluster_subClusters(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubClusters, nil }, nil, - ec.marshalNSubCluster2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSubClusterᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.SubCluster) graphql.Marshaler { + return ec.marshalNSubCluster2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSubClusterᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Cluster_subClusters(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Cluster", @@ -3603,35 +4620,7 @@ func (ec *executionContext) fieldContext_Cluster_subClusters(_ context.Context, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_SubCluster_name(ctx, field) - case "nodes": - return ec.fieldContext_SubCluster_nodes(ctx, field) - case "numberOfNodes": - return ec.fieldContext_SubCluster_numberOfNodes(ctx, field) - case "processorType": - return ec.fieldContext_SubCluster_processorType(ctx, field) - case "socketsPerNode": - return ec.fieldContext_SubCluster_socketsPerNode(ctx, field) - case "coresPerSocket": - return ec.fieldContext_SubCluster_coresPerSocket(ctx, field) - case "threadsPerCore": - return ec.fieldContext_SubCluster_threadsPerCore(ctx, field) - case "flopRateScalar": - return ec.fieldContext_SubCluster_flopRateScalar(ctx, field) - case "flopRateSimd": - return ec.fieldContext_SubCluster_flopRateSimd(ctx, field) - case "memoryBandwidth": - return ec.fieldContext_SubCluster_memoryBandwidth(ctx, field) - case "topology": - return ec.fieldContext_SubCluster_topology(ctx, field) - case "metricConfig": - return ec.fieldContext_SubCluster_metricConfig(ctx, field) - case "footprint": - return ec.fieldContext_SubCluster_footprint(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type SubCluster", field.Name) + return ec.childFields_SubCluster(ctx, field) }, } return fc, nil @@ -3642,28 +4631,22 @@ func (ec *executionContext) _ClusterMetricWithName_name(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_ClusterMetricWithName_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterMetricWithName_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ClusterMetricWithName_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ClusterMetricWithName", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ClusterMetricWithName", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _ClusterMetricWithName_unit(ctx context.Context, field graphql.CollectedField, obj *model.ClusterMetricWithName) (ret graphql.Marshaler) { @@ -3671,17 +4654,20 @@ func (ec *executionContext) _ClusterMetricWithName_unit(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_ClusterMetricWithName_unit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterMetricWithName_unit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Unit, nil }, nil, - ec.marshalOUnit2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit, + func(ctx context.Context, selections ast.SelectionSet, v *schema.Unit) graphql.Marshaler { + return ec.marshalOUnit2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_ClusterMetricWithName_unit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ClusterMetricWithName", @@ -3689,13 +4675,7 @@ func (ec *executionContext) fieldContext_ClusterMetricWithName_unit(_ context.Co IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "base": - return ec.fieldContext_Unit_base(ctx, field) - case "prefix": - return ec.fieldContext_Unit_prefix(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Unit", field.Name) + return ec.childFields_Unit(ctx, field) }, } return fc, nil @@ -3706,28 +4686,22 @@ func (ec *executionContext) _ClusterMetricWithName_timestep(ctx context.Context, ctx, ec.OperationContext, field, - ec.fieldContext_ClusterMetricWithName_timestep, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterMetricWithName_timestep(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Timestep, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ClusterMetricWithName_timestep(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ClusterMetricWithName", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ClusterMetricWithName", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _ClusterMetricWithName_data(ctx context.Context, field graphql.CollectedField, obj *model.ClusterMetricWithName) (ret graphql.Marshaler) { @@ -3735,28 +4709,22 @@ func (ec *executionContext) _ClusterMetricWithName_data(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_ClusterMetricWithName_data, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterMetricWithName_data(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Data, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ClusterMetricWithName_data(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ClusterMetricWithName", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ClusterMetricWithName", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _ClusterMetrics_nodeCount(ctx context.Context, field graphql.CollectedField, obj *model.ClusterMetrics) (ret graphql.Marshaler) { @@ -3764,28 +4732,22 @@ func (ec *executionContext) _ClusterMetrics_nodeCount(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_ClusterMetrics_nodeCount, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterMetrics_nodeCount(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NodeCount, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ClusterMetrics_nodeCount(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ClusterMetrics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ClusterMetrics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _ClusterMetrics_metrics(ctx context.Context, field graphql.CollectedField, obj *model.ClusterMetrics) (ret graphql.Marshaler) { @@ -3793,17 +4755,20 @@ func (ec *executionContext) _ClusterMetrics_metrics(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_ClusterMetrics_metrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterMetrics_metrics(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Metrics, nil }, nil, - ec.marshalNClusterMetricWithName2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐClusterMetricWithNameᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.ClusterMetricWithName) graphql.Marshaler { + return ec.marshalNClusterMetricWithName2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐClusterMetricWithNameᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ClusterMetrics_metrics(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ClusterMetrics", @@ -3811,17 +4776,7 @@ func (ec *executionContext) fieldContext_ClusterMetrics_metrics(_ context.Contex IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_ClusterMetricWithName_name(ctx, field) - case "unit": - return ec.fieldContext_ClusterMetricWithName_unit(ctx, field) - case "timestep": - return ec.fieldContext_ClusterMetricWithName_timestep(ctx, field) - case "data": - return ec.fieldContext_ClusterMetricWithName_data(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type ClusterMetricWithName", field.Name) + return ec.childFields_ClusterMetricWithName(ctx, field) }, } return fc, nil @@ -3832,28 +4787,22 @@ func (ec *executionContext) _ClusterSupport_cluster(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_ClusterSupport_cluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterSupport_cluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Cluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ClusterSupport_cluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ClusterSupport", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ClusterSupport", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _ClusterSupport_subClusters(ctx context.Context, field graphql.CollectedField, obj *schema.ClusterSupport) (ret graphql.Marshaler) { @@ -3861,28 +4810,22 @@ func (ec *executionContext) _ClusterSupport_subClusters(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_ClusterSupport_subClusters, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ClusterSupport_subClusters(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubClusters, nil }, nil, - ec.marshalNString2ᚕstringᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []string) graphql.Marshaler { + return ec.marshalNString2ᚕstringᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ClusterSupport_subClusters(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ClusterSupport", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ClusterSupport", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Count_name(ctx context.Context, field graphql.CollectedField, obj *model.Count) (ret graphql.Marshaler) { @@ -3890,28 +4833,22 @@ func (ec *executionContext) _Count_name(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Count_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Count_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Count_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Count", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Count", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Count_count(ctx context.Context, field graphql.CollectedField, obj *model.Count) (ret graphql.Marshaler) { @@ -3919,28 +4856,22 @@ func (ec *executionContext) _Count_count(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext_Count_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Count_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Count_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Count", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Count", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _EnergyFootprintValue_hardware(ctx context.Context, field graphql.CollectedField, obj *model.EnergyFootprintValue) (ret graphql.Marshaler) { @@ -3948,28 +4879,22 @@ func (ec *executionContext) _EnergyFootprintValue_hardware(ctx context.Context, ctx, ec.OperationContext, field, - ec.fieldContext_EnergyFootprintValue_hardware, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_EnergyFootprintValue_hardware(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Hardware, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_EnergyFootprintValue_hardware(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "EnergyFootprintValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("EnergyFootprintValue", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _EnergyFootprintValue_metric(ctx context.Context, field graphql.CollectedField, obj *model.EnergyFootprintValue) (ret graphql.Marshaler) { @@ -3977,28 +4902,22 @@ func (ec *executionContext) _EnergyFootprintValue_metric(ctx context.Context, fi ctx, ec.OperationContext, field, - ec.fieldContext_EnergyFootprintValue_metric, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_EnergyFootprintValue_metric(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Metric, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_EnergyFootprintValue_metric(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "EnergyFootprintValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("EnergyFootprintValue", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _EnergyFootprintValue_value(ctx context.Context, field graphql.CollectedField, obj *model.EnergyFootprintValue) (ret graphql.Marshaler) { @@ -4006,28 +4925,22 @@ func (ec *executionContext) _EnergyFootprintValue_value(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_EnergyFootprintValue_value, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_EnergyFootprintValue_value(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Value, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_EnergyFootprintValue_value(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "EnergyFootprintValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("EnergyFootprintValue", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _FootprintValue_name(ctx context.Context, field graphql.CollectedField, obj *model.FootprintValue) (ret graphql.Marshaler) { @@ -4035,28 +4948,22 @@ func (ec *executionContext) _FootprintValue_name(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_FootprintValue_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_FootprintValue_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_FootprintValue_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "FootprintValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("FootprintValue", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _FootprintValue_stat(ctx context.Context, field graphql.CollectedField, obj *model.FootprintValue) (ret graphql.Marshaler) { @@ -4064,28 +4971,22 @@ func (ec *executionContext) _FootprintValue_stat(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_FootprintValue_stat, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_FootprintValue_stat(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Stat, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_FootprintValue_stat(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "FootprintValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("FootprintValue", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _FootprintValue_value(ctx context.Context, field graphql.CollectedField, obj *model.FootprintValue) (ret graphql.Marshaler) { @@ -4093,28 +4994,22 @@ func (ec *executionContext) _FootprintValue_value(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_FootprintValue_value, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_FootprintValue_value(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Value, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_FootprintValue_value(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "FootprintValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("FootprintValue", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _Footprints_timeWeights(ctx context.Context, field graphql.CollectedField, obj *model.Footprints) (ret graphql.Marshaler) { @@ -4122,17 +5017,20 @@ func (ec *executionContext) _Footprints_timeWeights(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_Footprints_timeWeights, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Footprints_timeWeights(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TimeWeights, nil }, nil, - ec.marshalNTimeWeights2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐTimeWeights, + func(ctx context.Context, selections ast.SelectionSet, v *model.TimeWeights) graphql.Marshaler { + return ec.marshalNTimeWeights2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐTimeWeights(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Footprints_timeWeights(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Footprints", @@ -4140,15 +5038,7 @@ func (ec *executionContext) fieldContext_Footprints_timeWeights(_ context.Contex IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "nodeHours": - return ec.fieldContext_TimeWeights_nodeHours(ctx, field) - case "accHours": - return ec.fieldContext_TimeWeights_accHours(ctx, field) - case "coreHours": - return ec.fieldContext_TimeWeights_coreHours(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type TimeWeights", field.Name) + return ec.childFields_TimeWeights(ctx, field) }, } return fc, nil @@ -4159,17 +5049,20 @@ func (ec *executionContext) _Footprints_metrics(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Footprints_metrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Footprints_metrics(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Metrics, nil }, nil, - ec.marshalNMetricFootprints2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐMetricFootprintsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.MetricFootprints) graphql.Marshaler { + return ec.marshalNMetricFootprints2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐMetricFootprintsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Footprints_metrics(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Footprints", @@ -4177,13 +5070,7 @@ func (ec *executionContext) fieldContext_Footprints_metrics(_ context.Context, f IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "metric": - return ec.fieldContext_MetricFootprints_metric(ctx, field) - case "data": - return ec.fieldContext_MetricFootprints_data(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricFootprints", field.Name) + return ec.childFields_MetricFootprints(ctx, field) }, } return fc, nil @@ -4194,28 +5081,22 @@ func (ec *executionContext) _GlobalMetricListItem_name(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_GlobalMetricListItem_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_GlobalMetricListItem_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_GlobalMetricListItem_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "GlobalMetricListItem", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("GlobalMetricListItem", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _GlobalMetricListItem_unit(ctx context.Context, field graphql.CollectedField, obj *schema.GlobalMetricListItem) (ret graphql.Marshaler) { @@ -4223,17 +5104,20 @@ func (ec *executionContext) _GlobalMetricListItem_unit(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_GlobalMetricListItem_unit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_GlobalMetricListItem_unit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Unit, nil }, nil, - ec.marshalNUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit, + func(ctx context.Context, selections ast.SelectionSet, v schema.Unit) graphql.Marshaler { + return ec.marshalNUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_GlobalMetricListItem_unit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GlobalMetricListItem", @@ -4241,13 +5125,7 @@ func (ec *executionContext) fieldContext_GlobalMetricListItem_unit(_ context.Con IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "base": - return ec.fieldContext_Unit_base(ctx, field) - case "prefix": - return ec.fieldContext_Unit_prefix(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Unit", field.Name) + return ec.childFields_Unit(ctx, field) }, } return fc, nil @@ -4258,28 +5136,22 @@ func (ec *executionContext) _GlobalMetricListItem_scope(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_GlobalMetricListItem_scope, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_GlobalMetricListItem_scope(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Scope, nil }, nil, - ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricScope) graphql.Marshaler { + return ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_GlobalMetricListItem_scope(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "GlobalMetricListItem", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MetricScope does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("GlobalMetricListItem", field, false, false, errors.New("field of type MetricScope does not have child fields")) } func (ec *executionContext) _GlobalMetricListItem_footprint(ctx context.Context, field graphql.CollectedField, obj *schema.GlobalMetricListItem) (ret graphql.Marshaler) { @@ -4287,28 +5159,22 @@ func (ec *executionContext) _GlobalMetricListItem_footprint(ctx context.Context, ctx, ec.OperationContext, field, - ec.fieldContext_GlobalMetricListItem_footprint, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_GlobalMetricListItem_footprint(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Footprint, nil }, nil, - ec.marshalOString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalOString2string(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_GlobalMetricListItem_footprint(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "GlobalMetricListItem", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("GlobalMetricListItem", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _GlobalMetricListItem_availability(ctx context.Context, field graphql.CollectedField, obj *schema.GlobalMetricListItem) (ret graphql.Marshaler) { @@ -4316,17 +5182,20 @@ func (ec *executionContext) _GlobalMetricListItem_availability(ctx context.Conte ctx, ec.OperationContext, field, - ec.fieldContext_GlobalMetricListItem_availability, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_GlobalMetricListItem_availability(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Availability, nil }, nil, - ec.marshalNClusterSupport2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐClusterSupportᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.ClusterSupport) graphql.Marshaler { + return ec.marshalNClusterSupport2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐClusterSupportᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_GlobalMetricListItem_availability(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "GlobalMetricListItem", @@ -4334,13 +5203,7 @@ func (ec *executionContext) fieldContext_GlobalMetricListItem_availability(_ con IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "cluster": - return ec.fieldContext_ClusterSupport_cluster(ctx, field) - case "subClusters": - return ec.fieldContext_ClusterSupport_subClusters(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type ClusterSupport", field.Name) + return ec.childFields_ClusterSupport(ctx, field) }, } return fc, nil @@ -4351,28 +5214,22 @@ func (ec *executionContext) _HistoPoint_count(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_HistoPoint_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_HistoPoint_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_HistoPoint_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "HistoPoint", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("HistoPoint", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _HistoPoint_value(ctx context.Context, field graphql.CollectedField, obj *model.HistoPoint) (ret graphql.Marshaler) { @@ -4380,28 +5237,22 @@ func (ec *executionContext) _HistoPoint_value(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_HistoPoint_value, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_HistoPoint_value(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Value, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_HistoPoint_value(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "HistoPoint", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("HistoPoint", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _IntRangeOutput_from(ctx context.Context, field graphql.CollectedField, obj *model.IntRangeOutput) (ret graphql.Marshaler) { @@ -4409,28 +5260,22 @@ func (ec *executionContext) _IntRangeOutput_from(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_IntRangeOutput_from, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_IntRangeOutput_from(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.From, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_IntRangeOutput_from(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "IntRangeOutput", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("IntRangeOutput", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _IntRangeOutput_to(ctx context.Context, field graphql.CollectedField, obj *model.IntRangeOutput) (ret graphql.Marshaler) { @@ -4438,28 +5283,22 @@ func (ec *executionContext) _IntRangeOutput_to(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_IntRangeOutput_to, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_IntRangeOutput_to(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.To, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_IntRangeOutput_to(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "IntRangeOutput", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("IntRangeOutput", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_id(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4467,28 +5306,22 @@ func (ec *executionContext) _Job_id(ctx context.Context, field graphql.Collected ctx, ec.OperationContext, field, - ec.fieldContext_Job_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalNID2ᚖint64, + func(ctx context.Context, selections ast.SelectionSet, v *int64) graphql.Marshaler { + return ec.marshalNID2ᚖint64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type ID does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type ID does not have child fields")) } func (ec *executionContext) _Job_jobId(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4496,28 +5329,22 @@ func (ec *executionContext) _Job_jobId(ctx context.Context, field graphql.Collec ctx, ec.OperationContext, field, - ec.fieldContext_Job_jobId, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_jobId(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.JobID, nil }, nil, - ec.marshalNInt2int64, + func(ctx context.Context, selections ast.SelectionSet, v int64) graphql.Marshaler { + return ec.marshalNInt2int64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_jobId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_user(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4525,28 +5352,22 @@ func (ec *executionContext) _Job_user(ctx context.Context, field graphql.Collect ctx, ec.OperationContext, field, - ec.fieldContext_Job_user, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_user(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.User, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_user(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Job_project(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4554,28 +5375,22 @@ func (ec *executionContext) _Job_project(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext_Job_project, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_project(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Project, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_project(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Job_cluster(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4583,28 +5398,22 @@ func (ec *executionContext) _Job_cluster(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext_Job_cluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_cluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Cluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_cluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Job_subCluster(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4612,28 +5421,22 @@ func (ec *executionContext) _Job_subCluster(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_Job_subCluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_subCluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubCluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_subCluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Job_startTime(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4641,28 +5444,22 @@ func (ec *executionContext) _Job_startTime(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Job_startTime, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_startTime(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Job().StartTime(ctx, obj) }, nil, - ec.marshalNTime2ᚖtimeᚐTime, + func(ctx context.Context, selections ast.SelectionSet, v *time.Time) graphql.Marshaler { + return ec.marshalNTime2ᚖtimeᚐTime(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_startTime(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Time does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, true, true, errors.New("field of type Time does not have child fields")) } func (ec *executionContext) _Job_duration(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4670,28 +5467,22 @@ func (ec *executionContext) _Job_duration(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Job_duration, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_duration(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Duration, nil }, nil, - ec.marshalNInt2int32, + func(ctx context.Context, selections ast.SelectionSet, v int32) graphql.Marshaler { + return ec.marshalNInt2int32(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_duration(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_walltime(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4699,28 +5490,22 @@ func (ec *executionContext) _Job_walltime(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Job_walltime, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_walltime(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Walltime, nil }, nil, - ec.marshalNInt2int64, + func(ctx context.Context, selections ast.SelectionSet, v int64) graphql.Marshaler { + return ec.marshalNInt2int64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_walltime(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_numNodes(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4728,28 +5513,22 @@ func (ec *executionContext) _Job_numNodes(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Job_numNodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_numNodes(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NumNodes, nil }, nil, - ec.marshalNInt2int32, + func(ctx context.Context, selections ast.SelectionSet, v int32) graphql.Marshaler { + return ec.marshalNInt2int32(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_numNodes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_numHWThreads(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4757,28 +5536,22 @@ func (ec *executionContext) _Job_numHWThreads(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_Job_numHWThreads, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_numHWThreads(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NumHWThreads, nil }, nil, - ec.marshalNInt2int32, + func(ctx context.Context, selections ast.SelectionSet, v int32) graphql.Marshaler { + return ec.marshalNInt2int32(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_numHWThreads(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_numAcc(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4786,28 +5559,22 @@ func (ec *executionContext) _Job_numAcc(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Job_numAcc, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_numAcc(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NumAcc, nil }, nil, - ec.marshalNInt2int32, + func(ctx context.Context, selections ast.SelectionSet, v int32) graphql.Marshaler { + return ec.marshalNInt2int32(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_numAcc(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_energy(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4815,28 +5582,22 @@ func (ec *executionContext) _Job_energy(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Job_energy, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_energy(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Energy, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_energy(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _Job_SMT(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4844,28 +5605,22 @@ func (ec *executionContext) _Job_SMT(ctx context.Context, field graphql.Collecte ctx, ec.OperationContext, field, - ec.fieldContext_Job_SMT, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_SMT(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SMT, nil }, nil, - ec.marshalNInt2int32, + func(ctx context.Context, selections ast.SelectionSet, v int32) graphql.Marshaler { + return ec.marshalNInt2int32(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_SMT(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_shared(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4873,28 +5628,22 @@ func (ec *executionContext) _Job_shared(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Job_shared, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_shared(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Shared, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_shared(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Job_partition(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4902,28 +5651,22 @@ func (ec *executionContext) _Job_partition(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Job_partition, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_partition(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Partition, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_partition(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Job_arrayJobId(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4931,28 +5674,22 @@ func (ec *executionContext) _Job_arrayJobId(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_Job_arrayJobId, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_arrayJobId(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ArrayJobID, nil }, nil, - ec.marshalNInt2int64, + func(ctx context.Context, selections ast.SelectionSet, v int64) graphql.Marshaler { + return ec.marshalNInt2int64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_arrayJobId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_monitoringStatus(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4960,28 +5697,22 @@ func (ec *executionContext) _Job_monitoringStatus(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_Job_monitoringStatus, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_monitoringStatus(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.MonitoringStatus, nil }, nil, - ec.marshalNInt2int32, + func(ctx context.Context, selections ast.SelectionSet, v int32) graphql.Marshaler { + return ec.marshalNInt2int32(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_monitoringStatus(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Job_state(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -4989,28 +5720,22 @@ func (ec *executionContext) _Job_state(ctx context.Context, field graphql.Collec ctx, ec.OperationContext, field, - ec.fieldContext_Job_state, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_state(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.State, nil }, nil, - ec.marshalNJobState2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJobState, + func(ctx context.Context, selections ast.SelectionSet, v schema.JobState) graphql.Marshaler { + return ec.marshalNJobState2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJobState(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_state(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type JobState does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, false, false, errors.New("field of type JobState does not have child fields")) } func (ec *executionContext) _Job_tags(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -5018,17 +5743,20 @@ func (ec *executionContext) _Job_tags(ctx context.Context, field graphql.Collect ctx, ec.OperationContext, field, - ec.fieldContext_Job_tags, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_tags(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Job().Tags(ctx, obj) }, nil, - ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Tag) graphql.Marshaler { + return ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Job", @@ -5036,17 +5764,7 @@ func (ec *executionContext) fieldContext_Job_tags(_ context.Context, field graph IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Tag_id(ctx, field) - case "type": - return ec.fieldContext_Tag_type(ctx, field) - case "name": - return ec.fieldContext_Tag_name(ctx, field) - case "scope": - return ec.fieldContext_Tag_scope(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Tag", field.Name) + return ec.childFields_Tag(ctx, field) }, } return fc, nil @@ -5057,17 +5775,20 @@ func (ec *executionContext) _Job_resources(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Job_resources, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_resources(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Resources, nil }, nil, - ec.marshalNResource2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐResourceᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Resource) graphql.Marshaler { + return ec.marshalNResource2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐResourceᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Job_resources(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Job", @@ -5075,17 +5796,7 @@ func (ec *executionContext) fieldContext_Job_resources(_ context.Context, field IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "hostname": - return ec.fieldContext_Resource_hostname(ctx, field) - case "hwthreads": - return ec.fieldContext_Resource_hwthreads(ctx, field) - case "accelerators": - return ec.fieldContext_Resource_accelerators(ctx, field) - case "configuration": - return ec.fieldContext_Resource_configuration(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Resource", field.Name) + return ec.childFields_Resource(ctx, field) }, } return fc, nil @@ -5096,17 +5807,20 @@ func (ec *executionContext) _Job_concurrentJobs(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Job_concurrentJobs, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_concurrentJobs(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Job().ConcurrentJobs(ctx, obj) }, nil, - ec.marshalOJobLinkResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobLinkResultList, + func(ctx context.Context, selections ast.SelectionSet, v *model.JobLinkResultList) graphql.Marshaler { + return ec.marshalOJobLinkResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobLinkResultList(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Job_concurrentJobs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Job", @@ -5114,15 +5828,7 @@ func (ec *executionContext) fieldContext_Job_concurrentJobs(_ context.Context, f IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "listQuery": - return ec.fieldContext_JobLinkResultList_listQuery(ctx, field) - case "items": - return ec.fieldContext_JobLinkResultList_items(ctx, field) - case "count": - return ec.fieldContext_JobLinkResultList_count(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobLinkResultList", field.Name) + return ec.childFields_JobLinkResultList(ctx, field) }, } return fc, nil @@ -5133,17 +5839,20 @@ func (ec *executionContext) _Job_footprint(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Job_footprint, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_footprint(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Job().Footprint(ctx, obj) }, nil, - ec.marshalOFootprintValue2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐFootprintValue, + func(ctx context.Context, selections ast.SelectionSet, v []*model.FootprintValue) graphql.Marshaler { + return ec.marshalOFootprintValue2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐFootprintValue(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Job_footprint(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Job", @@ -5151,15 +5860,7 @@ func (ec *executionContext) fieldContext_Job_footprint(_ context.Context, field IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_FootprintValue_name(ctx, field) - case "stat": - return ec.fieldContext_FootprintValue_stat(ctx, field) - case "value": - return ec.fieldContext_FootprintValue_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type FootprintValue", field.Name) + return ec.childFields_FootprintValue(ctx, field) }, } return fc, nil @@ -5170,17 +5871,20 @@ func (ec *executionContext) _Job_energyFootprint(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_Job_energyFootprint, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_energyFootprint(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Job().EnergyFootprint(ctx, obj) }, nil, - ec.marshalOEnergyFootprintValue2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐEnergyFootprintValue, + func(ctx context.Context, selections ast.SelectionSet, v []*model.EnergyFootprintValue) graphql.Marshaler { + return ec.marshalOEnergyFootprintValue2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐEnergyFootprintValue(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Job_energyFootprint(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Job", @@ -5188,15 +5892,7 @@ func (ec *executionContext) fieldContext_Job_energyFootprint(_ context.Context, IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "hardware": - return ec.fieldContext_EnergyFootprintValue_hardware(ctx, field) - case "metric": - return ec.fieldContext_EnergyFootprintValue_metric(ctx, field) - case "value": - return ec.fieldContext_EnergyFootprintValue_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type EnergyFootprintValue", field.Name) + return ec.childFields_EnergyFootprintValue(ctx, field) }, } return fc, nil @@ -5207,28 +5903,22 @@ func (ec *executionContext) _Job_metaData(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Job_metaData, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_metaData(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Job().MetaData(ctx, obj) }, nil, - ec.marshalOAny2interface, + func(ctx context.Context, selections ast.SelectionSet, v any) graphql.Marshaler { + return ec.marshalOAny2interface(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Job_metaData(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Job", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Any does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Job", field, true, true, errors.New("field of type Any does not have child fields")) } func (ec *executionContext) _Job_userData(ctx context.Context, field graphql.CollectedField, obj *schema.Job) (ret graphql.Marshaler) { @@ -5236,17 +5926,20 @@ func (ec *executionContext) _Job_userData(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Job_userData, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Job_userData(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Job().UserData(ctx, obj) }, nil, - ec.marshalOUser2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐUser, + func(ctx context.Context, selections ast.SelectionSet, v *model.User) graphql.Marshaler { + return ec.marshalOUser2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐUser(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Job_userData(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Job", @@ -5254,15 +5947,7 @@ func (ec *executionContext) fieldContext_Job_userData(_ context.Context, field g IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "username": - return ec.fieldContext_User_username(ctx, field) - case "name": - return ec.fieldContext_User_name(ctx, field) - case "email": - return ec.fieldContext_User_email(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type User", field.Name) + return ec.childFields_User(ctx, field) }, } return fc, nil @@ -5273,28 +5958,22 @@ func (ec *executionContext) _JobLink_id(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_JobLink_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobLink_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalNID2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNID2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobLink_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobLink", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type ID does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobLink", field, false, false, errors.New("field of type ID does not have child fields")) } func (ec *executionContext) _JobLink_jobId(ctx context.Context, field graphql.CollectedField, obj *model.JobLink) (ret graphql.Marshaler) { @@ -5302,28 +5981,22 @@ func (ec *executionContext) _JobLink_jobId(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_JobLink_jobId, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobLink_jobId(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.JobID, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobLink_jobId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobLink", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobLink", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobLinkResultList_listQuery(ctx context.Context, field graphql.CollectedField, obj *model.JobLinkResultList) (ret graphql.Marshaler) { @@ -5331,28 +6004,22 @@ func (ec *executionContext) _JobLinkResultList_listQuery(ctx context.Context, fi ctx, ec.OperationContext, field, - ec.fieldContext_JobLinkResultList_listQuery, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobLinkResultList_listQuery(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ListQuery, nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobLinkResultList_listQuery(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobLinkResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobLinkResultList", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _JobLinkResultList_items(ctx context.Context, field graphql.CollectedField, obj *model.JobLinkResultList) (ret graphql.Marshaler) { @@ -5360,17 +6027,20 @@ func (ec *executionContext) _JobLinkResultList_items(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobLinkResultList_items, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobLinkResultList_items(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Items, nil }, nil, - ec.marshalNJobLink2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobLinkᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.JobLink) graphql.Marshaler { + return ec.marshalNJobLink2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobLinkᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobLinkResultList_items(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobLinkResultList", @@ -5378,13 +6048,7 @@ func (ec *executionContext) fieldContext_JobLinkResultList_items(_ context.Conte IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_JobLink_id(ctx, field) - case "jobId": - return ec.fieldContext_JobLink_jobId(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobLink", field.Name) + return ec.childFields_JobLink(ctx, field) }, } return fc, nil @@ -5395,28 +6059,22 @@ func (ec *executionContext) _JobLinkResultList_count(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobLinkResultList_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobLinkResultList_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobLinkResultList_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobLinkResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobLinkResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobMetric_unit(ctx context.Context, field graphql.CollectedField, obj *schema.JobMetric) (ret graphql.Marshaler) { @@ -5424,17 +6082,20 @@ func (ec *executionContext) _JobMetric_unit(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_JobMetric_unit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobMetric_unit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Unit, nil }, nil, - ec.marshalOUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit, + func(ctx context.Context, selections ast.SelectionSet, v schema.Unit) graphql.Marshaler { + return ec.marshalOUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobMetric_unit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobMetric", @@ -5442,13 +6103,7 @@ func (ec *executionContext) fieldContext_JobMetric_unit(_ context.Context, field IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "base": - return ec.fieldContext_Unit_base(ctx, field) - case "prefix": - return ec.fieldContext_Unit_prefix(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Unit", field.Name) + return ec.childFields_Unit(ctx, field) }, } return fc, nil @@ -5459,28 +6114,22 @@ func (ec *executionContext) _JobMetric_timestep(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_JobMetric_timestep, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobMetric_timestep(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Timestep, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobMetric_timestep(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobMetric", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobMetric", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobMetric_series(ctx context.Context, field graphql.CollectedField, obj *schema.JobMetric) (ret graphql.Marshaler) { @@ -5488,17 +6137,20 @@ func (ec *executionContext) _JobMetric_series(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_JobMetric_series, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobMetric_series(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Series, nil }, nil, - ec.marshalOSeries2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSeriesᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Series) graphql.Marshaler { + return ec.marshalOSeries2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSeriesᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobMetric_series(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobMetric", @@ -5506,17 +6158,7 @@ func (ec *executionContext) fieldContext_JobMetric_series(_ context.Context, fie IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "hostname": - return ec.fieldContext_Series_hostname(ctx, field) - case "id": - return ec.fieldContext_Series_id(ctx, field) - case "statistics": - return ec.fieldContext_Series_statistics(ctx, field) - case "data": - return ec.fieldContext_Series_data(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Series", field.Name) + return ec.childFields_Series(ctx, field) }, } return fc, nil @@ -5527,17 +6169,20 @@ func (ec *executionContext) _JobMetric_statisticsSeries(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_JobMetric_statisticsSeries, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobMetric_statisticsSeries(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.StatisticsSeries, nil }, nil, - ec.marshalOStatsSeries2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐStatsSeries, + func(ctx context.Context, selections ast.SelectionSet, v *schema.StatsSeries) graphql.Marshaler { + return ec.marshalOStatsSeries2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐStatsSeries(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobMetric_statisticsSeries(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobMetric", @@ -5545,17 +6190,7 @@ func (ec *executionContext) fieldContext_JobMetric_statisticsSeries(_ context.Co IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "mean": - return ec.fieldContext_StatsSeries_mean(ctx, field) - case "median": - return ec.fieldContext_StatsSeries_median(ctx, field) - case "min": - return ec.fieldContext_StatsSeries_min(ctx, field) - case "max": - return ec.fieldContext_StatsSeries_max(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type StatsSeries", field.Name) + return ec.childFields_StatsSeries(ctx, field) }, } return fc, nil @@ -5566,28 +6201,22 @@ func (ec *executionContext) _JobMetricWithName_name(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_JobMetricWithName_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobMetricWithName_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobMetricWithName_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobMetricWithName", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobMetricWithName", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _JobMetricWithName_scope(ctx context.Context, field graphql.CollectedField, obj *model.JobMetricWithName) (ret graphql.Marshaler) { @@ -5595,28 +6224,22 @@ func (ec *executionContext) _JobMetricWithName_scope(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobMetricWithName_scope, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobMetricWithName_scope(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Scope, nil }, nil, - ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricScope) graphql.Marshaler { + return ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobMetricWithName_scope(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobMetricWithName", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MetricScope does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobMetricWithName", field, false, false, errors.New("field of type MetricScope does not have child fields")) } func (ec *executionContext) _JobMetricWithName_metric(ctx context.Context, field graphql.CollectedField, obj *model.JobMetricWithName) (ret graphql.Marshaler) { @@ -5624,17 +6247,20 @@ func (ec *executionContext) _JobMetricWithName_metric(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobMetricWithName_metric, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobMetricWithName_metric(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Metric, nil }, nil, - ec.marshalNJobMetric2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJobMetric, + func(ctx context.Context, selections ast.SelectionSet, v *schema.JobMetric) graphql.Marshaler { + return ec.marshalNJobMetric2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJobMetric(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobMetricWithName_metric(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobMetricWithName", @@ -5642,17 +6268,7 @@ func (ec *executionContext) fieldContext_JobMetricWithName_metric(_ context.Cont IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "unit": - return ec.fieldContext_JobMetric_unit(ctx, field) - case "timestep": - return ec.fieldContext_JobMetric_timestep(ctx, field) - case "series": - return ec.fieldContext_JobMetric_series(ctx, field) - case "statisticsSeries": - return ec.fieldContext_JobMetric_statisticsSeries(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobMetric", field.Name) + return ec.childFields_JobMetric(ctx, field) }, } return fc, nil @@ -5663,17 +6279,20 @@ func (ec *executionContext) _JobResultList_items(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_JobResultList_items, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobResultList_items(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Items, nil }, nil, - ec.marshalNJob2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJobᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Job) graphql.Marshaler { + return ec.marshalNJob2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJobᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobResultList_items(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobResultList", @@ -5681,61 +6300,7 @@ func (ec *executionContext) fieldContext_JobResultList_items(_ context.Context, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Job_id(ctx, field) - case "jobId": - return ec.fieldContext_Job_jobId(ctx, field) - case "user": - return ec.fieldContext_Job_user(ctx, field) - case "project": - return ec.fieldContext_Job_project(ctx, field) - case "cluster": - return ec.fieldContext_Job_cluster(ctx, field) - case "subCluster": - return ec.fieldContext_Job_subCluster(ctx, field) - case "startTime": - return ec.fieldContext_Job_startTime(ctx, field) - case "duration": - return ec.fieldContext_Job_duration(ctx, field) - case "walltime": - return ec.fieldContext_Job_walltime(ctx, field) - case "numNodes": - return ec.fieldContext_Job_numNodes(ctx, field) - case "numHWThreads": - return ec.fieldContext_Job_numHWThreads(ctx, field) - case "numAcc": - return ec.fieldContext_Job_numAcc(ctx, field) - case "energy": - return ec.fieldContext_Job_energy(ctx, field) - case "SMT": - return ec.fieldContext_Job_SMT(ctx, field) - case "shared": - return ec.fieldContext_Job_shared(ctx, field) - case "partition": - return ec.fieldContext_Job_partition(ctx, field) - case "arrayJobId": - return ec.fieldContext_Job_arrayJobId(ctx, field) - case "monitoringStatus": - return ec.fieldContext_Job_monitoringStatus(ctx, field) - case "state": - return ec.fieldContext_Job_state(ctx, field) - case "tags": - return ec.fieldContext_Job_tags(ctx, field) - case "resources": - return ec.fieldContext_Job_resources(ctx, field) - case "concurrentJobs": - return ec.fieldContext_Job_concurrentJobs(ctx, field) - case "footprint": - return ec.fieldContext_Job_footprint(ctx, field) - case "energyFootprint": - return ec.fieldContext_Job_energyFootprint(ctx, field) - case "metaData": - return ec.fieldContext_Job_metaData(ctx, field) - case "userData": - return ec.fieldContext_Job_userData(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Job", field.Name) + return ec.childFields_Job(ctx, field) }, } return fc, nil @@ -5746,28 +6311,22 @@ func (ec *executionContext) _JobResultList_offset(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_JobResultList_offset, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobResultList_offset(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Offset, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobResultList_offset(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobResultList_limit(ctx context.Context, field graphql.CollectedField, obj *model.JobResultList) (ret graphql.Marshaler) { @@ -5775,28 +6334,22 @@ func (ec *executionContext) _JobResultList_limit(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_JobResultList_limit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobResultList_limit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Limit, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobResultList_limit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobResultList_count(ctx context.Context, field graphql.CollectedField, obj *model.JobResultList) (ret graphql.Marshaler) { @@ -5804,28 +6357,22 @@ func (ec *executionContext) _JobResultList_count(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_JobResultList_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobResultList_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobResultList_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobResultList_hasNextPage(ctx context.Context, field graphql.CollectedField, obj *model.JobResultList) (ret graphql.Marshaler) { @@ -5833,28 +6380,22 @@ func (ec *executionContext) _JobResultList_hasNextPage(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_JobResultList_hasNextPage, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobResultList_hasNextPage(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HasNextPage, nil }, nil, - ec.marshalOBoolean2ᚖbool, + func(ctx context.Context, selections ast.SelectionSet, v *bool) graphql.Marshaler { + return ec.marshalOBoolean2ᚖbool(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobResultList_hasNextPage(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobResultList", field, false, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) _JobStats_id(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -5862,28 +6403,22 @@ func (ec *executionContext) _JobStats_id(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobStats_jobId(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -5891,28 +6426,22 @@ func (ec *executionContext) _JobStats_jobId(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_jobId, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_jobId(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.JobID, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_jobId(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _JobStats_startTime(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -5920,28 +6449,22 @@ func (ec *executionContext) _JobStats_startTime(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_startTime, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_startTime(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.StartTime, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_startTime(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobStats_duration(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -5949,28 +6472,22 @@ func (ec *executionContext) _JobStats_duration(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_duration, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_duration(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Duration, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_duration(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobStats_cluster(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -5978,28 +6495,22 @@ func (ec *executionContext) _JobStats_cluster(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_cluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_cluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Cluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_cluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _JobStats_subCluster(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -6007,28 +6518,22 @@ func (ec *executionContext) _JobStats_subCluster(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_subCluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_subCluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubCluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_subCluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _JobStats_numNodes(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -6036,28 +6541,22 @@ func (ec *executionContext) _JobStats_numNodes(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_numNodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_numNodes(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NumNodes, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_numNodes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobStats_numHWThreads(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -6065,28 +6564,22 @@ func (ec *executionContext) _JobStats_numHWThreads(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_numHWThreads, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_numHWThreads(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NumHWThreads, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobStats_numHWThreads(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobStats_numAccelerators(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -6094,28 +6587,22 @@ func (ec *executionContext) _JobStats_numAccelerators(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_numAccelerators, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_numAccelerators(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NumAccelerators, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_JobStats_numAccelerators(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobStats", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobStats_stats(ctx context.Context, field graphql.CollectedField, obj *model.JobStats) (ret graphql.Marshaler) { @@ -6123,17 +6610,20 @@ func (ec *executionContext) _JobStats_stats(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_JobStats_stats, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobStats_stats(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Stats, nil }, nil, - ec.marshalNNamedStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNamedStatsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.NamedStats) graphql.Marshaler { + return ec.marshalNNamedStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNamedStatsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobStats_stats(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobStats", @@ -6141,13 +6631,7 @@ func (ec *executionContext) fieldContext_JobStats_stats(_ context.Context, field IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_NamedStats_name(ctx, field) - case "data": - return ec.fieldContext_NamedStats_data(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NamedStats", field.Name) + return ec.childFields_NamedStats(ctx, field) }, } return fc, nil @@ -6158,28 +6642,22 @@ func (ec *executionContext) _JobsStatistics_id(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalNID2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNID2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type ID does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type ID does not have child fields")) } func (ec *executionContext) _JobsStatistics_name(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6187,28 +6665,22 @@ func (ec *executionContext) _JobsStatistics_name(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalUsers(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6216,28 +6688,22 @@ func (ec *executionContext) _JobsStatistics_totalUsers(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalUsers, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalUsers(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalUsers, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalUsers(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalJobs(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6245,28 +6711,22 @@ func (ec *executionContext) _JobsStatistics_totalJobs(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalJobs, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalJobs(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalJobs, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalJobs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_runningJobs(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6274,28 +6734,22 @@ func (ec *executionContext) _JobsStatistics_runningJobs(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_runningJobs, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_runningJobs(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.RunningJobs, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_runningJobs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_shortJobs(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6303,28 +6757,22 @@ func (ec *executionContext) _JobsStatistics_shortJobs(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_shortJobs, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_shortJobs(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ShortJobs, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_shortJobs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalWalltime(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6332,28 +6780,22 @@ func (ec *executionContext) _JobsStatistics_totalWalltime(ctx context.Context, f ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalWalltime, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalWalltime(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalWalltime, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalWalltime(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalNodes(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6361,28 +6803,22 @@ func (ec *executionContext) _JobsStatistics_totalNodes(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalNodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalNodes(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalNodes, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalNodes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalNodeHours(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6390,28 +6826,22 @@ func (ec *executionContext) _JobsStatistics_totalNodeHours(ctx context.Context, ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalNodeHours, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalNodeHours(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalNodeHours, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalNodeHours(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalCores(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6419,28 +6849,22 @@ func (ec *executionContext) _JobsStatistics_totalCores(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalCores, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalCores(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalCores, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalCores(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalCoreHours(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6448,28 +6872,22 @@ func (ec *executionContext) _JobsStatistics_totalCoreHours(ctx context.Context, ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalCoreHours, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalCoreHours(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalCoreHours, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalCoreHours(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalAccs(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6477,28 +6895,22 @@ func (ec *executionContext) _JobsStatistics_totalAccs(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalAccs, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalAccs(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalAccs, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalAccs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_totalAccHours(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6506,28 +6918,22 @@ func (ec *executionContext) _JobsStatistics_totalAccHours(ctx context.Context, f ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_totalAccHours, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_totalAccHours(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalAccHours, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_totalAccHours(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "JobsStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("JobsStatistics", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _JobsStatistics_histDuration(ctx context.Context, field graphql.CollectedField, obj *model.JobsStatistics) (ret graphql.Marshaler) { @@ -6535,17 +6941,20 @@ func (ec *executionContext) _JobsStatistics_histDuration(ctx context.Context, fi ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_histDuration, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_histDuration(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HistDuration, nil }, nil, - ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.HistoPoint) graphql.Marshaler { + return ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_histDuration(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobsStatistics", @@ -6553,13 +6962,7 @@ func (ec *executionContext) fieldContext_JobsStatistics_histDuration(_ context.C IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "count": - return ec.fieldContext_HistoPoint_count(ctx, field) - case "value": - return ec.fieldContext_HistoPoint_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type HistoPoint", field.Name) + return ec.childFields_HistoPoint(ctx, field) }, } return fc, nil @@ -6570,17 +6973,20 @@ func (ec *executionContext) _JobsStatistics_histNumNodes(ctx context.Context, fi ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_histNumNodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_histNumNodes(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HistNumNodes, nil }, nil, - ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.HistoPoint) graphql.Marshaler { + return ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_histNumNodes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobsStatistics", @@ -6588,13 +6994,7 @@ func (ec *executionContext) fieldContext_JobsStatistics_histNumNodes(_ context.C IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "count": - return ec.fieldContext_HistoPoint_count(ctx, field) - case "value": - return ec.fieldContext_HistoPoint_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type HistoPoint", field.Name) + return ec.childFields_HistoPoint(ctx, field) }, } return fc, nil @@ -6605,17 +7005,20 @@ func (ec *executionContext) _JobsStatistics_histNumCores(ctx context.Context, fi ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_histNumCores, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_histNumCores(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HistNumCores, nil }, nil, - ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.HistoPoint) graphql.Marshaler { + return ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_histNumCores(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobsStatistics", @@ -6623,13 +7026,7 @@ func (ec *executionContext) fieldContext_JobsStatistics_histNumCores(_ context.C IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "count": - return ec.fieldContext_HistoPoint_count(ctx, field) - case "value": - return ec.fieldContext_HistoPoint_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type HistoPoint", field.Name) + return ec.childFields_HistoPoint(ctx, field) }, } return fc, nil @@ -6640,17 +7037,20 @@ func (ec *executionContext) _JobsStatistics_histNumAccs(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_histNumAccs, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_histNumAccs(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HistNumAccs, nil }, nil, - ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.HistoPoint) graphql.Marshaler { + return ec.marshalNHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐHistoPointᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_histNumAccs(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobsStatistics", @@ -6658,13 +7058,7 @@ func (ec *executionContext) fieldContext_JobsStatistics_histNumAccs(_ context.Co IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "count": - return ec.fieldContext_HistoPoint_count(ctx, field) - case "value": - return ec.fieldContext_HistoPoint_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type HistoPoint", field.Name) + return ec.childFields_HistoPoint(ctx, field) }, } return fc, nil @@ -6675,17 +7069,20 @@ func (ec *executionContext) _JobsStatistics_histMetrics(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_JobsStatistics_histMetrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_JobsStatistics_histMetrics(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HistMetrics, nil }, nil, - ec.marshalNMetricHistoPoints2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐMetricHistoPointsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.MetricHistoPoints) graphql.Marshaler { + return ec.marshalNMetricHistoPoints2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐMetricHistoPointsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_JobsStatistics_histMetrics(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "JobsStatistics", @@ -6693,17 +7090,7 @@ func (ec *executionContext) fieldContext_JobsStatistics_histMetrics(_ context.Co IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "metric": - return ec.fieldContext_MetricHistoPoints_metric(ctx, field) - case "unit": - return ec.fieldContext_MetricHistoPoints_unit(ctx, field) - case "stat": - return ec.fieldContext_MetricHistoPoints_stat(ctx, field) - case "data": - return ec.fieldContext_MetricHistoPoints_data(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricHistoPoints", field.Name) + return ec.childFields_MetricHistoPoints(ctx, field) }, } return fc, nil @@ -6714,28 +7101,22 @@ func (ec *executionContext) _MetricConfig_name(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _MetricConfig_unit(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6743,17 +7124,20 @@ func (ec *executionContext) _MetricConfig_unit(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_unit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_unit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Unit, nil }, nil, - ec.marshalNUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit, + func(ctx context.Context, selections ast.SelectionSet, v schema.Unit) graphql.Marshaler { + return ec.marshalNUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_unit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "MetricConfig", @@ -6761,13 +7145,7 @@ func (ec *executionContext) fieldContext_MetricConfig_unit(_ context.Context, fi IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "base": - return ec.fieldContext_Unit_base(ctx, field) - case "prefix": - return ec.fieldContext_Unit_prefix(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Unit", field.Name) + return ec.childFields_Unit(ctx, field) }, } return fc, nil @@ -6778,28 +7156,22 @@ func (ec *executionContext) _MetricConfig_scope(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_scope, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_scope(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Scope, nil }, nil, - ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricScope) graphql.Marshaler { + return ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_scope(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MetricScope does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type MetricScope does not have child fields")) } func (ec *executionContext) _MetricConfig_aggregation(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6807,28 +7179,22 @@ func (ec *executionContext) _MetricConfig_aggregation(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_aggregation, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_aggregation(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Aggregation, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_aggregation(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _MetricConfig_timestep(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6836,28 +7202,22 @@ func (ec *executionContext) _MetricConfig_timestep(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_timestep, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_timestep(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Timestep, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_timestep(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _MetricConfig_peak(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6865,28 +7225,22 @@ func (ec *executionContext) _MetricConfig_peak(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_peak, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_peak(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Peak, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_peak(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _MetricConfig_normal(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6894,28 +7248,22 @@ func (ec *executionContext) _MetricConfig_normal(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_normal, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_normal(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Normal, nil }, nil, - ec.marshalOFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalOFloat2float64(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricConfig_normal(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _MetricConfig_caution(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6923,28 +7271,22 @@ func (ec *executionContext) _MetricConfig_caution(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_caution, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_caution(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Caution, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_caution(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _MetricConfig_alert(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6952,28 +7294,22 @@ func (ec *executionContext) _MetricConfig_alert(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_alert, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_alert(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Alert, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_alert(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _MetricConfig_lowerIsBetter(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -6981,28 +7317,22 @@ func (ec *executionContext) _MetricConfig_lowerIsBetter(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_lowerIsBetter, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_lowerIsBetter(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.LowerIsBetter, nil }, nil, - ec.marshalOBoolean2bool, + func(ctx context.Context, selections ast.SelectionSet, v bool) graphql.Marshaler { + return ec.marshalOBoolean2bool(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricConfig_lowerIsBetter(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricConfig", field, false, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) _MetricConfig_subClusters(ctx context.Context, field graphql.CollectedField, obj *schema.MetricConfig) (ret graphql.Marshaler) { @@ -7010,17 +7340,20 @@ func (ec *executionContext) _MetricConfig_subClusters(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_MetricConfig_subClusters, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricConfig_subClusters(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubClusters, nil }, nil, - ec.marshalNSubClusterConfig2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSubClusterConfigᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.SubClusterConfig) graphql.Marshaler { + return ec.marshalNSubClusterConfig2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSubClusterConfigᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricConfig_subClusters(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "MetricConfig", @@ -7028,21 +7361,7 @@ func (ec *executionContext) fieldContext_MetricConfig_subClusters(_ context.Cont IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_SubClusterConfig_name(ctx, field) - case "peak": - return ec.fieldContext_SubClusterConfig_peak(ctx, field) - case "normal": - return ec.fieldContext_SubClusterConfig_normal(ctx, field) - case "caution": - return ec.fieldContext_SubClusterConfig_caution(ctx, field) - case "alert": - return ec.fieldContext_SubClusterConfig_alert(ctx, field) - case "remove": - return ec.fieldContext_SubClusterConfig_remove(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type SubClusterConfig", field.Name) + return ec.childFields_SubClusterConfig(ctx, field) }, } return fc, nil @@ -7053,28 +7372,22 @@ func (ec *executionContext) _MetricFootprints_metric(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_MetricFootprints_metric, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricFootprints_metric(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Metric, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricFootprints_metric(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricFootprints", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricFootprints", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _MetricFootprints_data(ctx context.Context, field graphql.CollectedField, obj *model.MetricFootprints) (ret graphql.Marshaler) { @@ -7082,28 +7395,22 @@ func (ec *executionContext) _MetricFootprints_data(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_MetricFootprints_data, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricFootprints_data(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Data, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricFootprints_data(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricFootprints", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricFootprints", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _MetricHistoPoint_bin(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoint) (ret graphql.Marshaler) { @@ -7111,28 +7418,22 @@ func (ec *executionContext) _MetricHistoPoint_bin(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoint_bin, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoint_bin(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Bin, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricHistoPoint_bin(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricHistoPoint", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricHistoPoint", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _MetricHistoPoint_count(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoint) (ret graphql.Marshaler) { @@ -7140,28 +7441,22 @@ func (ec *executionContext) _MetricHistoPoint_count(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoint_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoint_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricHistoPoint_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricHistoPoint", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricHistoPoint", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _MetricHistoPoint_min(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoint) (ret graphql.Marshaler) { @@ -7169,28 +7464,22 @@ func (ec *executionContext) _MetricHistoPoint_min(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoint_min, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoint_min(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Min, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricHistoPoint_min(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricHistoPoint", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricHistoPoint", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _MetricHistoPoint_max(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoint) (ret graphql.Marshaler) { @@ -7198,28 +7487,22 @@ func (ec *executionContext) _MetricHistoPoint_max(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoint_max, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoint_max(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Max, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricHistoPoint_max(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricHistoPoint", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricHistoPoint", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _MetricHistoPoints_metric(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoints) (ret graphql.Marshaler) { @@ -7227,28 +7510,22 @@ func (ec *executionContext) _MetricHistoPoints_metric(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoints_metric, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoints_metric(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Metric, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricHistoPoints_metric(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricHistoPoints", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricHistoPoints", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _MetricHistoPoints_unit(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoints) (ret graphql.Marshaler) { @@ -7256,28 +7533,22 @@ func (ec *executionContext) _MetricHistoPoints_unit(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoints_unit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoints_unit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Unit, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricHistoPoints_unit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricHistoPoints", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricHistoPoints", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _MetricHistoPoints_stat(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoints) (ret graphql.Marshaler) { @@ -7285,28 +7556,22 @@ func (ec *executionContext) _MetricHistoPoints_stat(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoints_stat, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoints_stat(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Stat, nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricHistoPoints_stat(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricHistoPoints", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricHistoPoints", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _MetricHistoPoints_data(ctx context.Context, field graphql.CollectedField, obj *model.MetricHistoPoints) (ret graphql.Marshaler) { @@ -7314,17 +7579,20 @@ func (ec *executionContext) _MetricHistoPoints_data(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_MetricHistoPoints_data, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricHistoPoints_data(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Data, nil }, nil, - ec.marshalOMetricHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐMetricHistoPointᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.MetricHistoPoint) graphql.Marshaler { + return ec.marshalOMetricHistoPoint2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐMetricHistoPointᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricHistoPoints_data(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "MetricHistoPoints", @@ -7332,17 +7600,7 @@ func (ec *executionContext) fieldContext_MetricHistoPoints_data(_ context.Contex IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "bin": - return ec.fieldContext_MetricHistoPoint_bin(ctx, field) - case "count": - return ec.fieldContext_MetricHistoPoint_count(ctx, field) - case "min": - return ec.fieldContext_MetricHistoPoint_min(ctx, field) - case "max": - return ec.fieldContext_MetricHistoPoint_max(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricHistoPoint", field.Name) + return ec.childFields_MetricHistoPoint(ctx, field) }, } return fc, nil @@ -7353,28 +7611,22 @@ func (ec *executionContext) _MetricStatistics_avg(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_MetricStatistics_avg, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricStatistics_avg(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Avg, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricStatistics_avg(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricStatistics", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _MetricStatistics_min(ctx context.Context, field graphql.CollectedField, obj *schema.MetricStatistics) (ret graphql.Marshaler) { @@ -7382,28 +7634,22 @@ func (ec *executionContext) _MetricStatistics_min(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_MetricStatistics_min, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricStatistics_min(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Min, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricStatistics_min(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricStatistics", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _MetricStatistics_max(ctx context.Context, field graphql.CollectedField, obj *schema.MetricStatistics) (ret graphql.Marshaler) { @@ -7411,28 +7657,22 @@ func (ec *executionContext) _MetricStatistics_max(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_MetricStatistics_max, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricStatistics_max(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Max, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricStatistics_max(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricStatistics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricStatistics", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _MetricValue_name(ctx context.Context, field graphql.CollectedField, obj *schema.MetricValue) (ret graphql.Marshaler) { @@ -7440,28 +7680,22 @@ func (ec *executionContext) _MetricValue_name(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_MetricValue_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricValue_name(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.MetricValue().Name(ctx, obj) }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_MetricValue_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricValue", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricValue", field, true, true, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _MetricValue_unit(ctx context.Context, field graphql.CollectedField, obj *schema.MetricValue) (ret graphql.Marshaler) { @@ -7469,17 +7703,20 @@ func (ec *executionContext) _MetricValue_unit(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_MetricValue_unit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricValue_unit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Unit, nil }, nil, - ec.marshalNUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit, + func(ctx context.Context, selections ast.SelectionSet, v schema.Unit) graphql.Marshaler { + return ec.marshalNUnit2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐUnit(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricValue_unit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "MetricValue", @@ -7487,13 +7724,7 @@ func (ec *executionContext) fieldContext_MetricValue_unit(_ context.Context, fie IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "base": - return ec.fieldContext_Unit_base(ctx, field) - case "prefix": - return ec.fieldContext_Unit_prefix(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Unit", field.Name) + return ec.childFields_Unit(ctx, field) }, } return fc, nil @@ -7504,28 +7735,22 @@ func (ec *executionContext) _MetricValue_value(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_MetricValue_value, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_MetricValue_value(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Value, nil }, nil, - ec.marshalNFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalNFloat2float64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_MetricValue_value(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "MetricValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("MetricValue", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _Mutation_createTag(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { @@ -7533,18 +7758,21 @@ func (ec *executionContext) _Mutation_createTag(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Mutation_createTag, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Mutation_createTag(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Mutation().CreateTag(ctx, fc.Args["type"].(string), fc.Args["name"].(string), fc.Args["scope"].(string)) }, nil, - ec.marshalNTag2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTag, + func(ctx context.Context, selections ast.SelectionSet, v *schema.Tag) graphql.Marshaler { + return ec.marshalNTag2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTag(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Mutation_createTag(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", @@ -7552,17 +7780,7 @@ func (ec *executionContext) fieldContext_Mutation_createTag(ctx context.Context, IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Tag_id(ctx, field) - case "type": - return ec.fieldContext_Tag_type(ctx, field) - case "name": - return ec.fieldContext_Tag_name(ctx, field) - case "scope": - return ec.fieldContext_Tag_scope(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Tag", field.Name) + return ec.childFields_Tag(ctx, field) }, } defer func() { @@ -7584,18 +7802,21 @@ func (ec *executionContext) _Mutation_deleteTag(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Mutation_deleteTag, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Mutation_deleteTag(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Mutation().DeleteTag(ctx, fc.Args["id"].(string)) }, nil, - ec.marshalNID2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNID2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Mutation_deleteTag(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", @@ -7625,18 +7846,21 @@ func (ec *executionContext) _Mutation_addTagsToJob(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Mutation_addTagsToJob, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Mutation_addTagsToJob(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Mutation().AddTagsToJob(ctx, fc.Args["job"].(string), fc.Args["tagIds"].([]string)) }, nil, - ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Tag) graphql.Marshaler { + return ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Mutation_addTagsToJob(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", @@ -7644,17 +7868,7 @@ func (ec *executionContext) fieldContext_Mutation_addTagsToJob(ctx context.Conte IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Tag_id(ctx, field) - case "type": - return ec.fieldContext_Tag_type(ctx, field) - case "name": - return ec.fieldContext_Tag_name(ctx, field) - case "scope": - return ec.fieldContext_Tag_scope(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Tag", field.Name) + return ec.childFields_Tag(ctx, field) }, } defer func() { @@ -7676,18 +7890,21 @@ func (ec *executionContext) _Mutation_removeTagsFromJob(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_Mutation_removeTagsFromJob, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Mutation_removeTagsFromJob(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Mutation().RemoveTagsFromJob(ctx, fc.Args["job"].(string), fc.Args["tagIds"].([]string)) }, nil, - ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Tag) graphql.Marshaler { + return ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Mutation_removeTagsFromJob(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", @@ -7695,17 +7912,7 @@ func (ec *executionContext) fieldContext_Mutation_removeTagsFromJob(ctx context. IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Tag_id(ctx, field) - case "type": - return ec.fieldContext_Tag_type(ctx, field) - case "name": - return ec.fieldContext_Tag_name(ctx, field) - case "scope": - return ec.fieldContext_Tag_scope(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Tag", field.Name) + return ec.childFields_Tag(ctx, field) }, } defer func() { @@ -7727,18 +7934,21 @@ func (ec *executionContext) _Mutation_removeTagFromList(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_Mutation_removeTagFromList, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Mutation_removeTagFromList(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Mutation().RemoveTagFromList(ctx, fc.Args["tagIds"].([]string)) }, nil, - ec.marshalNInt2ᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []int) graphql.Marshaler { + return ec.marshalNInt2ᚕintᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Mutation_removeTagFromList(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", @@ -7768,18 +7978,21 @@ func (ec *executionContext) _Mutation_updateConfiguration(ctx context.Context, f ctx, ec.OperationContext, field, - ec.fieldContext_Mutation_updateConfiguration, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Mutation_updateConfiguration(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Mutation().UpdateConfiguration(ctx, fc.Args["name"].(string), fc.Args["value"].(string)) }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Mutation_updateConfiguration(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", @@ -7809,28 +8022,22 @@ func (ec *executionContext) _NamedStats_name(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_NamedStats_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NamedStats_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NamedStats_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NamedStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NamedStats", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NamedStats_data(ctx context.Context, field graphql.CollectedField, obj *model.NamedStats) (ret graphql.Marshaler) { @@ -7838,17 +8045,20 @@ func (ec *executionContext) _NamedStats_data(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_NamedStats_data, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NamedStats_data(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Data, nil }, nil, - ec.marshalNMetricStatistics2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricStatistics, + func(ctx context.Context, selections ast.SelectionSet, v *schema.MetricStatistics) graphql.Marshaler { + return ec.marshalNMetricStatistics2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricStatistics(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NamedStats_data(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "NamedStats", @@ -7856,15 +8066,7 @@ func (ec *executionContext) fieldContext_NamedStats_data(_ context.Context, fiel IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "avg": - return ec.fieldContext_MetricStatistics_avg(ctx, field) - case "min": - return ec.fieldContext_MetricStatistics_min(ctx, field) - case "max": - return ec.fieldContext_MetricStatistics_max(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricStatistics", field.Name) + return ec.childFields_MetricStatistics(ctx, field) }, } return fc, nil @@ -7875,28 +8077,22 @@ func (ec *executionContext) _NamedStatsWithScope_name(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_NamedStatsWithScope_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NamedStatsWithScope_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NamedStatsWithScope_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NamedStatsWithScope", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NamedStatsWithScope", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NamedStatsWithScope_scope(ctx context.Context, field graphql.CollectedField, obj *model.NamedStatsWithScope) (ret graphql.Marshaler) { @@ -7904,28 +8100,22 @@ func (ec *executionContext) _NamedStatsWithScope_scope(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_NamedStatsWithScope_scope, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NamedStatsWithScope_scope(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Scope, nil }, nil, - ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricScope) graphql.Marshaler { + return ec.marshalNMetricScope2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricScope(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NamedStatsWithScope_scope(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NamedStatsWithScope", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MetricScope does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NamedStatsWithScope", field, false, false, errors.New("field of type MetricScope does not have child fields")) } func (ec *executionContext) _NamedStatsWithScope_stats(ctx context.Context, field graphql.CollectedField, obj *model.NamedStatsWithScope) (ret graphql.Marshaler) { @@ -7933,17 +8123,20 @@ func (ec *executionContext) _NamedStatsWithScope_stats(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_NamedStatsWithScope_stats, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NamedStatsWithScope_stats(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Stats, nil }, nil, - ec.marshalNScopedStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐScopedStatsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.ScopedStats) graphql.Marshaler { + return ec.marshalNScopedStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐScopedStatsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NamedStatsWithScope_stats(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "NamedStatsWithScope", @@ -7951,15 +8144,7 @@ func (ec *executionContext) fieldContext_NamedStatsWithScope_stats(_ context.Con IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "hostname": - return ec.fieldContext_ScopedStats_hostname(ctx, field) - case "id": - return ec.fieldContext_ScopedStats_id(ctx, field) - case "data": - return ec.fieldContext_ScopedStats_data(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type ScopedStats", field.Name) + return ec.childFields_ScopedStats(ctx, field) }, } return fc, nil @@ -7970,28 +8155,22 @@ func (ec *executionContext) _Node_id(ctx context.Context, field graphql.Collecte ctx, ec.OperationContext, field, - ec.fieldContext_Node_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_id(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Node().ID(ctx, obj) }, nil, - ec.marshalNID2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNID2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Node_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type ID does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, true, true, errors.New("field of type ID does not have child fields")) } func (ec *executionContext) _Node_hostname(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -7999,28 +8178,22 @@ func (ec *executionContext) _Node_hostname(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Node_hostname, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_hostname(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Hostname, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Node_hostname(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Node_cluster(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8028,28 +8201,22 @@ func (ec *executionContext) _Node_cluster(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Node_cluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_cluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Cluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Node_cluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Node_subCluster(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8057,28 +8224,22 @@ func (ec *executionContext) _Node_subCluster(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_Node_subCluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_subCluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubCluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Node_subCluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Node_jobsRunning(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8086,28 +8247,22 @@ func (ec *executionContext) _Node_jobsRunning(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_Node_jobsRunning, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_jobsRunning(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.JobsRunning, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Node_jobsRunning(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Node_cpusAllocated(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8115,28 +8270,22 @@ func (ec *executionContext) _Node_cpusAllocated(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Node_cpusAllocated, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_cpusAllocated(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.CpusAllocated, nil }, nil, - ec.marshalOInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalOInt2int(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Node_cpusAllocated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Node_memoryAllocated(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8144,28 +8293,22 @@ func (ec *executionContext) _Node_memoryAllocated(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_Node_memoryAllocated, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_memoryAllocated(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.MemoryAllocated, nil }, nil, - ec.marshalOInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalOInt2int(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Node_memoryAllocated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Node_gpusAllocated(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8173,28 +8316,22 @@ func (ec *executionContext) _Node_gpusAllocated(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Node_gpusAllocated, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_gpusAllocated(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.GpusAllocated, nil }, nil, - ec.marshalOInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalOInt2int(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Node_gpusAllocated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Node_schedulerState(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8202,28 +8339,22 @@ func (ec *executionContext) _Node_schedulerState(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_Node_schedulerState, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_schedulerState(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Node().SchedulerState(ctx, obj) }, nil, - ec.marshalNSchedulerState2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSchedulerState, + func(ctx context.Context, selections ast.SelectionSet, v schema.SchedulerState) graphql.Marshaler { + return ec.marshalNSchedulerState2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐSchedulerState(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Node_schedulerState(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type SchedulerState does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, true, true, errors.New("field of type SchedulerState does not have child fields")) } func (ec *executionContext) _Node_healthState(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8231,28 +8362,22 @@ func (ec *executionContext) _Node_healthState(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_Node_healthState, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_healthState(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Node().HealthState(ctx, obj) }, nil, - ec.marshalNMonitoringState2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNMonitoringState2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Node_healthState(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type MonitoringState does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, true, true, errors.New("field of type MonitoringState does not have child fields")) } func (ec *executionContext) _Node_metaData(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8260,28 +8385,22 @@ func (ec *executionContext) _Node_metaData(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Node_metaData, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_metaData(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Node().MetaData(ctx, obj) }, nil, - ec.marshalOAny2interface, + func(ctx context.Context, selections ast.SelectionSet, v any) graphql.Marshaler { + return ec.marshalOAny2interface(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Node_metaData(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Any does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, true, true, errors.New("field of type Any does not have child fields")) } func (ec *executionContext) _Node_healthData(ctx context.Context, field graphql.CollectedField, obj *schema.Node) (ret graphql.Marshaler) { @@ -8289,28 +8408,22 @@ func (ec *executionContext) _Node_healthData(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_Node_healthData, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Node_healthData(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Node().HealthData(ctx, obj) }, nil, - ec.marshalOAny2interface, + func(ctx context.Context, selections ast.SelectionSet, v any) graphql.Marshaler { + return ec.marshalOAny2interface(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Node_healthData(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Node", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Any does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Node", field, true, true, errors.New("field of type Any does not have child fields")) } func (ec *executionContext) _NodeMetrics_host(ctx context.Context, field graphql.CollectedField, obj *model.NodeMetrics) (ret graphql.Marshaler) { @@ -8318,28 +8431,22 @@ func (ec *executionContext) _NodeMetrics_host(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_NodeMetrics_host, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeMetrics_host(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Host, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeMetrics_host(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeMetrics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeMetrics", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NodeMetrics_nodeState(ctx context.Context, field graphql.CollectedField, obj *model.NodeMetrics) (ret graphql.Marshaler) { @@ -8347,28 +8454,22 @@ func (ec *executionContext) _NodeMetrics_nodeState(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_NodeMetrics_nodeState, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeMetrics_nodeState(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NodeState, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeMetrics_nodeState(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeMetrics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeMetrics", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NodeMetrics_metricHealth(ctx context.Context, field graphql.CollectedField, obj *model.NodeMetrics) (ret graphql.Marshaler) { @@ -8376,28 +8477,22 @@ func (ec *executionContext) _NodeMetrics_metricHealth(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_NodeMetrics_metricHealth, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeMetrics_metricHealth(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.MetricHealth, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeMetrics_metricHealth(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeMetrics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeMetrics", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NodeMetrics_subCluster(ctx context.Context, field graphql.CollectedField, obj *model.NodeMetrics) (ret graphql.Marshaler) { @@ -8405,28 +8500,22 @@ func (ec *executionContext) _NodeMetrics_subCluster(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_NodeMetrics_subCluster, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeMetrics_subCluster(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubCluster, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeMetrics_subCluster(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeMetrics", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeMetrics", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NodeMetrics_metrics(ctx context.Context, field graphql.CollectedField, obj *model.NodeMetrics) (ret graphql.Marshaler) { @@ -8434,17 +8523,20 @@ func (ec *executionContext) _NodeMetrics_metrics(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_NodeMetrics_metrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeMetrics_metrics(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Metrics, nil }, nil, - ec.marshalNJobMetricWithName2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobMetricWithNameᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.JobMetricWithName) graphql.Marshaler { + return ec.marshalNJobMetricWithName2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobMetricWithNameᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeMetrics_metrics(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "NodeMetrics", @@ -8452,15 +8544,7 @@ func (ec *executionContext) fieldContext_NodeMetrics_metrics(_ context.Context, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_JobMetricWithName_name(ctx, field) - case "scope": - return ec.fieldContext_JobMetricWithName_scope(ctx, field) - case "metric": - return ec.fieldContext_JobMetricWithName_metric(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobMetricWithName", field.Name) + return ec.childFields_JobMetricWithName(ctx, field) }, } return fc, nil @@ -8471,17 +8555,20 @@ func (ec *executionContext) _NodeStateResultList_items(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_NodeStateResultList_items, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeStateResultList_items(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Items, nil }, nil, - ec.marshalNNode2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐNodeᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Node) graphql.Marshaler { + return ec.marshalNNode2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐNodeᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeStateResultList_items(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "NodeStateResultList", @@ -8489,33 +8576,7 @@ func (ec *executionContext) fieldContext_NodeStateResultList_items(_ context.Con IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Node_id(ctx, field) - case "hostname": - return ec.fieldContext_Node_hostname(ctx, field) - case "cluster": - return ec.fieldContext_Node_cluster(ctx, field) - case "subCluster": - return ec.fieldContext_Node_subCluster(ctx, field) - case "jobsRunning": - return ec.fieldContext_Node_jobsRunning(ctx, field) - case "cpusAllocated": - return ec.fieldContext_Node_cpusAllocated(ctx, field) - case "memoryAllocated": - return ec.fieldContext_Node_memoryAllocated(ctx, field) - case "gpusAllocated": - return ec.fieldContext_Node_gpusAllocated(ctx, field) - case "schedulerState": - return ec.fieldContext_Node_schedulerState(ctx, field) - case "healthState": - return ec.fieldContext_Node_healthState(ctx, field) - case "metaData": - return ec.fieldContext_Node_metaData(ctx, field) - case "healthData": - return ec.fieldContext_Node_healthData(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Node", field.Name) + return ec.childFields_Node(ctx, field) }, } return fc, nil @@ -8526,28 +8587,22 @@ func (ec *executionContext) _NodeStateResultList_count(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_NodeStateResultList_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeStateResultList_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_NodeStateResultList_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeStateResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeStateResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodeStates_state(ctx context.Context, field graphql.CollectedField, obj *model.NodeStates) (ret graphql.Marshaler) { @@ -8555,28 +8610,22 @@ func (ec *executionContext) _NodeStates_state(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_NodeStates_state, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeStates_state(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.State, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeStates_state(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeStates", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeStates", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NodeStates_count(ctx context.Context, field graphql.CollectedField, obj *model.NodeStates) (ret graphql.Marshaler) { @@ -8584,28 +8633,22 @@ func (ec *executionContext) _NodeStates_count(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_NodeStates_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeStates_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeStates_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeStates", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeStates", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodeStatesTimed_state(ctx context.Context, field graphql.CollectedField, obj *model.NodeStatesTimed) (ret graphql.Marshaler) { @@ -8613,28 +8656,22 @@ func (ec *executionContext) _NodeStatesTimed_state(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_NodeStatesTimed_state, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeStatesTimed_state(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.State, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeStatesTimed_state(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeStatesTimed", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeStatesTimed", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _NodeStatesTimed_counts(ctx context.Context, field graphql.CollectedField, obj *model.NodeStatesTimed) (ret graphql.Marshaler) { @@ -8642,28 +8679,22 @@ func (ec *executionContext) _NodeStatesTimed_counts(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_NodeStatesTimed_counts, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeStatesTimed_counts(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Counts, nil }, nil, - ec.marshalNInt2ᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []int) graphql.Marshaler { + return ec.marshalNInt2ᚕintᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeStatesTimed_counts(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeStatesTimed", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeStatesTimed", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodeStatesTimed_times(ctx context.Context, field graphql.CollectedField, obj *model.NodeStatesTimed) (ret graphql.Marshaler) { @@ -8671,28 +8702,22 @@ func (ec *executionContext) _NodeStatesTimed_times(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_NodeStatesTimed_times, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodeStatesTimed_times(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Times, nil }, nil, - ec.marshalNInt2ᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []int) graphql.Marshaler { + return ec.marshalNInt2ᚕintᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodeStatesTimed_times(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodeStatesTimed", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodeStatesTimed", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodesResultList_items(ctx context.Context, field graphql.CollectedField, obj *model.NodesResultList) (ret graphql.Marshaler) { @@ -8700,17 +8725,20 @@ func (ec *executionContext) _NodesResultList_items(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_NodesResultList_items, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodesResultList_items(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Items, nil }, nil, - ec.marshalNNodeMetrics2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeMetricsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.NodeMetrics) graphql.Marshaler { + return ec.marshalNNodeMetrics2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeMetricsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_NodesResultList_items(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "NodesResultList", @@ -8718,19 +8746,7 @@ func (ec *executionContext) fieldContext_NodesResultList_items(_ context.Context IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "host": - return ec.fieldContext_NodeMetrics_host(ctx, field) - case "nodeState": - return ec.fieldContext_NodeMetrics_nodeState(ctx, field) - case "metricHealth": - return ec.fieldContext_NodeMetrics_metricHealth(ctx, field) - case "subCluster": - return ec.fieldContext_NodeMetrics_subCluster(ctx, field) - case "metrics": - return ec.fieldContext_NodeMetrics_metrics(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NodeMetrics", field.Name) + return ec.childFields_NodeMetrics(ctx, field) }, } return fc, nil @@ -8741,28 +8757,22 @@ func (ec *executionContext) _NodesResultList_offset(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_NodesResultList_offset, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodesResultList_offset(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Offset, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_NodesResultList_offset(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodesResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodesResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodesResultList_limit(ctx context.Context, field graphql.CollectedField, obj *model.NodesResultList) (ret graphql.Marshaler) { @@ -8770,28 +8780,22 @@ func (ec *executionContext) _NodesResultList_limit(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_NodesResultList_limit, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodesResultList_limit(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Limit, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_NodesResultList_limit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodesResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodesResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodesResultList_count(ctx context.Context, field graphql.CollectedField, obj *model.NodesResultList) (ret graphql.Marshaler) { @@ -8799,28 +8803,22 @@ func (ec *executionContext) _NodesResultList_count(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_NodesResultList_count, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodesResultList_count(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Count, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_NodesResultList_count(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodesResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodesResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodesResultList_totalNodes(ctx context.Context, field graphql.CollectedField, obj *model.NodesResultList) (ret graphql.Marshaler) { @@ -8828,28 +8826,22 @@ func (ec *executionContext) _NodesResultList_totalNodes(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_NodesResultList_totalNodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodesResultList_totalNodes(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.TotalNodes, nil }, nil, - ec.marshalOInt2ᚖint, + func(ctx context.Context, selections ast.SelectionSet, v *int) graphql.Marshaler { + return ec.marshalOInt2ᚖint(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_NodesResultList_totalNodes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodesResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodesResultList", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _NodesResultList_hasNextPage(ctx context.Context, field graphql.CollectedField, obj *model.NodesResultList) (ret graphql.Marshaler) { @@ -8857,28 +8849,22 @@ func (ec *executionContext) _NodesResultList_hasNextPage(ctx context.Context, fi ctx, ec.OperationContext, field, - ec.fieldContext_NodesResultList_hasNextPage, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_NodesResultList_hasNextPage(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HasNextPage, nil }, nil, - ec.marshalOBoolean2ᚖbool, + func(ctx context.Context, selections ast.SelectionSet, v *bool) graphql.Marshaler { + return ec.marshalOBoolean2ᚖbool(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_NodesResultList_hasNextPage(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "NodesResultList", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("NodesResultList", field, false, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) _Query_clusters(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { @@ -8886,17 +8872,20 @@ func (ec *executionContext) _Query_clusters(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_Query_clusters, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_clusters(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Query().Clusters(ctx) }, nil, - ec.marshalNCluster2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐClusterᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Cluster) graphql.Marshaler { + return ec.marshalNCluster2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐClusterᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_clusters(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -8904,15 +8893,7 @@ func (ec *executionContext) fieldContext_Query_clusters(_ context.Context, field IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_Cluster_name(ctx, field) - case "partitions": - return ec.fieldContext_Cluster_partitions(ctx, field) - case "subClusters": - return ec.fieldContext_Cluster_subClusters(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Cluster", field.Name) + return ec.childFields_Cluster(ctx, field) }, } return fc, nil @@ -8923,17 +8904,20 @@ func (ec *executionContext) _Query_tags(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Query_tags, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_tags(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Query().Tags(ctx) }, nil, - ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Tag) graphql.Marshaler { + return ec.marshalNTag2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTagᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_tags(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -8941,17 +8925,7 @@ func (ec *executionContext) fieldContext_Query_tags(_ context.Context, field gra IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Tag_id(ctx, field) - case "type": - return ec.fieldContext_Tag_type(ctx, field) - case "name": - return ec.fieldContext_Tag_name(ctx, field) - case "scope": - return ec.fieldContext_Tag_scope(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Tag", field.Name) + return ec.childFields_Tag(ctx, field) }, } return fc, nil @@ -8962,17 +8936,20 @@ func (ec *executionContext) _Query_globalMetrics(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_Query_globalMetrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_globalMetrics(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.Query().GlobalMetrics(ctx) }, nil, - ec.marshalNGlobalMetricListItem2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐGlobalMetricListItemᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.GlobalMetricListItem) graphql.Marshaler { + return ec.marshalNGlobalMetricListItem2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐGlobalMetricListItemᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_globalMetrics(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -8980,19 +8957,7 @@ func (ec *executionContext) fieldContext_Query_globalMetrics(_ context.Context, IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_GlobalMetricListItem_name(ctx, field) - case "unit": - return ec.fieldContext_GlobalMetricListItem_unit(ctx, field) - case "scope": - return ec.fieldContext_GlobalMetricListItem_scope(ctx, field) - case "footprint": - return ec.fieldContext_GlobalMetricListItem_footprint(ctx, field) - case "availability": - return ec.fieldContext_GlobalMetricListItem_availability(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type GlobalMetricListItem", field.Name) + return ec.childFields_GlobalMetricListItem(ctx, field) }, } return fc, nil @@ -9003,18 +8968,21 @@ func (ec *executionContext) _Query_user(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Query_user, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_user(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().User(ctx, fc.Args["username"].(string)) }, nil, - ec.marshalOUser2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐUser, + func(ctx context.Context, selections ast.SelectionSet, v *model.User) graphql.Marshaler { + return ec.marshalOUser2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐUser(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Query_user(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9022,15 +8990,7 @@ func (ec *executionContext) fieldContext_Query_user(ctx context.Context, field g IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "username": - return ec.fieldContext_User_username(ctx, field) - case "name": - return ec.fieldContext_User_name(ctx, field) - case "email": - return ec.fieldContext_User_email(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type User", field.Name) + return ec.childFields_User(ctx, field) }, } defer func() { @@ -9052,18 +9012,21 @@ func (ec *executionContext) _Query_allocatedNodes(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_Query_allocatedNodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_allocatedNodes(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().AllocatedNodes(ctx, fc.Args["cluster"].(string)) }, nil, - ec.marshalNCount2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐCountᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.Count) graphql.Marshaler { + return ec.marshalNCount2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐCountᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_allocatedNodes(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9071,13 +9034,7 @@ func (ec *executionContext) fieldContext_Query_allocatedNodes(ctx context.Contex IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_Count_name(ctx, field) - case "count": - return ec.fieldContext_Count_count(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Count", field.Name) + return ec.childFields_Count(ctx, field) }, } defer func() { @@ -9099,18 +9056,21 @@ func (ec *executionContext) _Query_node(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Query_node, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_node(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().Node(ctx, fc.Args["id"].(string)) }, nil, - ec.marshalONode2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐNode, + func(ctx context.Context, selections ast.SelectionSet, v *schema.Node) graphql.Marshaler { + return ec.marshalONode2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐNode(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Query_node(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9118,33 +9078,7 @@ func (ec *executionContext) fieldContext_Query_node(ctx context.Context, field g IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Node_id(ctx, field) - case "hostname": - return ec.fieldContext_Node_hostname(ctx, field) - case "cluster": - return ec.fieldContext_Node_cluster(ctx, field) - case "subCluster": - return ec.fieldContext_Node_subCluster(ctx, field) - case "jobsRunning": - return ec.fieldContext_Node_jobsRunning(ctx, field) - case "cpusAllocated": - return ec.fieldContext_Node_cpusAllocated(ctx, field) - case "memoryAllocated": - return ec.fieldContext_Node_memoryAllocated(ctx, field) - case "gpusAllocated": - return ec.fieldContext_Node_gpusAllocated(ctx, field) - case "schedulerState": - return ec.fieldContext_Node_schedulerState(ctx, field) - case "healthState": - return ec.fieldContext_Node_healthState(ctx, field) - case "metaData": - return ec.fieldContext_Node_metaData(ctx, field) - case "healthData": - return ec.fieldContext_Node_healthData(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Node", field.Name) + return ec.childFields_Node(ctx, field) }, } defer func() { @@ -9166,18 +9100,21 @@ func (ec *executionContext) _Query_nodes(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext_Query_nodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_nodes(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().Nodes(ctx, fc.Args["filter"].([]*model.NodeFilter), fc.Args["order"].(*model.OrderByInput)) }, nil, - ec.marshalNNodeStateResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStateResultList, + func(ctx context.Context, selections ast.SelectionSet, v *model.NodeStateResultList) graphql.Marshaler { + return ec.marshalNNodeStateResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStateResultList(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_nodes(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9185,13 +9122,7 @@ func (ec *executionContext) fieldContext_Query_nodes(ctx context.Context, field IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "items": - return ec.fieldContext_NodeStateResultList_items(ctx, field) - case "count": - return ec.fieldContext_NodeStateResultList_count(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NodeStateResultList", field.Name) + return ec.childFields_NodeStateResultList(ctx, field) }, } defer func() { @@ -9213,18 +9144,21 @@ func (ec *executionContext) _Query_nodesWithMeta(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_Query_nodesWithMeta, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_nodesWithMeta(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().NodesWithMeta(ctx, fc.Args["filter"].([]*model.NodeFilter), fc.Args["order"].(*model.OrderByInput)) }, nil, - ec.marshalNNodeStateResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStateResultList, + func(ctx context.Context, selections ast.SelectionSet, v *model.NodeStateResultList) graphql.Marshaler { + return ec.marshalNNodeStateResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStateResultList(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_nodesWithMeta(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9232,13 +9166,7 @@ func (ec *executionContext) fieldContext_Query_nodesWithMeta(ctx context.Context IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "items": - return ec.fieldContext_NodeStateResultList_items(ctx, field) - case "count": - return ec.fieldContext_NodeStateResultList_count(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NodeStateResultList", field.Name) + return ec.childFields_NodeStateResultList(ctx, field) }, } defer func() { @@ -9260,18 +9188,21 @@ func (ec *executionContext) _Query_nodeStates(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_Query_nodeStates, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_nodeStates(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().NodeStates(ctx, fc.Args["filter"].([]*model.NodeFilter)) }, nil, - ec.marshalNNodeStates2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStatesᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.NodeStates) graphql.Marshaler { + return ec.marshalNNodeStates2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStatesᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_nodeStates(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9279,13 +9210,7 @@ func (ec *executionContext) fieldContext_Query_nodeStates(ctx context.Context, f IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "state": - return ec.fieldContext_NodeStates_state(ctx, field) - case "count": - return ec.fieldContext_NodeStates_count(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NodeStates", field.Name) + return ec.childFields_NodeStates(ctx, field) }, } defer func() { @@ -9307,18 +9232,21 @@ func (ec *executionContext) _Query_nodeStatesTimed(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Query_nodeStatesTimed, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_nodeStatesTimed(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().NodeStatesTimed(ctx, fc.Args["filter"].([]*model.NodeFilter), fc.Args["type"].(string)) }, nil, - ec.marshalNNodeStatesTimed2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStatesTimedᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.NodeStatesTimed) graphql.Marshaler { + return ec.marshalNNodeStatesTimed2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeStatesTimedᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_nodeStatesTimed(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9326,15 +9254,7 @@ func (ec *executionContext) fieldContext_Query_nodeStatesTimed(ctx context.Conte IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "state": - return ec.fieldContext_NodeStatesTimed_state(ctx, field) - case "counts": - return ec.fieldContext_NodeStatesTimed_counts(ctx, field) - case "times": - return ec.fieldContext_NodeStatesTimed_times(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NodeStatesTimed", field.Name) + return ec.childFields_NodeStatesTimed(ctx, field) }, } defer func() { @@ -9356,18 +9276,21 @@ func (ec *executionContext) _Query_job(ctx context.Context, field graphql.Collec ctx, ec.OperationContext, field, - ec.fieldContext_Query_job, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_job(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().Job(ctx, fc.Args["id"].(string)) }, nil, - ec.marshalOJob2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJob, + func(ctx context.Context, selections ast.SelectionSet, v *schema.Job) graphql.Marshaler { + return ec.marshalOJob2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐJob(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Query_job(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9375,61 +9298,7 @@ func (ec *executionContext) fieldContext_Query_job(ctx context.Context, field gr IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Job_id(ctx, field) - case "jobId": - return ec.fieldContext_Job_jobId(ctx, field) - case "user": - return ec.fieldContext_Job_user(ctx, field) - case "project": - return ec.fieldContext_Job_project(ctx, field) - case "cluster": - return ec.fieldContext_Job_cluster(ctx, field) - case "subCluster": - return ec.fieldContext_Job_subCluster(ctx, field) - case "startTime": - return ec.fieldContext_Job_startTime(ctx, field) - case "duration": - return ec.fieldContext_Job_duration(ctx, field) - case "walltime": - return ec.fieldContext_Job_walltime(ctx, field) - case "numNodes": - return ec.fieldContext_Job_numNodes(ctx, field) - case "numHWThreads": - return ec.fieldContext_Job_numHWThreads(ctx, field) - case "numAcc": - return ec.fieldContext_Job_numAcc(ctx, field) - case "energy": - return ec.fieldContext_Job_energy(ctx, field) - case "SMT": - return ec.fieldContext_Job_SMT(ctx, field) - case "shared": - return ec.fieldContext_Job_shared(ctx, field) - case "partition": - return ec.fieldContext_Job_partition(ctx, field) - case "arrayJobId": - return ec.fieldContext_Job_arrayJobId(ctx, field) - case "monitoringStatus": - return ec.fieldContext_Job_monitoringStatus(ctx, field) - case "state": - return ec.fieldContext_Job_state(ctx, field) - case "tags": - return ec.fieldContext_Job_tags(ctx, field) - case "resources": - return ec.fieldContext_Job_resources(ctx, field) - case "concurrentJobs": - return ec.fieldContext_Job_concurrentJobs(ctx, field) - case "footprint": - return ec.fieldContext_Job_footprint(ctx, field) - case "energyFootprint": - return ec.fieldContext_Job_energyFootprint(ctx, field) - case "metaData": - return ec.fieldContext_Job_metaData(ctx, field) - case "userData": - return ec.fieldContext_Job_userData(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Job", field.Name) + return ec.childFields_Job(ctx, field) }, } defer func() { @@ -9451,18 +9320,21 @@ func (ec *executionContext) _Query_jobMetrics(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_Query_jobMetrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_jobMetrics(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().JobMetrics(ctx, fc.Args["id"].(string), fc.Args["metrics"].([]string), fc.Args["scopes"].([]schema.MetricScope), fc.Args["resolution"].(*int), fc.Args["resampleAlgo"].(*model.ResampleAlgo)) }, nil, - ec.marshalNJobMetricWithName2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobMetricWithNameᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.JobMetricWithName) graphql.Marshaler { + return ec.marshalNJobMetricWithName2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobMetricWithNameᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_jobMetrics(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9470,15 +9342,7 @@ func (ec *executionContext) fieldContext_Query_jobMetrics(ctx context.Context, f IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_JobMetricWithName_name(ctx, field) - case "scope": - return ec.fieldContext_JobMetricWithName_scope(ctx, field) - case "metric": - return ec.fieldContext_JobMetricWithName_metric(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobMetricWithName", field.Name) + return ec.childFields_JobMetricWithName(ctx, field) }, } defer func() { @@ -9500,18 +9364,21 @@ func (ec *executionContext) _Query_jobStats(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_Query_jobStats, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_jobStats(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().JobStats(ctx, fc.Args["id"].(string), fc.Args["metrics"].([]string)) }, nil, - ec.marshalNNamedStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNamedStatsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.NamedStats) graphql.Marshaler { + return ec.marshalNNamedStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNamedStatsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_jobStats(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9519,13 +9386,7 @@ func (ec *executionContext) fieldContext_Query_jobStats(ctx context.Context, fie IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_NamedStats_name(ctx, field) - case "data": - return ec.fieldContext_NamedStats_data(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NamedStats", field.Name) + return ec.childFields_NamedStats(ctx, field) }, } defer func() { @@ -9547,18 +9408,21 @@ func (ec *executionContext) _Query_scopedJobStats(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_Query_scopedJobStats, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_scopedJobStats(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().ScopedJobStats(ctx, fc.Args["id"].(string), fc.Args["metrics"].([]string), fc.Args["scopes"].([]schema.MetricScope)) }, nil, - ec.marshalNNamedStatsWithScope2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNamedStatsWithScopeᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.NamedStatsWithScope) graphql.Marshaler { + return ec.marshalNNamedStatsWithScope2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNamedStatsWithScopeᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_scopedJobStats(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9566,15 +9430,7 @@ func (ec *executionContext) fieldContext_Query_scopedJobStats(ctx context.Contex IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_NamedStatsWithScope_name(ctx, field) - case "scope": - return ec.fieldContext_NamedStatsWithScope_scope(ctx, field) - case "stats": - return ec.fieldContext_NamedStatsWithScope_stats(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NamedStatsWithScope", field.Name) + return ec.childFields_NamedStatsWithScope(ctx, field) }, } defer func() { @@ -9596,18 +9452,21 @@ func (ec *executionContext) _Query_jobs(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_Query_jobs, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_jobs(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().Jobs(ctx, fc.Args["filter"].([]*model.JobFilter), fc.Args["page"].(*model.PageRequest), fc.Args["order"].(*model.OrderByInput)) }, nil, - ec.marshalNJobResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobResultList, + func(ctx context.Context, selections ast.SelectionSet, v *model.JobResultList) graphql.Marshaler { + return ec.marshalNJobResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobResultList(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_jobs(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9615,19 +9474,7 @@ func (ec *executionContext) fieldContext_Query_jobs(ctx context.Context, field g IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "items": - return ec.fieldContext_JobResultList_items(ctx, field) - case "offset": - return ec.fieldContext_JobResultList_offset(ctx, field) - case "limit": - return ec.fieldContext_JobResultList_limit(ctx, field) - case "count": - return ec.fieldContext_JobResultList_count(ctx, field) - case "hasNextPage": - return ec.fieldContext_JobResultList_hasNextPage(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobResultList", field.Name) + return ec.childFields_JobResultList(ctx, field) }, } defer func() { @@ -9649,18 +9496,21 @@ func (ec *executionContext) _Query_jobsStatistics(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_Query_jobsStatistics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_jobsStatistics(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().JobsStatistics(ctx, fc.Args["filter"].([]*model.JobFilter), fc.Args["metrics"].([]string), fc.Args["page"].(*model.PageRequest), fc.Args["sortBy"].(*model.SortByAggregate), fc.Args["groupBy"].(*model.Aggregate), fc.Args["numDurationBins"].(*string), fc.Args["numMetricBins"].(*int)) }, nil, - ec.marshalNJobsStatistics2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobsStatisticsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.JobsStatistics) graphql.Marshaler { + return ec.marshalNJobsStatistics2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobsStatisticsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_jobsStatistics(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9668,45 +9518,7 @@ func (ec *executionContext) fieldContext_Query_jobsStatistics(ctx context.Contex IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_JobsStatistics_id(ctx, field) - case "name": - return ec.fieldContext_JobsStatistics_name(ctx, field) - case "totalUsers": - return ec.fieldContext_JobsStatistics_totalUsers(ctx, field) - case "totalJobs": - return ec.fieldContext_JobsStatistics_totalJobs(ctx, field) - case "runningJobs": - return ec.fieldContext_JobsStatistics_runningJobs(ctx, field) - case "shortJobs": - return ec.fieldContext_JobsStatistics_shortJobs(ctx, field) - case "totalWalltime": - return ec.fieldContext_JobsStatistics_totalWalltime(ctx, field) - case "totalNodes": - return ec.fieldContext_JobsStatistics_totalNodes(ctx, field) - case "totalNodeHours": - return ec.fieldContext_JobsStatistics_totalNodeHours(ctx, field) - case "totalCores": - return ec.fieldContext_JobsStatistics_totalCores(ctx, field) - case "totalCoreHours": - return ec.fieldContext_JobsStatistics_totalCoreHours(ctx, field) - case "totalAccs": - return ec.fieldContext_JobsStatistics_totalAccs(ctx, field) - case "totalAccHours": - return ec.fieldContext_JobsStatistics_totalAccHours(ctx, field) - case "histDuration": - return ec.fieldContext_JobsStatistics_histDuration(ctx, field) - case "histNumNodes": - return ec.fieldContext_JobsStatistics_histNumNodes(ctx, field) - case "histNumCores": - return ec.fieldContext_JobsStatistics_histNumCores(ctx, field) - case "histNumAccs": - return ec.fieldContext_JobsStatistics_histNumAccs(ctx, field) - case "histMetrics": - return ec.fieldContext_JobsStatistics_histMetrics(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobsStatistics", field.Name) + return ec.childFields_JobsStatistics(ctx, field) }, } defer func() { @@ -9728,18 +9540,21 @@ func (ec *executionContext) _Query_jobsMetricStats(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Query_jobsMetricStats, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_jobsMetricStats(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().JobsMetricStats(ctx, fc.Args["filter"].([]*model.JobFilter), fc.Args["metrics"].([]string)) }, nil, - ec.marshalNJobStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobStatsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.JobStats) graphql.Marshaler { + return ec.marshalNJobStats2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐJobStatsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_jobsMetricStats(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9747,29 +9562,7 @@ func (ec *executionContext) fieldContext_Query_jobsMetricStats(ctx context.Conte IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_JobStats_id(ctx, field) - case "jobId": - return ec.fieldContext_JobStats_jobId(ctx, field) - case "startTime": - return ec.fieldContext_JobStats_startTime(ctx, field) - case "duration": - return ec.fieldContext_JobStats_duration(ctx, field) - case "cluster": - return ec.fieldContext_JobStats_cluster(ctx, field) - case "subCluster": - return ec.fieldContext_JobStats_subCluster(ctx, field) - case "numNodes": - return ec.fieldContext_JobStats_numNodes(ctx, field) - case "numHWThreads": - return ec.fieldContext_JobStats_numHWThreads(ctx, field) - case "numAccelerators": - return ec.fieldContext_JobStats_numAccelerators(ctx, field) - case "stats": - return ec.fieldContext_JobStats_stats(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type JobStats", field.Name) + return ec.childFields_JobStats(ctx, field) }, } defer func() { @@ -9791,18 +9584,21 @@ func (ec *executionContext) _Query_jobsFootprints(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_Query_jobsFootprints, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_jobsFootprints(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().JobsFootprints(ctx, fc.Args["filter"].([]*model.JobFilter), fc.Args["metrics"].([]string)) }, nil, - ec.marshalOFootprints2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐFootprints, + func(ctx context.Context, selections ast.SelectionSet, v *model.Footprints) graphql.Marshaler { + return ec.marshalOFootprints2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐFootprints(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Query_jobsFootprints(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9810,13 +9606,7 @@ func (ec *executionContext) fieldContext_Query_jobsFootprints(ctx context.Contex IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "timeWeights": - return ec.fieldContext_Footprints_timeWeights(ctx, field) - case "metrics": - return ec.fieldContext_Footprints_metrics(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Footprints", field.Name) + return ec.childFields_Footprints(ctx, field) }, } defer func() { @@ -9838,18 +9628,21 @@ func (ec *executionContext) _Query_rooflineHeatmap(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Query_rooflineHeatmap, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_rooflineHeatmap(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().RooflineHeatmap(ctx, fc.Args["filter"].([]*model.JobFilter), fc.Args["rows"].(int), fc.Args["cols"].(int), fc.Args["minX"].(float64), fc.Args["minY"].(float64), fc.Args["maxX"].(float64), fc.Args["maxY"].(float64)) }, nil, - ec.marshalNFloat2ᚕᚕfloat64ᚄ, + func(ctx context.Context, selections ast.SelectionSet, v [][]float64) graphql.Marshaler { + return ec.marshalNFloat2ᚕᚕfloat64ᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_rooflineHeatmap(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9879,18 +9672,21 @@ func (ec *executionContext) _Query_nodeMetrics(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_Query_nodeMetrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_nodeMetrics(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().NodeMetrics(ctx, fc.Args["cluster"].(string), fc.Args["nodes"].([]string), fc.Args["scopes"].([]schema.MetricScope), fc.Args["metrics"].([]string), fc.Args["from"].(time.Time), fc.Args["to"].(time.Time)) }, nil, - ec.marshalNNodeMetrics2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeMetricsᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*model.NodeMetrics) graphql.Marshaler { + return ec.marshalNNodeMetrics2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodeMetricsᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_nodeMetrics(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9898,19 +9694,7 @@ func (ec *executionContext) fieldContext_Query_nodeMetrics(ctx context.Context, IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "host": - return ec.fieldContext_NodeMetrics_host(ctx, field) - case "nodeState": - return ec.fieldContext_NodeMetrics_nodeState(ctx, field) - case "metricHealth": - return ec.fieldContext_NodeMetrics_metricHealth(ctx, field) - case "subCluster": - return ec.fieldContext_NodeMetrics_subCluster(ctx, field) - case "metrics": - return ec.fieldContext_NodeMetrics_metrics(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NodeMetrics", field.Name) + return ec.childFields_NodeMetrics(ctx, field) }, } defer func() { @@ -9932,18 +9716,21 @@ func (ec *executionContext) _Query_nodeMetricsList(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Query_nodeMetricsList, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_nodeMetricsList(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().NodeMetricsList(ctx, fc.Args["cluster"].(string), fc.Args["subCluster"].(string), fc.Args["stateFilter"].(string), fc.Args["nodeFilter"].(string), fc.Args["scopes"].([]schema.MetricScope), fc.Args["metrics"].([]string), fc.Args["from"].(time.Time), fc.Args["to"].(time.Time), fc.Args["page"].(*model.PageRequest), fc.Args["resolution"].(*int), fc.Args["resampleAlgo"].(*model.ResampleAlgo)) }, nil, - ec.marshalNNodesResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodesResultList, + func(ctx context.Context, selections ast.SelectionSet, v *model.NodesResultList) graphql.Marshaler { + return ec.marshalNNodesResultList2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐNodesResultList(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_nodeMetricsList(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -9951,21 +9738,7 @@ func (ec *executionContext) fieldContext_Query_nodeMetricsList(ctx context.Conte IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "items": - return ec.fieldContext_NodesResultList_items(ctx, field) - case "offset": - return ec.fieldContext_NodesResultList_offset(ctx, field) - case "limit": - return ec.fieldContext_NodesResultList_limit(ctx, field) - case "count": - return ec.fieldContext_NodesResultList_count(ctx, field) - case "totalNodes": - return ec.fieldContext_NodesResultList_totalNodes(ctx, field) - case "hasNextPage": - return ec.fieldContext_NodesResultList_hasNextPage(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type NodesResultList", field.Name) + return ec.childFields_NodesResultList(ctx, field) }, } defer func() { @@ -9987,18 +9760,21 @@ func (ec *executionContext) _Query_clusterMetrics(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_Query_clusterMetrics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query_clusterMetrics(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.Resolvers.Query().ClusterMetrics(ctx, fc.Args["cluster"].(string), fc.Args["metrics"].([]string), fc.Args["from"].(time.Time), fc.Args["to"].(time.Time)) }, nil, - ec.marshalNClusterMetrics2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐClusterMetrics, + func(ctx context.Context, selections ast.SelectionSet, v *model.ClusterMetrics) graphql.Marshaler { + return ec.marshalNClusterMetrics2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑbackendᚋinternalᚋgraphᚋmodelᚐClusterMetrics(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Query_clusterMetrics(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -10006,13 +9782,7 @@ func (ec *executionContext) fieldContext_Query_clusterMetrics(ctx context.Contex IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "nodeCount": - return ec.fieldContext_ClusterMetrics_nodeCount(ctx, field) - case "metrics": - return ec.fieldContext_ClusterMetrics_metrics(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type ClusterMetrics", field.Name) + return ec.childFields_ClusterMetrics(ctx, field) }, } defer func() { @@ -10034,18 +9804,21 @@ func (ec *executionContext) _Query___type(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Query___type, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query___type(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return ec.IntrospectType(fc.Args["name"].(string)) }, nil, - ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Query___type(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -10053,31 +9826,7 @@ func (ec *executionContext) fieldContext_Query___type(ctx context.Context, field IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } defer func() { @@ -10099,17 +9848,20 @@ func (ec *executionContext) _Query___schema(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_Query___schema, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Query___schema(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.IntrospectSchema() }, nil, - ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Schema) graphql.Marshaler { + return ec.marshalO__Schema2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐSchema(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Query___schema(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Query", @@ -10117,21 +9869,7 @@ func (ec *executionContext) fieldContext_Query___schema(_ context.Context, field IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "description": - return ec.fieldContext___Schema_description(ctx, field) - case "types": - return ec.fieldContext___Schema_types(ctx, field) - case "queryType": - return ec.fieldContext___Schema_queryType(ctx, field) - case "mutationType": - return ec.fieldContext___Schema_mutationType(ctx, field) - case "subscriptionType": - return ec.fieldContext___Schema_subscriptionType(ctx, field) - case "directives": - return ec.fieldContext___Schema_directives(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Schema", field.Name) + return ec.childFields___Schema(ctx, field) }, } return fc, nil @@ -10142,28 +9880,22 @@ func (ec *executionContext) _Resource_hostname(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_Resource_hostname, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Resource_hostname(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Hostname, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Resource_hostname(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Resource", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Resource", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Resource_hwthreads(ctx context.Context, field graphql.CollectedField, obj *schema.Resource) (ret graphql.Marshaler) { @@ -10171,28 +9903,22 @@ func (ec *executionContext) _Resource_hwthreads(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_Resource_hwthreads, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Resource_hwthreads(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.HWThreads, nil }, nil, - ec.marshalOInt2ᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []int) graphql.Marshaler { + return ec.marshalOInt2ᚕintᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Resource_hwthreads(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Resource", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Resource", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Resource_accelerators(ctx context.Context, field graphql.CollectedField, obj *schema.Resource) (ret graphql.Marshaler) { @@ -10200,28 +9926,22 @@ func (ec *executionContext) _Resource_accelerators(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Resource_accelerators, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Resource_accelerators(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Accelerators, nil }, nil, - ec.marshalOString2ᚕstringᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []string) graphql.Marshaler { + return ec.marshalOString2ᚕstringᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Resource_accelerators(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Resource", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Resource", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Resource_configuration(ctx context.Context, field graphql.CollectedField, obj *schema.Resource) (ret graphql.Marshaler) { @@ -10229,28 +9949,22 @@ func (ec *executionContext) _Resource_configuration(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_Resource_configuration, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Resource_configuration(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Configuration, nil }, nil, - ec.marshalOString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalOString2string(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Resource_configuration(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Resource", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Resource", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _ScopedStats_hostname(ctx context.Context, field graphql.CollectedField, obj *model.ScopedStats) (ret graphql.Marshaler) { @@ -10258,28 +9972,22 @@ func (ec *executionContext) _ScopedStats_hostname(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_ScopedStats_hostname, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ScopedStats_hostname(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Hostname, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ScopedStats_hostname(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ScopedStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ScopedStats", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _ScopedStats_id(ctx context.Context, field graphql.CollectedField, obj *model.ScopedStats) (ret graphql.Marshaler) { @@ -10287,28 +9995,22 @@ func (ec *executionContext) _ScopedStats_id(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext_ScopedStats_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ScopedStats_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_ScopedStats_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "ScopedStats", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("ScopedStats", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _ScopedStats_data(ctx context.Context, field graphql.CollectedField, obj *model.ScopedStats) (ret graphql.Marshaler) { @@ -10316,17 +10018,20 @@ func (ec *executionContext) _ScopedStats_data(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_ScopedStats_data, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_ScopedStats_data(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Data, nil }, nil, - ec.marshalNMetricStatistics2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricStatistics, + func(ctx context.Context, selections ast.SelectionSet, v *schema.MetricStatistics) graphql.Marshaler { + return ec.marshalNMetricStatistics2ᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricStatistics(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_ScopedStats_data(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "ScopedStats", @@ -10334,15 +10039,7 @@ func (ec *executionContext) fieldContext_ScopedStats_data(_ context.Context, fie IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "avg": - return ec.fieldContext_MetricStatistics_avg(ctx, field) - case "min": - return ec.fieldContext_MetricStatistics_min(ctx, field) - case "max": - return ec.fieldContext_MetricStatistics_max(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricStatistics", field.Name) + return ec.childFields_MetricStatistics(ctx, field) }, } return fc, nil @@ -10353,28 +10050,22 @@ func (ec *executionContext) _Series_hostname(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_Series_hostname, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Series_hostname(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Hostname, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Series_hostname(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Series", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Series", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Series_id(ctx context.Context, field graphql.CollectedField, obj *schema.Series) (ret graphql.Marshaler) { @@ -10382,28 +10073,22 @@ func (ec *executionContext) _Series_id(ctx context.Context, field graphql.Collec ctx, ec.OperationContext, field, - ec.fieldContext_Series_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Series_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Series_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Series", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Series", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Series_statistics(ctx context.Context, field graphql.CollectedField, obj *schema.Series) (ret graphql.Marshaler) { @@ -10411,17 +10096,20 @@ func (ec *executionContext) _Series_statistics(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext_Series_statistics, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Series_statistics(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Statistics, nil }, nil, - ec.marshalOMetricStatistics2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricStatistics, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricStatistics) graphql.Marshaler { + return ec.marshalOMetricStatistics2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricStatistics(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Series_statistics(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Series", @@ -10429,15 +10117,7 @@ func (ec *executionContext) fieldContext_Series_statistics(_ context.Context, fi IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "avg": - return ec.fieldContext_MetricStatistics_avg(ctx, field) - case "min": - return ec.fieldContext_MetricStatistics_min(ctx, field) - case "max": - return ec.fieldContext_MetricStatistics_max(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricStatistics", field.Name) + return ec.childFields_MetricStatistics(ctx, field) }, } return fc, nil @@ -10448,28 +10128,22 @@ func (ec *executionContext) _Series_data(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext_Series_data, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Series_data(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Data, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Series_data(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Series", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Series", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _StatsSeries_mean(ctx context.Context, field graphql.CollectedField, obj *schema.StatsSeries) (ret graphql.Marshaler) { @@ -10477,28 +10151,22 @@ func (ec *executionContext) _StatsSeries_mean(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_StatsSeries_mean, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_StatsSeries_mean(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Mean, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_StatsSeries_mean(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "StatsSeries", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("StatsSeries", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _StatsSeries_median(ctx context.Context, field graphql.CollectedField, obj *schema.StatsSeries) (ret graphql.Marshaler) { @@ -10506,28 +10174,22 @@ func (ec *executionContext) _StatsSeries_median(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_StatsSeries_median, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_StatsSeries_median(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Median, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_StatsSeries_median(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "StatsSeries", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("StatsSeries", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _StatsSeries_min(ctx context.Context, field graphql.CollectedField, obj *schema.StatsSeries) (ret graphql.Marshaler) { @@ -10535,28 +10197,22 @@ func (ec *executionContext) _StatsSeries_min(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_StatsSeries_min, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_StatsSeries_min(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Min, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_StatsSeries_min(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "StatsSeries", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("StatsSeries", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _StatsSeries_max(ctx context.Context, field graphql.CollectedField, obj *schema.StatsSeries) (ret graphql.Marshaler) { @@ -10564,28 +10220,22 @@ func (ec *executionContext) _StatsSeries_max(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_StatsSeries_max, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_StatsSeries_max(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Max, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_StatsSeries_max(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "StatsSeries", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("StatsSeries", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _SubCluster_name(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10593,28 +10243,22 @@ func (ec *executionContext) _SubCluster_name(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _SubCluster_nodes(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10622,28 +10266,22 @@ func (ec *executionContext) _SubCluster_nodes(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_nodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_nodes(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Nodes, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_nodes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _SubCluster_numberOfNodes(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10651,28 +10289,22 @@ func (ec *executionContext) _SubCluster_numberOfNodes(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_numberOfNodes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_numberOfNodes(ctx, field) + }, func(ctx context.Context) (any, error) { return ec.Resolvers.SubCluster().NumberOfNodes(ctx, obj) }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_numberOfNodes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, true, true, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _SubCluster_processorType(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10680,28 +10312,22 @@ func (ec *executionContext) _SubCluster_processorType(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_processorType, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_processorType(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ProcessorType, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_processorType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _SubCluster_socketsPerNode(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10709,28 +10335,22 @@ func (ec *executionContext) _SubCluster_socketsPerNode(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_socketsPerNode, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_socketsPerNode(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SocketsPerNode, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_socketsPerNode(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _SubCluster_coresPerSocket(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10738,28 +10358,22 @@ func (ec *executionContext) _SubCluster_coresPerSocket(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_coresPerSocket, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_coresPerSocket(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.CoresPerSocket, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_coresPerSocket(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _SubCluster_threadsPerCore(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10767,28 +10381,22 @@ func (ec *executionContext) _SubCluster_threadsPerCore(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_threadsPerCore, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_threadsPerCore(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ThreadsPerCore, nil }, nil, - ec.marshalNInt2int, + func(ctx context.Context, selections ast.SelectionSet, v int) graphql.Marshaler { + return ec.marshalNInt2int(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_threadsPerCore(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _SubCluster_flopRateScalar(ctx context.Context, field graphql.CollectedField, obj *schema.SubCluster) (ret graphql.Marshaler) { @@ -10796,17 +10404,20 @@ func (ec *executionContext) _SubCluster_flopRateScalar(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_flopRateScalar, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_flopRateScalar(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.FlopRateScalar, nil }, nil, - ec.marshalNMetricValue2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricValue, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricValue) graphql.Marshaler { + return ec.marshalNMetricValue2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricValue(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_flopRateScalar(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "SubCluster", @@ -10814,15 +10425,7 @@ func (ec *executionContext) fieldContext_SubCluster_flopRateScalar(_ context.Con IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_MetricValue_name(ctx, field) - case "unit": - return ec.fieldContext_MetricValue_unit(ctx, field) - case "value": - return ec.fieldContext_MetricValue_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricValue", field.Name) + return ec.childFields_MetricValue(ctx, field) }, } return fc, nil @@ -10833,17 +10436,20 @@ func (ec *executionContext) _SubCluster_flopRateSimd(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_flopRateSimd, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_flopRateSimd(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.FlopRateSimd, nil }, nil, - ec.marshalNMetricValue2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricValue, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricValue) graphql.Marshaler { + return ec.marshalNMetricValue2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricValue(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_flopRateSimd(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "SubCluster", @@ -10851,15 +10457,7 @@ func (ec *executionContext) fieldContext_SubCluster_flopRateSimd(_ context.Conte IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_MetricValue_name(ctx, field) - case "unit": - return ec.fieldContext_MetricValue_unit(ctx, field) - case "value": - return ec.fieldContext_MetricValue_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricValue", field.Name) + return ec.childFields_MetricValue(ctx, field) }, } return fc, nil @@ -10870,17 +10468,20 @@ func (ec *executionContext) _SubCluster_memoryBandwidth(ctx context.Context, fie ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_memoryBandwidth, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_memoryBandwidth(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.MemoryBandwidth, nil }, nil, - ec.marshalNMetricValue2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricValue, + func(ctx context.Context, selections ast.SelectionSet, v schema.MetricValue) graphql.Marshaler { + return ec.marshalNMetricValue2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricValue(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_memoryBandwidth(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "SubCluster", @@ -10888,15 +10489,7 @@ func (ec *executionContext) fieldContext_SubCluster_memoryBandwidth(_ context.Co IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_MetricValue_name(ctx, field) - case "unit": - return ec.fieldContext_MetricValue_unit(ctx, field) - case "value": - return ec.fieldContext_MetricValue_value(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricValue", field.Name) + return ec.childFields_MetricValue(ctx, field) }, } return fc, nil @@ -10907,17 +10500,20 @@ func (ec *executionContext) _SubCluster_topology(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_topology, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_topology(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Topology, nil }, nil, - ec.marshalNTopology2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTopology, + func(ctx context.Context, selections ast.SelectionSet, v schema.Topology) graphql.Marshaler { + return ec.marshalNTopology2githubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐTopology(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_topology(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "SubCluster", @@ -10925,21 +10521,7 @@ func (ec *executionContext) fieldContext_SubCluster_topology(_ context.Context, IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "node": - return ec.fieldContext_Topology_node(ctx, field) - case "socket": - return ec.fieldContext_Topology_socket(ctx, field) - case "memoryDomain": - return ec.fieldContext_Topology_memoryDomain(ctx, field) - case "die": - return ec.fieldContext_Topology_die(ctx, field) - case "core": - return ec.fieldContext_Topology_core(ctx, field) - case "accelerators": - return ec.fieldContext_Topology_accelerators(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Topology", field.Name) + return ec.childFields_Topology(ctx, field) }, } return fc, nil @@ -10950,17 +10532,20 @@ func (ec *executionContext) _SubCluster_metricConfig(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_metricConfig, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_metricConfig(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.MetricConfig, nil }, nil, - ec.marshalNMetricConfig2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricConfigᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.MetricConfig) graphql.Marshaler { + return ec.marshalNMetricConfig2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐMetricConfigᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_metricConfig(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "SubCluster", @@ -10968,31 +10553,7 @@ func (ec *executionContext) fieldContext_SubCluster_metricConfig(_ context.Conte IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext_MetricConfig_name(ctx, field) - case "unit": - return ec.fieldContext_MetricConfig_unit(ctx, field) - case "scope": - return ec.fieldContext_MetricConfig_scope(ctx, field) - case "aggregation": - return ec.fieldContext_MetricConfig_aggregation(ctx, field) - case "timestep": - return ec.fieldContext_MetricConfig_timestep(ctx, field) - case "peak": - return ec.fieldContext_MetricConfig_peak(ctx, field) - case "normal": - return ec.fieldContext_MetricConfig_normal(ctx, field) - case "caution": - return ec.fieldContext_MetricConfig_caution(ctx, field) - case "alert": - return ec.fieldContext_MetricConfig_alert(ctx, field) - case "lowerIsBetter": - return ec.fieldContext_MetricConfig_lowerIsBetter(ctx, field) - case "subClusters": - return ec.fieldContext_MetricConfig_subClusters(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type MetricConfig", field.Name) + return ec.childFields_MetricConfig(ctx, field) }, } return fc, nil @@ -11003,28 +10564,22 @@ func (ec *executionContext) _SubCluster_footprint(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_SubCluster_footprint, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubCluster_footprint(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Footprint, nil }, nil, - ec.marshalNString2ᚕstringᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []string) graphql.Marshaler { + return ec.marshalNString2ᚕstringᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubCluster_footprint(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubCluster", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubCluster", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _SubClusterConfig_name(ctx context.Context, field graphql.CollectedField, obj *schema.SubClusterConfig) (ret graphql.Marshaler) { @@ -11032,28 +10587,22 @@ func (ec *executionContext) _SubClusterConfig_name(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_SubClusterConfig_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubClusterConfig_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_SubClusterConfig_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubClusterConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubClusterConfig", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _SubClusterConfig_peak(ctx context.Context, field graphql.CollectedField, obj *schema.SubClusterConfig) (ret graphql.Marshaler) { @@ -11061,28 +10610,22 @@ func (ec *executionContext) _SubClusterConfig_peak(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_SubClusterConfig_peak, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubClusterConfig_peak(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Peak, nil }, nil, - ec.marshalOFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalOFloat2float64(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_SubClusterConfig_peak(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubClusterConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubClusterConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _SubClusterConfig_normal(ctx context.Context, field graphql.CollectedField, obj *schema.SubClusterConfig) (ret graphql.Marshaler) { @@ -11090,28 +10633,22 @@ func (ec *executionContext) _SubClusterConfig_normal(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_SubClusterConfig_normal, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubClusterConfig_normal(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Normal, nil }, nil, - ec.marshalOFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalOFloat2float64(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_SubClusterConfig_normal(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubClusterConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubClusterConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _SubClusterConfig_caution(ctx context.Context, field graphql.CollectedField, obj *schema.SubClusterConfig) (ret graphql.Marshaler) { @@ -11119,28 +10656,22 @@ func (ec *executionContext) _SubClusterConfig_caution(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_SubClusterConfig_caution, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubClusterConfig_caution(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Caution, nil }, nil, - ec.marshalOFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalOFloat2float64(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_SubClusterConfig_caution(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubClusterConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubClusterConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _SubClusterConfig_alert(ctx context.Context, field graphql.CollectedField, obj *schema.SubClusterConfig) (ret graphql.Marshaler) { @@ -11148,28 +10679,22 @@ func (ec *executionContext) _SubClusterConfig_alert(ctx context.Context, field g ctx, ec.OperationContext, field, - ec.fieldContext_SubClusterConfig_alert, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubClusterConfig_alert(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Alert, nil }, nil, - ec.marshalOFloat2float64, + func(ctx context.Context, selections ast.SelectionSet, v float64) graphql.Marshaler { + return ec.marshalOFloat2float64(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_SubClusterConfig_alert(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubClusterConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Float does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubClusterConfig", field, false, false, errors.New("field of type Float does not have child fields")) } func (ec *executionContext) _SubClusterConfig_remove(ctx context.Context, field graphql.CollectedField, obj *schema.SubClusterConfig) (ret graphql.Marshaler) { @@ -11177,28 +10702,22 @@ func (ec *executionContext) _SubClusterConfig_remove(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext_SubClusterConfig_remove, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_SubClusterConfig_remove(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Remove, nil }, nil, - ec.marshalOBoolean2bool, + func(ctx context.Context, selections ast.SelectionSet, v bool) graphql.Marshaler { + return ec.marshalOBoolean2bool(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_SubClusterConfig_remove(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "SubClusterConfig", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("SubClusterConfig", field, false, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) _Tag_id(ctx context.Context, field graphql.CollectedField, obj *schema.Tag) (ret graphql.Marshaler) { @@ -11206,28 +10725,22 @@ func (ec *executionContext) _Tag_id(ctx context.Context, field graphql.Collected ctx, ec.OperationContext, field, - ec.fieldContext_Tag_id, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Tag_id(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.ID, nil }, nil, - ec.marshalNID2int64, + func(ctx context.Context, selections ast.SelectionSet, v int64) graphql.Marshaler { + return ec.marshalNID2int64(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Tag_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Tag", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type ID does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Tag", field, false, false, errors.New("field of type ID does not have child fields")) } func (ec *executionContext) _Tag_type(ctx context.Context, field graphql.CollectedField, obj *schema.Tag) (ret graphql.Marshaler) { @@ -11235,28 +10748,22 @@ func (ec *executionContext) _Tag_type(ctx context.Context, field graphql.Collect ctx, ec.OperationContext, field, - ec.fieldContext_Tag_type, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Tag_type(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Type, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Tag_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Tag", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Tag", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Tag_name(ctx context.Context, field graphql.CollectedField, obj *schema.Tag) (ret graphql.Marshaler) { @@ -11264,28 +10771,22 @@ func (ec *executionContext) _Tag_name(ctx context.Context, field graphql.Collect ctx, ec.OperationContext, field, - ec.fieldContext_Tag_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Tag_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Tag_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Tag", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Tag", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Tag_scope(ctx context.Context, field graphql.CollectedField, obj *schema.Tag) (ret graphql.Marshaler) { @@ -11293,28 +10794,22 @@ func (ec *executionContext) _Tag_scope(ctx context.Context, field graphql.Collec ctx, ec.OperationContext, field, - ec.fieldContext_Tag_scope, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Tag_scope(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Scope, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Tag_scope(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Tag", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Tag", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _TimeRangeOutput_range(ctx context.Context, field graphql.CollectedField, obj *model.TimeRangeOutput) (ret graphql.Marshaler) { @@ -11322,28 +10817,22 @@ func (ec *executionContext) _TimeRangeOutput_range(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_TimeRangeOutput_range, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_TimeRangeOutput_range(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Range, nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_TimeRangeOutput_range(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "TimeRangeOutput", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("TimeRangeOutput", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _TimeRangeOutput_from(ctx context.Context, field graphql.CollectedField, obj *model.TimeRangeOutput) (ret graphql.Marshaler) { @@ -11351,28 +10840,22 @@ func (ec *executionContext) _TimeRangeOutput_from(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_TimeRangeOutput_from, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_TimeRangeOutput_from(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.From, nil }, nil, - ec.marshalNTime2timeᚐTime, + func(ctx context.Context, selections ast.SelectionSet, v time.Time) graphql.Marshaler { + return ec.marshalNTime2timeᚐTime(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_TimeRangeOutput_from(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "TimeRangeOutput", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Time does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("TimeRangeOutput", field, false, false, errors.New("field of type Time does not have child fields")) } func (ec *executionContext) _TimeRangeOutput_to(ctx context.Context, field graphql.CollectedField, obj *model.TimeRangeOutput) (ret graphql.Marshaler) { @@ -11380,28 +10863,22 @@ func (ec *executionContext) _TimeRangeOutput_to(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext_TimeRangeOutput_to, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_TimeRangeOutput_to(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.To, nil }, nil, - ec.marshalNTime2timeᚐTime, + func(ctx context.Context, selections ast.SelectionSet, v time.Time) graphql.Marshaler { + return ec.marshalNTime2timeᚐTime(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_TimeRangeOutput_to(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "TimeRangeOutput", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Time does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("TimeRangeOutput", field, false, false, errors.New("field of type Time does not have child fields")) } func (ec *executionContext) _TimeWeights_nodeHours(ctx context.Context, field graphql.CollectedField, obj *model.TimeWeights) (ret graphql.Marshaler) { @@ -11409,28 +10886,22 @@ func (ec *executionContext) _TimeWeights_nodeHours(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_TimeWeights_nodeHours, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_TimeWeights_nodeHours(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.NodeHours, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_TimeWeights_nodeHours(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "TimeWeights", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("TimeWeights", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _TimeWeights_accHours(ctx context.Context, field graphql.CollectedField, obj *model.TimeWeights) (ret graphql.Marshaler) { @@ -11438,28 +10909,22 @@ func (ec *executionContext) _TimeWeights_accHours(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext_TimeWeights_accHours, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_TimeWeights_accHours(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.AccHours, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_TimeWeights_accHours(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "TimeWeights", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("TimeWeights", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _TimeWeights_coreHours(ctx context.Context, field graphql.CollectedField, obj *model.TimeWeights) (ret graphql.Marshaler) { @@ -11467,28 +10932,22 @@ func (ec *executionContext) _TimeWeights_coreHours(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_TimeWeights_coreHours, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_TimeWeights_coreHours(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.CoreHours, nil }, nil, - ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []schema.Float) graphql.Marshaler { + return ec.marshalNNullableFloat2ᚕgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐFloatᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_TimeWeights_coreHours(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "TimeWeights", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type NullableFloat does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("TimeWeights", field, false, false, errors.New("field of type NullableFloat does not have child fields")) } func (ec *executionContext) _Topology_node(ctx context.Context, field graphql.CollectedField, obj *schema.Topology) (ret graphql.Marshaler) { @@ -11496,28 +10955,22 @@ func (ec *executionContext) _Topology_node(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Topology_node, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Topology_node(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Node, nil }, nil, - ec.marshalOInt2ᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []int) graphql.Marshaler { + return ec.marshalOInt2ᚕintᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Topology_node(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Topology", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Topology", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Topology_socket(ctx context.Context, field graphql.CollectedField, obj *schema.Topology) (ret graphql.Marshaler) { @@ -11525,28 +10978,22 @@ func (ec *executionContext) _Topology_socket(ctx context.Context, field graphql. ctx, ec.OperationContext, field, - ec.fieldContext_Topology_socket, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Topology_socket(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Socket, nil }, nil, - ec.marshalOInt2ᚕᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v [][]int) graphql.Marshaler { + return ec.marshalOInt2ᚕᚕintᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Topology_socket(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Topology", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Topology", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Topology_memoryDomain(ctx context.Context, field graphql.CollectedField, obj *schema.Topology) (ret graphql.Marshaler) { @@ -11554,28 +11001,22 @@ func (ec *executionContext) _Topology_memoryDomain(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Topology_memoryDomain, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Topology_memoryDomain(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.MemoryDomain, nil }, nil, - ec.marshalOInt2ᚕᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v [][]int) graphql.Marshaler { + return ec.marshalOInt2ᚕᚕintᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Topology_memoryDomain(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Topology", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Topology", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Topology_die(ctx context.Context, field graphql.CollectedField, obj *schema.Topology) (ret graphql.Marshaler) { @@ -11583,28 +11024,22 @@ func (ec *executionContext) _Topology_die(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext_Topology_die, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Topology_die(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Die, nil }, nil, - ec.marshalOInt2ᚕᚕᚖintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v [][]*int) graphql.Marshaler { + return ec.marshalOInt2ᚕᚕᚖintᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Topology_die(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Topology", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Topology", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Topology_core(ctx context.Context, field graphql.CollectedField, obj *schema.Topology) (ret graphql.Marshaler) { @@ -11612,28 +11047,22 @@ func (ec *executionContext) _Topology_core(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_Topology_core, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Topology_core(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Core, nil }, nil, - ec.marshalOInt2ᚕᚕintᚄ, + func(ctx context.Context, selections ast.SelectionSet, v [][]int) graphql.Marshaler { + return ec.marshalOInt2ᚕᚕintᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Topology_core(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Topology", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Int does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Topology", field, false, false, errors.New("field of type Int does not have child fields")) } func (ec *executionContext) _Topology_accelerators(ctx context.Context, field graphql.CollectedField, obj *schema.Topology) (ret graphql.Marshaler) { @@ -11641,17 +11070,20 @@ func (ec *executionContext) _Topology_accelerators(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext_Topology_accelerators, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Topology_accelerators(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Accelerators, nil }, nil, - ec.marshalOAccelerator2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐAcceleratorᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []*schema.Accelerator) graphql.Marshaler { + return ec.marshalOAccelerator2ᚕᚖgithubᚗcomᚋClusterCockpitᚋccᚑlibᚋv2ᚋschemaᚐAcceleratorᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Topology_accelerators(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Topology", @@ -11659,15 +11091,7 @@ func (ec *executionContext) fieldContext_Topology_accelerators(_ context.Context IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "id": - return ec.fieldContext_Accelerator_id(ctx, field) - case "type": - return ec.fieldContext_Accelerator_type(ctx, field) - case "model": - return ec.fieldContext_Accelerator_model(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type Accelerator", field.Name) + return ec.childFields_Accelerator(ctx, field) }, } return fc, nil @@ -11678,28 +11102,22 @@ func (ec *executionContext) _Unit_base(ctx context.Context, field graphql.Collec ctx, ec.OperationContext, field, - ec.fieldContext_Unit_base, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Unit_base(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Base, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_Unit_base(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Unit", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Unit", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _Unit_prefix(ctx context.Context, field graphql.CollectedField, obj *schema.Unit) (ret graphql.Marshaler) { @@ -11707,28 +11125,22 @@ func (ec *executionContext) _Unit_prefix(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext_Unit_prefix, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_Unit_prefix(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Prefix, nil }, nil, - ec.marshalOString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalOString2string(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext_Unit_prefix(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Unit", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("Unit", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _User_username(ctx context.Context, field graphql.CollectedField, obj *model.User) (ret graphql.Marshaler) { @@ -11736,28 +11148,22 @@ func (ec *executionContext) _User_username(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext_User_username, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_User_username(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Username, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_User_username(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "User", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("User", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _User_name(ctx context.Context, field graphql.CollectedField, obj *model.User) (ret graphql.Marshaler) { @@ -11765,28 +11171,22 @@ func (ec *executionContext) _User_name(ctx context.Context, field graphql.Collec ctx, ec.OperationContext, field, - ec.fieldContext_User_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_User_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_User_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "User", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("User", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) _User_email(ctx context.Context, field graphql.CollectedField, obj *model.User) (ret graphql.Marshaler) { @@ -11794,28 +11194,22 @@ func (ec *executionContext) _User_email(ctx context.Context, field graphql.Colle ctx, ec.OperationContext, field, - ec.fieldContext_User_email, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext_User_email(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Email, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext_User_email(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "User", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("User", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { @@ -11823,28 +11217,22 @@ func (ec *executionContext) ___Directive_name(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext___Directive_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Directive_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Directive_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Directive", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Directive", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Directive_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { @@ -11852,28 +11240,22 @@ func (ec *executionContext) ___Directive_description(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext___Directive_description, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Directive_description(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Description(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Directive_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Directive", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Directive", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Directive_isRepeatable(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { @@ -11881,28 +11263,22 @@ func (ec *executionContext) ___Directive_isRepeatable(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext___Directive_isRepeatable, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Directive_isRepeatable(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.IsRepeatable, nil }, nil, - ec.marshalNBoolean2bool, + func(ctx context.Context, selections ast.SelectionSet, v bool) graphql.Marshaler { + return ec.marshalNBoolean2bool(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Directive_isRepeatable(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Directive", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Directive", field, false, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) ___Directive_locations(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { @@ -11910,28 +11286,22 @@ func (ec *executionContext) ___Directive_locations(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext___Directive_locations, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Directive_locations(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Locations, nil }, nil, - ec.marshalN__DirectiveLocation2ᚕstringᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []string) graphql.Marshaler { + return ec.marshalN__DirectiveLocation2ᚕstringᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Directive_locations(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Directive", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type __DirectiveLocation does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Directive", field, false, false, errors.New("field of type __DirectiveLocation does not have child fields")) } func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Directive) (ret graphql.Marshaler) { @@ -11939,17 +11309,20 @@ func (ec *executionContext) ___Directive_args(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext___Directive_args, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Directive_args(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Args, nil }, nil, - ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler { + return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Directive_args(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Directive", @@ -11957,21 +11330,7 @@ func (ec *executionContext) fieldContext___Directive_args(ctx context.Context, f IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext___InputValue_name(ctx, field) - case "description": - return ec.fieldContext___InputValue_description(ctx, field) - case "type": - return ec.fieldContext___InputValue_type(ctx, field) - case "defaultValue": - return ec.fieldContext___InputValue_defaultValue(ctx, field) - case "isDeprecated": - return ec.fieldContext___InputValue_isDeprecated(ctx, field) - case "deprecationReason": - return ec.fieldContext___InputValue_deprecationReason(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __InputValue", field.Name) + return ec.childFields___InputValue(ctx, field) }, } defer func() { @@ -11993,28 +11352,22 @@ func (ec *executionContext) ___EnumValue_name(ctx context.Context, field graphql ctx, ec.OperationContext, field, - ec.fieldContext___EnumValue_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___EnumValue_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___EnumValue_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__EnumValue", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___EnumValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { @@ -12022,28 +11375,22 @@ func (ec *executionContext) ___EnumValue_description(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext___EnumValue_description, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___EnumValue_description(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Description(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___EnumValue_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__EnumValue", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { @@ -12051,28 +11398,22 @@ func (ec *executionContext) ___EnumValue_isDeprecated(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext___EnumValue_isDeprecated, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___EnumValue_isDeprecated(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.IsDeprecated(), nil }, nil, - ec.marshalNBoolean2bool, + func(ctx context.Context, selections ast.SelectionSet, v bool) graphql.Marshaler { + return ec.marshalNBoolean2bool(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___EnumValue_isDeprecated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__EnumValue", field, true, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.EnumValue) (ret graphql.Marshaler) { @@ -12080,28 +11421,22 @@ func (ec *executionContext) ___EnumValue_deprecationReason(ctx context.Context, ctx, ec.OperationContext, field, - ec.fieldContext___EnumValue_deprecationReason, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___EnumValue_deprecationReason(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.DeprecationReason(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___EnumValue_deprecationReason(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__EnumValue", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__EnumValue", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { @@ -12109,28 +11444,22 @@ func (ec *executionContext) ___Field_name(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext___Field_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Field_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Field_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Field", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Field", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Field_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { @@ -12138,28 +11467,22 @@ func (ec *executionContext) ___Field_description(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext___Field_description, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Field_description(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Description(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Field_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Field", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Field", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { @@ -12167,17 +11490,20 @@ func (ec *executionContext) ___Field_args(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext___Field_args, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Field_args(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Args, nil }, nil, - ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler { + return ec.marshalN__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Field_args(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", @@ -12185,21 +11511,7 @@ func (ec *executionContext) fieldContext___Field_args(ctx context.Context, field IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext___InputValue_name(ctx, field) - case "description": - return ec.fieldContext___InputValue_description(ctx, field) - case "type": - return ec.fieldContext___InputValue_type(ctx, field) - case "defaultValue": - return ec.fieldContext___InputValue_defaultValue(ctx, field) - case "isDeprecated": - return ec.fieldContext___InputValue_isDeprecated(ctx, field) - case "deprecationReason": - return ec.fieldContext___InputValue_deprecationReason(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __InputValue", field.Name) + return ec.childFields___InputValue(ctx, field) }, } defer func() { @@ -12221,17 +11533,20 @@ func (ec *executionContext) ___Field_type(ctx context.Context, field graphql.Col ctx, ec.OperationContext, field, - ec.fieldContext___Field_type, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Field_type(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Type, nil }, nil, - ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Field_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Field", @@ -12239,31 +11554,7 @@ func (ec *executionContext) fieldContext___Field_type(_ context.Context, field g IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -12274,28 +11565,22 @@ func (ec *executionContext) ___Field_isDeprecated(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext___Field_isDeprecated, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Field_isDeprecated(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.IsDeprecated(), nil }, nil, - ec.marshalNBoolean2bool, + func(ctx context.Context, selections ast.SelectionSet, v bool) graphql.Marshaler { + return ec.marshalNBoolean2bool(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Field_isDeprecated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Field", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Field", field, true, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.Field) (ret graphql.Marshaler) { @@ -12303,28 +11588,22 @@ func (ec *executionContext) ___Field_deprecationReason(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext___Field_deprecationReason, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Field_deprecationReason(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.DeprecationReason(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Field_deprecationReason(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Field", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Field", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { @@ -12332,28 +11611,22 @@ func (ec *executionContext) ___InputValue_name(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext___InputValue_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___InputValue_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name, nil }, nil, - ec.marshalNString2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalNString2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___InputValue_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__InputValue", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___InputValue_description(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { @@ -12361,28 +11634,22 @@ func (ec *executionContext) ___InputValue_description(ctx context.Context, field ctx, ec.OperationContext, field, - ec.fieldContext___InputValue_description, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___InputValue_description(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Description(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___InputValue_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__InputValue", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { @@ -12390,17 +11657,20 @@ func (ec *executionContext) ___InputValue_type(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext___InputValue_type, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___InputValue_type(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Type, nil }, nil, - ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___InputValue_type(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__InputValue", @@ -12408,31 +11678,7 @@ func (ec *executionContext) fieldContext___InputValue_type(_ context.Context, fi IsMethod: false, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -12443,28 +11689,22 @@ func (ec *executionContext) ___InputValue_defaultValue(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext___InputValue_defaultValue, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___InputValue_defaultValue(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.DefaultValue, nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___InputValue_defaultValue(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - IsMethod: false, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__InputValue", field, false, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___InputValue_isDeprecated(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { @@ -12472,28 +11712,22 @@ func (ec *executionContext) ___InputValue_isDeprecated(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext___InputValue_isDeprecated, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___InputValue_isDeprecated(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.IsDeprecated(), nil }, nil, - ec.marshalNBoolean2bool, + func(ctx context.Context, selections ast.SelectionSet, v bool) graphql.Marshaler { + return ec.marshalNBoolean2bool(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___InputValue_isDeprecated(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__InputValue", field, true, false, errors.New("field of type Boolean does not have child fields")) } func (ec *executionContext) ___InputValue_deprecationReason(ctx context.Context, field graphql.CollectedField, obj *introspection.InputValue) (ret graphql.Marshaler) { @@ -12501,28 +11735,22 @@ func (ec *executionContext) ___InputValue_deprecationReason(ctx context.Context, ctx, ec.OperationContext, field, - ec.fieldContext___InputValue_deprecationReason, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___InputValue_deprecationReason(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.DeprecationReason(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___InputValue_deprecationReason(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__InputValue", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__InputValue", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Schema_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { @@ -12530,28 +11758,22 @@ func (ec *executionContext) ___Schema_description(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext___Schema_description, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Schema_description(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Description(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Schema_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Schema", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Schema", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.CollectedField, obj *introspection.Schema) (ret graphql.Marshaler) { @@ -12559,17 +11781,20 @@ func (ec *executionContext) ___Schema_types(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext___Schema_types, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Schema_types(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Types(), nil }, nil, - ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.Type) graphql.Marshaler { + return ec.marshalN__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Schema_types(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", @@ -12577,31 +11802,7 @@ func (ec *executionContext) fieldContext___Schema_types(_ context.Context, field IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -12612,17 +11813,20 @@ func (ec *executionContext) ___Schema_queryType(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext___Schema_queryType, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Schema_queryType(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.QueryType(), nil }, nil, - ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + return ec.marshalN__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Schema_queryType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", @@ -12630,31 +11834,7 @@ func (ec *executionContext) fieldContext___Schema_queryType(_ context.Context, f IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -12665,17 +11845,20 @@ func (ec *executionContext) ___Schema_mutationType(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext___Schema_mutationType, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Schema_mutationType(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.MutationType(), nil }, nil, - ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Schema_mutationType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", @@ -12683,31 +11866,7 @@ func (ec *executionContext) fieldContext___Schema_mutationType(_ context.Context IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -12718,17 +11877,20 @@ func (ec *executionContext) ___Schema_subscriptionType(ctx context.Context, fiel ctx, ec.OperationContext, field, - ec.fieldContext___Schema_subscriptionType, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Schema_subscriptionType(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SubscriptionType(), nil }, nil, - ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Schema_subscriptionType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", @@ -12736,31 +11898,7 @@ func (ec *executionContext) fieldContext___Schema_subscriptionType(_ context.Con IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -12771,17 +11909,20 @@ func (ec *executionContext) ___Schema_directives(ctx context.Context, field grap ctx, ec.OperationContext, field, - ec.fieldContext___Schema_directives, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Schema_directives(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Directives(), nil }, nil, - ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.Directive) graphql.Marshaler { + return ec.marshalN__Directive2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐDirectiveᚄ(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Schema_directives(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Schema", @@ -12789,19 +11930,7 @@ func (ec *executionContext) fieldContext___Schema_directives(_ context.Context, IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext___Directive_name(ctx, field) - case "description": - return ec.fieldContext___Directive_description(ctx, field) - case "isRepeatable": - return ec.fieldContext___Directive_isRepeatable(ctx, field) - case "locations": - return ec.fieldContext___Directive_locations(ctx, field) - case "args": - return ec.fieldContext___Directive_args(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Directive", field.Name) + return ec.childFields___Directive(ctx, field) }, } return fc, nil @@ -12812,28 +11941,22 @@ func (ec *executionContext) ___Type_kind(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext___Type_kind, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_kind(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Kind(), nil }, nil, - ec.marshalN__TypeKind2string, + func(ctx context.Context, selections ast.SelectionSet, v string) graphql.Marshaler { + return ec.marshalN__TypeKind2string(ctx, selections, v) + }, true, true, ) } - func (ec *executionContext) fieldContext___Type_kind(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Type", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type __TypeKind does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Type", field, true, false, errors.New("field of type __TypeKind does not have child fields")) } func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { @@ -12841,28 +11964,22 @@ func (ec *executionContext) ___Type_name(ctx context.Context, field graphql.Coll ctx, ec.OperationContext, field, - ec.fieldContext___Type_name, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_name(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Name(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_name(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Type", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Type", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Type_description(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { @@ -12870,28 +11987,22 @@ func (ec *executionContext) ___Type_description(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext___Type_description, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_description(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Description(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_description(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Type", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Type", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Type_specifiedByURL(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { @@ -12899,28 +12010,22 @@ func (ec *executionContext) ___Type_specifiedByURL(ctx context.Context, field gr ctx, ec.OperationContext, field, - ec.fieldContext___Type_specifiedByURL, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_specifiedByURL(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.SpecifiedByURL(), nil }, nil, - ec.marshalOString2ᚖstring, + func(ctx context.Context, selections ast.SelectionSet, v *string) graphql.Marshaler { + return ec.marshalOString2ᚖstring(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_specifiedByURL(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Type", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type String does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Type", field, true, false, errors.New("field of type String does not have child fields")) } func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.CollectedField, obj *introspection.Type) (ret graphql.Marshaler) { @@ -12928,18 +12033,21 @@ func (ec *executionContext) ___Type_fields(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext___Type_fields, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_fields(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return obj.Fields(fc.Args["includeDeprecated"].(bool)), nil }, nil, - ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.Field) graphql.Marshaler { + return ec.marshalO__Field2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐFieldᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_fields(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", @@ -12947,21 +12055,7 @@ func (ec *executionContext) fieldContext___Type_fields(ctx context.Context, fiel IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext___Field_name(ctx, field) - case "description": - return ec.fieldContext___Field_description(ctx, field) - case "args": - return ec.fieldContext___Field_args(ctx, field) - case "type": - return ec.fieldContext___Field_type(ctx, field) - case "isDeprecated": - return ec.fieldContext___Field_isDeprecated(ctx, field) - case "deprecationReason": - return ec.fieldContext___Field_deprecationReason(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Field", field.Name) + return ec.childFields___Field(ctx, field) }, } defer func() { @@ -12983,17 +12077,20 @@ func (ec *executionContext) ___Type_interfaces(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext___Type_interfaces, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_interfaces(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.Interfaces(), nil }, nil, - ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.Type) graphql.Marshaler { + return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_interfaces(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", @@ -13001,31 +12098,7 @@ func (ec *executionContext) fieldContext___Type_interfaces(_ context.Context, fi IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -13036,17 +12109,20 @@ func (ec *executionContext) ___Type_possibleTypes(ctx context.Context, field gra ctx, ec.OperationContext, field, - ec.fieldContext___Type_possibleTypes, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_possibleTypes(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.PossibleTypes(), nil }, nil, - ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.Type) graphql.Marshaler { + return ec.marshalO__Type2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐTypeᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_possibleTypes(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", @@ -13054,31 +12130,7 @@ func (ec *executionContext) fieldContext___Type_possibleTypes(_ context.Context, IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -13089,18 +12141,21 @@ func (ec *executionContext) ___Type_enumValues(ctx context.Context, field graphq ctx, ec.OperationContext, field, - ec.fieldContext___Type_enumValues, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_enumValues(ctx, field) + }, func(ctx context.Context) (any, error) { fc := graphql.GetFieldContext(ctx) return obj.EnumValues(fc.Args["includeDeprecated"].(bool)), nil }, nil, - ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.EnumValue) graphql.Marshaler { + return ec.marshalO__EnumValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐEnumValueᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_enumValues(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", @@ -13108,17 +12163,7 @@ func (ec *executionContext) fieldContext___Type_enumValues(ctx context.Context, IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext___EnumValue_name(ctx, field) - case "description": - return ec.fieldContext___EnumValue_description(ctx, field) - case "isDeprecated": - return ec.fieldContext___EnumValue_isDeprecated(ctx, field) - case "deprecationReason": - return ec.fieldContext___EnumValue_deprecationReason(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __EnumValue", field.Name) + return ec.childFields___EnumValue(ctx, field) }, } defer func() { @@ -13140,17 +12185,20 @@ func (ec *executionContext) ___Type_inputFields(ctx context.Context, field graph ctx, ec.OperationContext, field, - ec.fieldContext___Type_inputFields, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_inputFields(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.InputFields(), nil }, nil, - ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ, + func(ctx context.Context, selections ast.SelectionSet, v []introspection.InputValue) graphql.Marshaler { + return ec.marshalO__InputValue2ᚕgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐInputValueᚄ(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_inputFields(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", @@ -13158,21 +12206,7 @@ func (ec *executionContext) fieldContext___Type_inputFields(_ context.Context, f IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "name": - return ec.fieldContext___InputValue_name(ctx, field) - case "description": - return ec.fieldContext___InputValue_description(ctx, field) - case "type": - return ec.fieldContext___InputValue_type(ctx, field) - case "defaultValue": - return ec.fieldContext___InputValue_defaultValue(ctx, field) - case "isDeprecated": - return ec.fieldContext___InputValue_isDeprecated(ctx, field) - case "deprecationReason": - return ec.fieldContext___InputValue_deprecationReason(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __InputValue", field.Name) + return ec.childFields___InputValue(ctx, field) }, } return fc, nil @@ -13183,17 +12217,20 @@ func (ec *executionContext) ___Type_ofType(ctx context.Context, field graphql.Co ctx, ec.OperationContext, field, - ec.fieldContext___Type_ofType, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_ofType(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.OfType(), nil }, nil, - ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType, + func(ctx context.Context, selections ast.SelectionSet, v *introspection.Type) graphql.Marshaler { + return ec.marshalO__Type2ᚖgithubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚋintrospectionᚐType(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_ofType(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "__Type", @@ -13201,31 +12238,7 @@ func (ec *executionContext) fieldContext___Type_ofType(_ context.Context, field IsMethod: true, IsResolver: false, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "kind": - return ec.fieldContext___Type_kind(ctx, field) - case "name": - return ec.fieldContext___Type_name(ctx, field) - case "description": - return ec.fieldContext___Type_description(ctx, field) - case "specifiedByURL": - return ec.fieldContext___Type_specifiedByURL(ctx, field) - case "fields": - return ec.fieldContext___Type_fields(ctx, field) - case "interfaces": - return ec.fieldContext___Type_interfaces(ctx, field) - case "possibleTypes": - return ec.fieldContext___Type_possibleTypes(ctx, field) - case "enumValues": - return ec.fieldContext___Type_enumValues(ctx, field) - case "inputFields": - return ec.fieldContext___Type_inputFields(ctx, field) - case "ofType": - return ec.fieldContext___Type_ofType(ctx, field) - case "isOneOf": - return ec.fieldContext___Type_isOneOf(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type __Type", field.Name) + return ec.childFields___Type(ctx, field) }, } return fc, nil @@ -13236,28 +12249,22 @@ func (ec *executionContext) ___Type_isOneOf(ctx context.Context, field graphql.C ctx, ec.OperationContext, field, - ec.fieldContext___Type_isOneOf, + func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return ec.fieldContext___Type_isOneOf(ctx, field) + }, func(ctx context.Context) (any, error) { return obj.IsOneOf(), nil }, nil, - ec.marshalOBoolean2bool, + func(ctx context.Context, selections ast.SelectionSet, v bool) graphql.Marshaler { + return ec.marshalOBoolean2bool(ctx, selections, v) + }, true, false, ) } - func (ec *executionContext) fieldContext___Type_isOneOf(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "__Type", - Field: field, - IsMethod: true, - IsResolver: false, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") - }, - } - return fc, nil + return graphql.NewScalarFieldContext("__Type", field, true, false, errors.New("field of type Boolean does not have child fields")) } // endregion **************************** field.gotpl ***************************** @@ -13847,7 +12854,7 @@ func (ec *executionContext) _Accelerator(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -13927,7 +12934,7 @@ func (ec *executionContext) _Cluster(ctx context.Context, sel ast.SelectionSet, return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -13978,7 +12985,7 @@ func (ec *executionContext) _ClusterMetricWithName(ctx context.Context, sel ast. return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14022,7 +13029,7 @@ func (ec *executionContext) _ClusterMetrics(ctx context.Context, sel ast.Selecti return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14066,7 +13073,7 @@ func (ec *executionContext) _ClusterSupport(ctx context.Context, sel ast.Selecti return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14110,7 +13117,7 @@ func (ec *executionContext) _Count(ctx context.Context, sel ast.SelectionSet, ob return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14159,7 +13166,7 @@ func (ec *executionContext) _EnergyFootprintValue(ctx context.Context, sel ast.S return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14208,7 +13215,7 @@ func (ec *executionContext) _FootprintValue(ctx context.Context, sel ast.Selecti return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14252,7 +13259,7 @@ func (ec *executionContext) _Footprints(ctx context.Context, sel ast.SelectionSe return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14308,7 +13315,7 @@ func (ec *executionContext) _GlobalMetricListItem(ctx context.Context, sel ast.S return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14352,7 +13359,7 @@ func (ec *executionContext) _HistoPoint(ctx context.Context, sel ast.SelectionSe return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14396,7 +13403,7 @@ func (ec *executionContext) _IntRangeOutput(ctx context.Context, sel ast.Selecti return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14762,7 +13769,7 @@ func (ec *executionContext) _Job(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14806,7 +13813,7 @@ func (ec *executionContext) _JobLink(ctx context.Context, sel ast.SelectionSet, return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14849,7 +13856,7 @@ func (ec *executionContext) _JobLinkResultList(ctx context.Context, sel ast.Sele return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14894,7 +13901,7 @@ func (ec *executionContext) _JobMetric(ctx context.Context, sel ast.SelectionSet return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14943,7 +13950,7 @@ func (ec *executionContext) _JobMetricWithName(ctx context.Context, sel ast.Sele return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -14990,7 +13997,7 @@ func (ec *executionContext) _JobResultList(ctx context.Context, sel ast.Selectio return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15068,7 +14075,7 @@ func (ec *executionContext) _JobStats(ctx context.Context, sel ast.SelectionSet, return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15192,7 +14199,7 @@ func (ec *executionContext) _JobsStatistics(ctx context.Context, sel ast.Selecti return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15275,7 +14282,7 @@ func (ec *executionContext) _MetricConfig(ctx context.Context, sel ast.Selection return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15319,7 +14326,7 @@ func (ec *executionContext) _MetricFootprints(ctx context.Context, sel ast.Selec return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15364,7 +14371,7 @@ func (ec *executionContext) _MetricHistoPoint(ctx context.Context, sel ast.Selec return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15412,7 +14419,7 @@ func (ec *executionContext) _MetricHistoPoints(ctx context.Context, sel ast.Sele return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15461,7 +14468,7 @@ func (ec *executionContext) _MetricStatistics(ctx context.Context, sel ast.Selec return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15538,7 +14545,7 @@ func (ec *executionContext) _MetricValue(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15619,7 +14626,7 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15663,7 +14670,7 @@ func (ec *executionContext) _NamedStats(ctx context.Context, sel ast.SelectionSe return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15712,7 +14719,7 @@ func (ec *executionContext) _NamedStatsWithScope(ctx context.Context, sel ast.Se return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -15946,7 +14953,7 @@ func (ec *executionContext) _Node(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16005,7 +15012,7 @@ func (ec *executionContext) _NodeMetrics(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16046,7 +15053,7 @@ func (ec *executionContext) _NodeStateResultList(ctx context.Context, sel ast.Se return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16090,7 +15097,7 @@ func (ec *executionContext) _NodeStates(ctx context.Context, sel ast.SelectionSe return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16139,7 +15146,7 @@ func (ec *executionContext) _NodeStatesTimed(ctx context.Context, sel ast.Select return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16188,7 +15195,7 @@ func (ec *executionContext) _NodesResultList(ctx context.Context, sel ast.Select return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16710,7 +15717,7 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16755,7 +15762,7 @@ func (ec *executionContext) _Resource(ctx context.Context, sel ast.SelectionSet, return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16801,7 +15808,7 @@ func (ec *executionContext) _ScopedStats(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16849,7 +15856,7 @@ func (ec *executionContext) _Series(ctx context.Context, sel ast.SelectionSet, o return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -16903,7 +15910,7 @@ func (ec *executionContext) _StatsSeries(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17033,7 +16040,7 @@ func (ec *executionContext) _SubCluster(ctx context.Context, sel ast.SelectionSe return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17082,7 +16089,7 @@ func (ec *executionContext) _SubClusterConfig(ctx context.Context, sel ast.Selec return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17136,7 +16143,7 @@ func (ec *executionContext) _Tag(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17182,7 +16189,7 @@ func (ec *executionContext) _TimeRangeOutput(ctx context.Context, sel ast.Select return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17231,7 +16238,7 @@ func (ec *executionContext) _TimeWeights(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17277,7 +16284,7 @@ func (ec *executionContext) _Topology(ctx context.Context, sel ast.SelectionSet, return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17318,7 +16325,7 @@ func (ec *executionContext) _Unit(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17367,7 +16374,7 @@ func (ec *executionContext) _User(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17423,7 +16430,7 @@ func (ec *executionContext) ___Directive(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17471,7 +16478,7 @@ func (ec *executionContext) ___EnumValue(ctx context.Context, sel ast.SelectionS return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17529,7 +16536,7 @@ func (ec *executionContext) ___Field(ctx context.Context, sel ast.SelectionSet, return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17584,7 +16591,7 @@ func (ec *executionContext) ___InputValue(ctx context.Context, sel ast.Selection return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17639,7 +16646,7 @@ func (ec *executionContext) ___Schema(ctx context.Context, sel ast.SelectionSet, return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ @@ -17698,7 +16705,7 @@ func (ec *executionContext) ___Type(ctx context.Context, sel ast.SelectionSet, o return graphql.Null } - atomic.AddInt32(&ec.Deferred, int32(len(deferred))) + atomic.AddInt32(&ec.Deferred, int32(min(len(deferred), math.MaxInt32))) for label, dfs := range deferred { ec.ProcessDeferredGroup(graphql.DeferredGroup{ diff --git a/internal/graph/schema.resolvers.go b/internal/graph/schema.resolvers.go index ff2c09dc..b8c65bcf 100644 --- a/internal/graph/schema.resolvers.go +++ b/internal/graph/schema.resolvers.go @@ -3,7 +3,7 @@ package graph // This file will be automatically regenerated based on the schema, any resolver // implementations // will be copied through when generating and any unknown code will be moved to the end. -// Code generated by github.com/99designs/gqlgen version v0.17.88 +// Code generated by github.com/99designs/gqlgen version v0.17.90 import ( "context" @@ -682,6 +682,11 @@ func (r *queryResolver) JobsStatistics(ctx context.Context, filter []*model.JobF // Use request-scoped cache: multiple aliases with same (filter, groupBy) // but different sortBy/page hit the DB only once. if cache := getStatsGroupCache(ctx); cache != nil { + // Ensure the sort field is computed even if not in the GraphQL selection, + // because sortAndPageStats will sort by it in memory. + if sortBy != nil { + reqFields[sortByFieldName(*sortBy)] = true + } key := statsCacheKey(filter, groupBy, reqFields) var allStats []*model.JobsStatistics allStats, err = cache.getOrCompute(key, func() ([]*model.JobsStatistics, error) { diff --git a/internal/graph/stats_cache.go b/internal/graph/stats_cache.go index 92e8e85b..c4f0d7f8 100644 --- a/internal/graph/stats_cache.go +++ b/internal/graph/stats_cache.go @@ -107,6 +107,33 @@ func sortAndPageStats(allStats []*model.JobsStatistics, sortBy *model.SortByAggr return sorted } +// sortByFieldName maps a SortByAggregate enum to the corresponding reqFields key. +// This ensures the DB computes the column that sortAndPageStats will sort by. +func sortByFieldName(sortBy model.SortByAggregate) string { + switch sortBy { + case model.SortByAggregateTotaljobs: + return "totalJobs" + case model.SortByAggregateTotalusers: + return "totalUsers" + case model.SortByAggregateTotalwalltime: + return "totalWalltime" + case model.SortByAggregateTotalnodes: + return "totalNodes" + case model.SortByAggregateTotalnodehours: + return "totalNodeHours" + case model.SortByAggregateTotalcores: + return "totalCores" + case model.SortByAggregateTotalcorehours: + return "totalCoreHours" + case model.SortByAggregateTotalaccs: + return "totalAccs" + case model.SortByAggregateTotalacchours: + return "totalAccHours" + default: + return "totalJobs" + } +} + // statsFieldGetter returns a function that extracts the sortable int field // from a JobsStatistics struct for the given sort key. func statsFieldGetter(sortBy model.SortByAggregate) func(*model.JobsStatistics) int { diff --git a/internal/metricstoreclient/cc-metric-store-queries.go b/internal/metricstoreclient/cc-metric-store-queries.go index 1119d70c..fa2bea25 100644 --- a/internal/metricstoreclient/cc-metric-store-queries.go +++ b/internal/metricstoreclient/cc-metric-store-queries.go @@ -236,4 +236,3 @@ func (ccms *CCMetricStore) buildNodeQueries( return queries, assignedScope, nil } - diff --git a/internal/repository/config.go b/internal/repository/config.go index a201bb6b..f932836e 100644 --- a/internal/repository/config.go +++ b/internal/repository/config.go @@ -63,10 +63,10 @@ func DefaultConfig() *RepositoryConfig { MaxIdleConnections: 4, ConnectionMaxLifetime: time.Hour, ConnectionMaxIdleTime: 10 * time.Minute, - MinRunningJobDuration: 600, // 10 minutes - DbCacheSizeMB: 2048, // 2GB per connection - DbSoftHeapLimitMB: 16384, // 16GB process-wide - BusyTimeoutMs: 60000, // 60 seconds + MinRunningJobDuration: 600, // 10 minutes + DbCacheSizeMB: 2048, // 2GB per connection + DbSoftHeapLimitMB: 16384, // 16GB process-wide + BusyTimeoutMs: 60000, // 60 seconds } } diff --git a/internal/repository/jobQuery.go b/internal/repository/jobQuery.go index 36c5892e..49ab1fbe 100644 --- a/internal/repository/jobQuery.go +++ b/internal/repository/jobQuery.go @@ -76,8 +76,15 @@ func (r *JobRepository) QueryJobs( } if page != nil && page.ItemsPerPage != -1 { + // -1 is the only valid non-positive value ("load all"); reject other + // non-positive values so that uint64(page.ItemsPerPage) cannot underflow + // into a huge limit. Clamp Page to >= 1 to avoid the same on the offset. + if page.ItemsPerPage < 1 { + return nil, fmt.Errorf("invalid items-per-page value: %d", page.ItemsPerPage) + } + p := max(page.Page, 1) limit := uint64(page.ItemsPerPage) - query = query.Offset((uint64(page.Page) - 1) * limit).Limit(limit) + query = query.Offset((uint64(p) - 1) * limit).Limit(limit) } for _, f := range filters { @@ -280,11 +287,11 @@ func BuildWhereClause(filter *model.JobFilter, query sq.SelectBuilder) sq.Select // buildIntCondition creates clauses for integer range filters, using BETWEEN only if required. func buildIntCondition(field string, cond *config.IntRange, query sq.SelectBuilder) sq.SelectBuilder { - if cond.From != 1 && cond.To != 0 { + if cond.From > 0 && cond.To > 0 { return query.Where(field+" BETWEEN ? AND ?", cond.From, cond.To) - } else if cond.From != 1 && cond.To == 0 { + } else if cond.From > 0 && cond.To == 0 { return query.Where(field+" >= ?", cond.From) - } else if cond.From == 1 && cond.To != 0 { + } else if cond.From == 0 && cond.To > 0 { return query.Where(field+" <= ?", cond.To) } else { return query @@ -293,11 +300,11 @@ func buildIntCondition(field string, cond *config.IntRange, query sq.SelectBuild // buildFloatCondition creates a clauses for float range filters, using BETWEEN only if required. func buildFloatCondition(field string, cond *model.FloatRange, query sq.SelectBuilder) sq.SelectBuilder { - if cond.From != 1.0 && cond.To != 0.0 { + if cond.From > 0.0 && cond.To > 0.0 { return query.Where(field+" BETWEEN ? AND ?", cond.From, cond.To) - } else if cond.From != 1.0 && cond.To == 0.0 { + } else if cond.From > 0.0 && cond.To == 0.0 { return query.Where(field+" >= ?", cond.From) - } else if cond.From == 1.0 && cond.To != 0.0 { + } else if cond.From == 0.0 && cond.To > 0.0 { return query.Where(field+" <= ?", cond.To) } else { return query @@ -336,14 +343,24 @@ func buildTimeCondition(field string, cond *config.TimeRange, query sq.SelectBui } } +// validMetricName guards metric/footprint names that are interpolated into the +// json_extract() path of footprint queries. SQLite treats double-quoted strings +// as string literals, so an unescaped name (e.g. containing a `"`) would allow +// SQL injection. Legitimate metric names only use these characters. +var validMetricName = regexp.MustCompile(`^[a-zA-Z0-9_]+$`) + // buildFloatJSONCondition creates a filter on a numeric field within the footprint JSON column, using BETWEEN only if required. func buildFloatJSONCondition(jsonField string, cond *model.FloatRange, query sq.SelectBuilder) sq.SelectBuilder { + if !validMetricName.MatchString(jsonField) { + cclog.Warnf("buildFloatJSONCondition: rejecting invalid metric name %q", jsonField) + return query.Where("0 = 1") + } query = query.Where("JSON_VALID(footprint)") - if cond.From != 1.0 && cond.To != 0.0 { + if cond.From > 0.0 && cond.To > 0.0 { return query.Where("JSON_EXTRACT(footprint, \"$."+jsonField+"\") BETWEEN ? AND ?", cond.From, cond.To) - } else if cond.From != 1.0 && cond.To == 0.0 { + } else if cond.From > 0.0 && cond.To == 0.0 { return query.Where("JSON_EXTRACT(footprint, \"$."+jsonField+"\") >= ?", cond.From) - } else if cond.From == 1.0 && cond.To != 0.0 { + } else if cond.From == 0.0 && cond.To > 0.0 { return query.Where("JSON_EXTRACT(footprint, \"$."+jsonField+"\") <= ?", cond.To) } else { return query diff --git a/internal/repository/stats.go b/internal/repository/stats.go index 0bc85109..fb0bc075 100644 --- a/internal/repository/stats.go +++ b/internal/repository/stats.go @@ -909,6 +909,13 @@ func (r *JobRepository) jobsMetricStatisticsHistogram( filters []*model.JobFilter, bins *int, ) (*model.MetricHistoPoints, error) { + // The metric name is interpolated into the json_extract() path of the SQL + // below. SQLite parses double-quoted strings as literals, so reject anything + // that is not a plain metric identifier to prevent SQL injection. + if !validMetricName.MatchString(metric) { + return nil, fmt.Errorf("invalid metric name: %q", metric) + } + // Peak value defines the upper bound for binning: values are distributed across // bins from 0 to peak. First try to get peak from filtered cluster, otherwise // scan all clusters to find the maximum peak value. diff --git a/internal/repository/tags.go b/internal/repository/tags.go index 39ccd90d..dca8574d 100644 --- a/internal/repository/tags.go +++ b/internal/repository/tags.go @@ -311,26 +311,33 @@ func (r *JobRepository) CountTags(user *schema.User) (tags []schema.Tag, counts LeftJoin("jobtag jt ON t.id = jt.tag_id"). GroupBy("t.tag_type, t.tag_name") - // Build scope list for filtering - var scopeBuilder strings.Builder - scopeBuilder.WriteString(`"global"`) + // Build scope list for filtering. Values are parameterized rather than + // interpolated because user.Username originates from external identity + // providers (OIDC/LDAP) and must not be trusted as SQL. + scopes := []string{"global"} if user != nil { - scopeBuilder.WriteString(`,"`) - scopeBuilder.WriteString(user.Username) - scopeBuilder.WriteString(`"`) + scopes = append(scopes, user.Username) if user.HasAnyRole([]schema.Role{schema.RoleAdmin, schema.RoleSupport}) { - scopeBuilder.WriteString(`,"admin"`) + scopes = append(scopes, "admin") } } - q = q.Where("t.tag_scope IN (" + scopeBuilder.String() + ")") + q = q.Where(sq.Eq{"t.tag_scope": scopes}) // Handle Job Ownership if user != nil && user.HasAnyRole([]schema.Role{schema.RoleAdmin, schema.RoleSupport}) { // ADMIN || SUPPORT: Count all jobs // cclog.Debug("CountTags: User Admin or Support -> Count all Jobs for Tags") // Unchanged: Needs to be own case still, due to UserRole/NoRole compatibility handling in else case - } else if user != nil && user.HasRole(schema.RoleManager) { // MANAGER: Count own jobs plus project's jobs - // Build ("project1", "project2", ...) list of variable length directly in SQL string - q = q.Where("jt.job_id IN (SELECT id FROM job WHERE job.hpc_user = ? OR job.project IN (\""+strings.Join(user.Projects, "\",\"")+"\"))", user.Username) + } else if user != nil && user.HasRole(schema.RoleManager) && len(user.Projects) > 0 { // MANAGER: Count own jobs plus project's jobs + // Build a parameterized ("?", "?", ...) placeholder list for the + // variable-length project set instead of interpolating values into SQL. + args := make([]any, 0, len(user.Projects)+1) + args = append(args, user.Username) + placeholders := make([]string, len(user.Projects)) + for i, p := range user.Projects { + placeholders[i] = "?" + args = append(args, p) + } + q = q.Where("jt.job_id IN (SELECT id FROM job WHERE job.hpc_user = ? OR job.project IN ("+strings.Join(placeholders, ",")+"))", args...) } else if user != nil { // USER OR NO ROLE (Compatibility): Only count own jobs q = q.Where("jt.job_id IN (SELECT id FROM job WHERE job.hpc_user = ?)", user.Username) } diff --git a/internal/repository/user.go b/internal/repository/user.go index 307916eb..a341e5be 100644 --- a/internal/repository/user.go +++ b/internal/repository/user.go @@ -14,6 +14,7 @@ import ( "path/filepath" "reflect" "runtime" + "sort" "strings" "sync" @@ -210,6 +211,12 @@ func (r *UserRepository) AddUserIfNotExists(user *schema.User) error { return err } +func sortedRoles(roles []string) []string { + cp := append([]string{}, roles...) + sort.Strings(cp) + return cp +} + func (r *UserRepository) UpdateUser(dbUser *schema.User, user *schema.User) error { // user contains updated info -> Apply to dbUser // --- Simple Name Update --- @@ -279,6 +286,15 @@ func (r *UserRepository) UpdateUser(dbUser *schema.User, user *schema.User) erro } } + // --- Fallback: sync any remaining role differences not covered above --- + // This handles admin role assignment/removal and any other combinations that + // the specific branches above do not cover (e.g. user→admin, admin→user). + if !reflect.DeepEqual(sortedRoles(dbUser.Roles), sortedRoles(user.Roles)) { + if err := updateRoles(user.Roles); err != nil { + return err + } + } + return nil } diff --git a/internal/routerConfig/routes.go b/internal/routerConfig/routes.go index 7b5d7987..0b769557 100644 --- a/internal/routerConfig/routes.go +++ b/internal/routerConfig/routes.go @@ -239,6 +239,9 @@ func buildFilterPresets(query url.Values) map[string]any { if query.Get("cluster") != "" { filterPresets["cluster"] = query.Get("cluster") } + if query.Get("subCluster") != "" { + filterPresets["subCluster"] = query.Get("subCluster") + } if query.Get("partition") != "" { filterPresets["partition"] = query.Get("partition") } @@ -309,7 +312,7 @@ func buildFilterPresets(query url.Values) map[string]any { if parts[0] == "lessthan" { lt, lte := strconv.Atoi(parts[1]) if lte == nil { - filterPresets["numNodes"] = map[string]int{"from": 1, "to": lt} + filterPresets["numNodes"] = map[string]int{"from": 0, "to": lt} } } else if parts[0] == "morethan" { mt, mte := strconv.Atoi(parts[1]) @@ -331,7 +334,7 @@ func buildFilterPresets(query url.Values) map[string]any { if parts[0] == "lessthan" { lt, lte := strconv.Atoi(parts[1]) if lte == nil { - filterPresets["numHWThreads"] = map[string]int{"from": 1, "to": lt} + filterPresets["numHWThreads"] = map[string]int{"from": 0, "to": lt} } } else if parts[0] == "morethan" { mt, mte := strconv.Atoi(parts[1]) @@ -353,7 +356,7 @@ func buildFilterPresets(query url.Values) map[string]any { if parts[0] == "lessthan" { lt, lte := strconv.Atoi(parts[1]) if lte == nil { - filterPresets["numAccelerators"] = map[string]int{"from": 1, "to": lt} + filterPresets["numAccelerators"] = map[string]int{"from": 0, "to": lt} } } else if parts[0] == "morethan" { mt, mte := strconv.Atoi(parts[1]) @@ -409,7 +412,7 @@ func buildFilterPresets(query url.Values) map[string]any { if parts[0] == "lessthan" { lt, lte := strconv.Atoi(parts[1]) if lte == nil { - filterPresets["energy"] = map[string]int{"from": 1, "to": lt} + filterPresets["energy"] = map[string]int{"from": 0, "to": lt} } } else if parts[0] == "morethan" { mt, mte := strconv.Atoi(parts[1]) @@ -435,7 +438,7 @@ func buildFilterPresets(query url.Values) map[string]any { if lte == nil { statEntry := map[string]any{ "field": parts[0], - "from": 1, + "from": 0, "to": lt, } statList = append(statList, statEntry) diff --git a/internal/tagger/classifyJob.go b/internal/tagger/classifyJob.go index 1bad61f1..81698337 100644 --- a/internal/tagger/classifyJob.go +++ b/internal/tagger/classifyJob.go @@ -363,7 +363,7 @@ func (t *JobClassTagger) Match(job *schema.Job) { for _, m := range ri.metrics { stats, ok := jobStats[m] if !ok { - cclog.Errorf("job classification: missing metric '%s' for rule %s on job %d", m, tag, job.JobID) + cclog.Debugf("job classification: missing metric '%s' for rule %s on job %d", m, tag, job.JobID) skipRule = true break } @@ -388,7 +388,7 @@ func (t *JobClassTagger) Match(job *schema.Job) { for _, r := range ri.requirements { ok, err := expr.Run(r, env) if err != nil { - cclog.Errorf("error running requirement for rule %s: %#v", tag, err) + cclog.Debugf("error running requirement for rule %s: %#v", tag, err) requirementsMet = false break } @@ -407,7 +407,7 @@ func (t *JobClassTagger) Match(job *schema.Job) { for _, v := range ri.variables { value, err := expr.Run(v.expr, env) if err != nil { - cclog.Errorf("error evaluating variable %s for rule %s: %#v", v.name, tag, err) + cclog.Debugf("error evaluating variable %s for rule %s: %#v", v.name, tag, err) varError = true break } diff --git a/pkg/archive/clusterConfig.go b/pkg/archive/clusterConfig.go index 3e27e415..48fc5e48 100644 --- a/pkg/archive/clusterConfig.go +++ b/pkg/archive/clusterConfig.go @@ -198,36 +198,19 @@ func GetSubCluster(cluster, subcluster string) (*schema.SubCluster, error) { func GetMetricConfigSubCluster(cluster, subcluster string) map[string]*schema.Metric { metrics := make(map[string]*schema.Metric) - for _, c := range Clusters { - if c.Name == cluster { - for _, m := range c.MetricConfig { - for _, s := range m.SubClusters { - if s.Name == subcluster { - metrics[m.Name] = &schema.Metric{ - Name: m.Name, - Unit: s.Unit, - Peak: s.Peak, - Normal: s.Normal, - Caution: s.Caution, - Alert: s.Alert, - } - break - } - } + sc, err := GetSubCluster(cluster, subcluster) + if err != nil { + return metrics + } - _, ok := metrics[m.Name] - if !ok { - metrics[m.Name] = &schema.Metric{ - Name: m.Name, - Unit: m.Unit, - Peak: m.Peak, - Normal: m.Normal, - Caution: m.Caution, - Alert: m.Alert, - } - } - } - break + for _, m := range sc.MetricConfig { + metrics[m.Name] = &schema.Metric{ + Name: m.Name, + Unit: m.Unit, + Peak: m.Peak, + Normal: m.Normal, + Caution: m.Caution, + Alert: m.Alert, } } diff --git a/pkg/archive/clusterConfig_test.go b/pkg/archive/clusterConfig_test.go index 510c1747..7c3d8bea 100644 --- a/pkg/archive/clusterConfig_test.go +++ b/pkg/archive/clusterConfig_test.go @@ -37,3 +37,27 @@ func TestClusterConfig(t *testing.T) { // spew.Dump(archive.GlobalMetricList) // t.Fail() } + +func TestGetMetricConfigSubClusterRespectsRemovedMetrics(t *testing.T) { + if err := archive.Init(json.RawMessage(`{"kind": "file","path": "testdata/archive"}`)); err != nil { + t.Fatal(err) + } + + sc, err := archive.GetSubCluster("fritz", "spr2tb") + if err != nil { + t.Fatal(err) + } + + metrics := archive.GetMetricConfigSubCluster("fritz", "spr2tb") + if len(metrics) != len(sc.MetricConfig) { + t.Fatalf("GetMetricConfigSubCluster() returned %d metrics, want %d", len(metrics), len(sc.MetricConfig)) + } + + if _, ok := metrics["flops_any"]; ok { + t.Fatalf("GetMetricConfigSubCluster() returned removed metric flops_any for subcluster spr2tb") + } + + if _, ok := metrics["cpu_power"]; !ok { + t.Fatalf("GetMetricConfigSubCluster() missing active metric cpu_power for subcluster spr2tb") + } +} diff --git a/pkg/archive/parquet/writer.go b/pkg/archive/parquet/writer.go index bfe4490f..11cdad9e 100644 --- a/pkg/archive/parquet/writer.go +++ b/pkg/archive/parquet/writer.go @@ -133,10 +133,10 @@ func (pt *prefixedTarget) WriteFile(name string, data []byte) error { // ClusterAwareParquetWriter organizes Parquet output by cluster. // Each cluster gets its own subdirectory with a cluster.json config file. type ClusterAwareParquetWriter struct { - target ParquetTarget - maxSizeMB int - writers map[string]*ParquetWriter - clusterCfgs map[string]*schema.Cluster + target ParquetTarget + maxSizeMB int + writers map[string]*ParquetWriter + clusterCfgs map[string]*schema.Cluster } // NewClusterAwareParquetWriter creates a writer that routes jobs to per-cluster ParquetWriters. diff --git a/pkg/metricstore/api.go b/pkg/metricstore/api.go index bed5a8ee..d10cfba1 100644 --- a/pkg/metricstore/api.go +++ b/pkg/metricstore/api.go @@ -79,7 +79,7 @@ type APIQueryResponse struct { // - Type + TypeIds: First level of hierarchy (e.g., "cpu" + ["0", "1", "2"]) // - SubType + SubTypeIds: Second level of hierarchy (e.g., "core" + ["0", "1"]) // -// If Aggregate is true, data from multiple type/subtype IDs will be aggregated according +// If Aggregate is true, data from multiple type/stype IDs will be aggregated according // to the metric's aggregation strategy. Otherwise, separate results are returned for each combination. type APIQuery struct { Type *string `json:"type,omitempty"` @@ -175,13 +175,13 @@ func (data *APIMetricData) PadDataWithNull(ms *MemoryStore, from, to int64, metr // This is the primary API for retrieving metric data from the memory store. It supports: // - Individual queries via req.Queries // - Batch queries for all nodes via req.ForAllNodes -// - Hierarchical selector construction (cluster → host → type → subtype) +// - Hierarchical selector construction (cluster → host → type → stype) // - Optional statistics computation (avg, min, max) // - Optional data scaling // - Optional data padding with NaN values // // The function constructs selectors based on the query parameters and calls MemoryStore.Read() -// for each selector. If a query specifies Aggregate=false with multiple type/subtype IDs, +// for each selector. If a query specifies Aggregate=false with multiple type/stype IDs, // separate results are returned for each combination. // // Parameters: diff --git a/pkg/metricstore/archive.go b/pkg/metricstore/archive.go index 7eb1b72f..3938ac82 100644 --- a/pkg/metricstore/archive.go +++ b/pkg/metricstore/archive.go @@ -3,6 +3,12 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. +// This file implements the cleanup (archiving or deletion) of old checkpoint files. +// +// The CleanUp worker runs on a timer equal to RetentionInMemory. In "archive" mode +// it converts checkpoint files older than the retention window into per-cluster +// Parquet files and then deletes the originals. In "delete" mode it simply removes +// old checkpoint files. package metricstore import ( @@ -11,6 +17,7 @@ import ( "fmt" "os" "path/filepath" + "strings" "sync" "sync/atomic" "time" @@ -18,10 +25,15 @@ import ( cclog "github.com/ClusterCockpit/cc-lib/v2/ccLogger" ) -// Worker for either Archiving or Deleting files - +// CleanUp starts a background worker that periodically removes or archives +// checkpoint files older than the configured retention window. +// +// In "archive" mode, old checkpoint files are converted to Parquet and stored +// under Keys.Cleanup.RootDir. In "delete" mode they are simply removed. +// The cleanup interval equals Keys.RetentionInMemory. func CleanUp(wg *sync.WaitGroup, ctx context.Context) { if Keys.Cleanup.Mode == "archive" { + cclog.Info("[METRICSTORE]> enable archive cleanup to parquet") // Run as Archiver cleanUpWorker(wg, ctx, Keys.RetentionInMemory, @@ -43,7 +55,6 @@ func CleanUp(wg *sync.WaitGroup, ctx context.Context) { // cleanUpWorker takes simple values to configure what it does func cleanUpWorker(wg *sync.WaitGroup, ctx context.Context, interval string, mode string, cleanupDir string, delete bool) { wg.Go(func() { - d, err := time.ParseDuration(interval) if err != nil { cclog.Fatalf("[METRICSTORE]> error parsing %s interval duration: %v\n", mode, err) @@ -99,8 +110,8 @@ func deleteCheckpoints(checkpointsDir string, from int64) (int, error) { } type workItem struct { - dir string - cluster, host string + dir string + cluster, host string } var wg sync.WaitGroup @@ -181,6 +192,7 @@ func archiveCheckpoints(checkpointsDir, cleanupDir string, from int64) (int, err } totalFiles := 0 + var clusterErrors []string for _, clusterEntry := range clusterEntries { if !clusterEntry.IsDir() { @@ -190,7 +202,9 @@ func archiveCheckpoints(checkpointsDir, cleanupDir string, from int64) (int, err cluster := clusterEntry.Name() hostEntries, err := os.ReadDir(filepath.Join(checkpointsDir, cluster)) if err != nil { - return totalFiles, err + cclog.Errorf("[METRICSTORE]> error reading host entries for cluster %s: %s", cluster, err.Error()) + clusterErrors = append(clusterErrors, cluster) + continue } // Workers load checkpoint files from disk; main thread writes to parquet. @@ -255,7 +269,9 @@ func archiveCheckpoints(checkpointsDir, cleanupDir string, from int64) (int, err // Drain results channel to unblock workers for range results { } - return totalFiles, fmt.Errorf("creating parquet writer for cluster %s: %w", cluster, err) + cclog.Errorf("[METRICSTORE]> error creating parquet writer for cluster %s: %s", cluster, err.Error()) + clusterErrors = append(clusterErrors, cluster) + continue } type deleteItem struct { @@ -275,6 +291,12 @@ func archiveCheckpoints(checkpointsDir, cleanupDir string, from int64) (int, err break } } + // Flush once per host to keep row group count within parquet limits. + if writeErr == nil { + if err := writer.FlushRowGroup(); err != nil { + writeErr = err + } + } } // Always track files for deletion (even if write failed, we still drain) toDelete = append(toDelete, deleteItem{dir: r.dir, files: r.files}) @@ -285,7 +307,10 @@ func archiveCheckpoints(checkpointsDir, cleanupDir string, from int64) (int, err } if errs > 0 { - return totalFiles, fmt.Errorf("%d errors reading checkpoints for cluster %s", errs, cluster) + cclog.Errorf("[METRICSTORE]> %d errors reading checkpoints for cluster %s", errs, cluster) + clusterErrors = append(clusterErrors, cluster) + os.Remove(parquetFile) + continue } if writer.count == 0 { @@ -296,7 +321,9 @@ func archiveCheckpoints(checkpointsDir, cleanupDir string, from int64) (int, err if writeErr != nil { os.Remove(parquetFile) - return totalFiles, fmt.Errorf("writing parquet archive for cluster %s: %w", cluster, writeErr) + cclog.Errorf("[METRICSTORE]> error writing parquet archive for cluster %s: %s", cluster, writeErr.Error()) + clusterErrors = append(clusterErrors, cluster) + continue } // Delete archived checkpoint files @@ -316,5 +343,10 @@ func archiveCheckpoints(checkpointsDir, cleanupDir string, from int64) (int, err } cclog.Infof("[METRICSTORE]> archiving checkpoints completed in %s (%d files)", time.Since(startTime).Round(time.Millisecond), totalFiles) + + if len(clusterErrors) > 0 { + return totalFiles, fmt.Errorf("archiving failed for clusters: %s", strings.Join(clusterErrors, ", ")) + } + return totalFiles, nil } diff --git a/pkg/metricstore/buffer.go b/pkg/metricstore/buffer.go index 8530f893..72467f6c 100644 --- a/pkg/metricstore/buffer.go +++ b/pkg/metricstore/buffer.go @@ -146,7 +146,9 @@ var ( // ErrDataDoesNotAlign indicates that aggregated data from child scopes // does not align with the parent scope's expected timestamps/intervals. - ErrDataDoesNotAlign error = errors.New("[METRICSTORE]> data from lower granularities does not align") + ErrDataDoesNotAlignMissingFront error = errors.New("[METRICSTORE]> data from lower granularities does not align (missing data prior to start of the buffers)") + ErrDataDoesNotAlignMissingBack error = errors.New("[METRICSTORE]> data from lower granularities does not align (missing data after the end of the buffers)") + ErrDataDoesNotAlignDataLenMismatch error = errors.New("[METRICSTORE]> data from lower granularities does not align (collected data length is different than expected data length)") ) // buffer stores time-series data for a single metric at a specific hierarchical level. diff --git a/pkg/metricstore/checkpoint.go b/pkg/metricstore/checkpoint.go index 3627a67b..c2b86415 100644 --- a/pkg/metricstore/checkpoint.go +++ b/pkg/metricstore/checkpoint.go @@ -86,11 +86,12 @@ var ( // Checkpointing starts a background worker that periodically saves metric data to disk. // -// Checkpoints are written every 12 hours (hardcoded). +// The checkpoint interval is read from Keys.CheckpointInterval (default: 12 hours). // // Format behaviour: -// - "json": Periodic checkpointing every checkpointInterval -// - "wal": Periodic binary snapshots + WAL rotation every checkpointInterval +// - "json": Writes a JSON snapshot file per host every interval +// - "wal": Writes a binary snapshot file per host every interval, then rotates +// the current.wal files for all successfully checkpointed hosts func Checkpointing(wg *sync.WaitGroup, ctx context.Context) { lastCheckpointMu.Lock() lastCheckpoint = time.Now() @@ -99,7 +100,6 @@ func Checkpointing(wg *sync.WaitGroup, ctx context.Context) { ms := GetMemoryStore() wg.Go(func() { - d := 12 * time.Hour // default checkpoint interval if Keys.CheckpointInterval != "" { parsed, err := time.ParseDuration(Keys.CheckpointInterval) @@ -126,10 +126,15 @@ func Checkpointing(wg *sync.WaitGroup, ctx context.Context) { cclog.Infof("[METRICSTORE]> start checkpointing (starting at %s)...", from.Format(time.RFC3339)) if Keys.Checkpoints.FileFormat == "wal" { + // Pause WAL writes: the binary snapshot captures all in-memory + // data, so WAL records written during checkpoint are redundant + // and would be deleted during rotation anyway. + walCheckpointActive.Store(true) n, hostDirs, err := ms.ToCheckpointWAL(Keys.Checkpoints.RootDir, from.Unix(), now.Unix()) if err != nil { cclog.Errorf("[METRICSTORE]> binary checkpointing failed: %s", err.Error()) - } else { + } + if n > 0 { cclog.Infof("[METRICSTORE]> done: %d binary snapshot files created", n) lastCheckpointMu.Lock() lastCheckpoint = now @@ -137,6 +142,8 @@ func Checkpointing(wg *sync.WaitGroup, ctx context.Context) { // Rotate WAL files for successfully checkpointed hosts. RotateWALFiles(hostDirs) } + walCheckpointActive.Store(false) + walDropped.Store(0) } else { n, err := ms.ToCheckpoint(Keys.Checkpoints.RootDir, from.Unix(), now.Unix()) if err != nil { diff --git a/pkg/metricstore/config.go b/pkg/metricstore/config.go index f6c56672..b24af844 100644 --- a/pkg/metricstore/config.go +++ b/pkg/metricstore/config.go @@ -59,11 +59,14 @@ const ( // Checkpoints configures periodic persistence of in-memory metric data. // // Fields: -// - FileFormat: "json" (human-readable, periodic) or "wal" (binary snapshot + WAL, crash-safe); default is "wal" -// - RootDir: Filesystem path for checkpoint files (created if missing) +// - FileFormat: "json" (human-readable, periodic) or "wal" (binary snapshot + WAL, crash-safe); default is "wal" +// - RootDir: Filesystem path for checkpoint files (created if missing) +// - MaxWALSize: Maximum size in bytes for a single host's WAL file; 0 = unlimited (default). +// When exceeded the WAL is force-rotated to prevent unbounded disk growth. type Checkpoints struct { FileFormat string `json:"file-format"` RootDir string `json:"directory"` + MaxWALSize int64 `json:"max-wal-size,omitempty"` } // Debug provides development and profiling options. diff --git a/pkg/metricstore/configSchema.go b/pkg/metricstore/configSchema.go index 00bfc4b7..3aeef4bd 100644 --- a/pkg/metricstore/configSchema.go +++ b/pkg/metricstore/configSchema.go @@ -24,6 +24,11 @@ const configSchema = `{ "directory": { "description": "Path in which the checkpointed files should be placed.", "type": "string" + }, + "max-wal-size": { + "description": "Maximum size in bytes for a single host's WAL file. When exceeded the WAL is force-rotated to prevent unbounded disk growth. Only applies when file-format is 'wal'. 0 means unlimited (default).", + "type": "integer", + "minimum": 0 } } }, diff --git a/pkg/metricstore/lineprotocol.go b/pkg/metricstore/lineprotocol.go index caec82e9..c8b27126 100644 --- a/pkg/metricstore/lineprotocol.go +++ b/pkg/metricstore/lineprotocol.go @@ -6,11 +6,11 @@ // This file implements ingestion of InfluxDB line-protocol metric data received // over NATS. Each line encodes one metric sample with the following structure: // -// [,cluster=][,hostname=][,type=][,type-id=][,subtype=][,stype-id=] value= [] +// [,cluster=][,hostname=][,type=][,type-id=][,stype=][,stype-id=] value= [] // // The measurement name identifies the metric (e.g. "cpu_load"). Tags provide // routing information (cluster, host) and optional sub-device selectors (type, -// subtype). Only one field is expected per line: "value". +// stype). Only one field is expected per line: "value". // // After decoding, each sample is: // 1. Written to the in-memory store via ms.WriteToLevel. @@ -22,6 +22,7 @@ import ( "bytes" "context" "fmt" + "strings" "sync" "sync/atomic" "time" @@ -103,7 +104,7 @@ func ReceiveNats(ms *MemoryStore, // reorder prepends prefix to buf in-place when buf has enough spare capacity, // avoiding an allocation. Falls back to a regular append otherwise. // -// It is used to assemble the "type" and "subtype" selector +// It is used to assemble the "type" and "stype" selector // strings when the type tag arrives before the type-id tag in the line, so the // two byte slices need to be concatenated in tag-declaration order regardless // of wire order. @@ -145,7 +146,7 @@ type decodeState struct { // current line. Reset at the start of each line's tag-decode loop. typeBuf []byte - // subTypeBuf accumulates the concatenated "subtype"+"stype-id" tag value. + // subTypeBuf accumulates the concatenated "stype"+"stype-id" tag value. // Reset at the start of each line's tag-decode loop. subTypeBuf []byte @@ -186,7 +187,7 @@ var decodeStatePool = sync.Pool{ // - The Level pointer (host-level node in the metric tree) is cached across // consecutive lines that share the same cluster+host pair to avoid // repeated lock acquisitions on the root and cluster levels. -// - []byte→string conversions for type/subtype selectors are cached via +// - []byte→string conversions for type/stype selectors are cached via // prevType*/prevSubType* fields because batches typically repeat the same // sub-device identifiers. // - Timestamp parsing tries Second precision first; if that fails it retries @@ -196,6 +197,16 @@ var decodeStatePool = sync.Pool{ // When the checkpoint format is "wal" each successfully decoded sample is also // sent to WALMessages so the WAL staging goroutine can persist it durably // before the next binary snapshot. +// isValidPathComponent reports whether s is safe to use as a single filesystem +// path component (cluster or host name) when building checkpoint/WAL paths. It +// rejects path-traversal sequences and embedded separators. An empty string is +// allowed because a missing host tag is legitimate and does not escape the root. +func isValidPathComponent(s string) bool { + return !strings.Contains(s, "..") && + !strings.Contains(s, "/") && + !strings.Contains(s, "\\") +} + func DecodeLine(dec *lineprotocol.Decoder, ms *MemoryStore, clusterDefault string, @@ -269,8 +280,8 @@ func DecodeLine(dec *lineprotocol.Decoder, } case "type-id": st.typeBuf = append(st.typeBuf, val...) - case "subtype": - // We cannot be sure that the "subtype" tag comes before the "stype-id" tag: + case "stype": + // We cannot be sure that the "stype" tag comes before the "stype-id" tag: if len(st.subTypeBuf) == 0 { st.subTypeBuf = append(st.subTypeBuf, val...) } else { @@ -282,6 +293,17 @@ func DecodeLine(dec *lineprotocol.Decoder, } } + // cluster and host are taken verbatim from attacker-controllable line + // protocol tags and are later used as filesystem path components for the + // checkpoint/WAL files (path.Join(RootDir, cluster, host)). Reject + // path-traversal sequences so a malicious tag cannot escape the + // checkpoint root. Skip the offending sample; the rest of the batch is + // still processed. + if !isValidPathComponent(cluster) || !isValidPathComponent(host) { + cclog.Warnf("[METRICSTORE]> rejecting metric with invalid cluster/host tag (cluster=%q host=%q)", cluster, host) + continue + } + // If the cluster or host changed, the lvl was set to nil if lvl == nil { st.selector = st.selector[:2] @@ -291,7 +313,7 @@ func DecodeLine(dec *lineprotocol.Decoder, } // subtypes: cache []byte→string conversions; messages in a batch typically - // share the same type/subtype so the hit rate is very high. + // share the same type/stype so the hit rate is very high. st.selector = st.selector[:0] if len(st.typeBuf) > 0 { if !bytes.Equal(st.typeBuf, st.prevTypeBytes) { diff --git a/pkg/metricstore/metricstore.go b/pkg/metricstore/metricstore.go index fbb4c6a8..1fcd4ab0 100644 --- a/pkg/metricstore/metricstore.go +++ b/pkg/metricstore/metricstore.go @@ -8,7 +8,7 @@ // // The package organizes metrics in a tree structure (cluster → host → component) and // provides concurrent read/write access to metric data with configurable aggregation strategies. -// Background goroutines handle periodic checkpointing (JSON or Avro format), archiving old data, +// Background goroutines handle periodic checkpointing (JSON or WAL/binary format), archiving old data, // and enforcing retention policies. // // Key features: @@ -16,7 +16,7 @@ // - Hierarchical data organization (selectors) // - Concurrent checkpoint/archive workers // - Support for sum and average aggregation -// - NATS integration for metric ingestion +// - NATS integration for metric ingestion via InfluxDB line protocol package metricstore import ( @@ -113,7 +113,8 @@ type MemoryStore struct { // 6. Optionally subscribes to NATS for real-time metric ingestion // // Parameters: -// - rawConfig: JSON configuration for the metric store (see MetricStoreConfig) +// - rawConfig: JSON configuration for the metric store (see MetricStoreConfig); may be nil to use defaults +// - metrics: Map of metric names to their configurations (frequency and aggregation strategy) // - wg: WaitGroup that will be incremented for each background goroutine started // // The function will call cclog.Fatal on critical errors during initialization. @@ -271,19 +272,37 @@ func (ms *MemoryStore) SetNodeProvider(provider NodeProvider) { // // Note: This function blocks until the final checkpoint is written. func Shutdown() { + totalStart := time.Now() + shutdownFuncMu.Lock() - defer shutdownFuncMu.Unlock() - if shutdownFunc != nil { - shutdownFunc() + if shutdownFunc == nil { + // Already shut down (or never initialized): nothing to do. This keeps + // Shutdown idempotent so it is safe to call from more than one path. + shutdownFuncMu.Unlock() + return } + shutdownFunc() + shutdownFunc = nil + shutdownFuncMu.Unlock() + cclog.Infof("[METRICSTORE]> Background workers cancelled (%v)", time.Since(totalStart)) if Keys.Checkpoints.FileFormat == "wal" { + // Signal producers to stop sending before closing channels, + // preventing send-on-closed-channel panics from in-flight NATS workers. + walShuttingDown.Store(true) + // Brief grace period for in-flight DecodeLine calls to complete. + time.Sleep(100 * time.Millisecond) + for _, ch := range walShardChs { close(ch) } + drainStart := time.Now() + WaitForWALStagingDrain() + cclog.Infof("[METRICSTORE]> WAL staging goroutines exited (%v)", time.Since(drainStart)) } - cclog.Infof("[METRICSTORE]> Writing to '%s'...\n", Keys.Checkpoints.RootDir) + cclog.Infof("[METRICSTORE]> Writing checkpoint to '%s'...", Keys.Checkpoints.RootDir) + checkpointStart := time.Now() var files int var err error @@ -294,19 +313,22 @@ func Shutdown() { lastCheckpointMu.Unlock() if Keys.Checkpoints.FileFormat == "wal" { - var hostDirs []string - files, hostDirs, err = ms.ToCheckpointWAL(Keys.Checkpoints.RootDir, from.Unix(), time.Now().Unix()) - if err == nil { - RotateWALFilesAfterShutdown(hostDirs) - } + var successDirs []string + files, successDirs, err = ms.ToCheckpointWAL(Keys.Checkpoints.RootDir, from.Unix(), time.Now().Unix()) + // The final binary snapshot now captures all in-memory data for these + // hosts, making their current.wal redundant. The staging goroutines have + // already exited, so remove the WAL files directly (the channel-based + // RotateWALFiles is no longer safe to call). Without this, current.wal + // files survive shutdown and keep growing across restarts. + RotateWALFilesAfterShutdown(successDirs) } else { files, err = ms.ToCheckpoint(Keys.Checkpoints.RootDir, from.Unix(), time.Now().Unix()) } if err != nil { - cclog.Errorf("[METRICSTORE]> Writing checkpoint failed: %s\n", err.Error()) + cclog.Errorf("[METRICSTORE]> Writing checkpoint failed: %s", err.Error()) } - cclog.Infof("[METRICSTORE]> Done! (%d files written)\n", files) + cclog.Infof("[METRICSTORE]> Done! (%d files written in %v, total shutdown: %v)", files, time.Since(checkpointStart), time.Since(totalStart)) } // Retention starts a background goroutine that periodically frees old metric data. @@ -702,16 +724,16 @@ func (m *MemoryStore) Read(selector util.Selector, metric string, from, to, reso } else if from != cfrom || to != cto || len(data) != len(cdata) { missingfront, missingback := int((from-cfrom)/minfo.Frequency), int((to-cto)/minfo.Frequency) if missingfront != 0 { - return ErrDataDoesNotAlign + return ErrDataDoesNotAlignMissingFront } newlen := len(cdata) - missingback if newlen < 1 { - return ErrDataDoesNotAlign + return ErrDataDoesNotAlignMissingBack } cdata = cdata[0:newlen] if len(cdata) != len(data) { - return ErrDataDoesNotAlign + return ErrDataDoesNotAlignDataLenMismatch } from, to = cfrom, cto diff --git a/pkg/metricstore/parquetArchive.go b/pkg/metricstore/parquetArchive.go index 260bd8dd..81c8be5a 100644 --- a/pkg/metricstore/parquetArchive.go +++ b/pkg/metricstore/parquetArchive.go @@ -99,7 +99,7 @@ func newParquetArchiveWriter(filename string) (*parquetArchiveWriter, error) { // WriteCheckpointFile streams a CheckpointFile tree directly to Parquet rows, // writing metrics in sorted order without materializing all rows in memory. -// Produces one row group per call (typically one host's data). +// Call FlushRowGroup() after writing all checkpoint files for a host. func (w *parquetArchiveWriter) WriteCheckpointFile(cf *CheckpointFile, cluster, hostname, scope, scopeID string) error { w.writeLevel(cf, cluster, hostname, scope, scopeID) @@ -112,10 +112,15 @@ func (w *parquetArchiveWriter) WriteCheckpointFile(cf *CheckpointFile, cluster, w.batch = w.batch[:0] } + return nil +} + +// FlushRowGroup flushes the current row group to the Parquet file. +// Should be called once per host after all checkpoint files for that host are written. +func (w *parquetArchiveWriter) FlushRowGroup() error { if err := w.writer.Flush(); err != nil { return fmt.Errorf("flushing parquet row group: %w", err) } - return nil } diff --git a/pkg/metricstore/stats.go b/pkg/metricstore/stats.go index 2feec2ff..f9db2d43 100644 --- a/pkg/metricstore/stats.go +++ b/pkg/metricstore/stats.go @@ -91,8 +91,10 @@ func (m *MemoryStore) Stats(selector util.Selector, metric string, from, to int6 if n == 0 { from, to = cfrom, cto - } else if from != cfrom || to != cto { - return ErrDataDoesNotAlign + } else if from != cfrom { + return ErrDataDoesNotAlignMissingFront + } else if to != cto { + return ErrDataDoesNotAlignMissingBack } samples += stats.Samples diff --git a/pkg/metricstore/walCheckpoint.go b/pkg/metricstore/walCheckpoint.go index 38585cf5..b7c7ffb2 100644 --- a/pkg/metricstore/walCheckpoint.go +++ b/pkg/metricstore/walCheckpoint.go @@ -69,6 +69,7 @@ import ( "strings" "sync" "sync/atomic" + "time" cclog "github.com/ClusterCockpit/cc-lib/v2/ccLogger" "github.com/ClusterCockpit/cc-lib/v2/schema" @@ -91,6 +92,18 @@ var walShardRotateChs []chan walRotateReq // walNumShards stores the number of shards (set during WALStaging init). var walNumShards int +// walStagingWg tracks WALStaging goroutine exits for shutdown synchronization. +var walStagingWg sync.WaitGroup + +// walShuttingDown is set before closing shard channels to prevent +// SendWALMessage from sending on a closed channel (which panics in Go). +var walShuttingDown atomic.Bool + +// walCheckpointActive is set during binary checkpoint writes. +// While active, SendWALMessage skips sending (returns true) because the +// snapshot captures all in-memory data, making WAL writes redundant. +var walCheckpointActive atomic.Bool + // WALMessage represents a single metric write to be appended to the WAL. // Cluster and Node are NOT stored in the WAL record (inferred from file path). type WALMessage struct { @@ -111,10 +124,17 @@ type walRotateReq struct { // walFileState holds an open WAL file handle and buffered writer for one host directory. type walFileState struct { - f *os.File - w *bufio.Writer + f *os.File + w *bufio.Writer + dirty bool + size int64 // approximate bytes written (tracked from open + writes) } +// walFlushInterval controls how often dirty WAL files are flushed to disk. +// Decoupling flushes from message processing lets the consumer run at memory +// speed, amortizing syscall overhead across many writes. +const walFlushInterval = 1 * time.Second + // walShardIndex computes which shard a message belongs to based on cluster+node. // Uses FNV-1a hash for fast, well-distributed mapping. func walShardIndex(cluster, node string) int { @@ -126,11 +146,14 @@ func walShardIndex(cluster, node string) int { } // SendWALMessage routes a WAL message to the appropriate shard channel. -// Returns false if the channel is full (message dropped). +// Returns false if the channel is full or shutdown is in progress. func SendWALMessage(msg *WALMessage) bool { - if walShardChs == nil { + if walShardChs == nil || walShuttingDown.Load() { return false } + if walCheckpointActive.Load() { + return true // Data safe in memory; snapshot will capture it + } shard := walShardIndex(msg.Cluster, msg.Node) select { case walShardChs[shard] <- msg: @@ -164,7 +187,9 @@ func WALStaging(wg *sync.WaitGroup, ctx context.Context) { msgCh := walShardChs[i] rotateCh := walShardRotateChs[i] + walStagingWg.Add(1) wg.Go(func() { + defer walStagingWg.Done() hostFiles := make(map[string]*walFileState) defer func() { @@ -198,7 +223,11 @@ func WALStaging(wg *sync.WaitGroup, ctx context.Context) { // Write file header magic if file is new (empty). info, err := f.Stat() - if err == nil && info.Size() == 0 { + var fileSize int64 + if err == nil { + fileSize = info.Size() + } + if err == nil && fileSize == 0 { var hdr [4]byte binary.LittleEndian.PutUint32(hdr[:], walFileMagic) if _, err := w.Write(hdr[:]); err != nil { @@ -206,9 +235,10 @@ func WALStaging(wg *sync.WaitGroup, ctx context.Context) { f.Close() return nil } + fileSize = 4 } - ws = &walFileState{f: f, w: w} + ws = &walFileState{f: f, w: w, size: fileSize} hostFiles[hostDir] = ws return ws } @@ -219,9 +249,31 @@ func WALStaging(wg *sync.WaitGroup, ctx context.Context) { if ws == nil { return } - if err := writeWALRecordDirect(ws.w, msg); err != nil { + + // Enforce max WAL size: force-rotate before writing if limit is exceeded. + // The in-memory store still holds the data; only crash-recovery coverage is lost. + if maxSize := Keys.Checkpoints.MaxWALSize; maxSize > 0 && ws.size >= maxSize { + cclog.Warnf("[METRICSTORE]> WAL: force-rotating %s (size %d >= limit %d)", + hostDir, ws.size, maxSize) + ws.w.Flush() + ws.f.Close() + walPath := path.Join(hostDir, "current.wal") + if err := os.Remove(walPath); err != nil && !os.IsNotExist(err) { + cclog.Errorf("[METRICSTORE]> WAL: remove %s: %v", walPath, err) + } + delete(hostFiles, hostDir) + ws = getOrOpenWAL(hostDir) + if ws == nil { + return + } + } + + n, err := writeWALRecordDirect(ws.w, msg) + if err != nil { cclog.Errorf("[METRICSTORE]> WAL: write record: %v", err) } + ws.size += int64(n) + ws.dirty = true } processRotate := func(req walRotateReq) { @@ -238,58 +290,57 @@ func WALStaging(wg *sync.WaitGroup, ctx context.Context) { close(req.done) } - flushAll := func() { + flushDirty := func() { for _, ws := range hostFiles { - if ws.f != nil { + if ws.dirty { ws.w.Flush() + ws.dirty = false } } } - drain := func() { - for { + ticker := time.NewTicker(walFlushInterval) + defer ticker.Stop() + + // drainBatch processes up to 4096 pending messages without blocking. + // Returns false if the channel was closed. + drainBatch := func() bool { + for range 4096 { select { case msg, ok := <-msgCh: if !ok { - return + flushDirty() + return false } processMsg(msg) case req := <-rotateCh: processRotate(req) default: - flushAll() - return + return true } } + return true } for { select { case <-ctx.Done(): - drain() + // On shutdown, skip draining buffered messages — a full binary + // checkpoint will be written from in-memory state, making + // buffered WAL records redundant. + flushDirty() return case msg, ok := <-msgCh: if !ok { return } processMsg(msg) - - // Drain up to 256 more messages without blocking to batch writes. - for range 256 { - select { - case msg, ok := <-msgCh: - if !ok { - return - } - processMsg(msg) - case req := <-rotateCh: - processRotate(req) - default: - goto flushed - } + if !drainBatch() { + return } - flushed: - flushAll() + // No flush here — timer handles periodic flushing. + case <-ticker.C: + flushDirty() case req := <-rotateCh: processRotate(req) } @@ -298,23 +349,45 @@ func WALStaging(wg *sync.WaitGroup, ctx context.Context) { } } +// WaitForWALStagingDrain blocks until all WALStaging goroutines have exited. +// Must be called after closing walShardChs to ensure all file handles are +// flushed and closed before checkpoint writes begin. +func WaitForWALStagingDrain() { + walStagingWg.Wait() +} + // RotateWALFiles sends rotation requests for the given host directories // and blocks until all rotations complete. Each request is routed to the // shard that owns the host directory. +// +// If shutdown is in progress (WAL staging goroutines may have exited), +// rotation is skipped to avoid deadlocking on abandoned channels. func RotateWALFiles(hostDirs []string) { - if walShardRotateChs == nil { + if walShardRotateChs == nil || walShuttingDown.Load() { return } - dones := make([]chan struct{}, len(hostDirs)) - for i, dir := range hostDirs { - dones[i] = make(chan struct{}) - // Extract cluster/node from hostDir to find the right shard. - // hostDir = rootDir/cluster/node + deadline := time.After(2 * time.Minute) + dones := make([]chan struct{}, 0, len(hostDirs)) + for _, dir := range hostDirs { + done := make(chan struct{}) shard := walShardIndexFromDir(dir) - walShardRotateChs[shard] <- walRotateReq{hostDir: dir, done: dones[i]} + select { + case walShardRotateChs[shard] <- walRotateReq{hostDir: dir, done: done}: + dones = append(dones, done) + case <-deadline: + cclog.Warnf("[METRICSTORE]> WAL rotation send timed out, %d of %d hosts remaining", + len(hostDirs)-len(dones), len(hostDirs)) + goto waitDones + } } +waitDones: for _, done := range dones { - <-done + select { + case <-done: + case <-time.After(30 * time.Second): + cclog.Warn("[METRICSTORE]> WAL rotation completion timed out, continuing") + return + } } } @@ -327,8 +400,9 @@ func walShardIndexFromDir(hostDir string) int { return walShardIndex(cluster, node) } -// RotateWALFiles sends rotation requests for the given host directories -// and blocks until all rotations complete. +// RotateWALFilesAfterShutdown directly removes current.wal files for the given +// host directories. Used after shutdown, when WALStaging goroutines have already +// exited and the channel-based RotateWALFiles is no longer safe to call. func RotateWALFilesAfterShutdown(hostDirs []string) { for _, dir := range hostDirs { walPath := path.Join(dir, "current.wal") @@ -338,142 +412,66 @@ func RotateWALFilesAfterShutdown(hostDirs []string) { } } -// writeWALRecordDirect encodes a WAL record directly into the bufio.Writer, -// avoiding heap allocations by using a stack-allocated scratch buffer for -// the fixed-size header/trailer and computing CRC inline. -func writeWALRecordDirect(w *bufio.Writer, msg *WALMessage) error { - // Compute payload size. +// writeWALRecordDirect encodes a WAL record into a contiguous buffer first, +// then writes it to the bufio.Writer in a single call. This prevents partial +// records in the write buffer if a write error occurs mid-record (e.g. disk full). +// Returns the number of bytes written and any error. +func writeWALRecordDirect(w *bufio.Writer, msg *WALMessage) (int, error) { + // Compute payload and total record size. payloadSize := 8 + 2 + len(msg.MetricName) + 1 + 4 for _, s := range msg.Selector { payloadSize += 1 + len(s) } + // Total: 8 (header) + payload + 4 (CRC). + totalSize := 8 + payloadSize + 4 - // Write magic + payload length (8 bytes header). - var hdr [8]byte - binary.LittleEndian.PutUint32(hdr[0:4], walRecordMagic) - binary.LittleEndian.PutUint32(hdr[4:8], uint32(payloadSize)) - if _, err := w.Write(hdr[:]); err != nil { - return err + // Use stack buffer for typical small records, heap-allocate only for large ones. + var stackBuf [256]byte + var buf []byte + if totalSize <= len(stackBuf) { + buf = stackBuf[:totalSize] + } else { + buf = make([]byte, totalSize) } - // We need to compute CRC over the payload as we write it. - crc := crc32.NewIEEE() + // Header: magic + payload length. + binary.LittleEndian.PutUint32(buf[0:4], walRecordMagic) + binary.LittleEndian.PutUint32(buf[4:8], uint32(payloadSize)) + + // Payload starts at offset 8. + p := 8 // Timestamp (8 bytes). - var scratch [8]byte - binary.LittleEndian.PutUint64(scratch[:8], uint64(msg.Timestamp)) - crc.Write(scratch[:8]) - if _, err := w.Write(scratch[:8]); err != nil { - return err - } + binary.LittleEndian.PutUint64(buf[p:p+8], uint64(msg.Timestamp)) + p += 8 // Metric name length (2 bytes) + metric name. - binary.LittleEndian.PutUint16(scratch[:2], uint16(len(msg.MetricName))) - crc.Write(scratch[:2]) - if _, err := w.Write(scratch[:2]); err != nil { - return err - } - nameBytes := []byte(msg.MetricName) - crc.Write(nameBytes) - if _, err := w.Write(nameBytes); err != nil { - return err - } + binary.LittleEndian.PutUint16(buf[p:p+2], uint16(len(msg.MetricName))) + p += 2 + p += copy(buf[p:], msg.MetricName) // Selector count (1 byte). - scratch[0] = byte(len(msg.Selector)) - crc.Write(scratch[:1]) - if _, err := w.Write(scratch[:1]); err != nil { - return err - } + buf[p] = byte(len(msg.Selector)) + p++ // Selectors (1-byte length + bytes each). for _, sel := range msg.Selector { - scratch[0] = byte(len(sel)) - crc.Write(scratch[:1]) - if _, err := w.Write(scratch[:1]); err != nil { - return err - } - selBytes := []byte(sel) - crc.Write(selBytes) - if _, err := w.Write(selBytes); err != nil { - return err - } + buf[p] = byte(len(sel)) + p++ + p += copy(buf[p:], sel) } // Value (4 bytes, float32 bits). - binary.LittleEndian.PutUint32(scratch[:4], math.Float32bits(float32(msg.Value))) - crc.Write(scratch[:4]) - if _, err := w.Write(scratch[:4]); err != nil { - return err - } + binary.LittleEndian.PutUint32(buf[p:p+4], math.Float32bits(float32(msg.Value))) + p += 4 - // CRC32 (4 bytes). - binary.LittleEndian.PutUint32(scratch[:4], crc.Sum32()) - _, err := w.Write(scratch[:4]) - return err -} + // CRC32 over payload (bytes 8..8+payloadSize). + crc := crc32.ChecksumIEEE(buf[8 : 8+payloadSize]) + binary.LittleEndian.PutUint32(buf[p:p+4], crc) -// buildWALPayload encodes a WALMessage into a binary payload (without magic/length/CRC). -func buildWALPayload(msg *WALMessage) []byte { - size := 8 + 2 + len(msg.MetricName) + 1 + 4 - for _, s := range msg.Selector { - size += 1 + len(s) - } - - buf := make([]byte, 0, size) - - // Timestamp (8 bytes, little-endian int64) - var ts [8]byte - binary.LittleEndian.PutUint64(ts[:], uint64(msg.Timestamp)) - buf = append(buf, ts[:]...) - - // Metric name (2-byte length prefix + bytes) - var mLen [2]byte - binary.LittleEndian.PutUint16(mLen[:], uint16(len(msg.MetricName))) - buf = append(buf, mLen[:]...) - buf = append(buf, msg.MetricName...) - - // Selector count (1 byte) - buf = append(buf, byte(len(msg.Selector))) - - // Selectors (1-byte length prefix + bytes each) - for _, sel := range msg.Selector { - buf = append(buf, byte(len(sel))) - buf = append(buf, sel...) - } - - // Value (4 bytes, float32 bit representation) - var val [4]byte - binary.LittleEndian.PutUint32(val[:], math.Float32bits(float32(msg.Value))) - buf = append(buf, val[:]...) - - return buf -} - -// writeWALRecord appends a binary WAL record to the writer. -// Format: [4B magic][4B payload_len][payload][4B CRC32] -func writeWALRecord(w io.Writer, msg *WALMessage) error { - payload := buildWALPayload(msg) - crc := crc32.ChecksumIEEE(payload) - - record := make([]byte, 0, 4+4+len(payload)+4) - - var magic [4]byte - binary.LittleEndian.PutUint32(magic[:], walRecordMagic) - record = append(record, magic[:]...) - - var pLen [4]byte - binary.LittleEndian.PutUint32(pLen[:], uint32(len(payload))) - record = append(record, pLen[:]...) - - record = append(record, payload...) - - var crcBytes [4]byte - binary.LittleEndian.PutUint32(crcBytes[:], crc) - record = append(record, crcBytes[:]...) - - _, err := w.Write(record) - return err + // Single atomic write to the buffered writer. + n, err := w.Write(buf) + return n, err } // readWALRecord reads one WAL record from the reader. @@ -697,7 +695,10 @@ func (m *MemoryStore) ToCheckpointWAL(dir string, from, to int64) (int, []string selector []string } - n, errs := int32(0), int32(0) + totalWork := len(levels) + cclog.Infof("[METRICSTORE]> Starting binary checkpoint for %d hosts with %d workers", totalWork, Keys.NumWorkers) + + n, errs, completed := int32(0), int32(0), int32(0) var successDirs []string var successMu sync.Mutex @@ -705,6 +706,22 @@ func (m *MemoryStore) ToCheckpointWAL(dir string, from, to int64) (int, []string wg.Add(Keys.NumWorkers) work := make(chan workItem, Keys.NumWorkers*2) + // Progress logging goroutine. + stopProgress := make(chan struct{}) + go func() { + ticker := time.NewTicker(10 * time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + cclog.Infof("[METRICSTORE]> Checkpoint progress: %d/%d hosts (%d written, %d errors)", + atomic.LoadInt32(&completed), totalWork, atomic.LoadInt32(&n), atomic.LoadInt32(&errs)) + case <-stopProgress: + return + } + } + }() + for range Keys.NumWorkers { go func() { defer wg.Done() @@ -712,6 +729,7 @@ func (m *MemoryStore) ToCheckpointWAL(dir string, from, to int64) (int, []string err := wi.level.toCheckpointBinary(wi.hostDir, from, to, m) if err != nil { if err == ErrNoNewArchiveData { + atomic.AddInt32(&completed, 1) continue } cclog.Errorf("[METRICSTORE]> binary checkpoint error for %s: %v", wi.hostDir, err) @@ -722,6 +740,7 @@ func (m *MemoryStore) ToCheckpointWAL(dir string, from, to int64) (int, []string successDirs = append(successDirs, wi.hostDir) successMu.Unlock() } + atomic.AddInt32(&completed, 1) } }() } @@ -736,6 +755,7 @@ func (m *MemoryStore) ToCheckpointWAL(dir string, from, to int64) (int, []string } close(work) wg.Wait() + close(stopProgress) if errs > 0 { return int(n), successDirs, fmt.Errorf("[METRICSTORE]> %d errors during binary checkpoint (%d successes)", errs, n) diff --git a/tools/binaryCheckpointReader/binaryCheckpointReader.go b/tools/binaryCheckpointReader/binaryCheckpointReader.go new file mode 100644 index 00000000..5f856912 --- /dev/null +++ b/tools/binaryCheckpointReader/binaryCheckpointReader.go @@ -0,0 +1,381 @@ +// Copyright (C) NHR@FAU, University Erlangen-Nuremberg. +// All rights reserved. This file is part of cc-backend. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// binaryCheckpointReader reads .wal or .bin checkpoint files produced by the +// metricstore WAL/snapshot system and dumps their contents to a human-readable +// .txt file (same name as input, with .txt extension). +// +// Usage: +// +// go run ./tools/binaryCheckpointReader +package main + +import ( + "bufio" + "encoding/binary" + "fmt" + "hash/crc32" + "io" + "math" + "os" + "path/filepath" + "strings" + "time" +) + +// Magic numbers matching metricstore/walCheckpoint.go. +const ( + walFileMagic = uint32(0xCC1DA701) + walRecordMagic = uint32(0xCC1DA7A1) + snapFileMagic = uint32(0xCC5B0001) +) + +func main() { + if len(os.Args) != 2 { + fmt.Fprintf(os.Stderr, "Usage: %s \n", os.Args[0]) + os.Exit(1) + } + + inputPath := os.Args[1] + ext := strings.ToLower(filepath.Ext(inputPath)) + + if ext != ".wal" && ext != ".bin" { + fmt.Fprintf(os.Stderr, "Error: file must have .wal or .bin extension, got %q\n", ext) + os.Exit(1) + } + + f, err := os.Open(inputPath) + if err != nil { + fmt.Fprintf(os.Stderr, "Error opening %s: %v\n", inputPath, err) + os.Exit(1) + } + defer f.Close() + + // Output file: replace extension with .txt + outputPath := strings.TrimSuffix(inputPath, filepath.Ext(inputPath)) + ".txt" + out, err := os.Create(outputPath) + if err != nil { + fmt.Fprintf(os.Stderr, "Error creating output %s: %v\n", outputPath, err) + os.Exit(1) + } + defer out.Close() + + w := bufio.NewWriter(out) + defer w.Flush() + + switch ext { + case ".wal": + err = dumpWAL(f, w) + case ".bin": + err = dumpBinarySnapshot(f, w) + } + + if err != nil { + fmt.Fprintf(os.Stderr, "Error reading %s: %v\n", inputPath, err) + os.Exit(1) + } + + w.Flush() + fmt.Printf("Output written to %s\n", outputPath) +} + +// ---------- WAL reader ---------- + +func dumpWAL(f *os.File, w *bufio.Writer) error { + br := bufio.NewReader(f) + + // Read and verify file header magic. + var fileMagic uint32 + if err := binary.Read(br, binary.LittleEndian, &fileMagic); err != nil { + if err == io.EOF { + fmt.Fprintln(w, "WAL file is empty (0 bytes).") + return nil + } + return fmt.Errorf("read file header: %w", err) + } + + if fileMagic != walFileMagic { + return fmt.Errorf("invalid WAL file magic 0x%08X (expected 0x%08X)", fileMagic, walFileMagic) + } + + fmt.Fprintf(w, "=== WAL File Dump ===\n") + fmt.Fprintf(w, "File: %s\n", f.Name()) + fmt.Fprintf(w, "File Magic: 0x%08X (valid)\n\n", fileMagic) + + recordNum := 0 + for { + msg, err := readWALRecord(br) + if err != nil { + fmt.Fprintf(w, "--- Record #%d: ERROR ---\n", recordNum+1) + fmt.Fprintf(w, " Error: %v\n", err) + fmt.Fprintf(w, " (stopping replay — likely truncated trailing record)\n\n") + break + } + if msg == nil { + break // Clean EOF + } + + recordNum++ + ts := time.Unix(msg.Timestamp, 0).UTC() + + fmt.Fprintf(w, "--- Record #%d ---\n", recordNum) + fmt.Fprintf(w, " Timestamp: %d (%s)\n", msg.Timestamp, ts.Format(time.RFC3339)) + fmt.Fprintf(w, " Metric: %s\n", msg.MetricName) + if len(msg.Selector) > 0 { + fmt.Fprintf(w, " Selectors: [%s]\n", strings.Join(msg.Selector, ", ")) + } else { + fmt.Fprintf(w, " Selectors: (none)\n") + } + fmt.Fprintf(w, " Value: %g\n\n", msg.Value) + } + + fmt.Fprintf(w, "=== Total valid records: %d ===\n", recordNum) + return nil +} + +type walMessage struct { + MetricName string + Selector []string + Value float32 + Timestamp int64 +} + +func readWALRecord(r io.Reader) (*walMessage, error) { + var magic uint32 + if err := binary.Read(r, binary.LittleEndian, &magic); err != nil { + if err == io.EOF { + return nil, nil + } + return nil, fmt.Errorf("read record magic: %w", err) + } + + if magic != walRecordMagic { + return nil, fmt.Errorf("invalid record magic 0x%08X (expected 0x%08X)", magic, walRecordMagic) + } + + var payloadLen uint32 + if err := binary.Read(r, binary.LittleEndian, &payloadLen); err != nil { + return nil, fmt.Errorf("read payload length: %w", err) + } + + if payloadLen > 1<<20 { + return nil, fmt.Errorf("record payload too large: %d bytes", payloadLen) + } + + payload := make([]byte, payloadLen) + if _, err := io.ReadFull(r, payload); err != nil { + return nil, fmt.Errorf("read payload: %w", err) + } + + var storedCRC uint32 + if err := binary.Read(r, binary.LittleEndian, &storedCRC); err != nil { + return nil, fmt.Errorf("read CRC: %w", err) + } + + if crc32.ChecksumIEEE(payload) != storedCRC { + return nil, fmt.Errorf("CRC mismatch (truncated write or corruption)") + } + + return parseWALPayload(payload) +} + +func parseWALPayload(payload []byte) (*walMessage, error) { + if len(payload) < 8+2+1+4 { + return nil, fmt.Errorf("payload too short: %d bytes", len(payload)) + } + + offset := 0 + + // Timestamp (8 bytes). + ts := int64(binary.LittleEndian.Uint64(payload[offset : offset+8])) + offset += 8 + + // Metric name (2-byte length + bytes). + if offset+2 > len(payload) { + return nil, fmt.Errorf("metric name length overflows payload") + } + mLen := int(binary.LittleEndian.Uint16(payload[offset : offset+2])) + offset += 2 + + if offset+mLen > len(payload) { + return nil, fmt.Errorf("metric name overflows payload") + } + metricName := string(payload[offset : offset+mLen]) + offset += mLen + + // Selector count (1 byte). + if offset >= len(payload) { + return nil, fmt.Errorf("selector count overflows payload") + } + selCount := int(payload[offset]) + offset++ + + selectors := make([]string, selCount) + for i := range selCount { + if offset >= len(payload) { + return nil, fmt.Errorf("selector[%d] length overflows payload", i) + } + sLen := int(payload[offset]) + offset++ + + if offset+sLen > len(payload) { + return nil, fmt.Errorf("selector[%d] data overflows payload", i) + } + selectors[i] = string(payload[offset : offset+sLen]) + offset += sLen + } + + // Value (4 bytes, float32 bits). + if offset+4 > len(payload) { + return nil, fmt.Errorf("value overflows payload") + } + bits := binary.LittleEndian.Uint32(payload[offset : offset+4]) + value := math.Float32frombits(bits) + + return &walMessage{ + MetricName: metricName, + Timestamp: ts, + Selector: selectors, + Value: value, + }, nil +} + +// ---------- Binary snapshot reader ---------- + +func dumpBinarySnapshot(f *os.File, w *bufio.Writer) error { + br := bufio.NewReader(f) + + var magic uint32 + if err := binary.Read(br, binary.LittleEndian, &magic); err != nil { + return fmt.Errorf("read magic: %w", err) + } + if magic != snapFileMagic { + return fmt.Errorf("invalid snapshot magic 0x%08X (expected 0x%08X)", magic, snapFileMagic) + } + + var from, to int64 + if err := binary.Read(br, binary.LittleEndian, &from); err != nil { + return fmt.Errorf("read from: %w", err) + } + if err := binary.Read(br, binary.LittleEndian, &to); err != nil { + return fmt.Errorf("read to: %w", err) + } + + fromTime := time.Unix(from, 0).UTC() + toTime := time.Unix(to, 0).UTC() + + fmt.Fprintf(w, "=== Binary Snapshot Dump ===\n") + fmt.Fprintf(w, "File: %s\n", f.Name()) + fmt.Fprintf(w, "Magic: 0x%08X (valid)\n", magic) + fmt.Fprintf(w, "From: %d (%s)\n", from, fromTime.Format(time.RFC3339)) + fmt.Fprintf(w, "To: %d (%s)\n\n", to, toTime.Format(time.RFC3339)) + + return dumpBinaryLevel(br, w, 0) +} + +func dumpBinaryLevel(r io.Reader, w *bufio.Writer, depth int) error { + indent := strings.Repeat(" ", depth) + + var numMetrics uint32 + if err := binary.Read(r, binary.LittleEndian, &numMetrics); err != nil { + return fmt.Errorf("read num_metrics: %w", err) + } + + if numMetrics > 0 { + fmt.Fprintf(w, "%sMetrics (%d):\n", indent, numMetrics) + } + + for i := range numMetrics { + name, err := readString16(r) + if err != nil { + return fmt.Errorf("read metric name [%d]: %w", i, err) + } + + var freq, start int64 + if err := binary.Read(r, binary.LittleEndian, &freq); err != nil { + return fmt.Errorf("read frequency for %s: %w", name, err) + } + if err := binary.Read(r, binary.LittleEndian, &start); err != nil { + return fmt.Errorf("read start for %s: %w", name, err) + } + + var numValues uint32 + if err := binary.Read(r, binary.LittleEndian, &numValues); err != nil { + return fmt.Errorf("read num_values for %s: %w", name, err) + } + + startTime := time.Unix(start, 0).UTC() + + fmt.Fprintf(w, "%s [%s]\n", indent, name) + fmt.Fprintf(w, "%s Frequency: %d s\n", indent, freq) + fmt.Fprintf(w, "%s Start: %d (%s)\n", indent, start, startTime.Format(time.RFC3339)) + fmt.Fprintf(w, "%s Values (%d):", indent, numValues) + + if numValues == 0 { + fmt.Fprintln(w, " (none)") + } else { + fmt.Fprintln(w) + // Print values in rows of 10 for readability. + for j := range numValues { + var bits uint32 + if err := binary.Read(r, binary.LittleEndian, &bits); err != nil { + return fmt.Errorf("read value[%d] for %s: %w", j, name, err) + } + val := math.Float32frombits(bits) + + if j%10 == 0 { + if j > 0 { + fmt.Fprintln(w) + } + // Print the timestamp for this row's first value. + rowTS := start + int64(j)*freq + fmt.Fprintf(w, "%s [%s] ", indent, time.Unix(rowTS, 0).UTC().Format("15:04:05")) + } + + if math.IsNaN(float64(val)) { + fmt.Fprintf(w, "NaN ") + } else { + fmt.Fprintf(w, "%g ", val) + } + } + fmt.Fprintln(w) + } + } + + var numChildren uint32 + if err := binary.Read(r, binary.LittleEndian, &numChildren); err != nil { + return fmt.Errorf("read num_children: %w", err) + } + + if numChildren > 0 { + fmt.Fprintf(w, "%sChildren (%d):\n", indent, numChildren) + } + + for i := range numChildren { + childName, err := readString16(r) + if err != nil { + return fmt.Errorf("read child name [%d]: %w", i, err) + } + + fmt.Fprintf(w, "%s [%s]\n", indent, childName) + if err := dumpBinaryLevel(r, w, depth+2); err != nil { + return fmt.Errorf("read child %s: %w", childName, err) + } + } + + return nil +} + +func readString16(r io.Reader) (string, error) { + var sLen uint16 + if err := binary.Read(r, binary.LittleEndian, &sLen); err != nil { + return "", err + } + buf := make([]byte, sLen) + if _, err := io.ReadFull(r, buf); err != nil { + return "", err + } + return string(buf), nil +} diff --git a/web/frontend/package-lock.json b/web/frontend/package-lock.json index 339f5eea..66589c1c 100644 --- a/web/frontend/package-lock.json +++ b/web/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "cc-frontend", - "version": "1.5.2", + "version": "1.5.3", "lockfileVersion": 4, "requires": true, "packages": { "": { "name": "cc-frontend", - "version": "1.5.2", + "version": "1.5.3", "license": "MIT", "dependencies": { "@rollup/plugin-replace": "^6.0.3", @@ -608,9 +608,9 @@ ] }, "node_modules/@sveltejs/acorn-typescript": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", - "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.10.tgz", + "integrity": "sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==", "license": "MIT", "peerDependencies": { "acorn": "^8.9.0" @@ -654,19 +654,6 @@ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT" }, - "node_modules/@typescript-eslint/types": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.1.tgz", - "integrity": "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==", - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@urql/core": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.2.0.tgz", @@ -803,9 +790,9 @@ } }, "node_modules/devalue": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.4.tgz", - "integrity": "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==", + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "integrity": "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==", "license": "MIT" }, "node_modules/escape-latex": { @@ -821,13 +808,20 @@ "license": "MIT" }, "node_modules/esrap": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.4.tgz", - "integrity": "sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.9.tgz", + "integrity": "sha512-4KijP+NxCWthMCUC3qHbE6n4vCjqgJS1uAYKhuT/GWfFTf1Qyive2TgOjep+gzbSzRfnNyaN/UU9YmdOt8Eg0A==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "peerDependencies": { "@typescript-eslint/types": "^8.2.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/types": { + "optional": true + } } }, "node_modules/estree-walker": { @@ -968,9 +962,9 @@ } }, "node_modules/mathjs": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-15.1.1.tgz", - "integrity": "sha512-rM668DTtpSzMVoh/cKAllyQVEbBApM5g//IMGD8vD7YlrIz9ITRr3SrdhjaDxcBNTdyETWwPebj2unZyHD7ZdA==", + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-15.2.0.tgz", + "integrity": "sha512-UAQzSVob9rNLdGpqcFMYmSu9dkuLYy7Lr2hBEQS5SHQdknA9VppJz3cy2KkpMzTODunad6V6cNv+5kOLsePLow==", "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.26.10", @@ -998,9 +992,9 @@ "license": "MIT" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { "node": ">=12" @@ -1134,9 +1128,9 @@ } }, "node_modules/rollup-plugin-svelte/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", "engines": { @@ -1153,9 +1147,9 @@ "license": "MIT" }, "node_modules/serialize-javascript": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.4.tgz", - "integrity": "sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-7.0.5.tgz", + "integrity": "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -1207,23 +1201,23 @@ } }, "node_modules/svelte": { - "version": "5.54.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.54.0.tgz", - "integrity": "sha512-TTDxwYnHkova6Wsyj1PGt9TByuWqvMoeY1bQiuAf2DM/JeDSMw7FjRKzk8K/5mJ99vGOKhbCqTDpyAKwjp4igg==", + "version": "5.55.10", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.55.10.tgz", + "integrity": "sha512-v9mFVBY1USosyIWdXE7Cg4AN0ywyKCMcAhONvli8doMowEhFhMdNLKD1j7O/UnsrdVTHaUOk/jv8hD/HClVy+g==", "license": "MIT", "dependencies": { "@jridgewell/remapping": "^2.3.4", "@jridgewell/sourcemap-codec": "^1.5.0", - "@sveltejs/acorn-typescript": "^1.0.5", + "@sveltejs/acorn-typescript": "^1.0.10", "@types/estree": "^1.0.5", "@types/trusted-types": "^2.0.7", "acorn": "^8.12.1", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", - "devalue": "^5.6.4", + "devalue": "^5.8.1", "esm-env": "^1.2.1", - "esrap": "^2.2.2", + "esrap": "^2.2.9", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", diff --git a/web/frontend/package.json b/web/frontend/package.json index fee61f5a..dbe6f984 100644 --- a/web/frontend/package.json +++ b/web/frontend/package.json @@ -1,6 +1,6 @@ { "name": "cc-frontend", - "version": "1.5.2", + "version": "1.5.3", "license": "MIT", "scripts": { "build": "rollup -c", diff --git a/web/frontend/src/Job.root.svelte b/web/frontend/src/Job.root.svelte index 8e55a15a..2c6fbd42 100644 --- a/web/frontend/src/Job.root.svelte +++ b/web/frontend/src/Job.root.svelte @@ -237,7 +237,7 @@ The following note was added by administrators: - {@html thisJob.metaData.message} + {thisJob.metaData.message} diff --git a/web/frontend/src/Logs.root.svelte b/web/frontend/src/Logs.root.svelte index ccadabce..9dfd7578 100644 --- a/web/frontend/src/Logs.root.svelte +++ b/web/frontend/src/Logs.root.svelte @@ -57,7 +57,7 @@ let entries = $state([]); let loading = $state(false); let error = $state(null); - let timer = $state(null); + let timer = null; function levelColor(priority) { if (priority <= 2) return "danger"; diff --git a/web/frontend/src/Node.root.svelte b/web/frontend/src/Node.root.svelte index 35cfcca9..44628ba7 100644 --- a/web/frontend/src/Node.root.svelte +++ b/web/frontend/src/Node.root.svelte @@ -54,11 +54,16 @@ const paging = { itemsPerPage: 50, page: 1 }; const sorting = { field: "startTime", type: "col", order: "DESC" }; const nodeMetricsQuery = gql` - query ($cluster: String!, $nodes: [String!], $from: Time!, $to: Time!) { + query ( + $cluster: String!, + $nodes: [String!], + $from: Time!, + $to: Time!, + $nodeFilter: [NodeFilter!]!, + $sorting: OrderByInput! + ) { nodeMetrics(cluster: $cluster, nodes: $nodes, from: $from, to: $to) { host - nodeState - metricHealth subCluster metrics { name @@ -79,7 +84,14 @@ } } } - } + }, + nodeStatus: nodes(filter: $nodeFilter, order: $sorting) { + count + items { + schedulerState + healthState + } + } } `; const nodeJobsQuery = gql` @@ -146,6 +158,8 @@ nodes: [hostname], from: from?.toISOString(), to: to?.toISOString(), + nodeFilter: { hostname: { eq: hostname }}, + sorting // $sorting unused in backend: Use placeholder }, }) ); @@ -157,8 +171,8 @@ }) ); - const thisNodeState = $derived($nodeMetricsData?.data?.nodeMetrics[0]?.nodeState || 'notindb'); - const thisMetricHealth = $derived($nodeMetricsData?.data?.nodeMetrics[0]?.metricHealth || 'unknown'); + const thisNodeState = $derived($nodeMetricsData?.data?.nodeStatus?.items[0]?.schedulerState || 'notindb'); + const thisMetricHealth = $derived($nodeMetricsData?.data?.nodeStatus?.items[0]?.healthState || 'unknown'); diff --git a/web/frontend/src/generic/Filters.svelte b/web/frontend/src/generic/Filters.svelte index 02f801a0..427eabdc 100644 --- a/web/frontend/src/generic/Filters.svelte +++ b/web/frontend/src/generic/Filters.svelte @@ -73,6 +73,7 @@ userMatch: "contains", // Filter Modals cluster: null, + subCluster: null, partition: null, states: allJobStates, shared: "", @@ -107,6 +108,7 @@ user: filterPresets?.user || "", userMatch: filterPresets?.userMatch || "contains", cluster: filterPresets?.cluster || null, + subCluster: filterPresets?.subCluster || null, partition: filterPresets?.partition || null, states: filterPresets?.states || filterPresets?.state @@ -158,6 +160,7 @@ if (filters.dbId.length != 0) items.push({ dbId: filters.dbId }); if (filters.cluster) items.push({ cluster: { eq: filters.cluster } }); + if (filters.subCluster) items.push({ subCluster: { eq: filters.subCluster } }); if (filters.partition) items.push({ partition: { eq: filters.partition } }); if (filters.states.length != allJobStates?.length) items.push({ state: filters.states }); @@ -166,12 +169,12 @@ items.push({ project: { [filters.projectMatch]: filters.project } }); if (filters.user) items.push({ user: { [filters.userMatch]: filters.user } }); - if (filters.numNodes.from != null || filters.numNodes.to != null) { + if (filters.numNodes.from != null && filters.numNodes.to != null) { items.push({ numNodes: { from: filters.numNodes.from, to: filters.numNodes.to }, }); } - if (filters.numAccelerators.from != null || filters.numAccelerators.to != null) { + if (filters.numAccelerators.from != null && filters.numAccelerators.to != null) { items.push({ numAccelerators: { from: filters.numAccelerators.from, @@ -179,7 +182,7 @@ }, }); } - if (filters.numHWThreads.from != null || filters.numHWThreads.to != null) { + if (filters.numHWThreads.from != null && filters.numHWThreads.to != null) { items.push({ numHWThreads: { from: filters.numHWThreads.from, @@ -206,14 +209,21 @@ items.push({ duration: { to: filters.duration.lessThan, from: 0 } }); if (filters.duration.moreThan) items.push({ duration: { to: 0, from: filters.duration.moreThan } }); - if (filters.energy.from != null || filters.energy.to != null) + if (filters.energy.from != null && filters.energy.to != null) items.push({ energy: { from: filters.energy.from, to: filters.energy.to }, }); if (filters.jobId) items.push({ jobId: { [filters.jobIdMatch]: filters.jobId } }); - if (filters.stats.length != 0) - items.push({ metricStats: filters.stats.map((st) => { return { metricName: st.field, range: { from: st.from, to: st.to }} }) }); + if (filters.stats.length != 0) { + const metricStats = []; + filters.stats.forEach((st) => { + if (st.from != null && st.to != null) + metricStats.push({ metricName: st.field, range: { from: st.from, to: st.to }}); + }); + if (metricStats.length != 0) + items.push({metricStats}) + }; if (filters.node) items.push({ node: { [filters.nodeMatch]: filters.node } }); if (filters.jobName) items.push({ jobName: { contains: filters.jobName } }); if (filters.schedule) items.push({ schedule: filters.schedule }); @@ -260,6 +270,7 @@ opts.push(`userMatch=${filters.userMatch}`); // Filter Modals if (filters.cluster) opts.push(`cluster=${filters.cluster}`); + if (filters.subCluster) opts.push(`subCluster=${filters.subCluster}`); if (filters.partition) opts.push(`partition=${filters.partition}`); if (filters.states.length != allJobStates?.length) for (let state of filters.states) opts.push(`state=${state}`); @@ -280,40 +291,40 @@ opts.push(`duration=morethan-${filters.duration.moreThan}`); if (filters.tags.length != 0) for (let tag of filters.tags) opts.push(`tag=${tag}`); - if (filters.numNodes.from > 1 && filters.numNodes.to > 0) + if (filters.numNodes.from > 0 && filters.numNodes.to > 0) opts.push(`numNodes=${filters.numNodes.from}-${filters.numNodes.to}`); - else if (filters.numNodes.from > 1 && filters.numNodes.to == 0) + else if (filters.numNodes.from > 0 && filters.numNodes.to == 0) opts.push(`numNodes=morethan-${filters.numNodes.from}`); - else if (filters.numNodes.from == 1 && filters.numNodes.to > 0) + else if (filters.numNodes.from == 0 && filters.numNodes.to > 0) opts.push(`numNodes=lessthan-${filters.numNodes.to}`); - if (filters.numHWThreads.from > 1 && filters.numHWThreads.to > 0) + if (filters.numHWThreads.from > 0 && filters.numHWThreads.to > 0) opts.push(`numHWThreads=${filters.numHWThreads.from}-${filters.numHWThreads.to}`); - else if (filters.numHWThreads.from > 1 && filters.numHWThreads.to == 0) + else if (filters.numHWThreads.from > 0 && filters.numHWThreads.to == 0) opts.push(`numHWThreads=morethan-${filters.numHWThreads.from}`); - else if (filters.numHWThreads.from == 1 && filters.numHWThreads.to > 0) + else if (filters.numHWThreads.from == 0 && filters.numHWThreads.to > 0) opts.push(`numHWThreads=lessthan-${filters.numHWThreads.to}`); - if (filters.numAccelerators.from && filters.numAccelerators.to) + if (filters.numAccelerators.from > 0 && filters.numAccelerators.to > 0) opts.push(`numAccelerators=${filters.numAccelerators.from}-${filters.numAccelerators.to}`); - else if (filters.numAccelerators.from > 1 && filters.numAccelerators.to == 0) + else if (filters.numAccelerators.from > 0 && filters.numAccelerators.to == 0) opts.push(`numAccelerators=morethan-${filters.numAccelerators.from}`); - else if (filters.numAccelerators.from == 1 && filters.numAccelerators.to > 0) + else if (filters.numAccelerators.from == 0 && filters.numAccelerators.to > 0) opts.push(`numAccelerators=lessthan-${filters.numAccelerators.to}`); if (filters.node) opts.push(`node=${filters.node}`); if (filters.node && filters.nodeMatch != "eq") // "eq" is default-case opts.push(`nodeMatch=${filters.nodeMatch}`); - if (filters.energy.from > 1 && filters.energy.to > 0) + if (filters.energy.from > 0 && filters.energy.to > 0) opts.push(`energy=${filters.energy.from}-${filters.energy.to}`); - else if (filters.energy.from > 1 && filters.energy.to == 0) + else if (filters.energy.from > 0 && filters.energy.to == 0) opts.push(`energy=morethan-${filters.energy.from}`); - else if (filters.energy.from == 1 && filters.energy.to > 0) + else if (filters.energy.from == 0 && filters.energy.to > 0) opts.push(`energy=lessthan-${filters.energy.to}`); if (filters.stats.length > 0) for (let stat of filters.stats) { - if (stat.from > 1 && stat.to > 0) + if (stat.from > 0 && stat.to > 0) opts.push(`stat=${stat.field}-${stat.from}-${stat.to}`); - else if (stat.from > 1 && stat.to == 0) + else if (stat.from > 0 && stat.to == 0) opts.push(`stat=${stat.field}-morethan-${stat.from}`); - else if (stat.from == 1 && stat.to > 0) + else if (stat.from == 0 && stat.to > 0) opts.push(`stat=${stat.field}-lessthan-${stat.to}`); } // Build && Return @@ -339,7 +350,7 @@ {/if} Manage Filters (isClusterOpen = true)}> - Cluster/Partition + Cluster/SubCluster/Partition (isJobStatesOpen = true)}> Job States @@ -433,6 +444,9 @@ {#if filters.cluster} (isClusterOpen = true)}> {filters.cluster} + {#if filters.subCluster} + [{filters.subCluster}] + {/if} {#if filters.partition} ({filters.partition}) {/if} @@ -511,43 +525,43 @@ {/if} - {#if filters.numNodes.from > 1 && filters.numNodes.to > 0} + {#if filters.numNodes.from > 0 && filters.numNodes.to > 0} (isResourcesOpen = true)}> Nodes: {filters.numNodes.from} - {filters.numNodes.to} - {:else if filters.numNodes.from > 1 && filters.numNodes.to == 0} + {:else if filters.numNodes.from > 0 && filters.numNodes.to == 0} (isResourcesOpen = true)}>  ≥ {filters.numNodes.from} Node(s) - {:else if filters.numNodes.from == 1 && filters.numNodes.to > 0} + {:else if filters.numNodes.from == 0 && filters.numNodes.to > 0} (isResourcesOpen = true)}>  ≤ {filters.numNodes.to} Node(s) {/if} - {#if filters.numHWThreads.from > 1 && filters.numHWThreads.to > 0} + {#if filters.numHWThreads.from > 0 && filters.numHWThreads.to > 0} (isResourcesOpen = true)}> HWThreads: {filters.numHWThreads.from} - {filters.numHWThreads.to} - {:else if filters.numHWThreads.from > 1 && filters.numHWThreads.to == 0} + {:else if filters.numHWThreads.from > 0 && filters.numHWThreads.to == 0} (isResourcesOpen = true)}>  ≥ {filters.numHWThreads.from} HWThread(s) - {:else if filters.numHWThreads.from == 1 && filters.numHWThreads.to > 0} + {:else if filters.numHWThreads.from == 0 && filters.numHWThreads.to > 0} (isResourcesOpen = true)}>  ≤ {filters.numHWThreads.to} HWThread(s) {/if} - {#if filters.numAccelerators.from > 1 && filters.numAccelerators.to > 0} + {#if filters.numAccelerators.from > 0 && filters.numAccelerators.to > 0} (isResourcesOpen = true)}> Accelerators: {filters.numAccelerators.from} - {filters.numAccelerators.to} - {:else if filters.numAccelerators.from > 1 && filters.numAccelerators.to == 0} + {:else if filters.numAccelerators.from > 0 && filters.numAccelerators.to == 0} (isResourcesOpen = true)}>  ≥ {filters.numAccelerators.from} Acc(s) - {:else if filters.numAccelerators.from == 1 && filters.numAccelerators.to > 0} + {:else if filters.numAccelerators.from == 0 && filters.numAccelerators.to > 0} (isResourcesOpen = true)}>  ≤ {filters.numAccelerators.to} Acc(s) @@ -559,15 +573,15 @@ {/if} - {#if filters.energy.from > 1 && filters.energy.to > 0} + {#if filters.energy.from > 0 && filters.energy.to > 0} (isEnergyOpen = true)}> Total Energy: {filters.energy.from} - {filters.energy.to} kWh - {:else if filters.energy.from > 1 && filters.energy.to == 0} + {:else if filters.energy.from > 0 && filters.energy.to == 0} (isEnergyOpen = true)}> Total Energy ≥ {filters.energy.from} kWh - {:else if filters.energy.from == 1 && filters.energy.to > 0} + {:else if filters.energy.from == 0 && filters.energy.to > 0} (isEnergyOpen = true)}> Total Energy ≤ {filters.energy.to} kWh @@ -575,15 +589,15 @@ {#if filters.stats.length > 0} {#each filters.stats as stat} - {#if stat.from > 1 && stat.to > 0} + {#if stat.from > 0 && stat.to > 0} (isStatsOpen = true)}> {stat.field}: {stat.from} - {stat.to} {stat.unit}   - {:else if stat.from > 1 && stat.to == 0} + {:else if stat.from > 0 && stat.to == 0} (isStatsOpen = true)}> {stat.field} ≥ {stat.from} {stat.unit}   - {:else if stat.from == 1 && stat.to > 0} + {:else if stat.from == 0 && stat.to > 0} (isStatsOpen = true)}> {stat.field} ≤ {stat.to} {stat.unit}   @@ -596,6 +610,7 @@ bind:isOpen={isClusterOpen} presetCluster={filters.cluster} presetPartition={filters.partition} + presetSubCluster={filters.subCluster} {disableClusterSelection} setFilter={(filter) => updateFilters(filter)} /> diff --git a/web/frontend/src/generic/filters/Cluster.svelte b/web/frontend/src/generic/filters/Cluster.svelte index bb02335e..4736ead1 100644 --- a/web/frontend/src/generic/filters/Cluster.svelte +++ b/web/frontend/src/generic/filters/Cluster.svelte @@ -1,10 +1,11 @@ @@ -26,6 +27,7 @@ isOpen = $bindable(false), presetCluster = "", presetPartition = "", + presetSubCluster = "", disableClusterSelection = false, setFilter } = $props(); @@ -36,10 +38,11 @@ const clusterInfos = $derived($initialized ? getContext("clusters") : null); let pendingCluster = $derived(presetCluster); let pendingPartition = $derived(presetPartition); + let pendingSubCluster = $derived(presetSubCluster); (isOpen = !isOpen)}> - Select Cluster & Slurm Partition + Select Cluster, SubCluster & Partition {#if $initialized}

Cluster

@@ -51,7 +54,7 @@ ((pendingCluster = null), (pendingPartition = null))} + onclick={() => ((pendingCluster = null), (pendingPartition = null), (pendingSubCluster = null))} > Any Cluster @@ -60,7 +63,7 @@ disabled={disableClusterSelection} active={pendingCluster == cluster.name} onclick={() => ( - (pendingCluster = cluster.name), (pendingPartition = null) + (pendingCluster = cluster.name), (pendingPartition = null), (pendingSubCluster = null) )} > {cluster.name} @@ -71,7 +74,27 @@ {/if} {#if $initialized && pendingCluster != null}
-

Partiton

+

SubCluster

+ + (pendingSubCluster = null)} + > + Any SubCluster + + {#each clusterInfos?.find((c) => c.name == pendingCluster)?.subClusters as subCluster} + (pendingSubCluster = subCluster.name)} + > + {subCluster.name} + + {/each} + + {/if} + {#if $initialized && pendingCluster != null} +
+

Partition

{ isOpen = false; - setFilter({ cluster: pendingCluster, partition: pendingPartition }); + setFilter({ cluster: pendingCluster, subCluster: pendingSubCluster, partition: pendingPartition }); }}>Close & Apply {#if !disableClusterSelection} @@ -105,7 +128,8 @@ isOpen = false; pendingCluster = null; pendingPartition = null; - setFilter({ cluster: pendingCluster, partition: pendingPartition}) + pendingSubCluster = null; + setFilter({ cluster: pendingCluster, subCluster: pendingSubCluster, partition: pendingPartition }) }}>Reset {/if} diff --git a/web/frontend/src/generic/filters/Energy.svelte b/web/frontend/src/generic/filters/Energy.svelte index dc532c86..c8013b1b 100644 --- a/web/frontend/src/generic/filters/Energy.svelte +++ b/web/frontend/src/generic/filters/Energy.svelte @@ -28,31 +28,29 @@ } = $props(); /* Const */ - const minEnergyPreset = 1; + const minEnergyPreset = 0; const maxEnergyPreset = 100; /* Derived */ // Pending let pendingEnergyState = $derived({ - from: presetEnergy?.from ? presetEnergy.from : minEnergyPreset, - to: !(presetEnergy.to == null || presetEnergy.to == 0) ? presetEnergy.to : maxEnergyPreset, + from: presetEnergy?.from || minEnergyPreset, + to: (presetEnergy.to == 0) ? null : presetEnergy.to, }); // Changable let energyState = $derived({ - from: presetEnergy?.from ? presetEnergy.from : minEnergyPreset, - to: !(presetEnergy.to == null || presetEnergy.to == 0) ? presetEnergy.to : maxEnergyPreset, + from: presetEnergy?.from || minEnergyPreset, + to: (presetEnergy.to == 0) ? null : presetEnergy.to, }); - const energyActive = $derived(!(JSON.stringify(energyState) === JSON.stringify({ from: minEnergyPreset, to: maxEnergyPreset }))); - // Block Apply if null - const disableApply = $derived(energyState.from === null || energyState.to === null); + const energyActive = $derived(!(JSON.stringify(energyState) === JSON.stringify({ from: minEnergyPreset, to: null }))); /* Function */ function setEnergy() { if (energyActive) { pendingEnergyState = { - from: energyState.from, - to: (energyState.to == maxEnergyPreset) ? 0 : energyState.to + from: (!energyState?.from) ? 0 : energyState.from, + to: (energyState.to === null) ? 0 : energyState.to }; } else { pendingEnergyState = { from: null, to: null}; @@ -86,7 +84,6 @@