diff --git a/catalyst-gateway/tests/Earthfile b/catalyst-gateway/tests/Earthfile index fd2d89b845b..7f2fb5d36ac 100644 --- a/catalyst-gateway/tests/Earthfile +++ b/catalyst-gateway/tests/Earthfile @@ -1,20 +1,54 @@ -VERSION 0.7 +VERSION --arg-scope-and-set 0.7 + +deps: + FROM ../+builder + RUN cargo build -p cat-gateway --release + RUN ./target/release/cat-gateway docs cat-gateway-api.json + SAVE ARTIFACT cat-gateway-api.json cat-gateway-api.json + SAVE ARTIFACT target/release/cat-gateway cat-gateway + +fuzzer-api-test: + FROM earthly/dind:alpine + LET address="127.0.0.1:3030" + LET max-examples=100 + LET max-response-time=50 + + COPY +deps/cat-gateway . + COPY integration/docker-compose.yml . + + WITH DOCKER \ + --compose docker-compose.yml \ + --pull schemathesis/schemathesis:stable \ + --load event-db:latest=(../event-db+build --with_historic_data=false) \ + --service event-db \ + --allow-privileged + RUN --no-cache (./cat-gateway run \ + --address $address \ + --database-url=postgres://catalyst-event-dev:CHANGE_ME@localhost/CatalystEventDev \ + --log-level=error > cat-gateway.log &) && \ + docker run --net=host schemathesis/schemathesis:stable \ + run --checks all http://$address/docs/cat-gateway.json \ + -D all --wait-for-schema=15 --contrib-openapi-fill-missing-examples \ + --max-response-time=$max-response-time --hypothesis-max-examples=$max-examples \ + --show-trace --junit-xml junit-report.xml || echo fail > fail + + END + + SAVE ARTIFACT junit-report.xml AS LOCAL junit-report.xml + SAVE ARTIFACT cat-gateway.log AS LOCAL cat-gateway.log integration-test: # Example of a setup for integration testing -# the cat-gateway binary will be replaced by the cat-gateway package when this will be available - FROM ../+builder DO github.com/earthly/lib:2.2.11+INSTALL_DIND - COPY ../+hosted-build/cat-gateway . + COPY +deps/cat-gateway . COPY integration/docker-compose.yml . WITH DOCKER \ --compose docker-compose.yml \ --load event-db:latest=(../event-db+build --with_historic_data=false) \ --service event-db \ --allow-privileged - RUN sleep 5 && \ - (./cat-gateway run \ + RUN (./cat-gateway run \ --address "127.0.0.1:3030" \ --database-url=postgres://catalyst-event-dev:CHANGE_ME@localhost/CatalystEventDev \ --log-level=debug &) && \ diff --git a/catalyst-gateway/tests/cat-gateway.json b/catalyst-gateway/tests/cat-gateway.json new file mode 100644 index 00000000000..4bd26291f30 --- /dev/null +++ b/catalyst-gateway/tests/cat-gateway.json @@ -0,0 +1,1069 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Catalyst Gateway", + "description": "# Catalyst Gateway API.\n\nThe Catalyst Gateway API provides realtime data for all prior, current and future Catalyst voting events.\n\nTODO:\n\n* Implement Permissionless Auth.\n* Implement Replacement Functionality for GVC.\n* Implement representative registration on main-chain, distinct from voter registration.\n* Implement Voting API abstracting the Jormungandr API from public exposure.\n* Implement Audit API's (Retrieve voting blockchain records, registration/voting power audit and private tally audit.\n* Implement API's needed to support posting Ideas/Proposals etc.Catalyst Gateway\n", + "version": "1.2.0", + "termsOfService": "https://github.com/input-output-hk/catalyst-core/blob/main/book/src/98_CODE_OF_CONDUCT.md", + "contact": { + "name": "Project Catalyst Team", + "url": "https://projectcatalyst.io", + "email": "contact@projectcatalyst.io" + }, + "license": { + "name": "Apache 2.0", + "url": "https://www.apache.org/licenses/LICENSE-2.0" + } + }, + "tags": [ + { + "name": "Fragments", + "description": "Fragment endpoints" + }, + { + "name": "Health", + "description": "Health Endpoints" + }, + { + "name": "Registration", + "description": "Information relating to Voter Registration, Delegations and Calculated Voting\nPower." + }, + { + "name": "Test", + "description": "Test Endpoints (Not part of the API)" + }, + { + "name": "TestTag2", + "description": "Test Endpoints (Not part of the API)" + }, + { + "name": "V0", + "description": "API Version 0 Endpoints" + }, + { + "name": "V1", + "description": "API Version 1 Endpoints" + } + ], + "paths": { + "/api/test/test/{id}/test/{action}": { + "get": { + "tags": [ + "Test" + ], + "summary": "Test Get API", + "description": "An Endpoint to test validation of get endpoints.\n\n## Note\n\n*This is not a real endpoint, for test and demo purposes only. To be removed.*", + "parameters": [ + { + "name": "id", + "schema": { + "type": "integer", + "format": "int32", + "multipleOf": 5.0, + "maximum": 21.0, + "exclusiveMaximum": true, + "minimum": 5.0 + }, + "in": "path", + "description": "The ID of the test.\n\nThis comment ends up in the documentation.\n\n* 5 will print an info log\n* 10 will print a warn log\n* 15 will print a error log\n* 20 will panic which should generate a 500", + "required": true, + "deprecated": false, + "explode": true + }, + { + "name": "action", + "schema": { + "type": "string", + "maxLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "in": "path", + "description": "The action just needs to be any valid UUID.\n\n# Make sure its a UUID", + "required": false, + "deprecated": false, + "explode": true + }, + { + "name": "pet", + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Animals" + }, + "maxItems": 3, + "minItems": 0, + "uniqueItems": true + }, + "in": "query", + "description": "List your favorite pets, in order of preference", + "required": false, + "deprecated": false, + "explode": true + } + ], + "responses": { + "204": { + "description": "## NO CONTENT\n\nThe operation completed successfully, but there is no data to return.\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + }, + "400": { + "description": "This error means that the request was malformed.\nIt has failed to pass validation, as specified by the `OpenAPI` schema.", + "content": { + "text/plain; charset=utf-8": { + "schema": { + "type": "string" + } + } + } + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "deprecated": true, + "operationId": "testGet" + }, + "post": { + "tags": [ + "Test", + "TestTag2" + ], + "summary": "Test Post API", + "description": "An Endpoint to test validation of get endpoints.\n\n## Responses\n\n* 204 No Content - Service is Started and can serve requests.\n* 500 Server Error - If anything within this function fails unexpectedly.\n* 503 Service Unavailable - Service has not started, do not send other requests\nyet.\n\n## Note\n\n*This is not a real endpoint, for test and demo purposes only. To be removed.*", + "parameters": [ + { + "name": "_id", + "schema": { + "type": "integer", + "format": "int32", + "multipleOf": 5.0, + "maximum": 21.0, + "exclusiveMaximum": true, + "minimum": 5.0 + }, + "in": "path", + "description": "The ID of the test.\n\n* 5 will print an info log\n* 10 will print a warn log\n* 15 will print a error log\n* 20 will panic which should generate a 500", + "required": true, + "deprecated": false, + "explode": true + }, + { + "name": "_action", + "schema": { + "type": "string", + "maxLength": 36, + "minLength": 36, + "pattern": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + }, + "in": "path", + "description": "The action just needs to be any valid UUID.\n\n# Make sure its a UUID", + "required": false, + "deprecated": false, + "explode": true + } + ], + "responses": { + "204": { + "description": "## NO CONTENT\n\nThe operation completed successfully, but there is no data to return.\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "deprecated": true, + "operationId": "testPost" + } + }, + "/api/health/started": { + "get": { + "tags": [ + "Health" + ], + "summary": "Service Started", + "description": "This endpoint is used to determine if the service has started properly\nand is able to serve requests.\n\n## Note\n\n*This endpoint is for internal use of the service deployment infrastructure.\nIt may not be exposed publicly.*\n\n## Responses\n\n* 204 No Content - Service is Started and can serve requests.\n* 500 Server Error - If anything within this function fails unexpectedly.\n* 503 Service Unavailable - Service has not started, do not send other requests\nyet.", + "responses": { + "204": { + "description": "## NO CONTENT\n\nThe operation completed successfully, but there is no data to return.\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "operationId": "healthStarted" + } + }, + "/api/health/ready": { + "get": { + "tags": [ + "Health" + ], + "summary": "Service Ready", + "description": "This endpoint is used to determine if the service is ready and able to serve\nrequests.\n\n## Note\n\n*This endpoint is for internal use of the service deployment infrastructure.\nIt may not be exposed publicly.*\n\n## Responses\n\n* 204 No Content - Service is Ready and can serve requests.\n* 500 Server Error - If anything within this function fails unexpectedly.\n* 503 Service Unavailable - Service is not ready, requests to other\nendpoints should not be sent until the service becomes ready.", + "responses": { + "204": { + "description": "## NO CONTENT\n\nThe operation completed successfully, but there is no data to return.\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "operationId": "healthReady" + } + }, + "/api/health/live": { + "get": { + "tags": [ + "Health" + ], + "summary": "Service Live", + "description": "This endpoint is used to determine if the service is live.\n\n## Note\n\n*This endpoint is for internal use of the service deployment infrastructure.\nIt may not be exposed publicly. Refer to []*\n\n## Responses\n\n* 204 No Content - Service is OK and can keep running.\n* 500 Server Error - If anything within this function fails unexpectedly.\n(Possible but unlikely)\n* 503 Service Unavailable - Service is possibly not running reliably.", + "responses": { + "204": { + "description": "## NO CONTENT\n\nThe operation completed successfully, but there is no data to return.\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "operationId": "healthLive" + } + }, + "/api/registration/voter/{voting_key}": { + "get": { + "tags": [ + "Registration" + ], + "summary": "Voter's info", + "description": "Get the voter's registration and voting power by their Public Voting Key.\nThe Public Voting Key must match the voter's most recent valid\n[CIP-15](https://cips.cardano.org/cips/cip15) or [CIP-36](https://cips.cardano.org/cips/cip36) registration on-chain.\nIf the `event_id` query parameter is omitted, then the latest voting power is\nretrieved. If the `with_delegators` query parameter is omitted, then\n`delegator_addresses` field of `VoterInfo` type does not provided.", + "parameters": [ + { + "name": "voting_key", + "schema": { + "type": "string", + "title": "Voting Public Key", + "example": "a6a3c0447aeb9cc54cf6422ba32b294e5e1c3ef6d782f2acff4a70694c4d1663", + "maxLength": 66, + "minLength": 66, + "pattern": "0x[0-9a-f]{64}" + }, + "in": "path", + "description": "A Voters Public ED25519 Key (as registered in their most recent valid\n[CIP-15](https://cips.cardano.org/cips/cip15) or [CIP-36](https://cips.cardano.org/cips/cip36) registration).", + "required": true, + "deprecated": false, + "explode": true + }, + { + "name": "event_id", + "schema": { + "type": "integer", + "format": "int32", + "title": "The Numeric ID of a Voting Event", + "example": 11, + "minimum": 0.0 + }, + "in": "query", + "description": "The Event ID to return results for.\nSee [GET Events](Link to events endpoint) for details on retrieving all valid\nevent IDs.", + "required": false, + "deprecated": false, + "explode": true + }, + { + "name": "with_delegators", + "schema": { + "type": "boolean", + "default": false + }, + "in": "query", + "description": "If this optional flag is set, the response will include the delegator's list\nin the response. Otherwise, it will be omitted.", + "required": false, + "deprecated": false, + "explode": true + } + ], + "responses": { + "200": { + "description": "## OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/VoterRegistration" + } + } + } + }, + "404": { + "description": "## Content not found" + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "operationId": "getVoterInfo" + } + }, + "/api/v0/message": { + "post": { + "tags": [ + "V0" + ], + "summary": "Posts a signed transaction.", + "requestBody": { + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "## OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/FragmentsProcessingSummary" + } + } + } + }, + "400": { + "description": "## Bad Request", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/FragmentsProcessingSummary" + } + } + } + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "operationId": "Message" + } + }, + "/api/v0/vote/active/plans": { + "get": { + "tags": [ + "V0" + ], + "summary": "Get all active vote plans endpoint.", + "responses": { + "200": { + "description": "## OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/VotePlan" + } + } + } + } + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "operationId": "GetActivePlans" + } + }, + "/api/v1/votes/plan/account-votes/{account_id}": { + "get": { + "tags": [ + "V1" + ], + "summary": "Get from all active vote plans, the index of the voted proposals\nby th given account ID.", + "responses": { + "200": { + "description": "## OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AccountVote" + } + } + } + } + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "operationId": "AccountVotes" + } + }, + "/api/v1/fragments": { + "post": { + "tags": [ + "V1", + "Fragments" + ], + "summary": "Process fragments", + "description": "Posts a fragments batch to be processed.", + "requestBody": { + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/FragmentsBatch" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "## OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/FragmentsProcessingSummary" + } + } + } + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "deprecated": true, + "operationId": "fragments" + } + }, + "/api/v1/fragments/statuses": { + "get": { + "tags": [ + "V1", + "Fragments" + ], + "summary": "Get Fragment Statuses", + "description": "Get statuses of the fragments with the given ids.", + "parameters": [ + { + "name": "fragment_ids", + "schema": { + "type": "string", + "title": "Comma-separated (no spaces in between) list of fragment IDs." + }, + "in": "query", + "description": "Comma-separated list of fragment ids for which the statuses will\nbe retrieved.", + "required": true, + "deprecated": false, + "explode": true + } + ], + "responses": { + "200": { + "description": "## OK", + "content": { + "application/json; charset=utf-8": { + "schema": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/FragmentStatus" + } + } + } + } + }, + "500": { + "description": "## Internal Server Error\n\nAn internal server error occurred.\n\n*The contents of this response should be reported to the projects issue tracker.*", + "content": { + "application/json; charset=utf-8": { + "schema": { + "$ref": "#/components/schemas/ServerErrorPayload" + } + } + } + }, + "503": { + "description": "## Service Unavailable\n\nThe service is not available.\n\n*This is returned when the service either has not started,\nor has become unavailable.*\n\n#### NO DATA BODY IS RETURNED FOR THIS RESPONSE" + } + }, + "deprecated": true, + "operationId": "fragmentsStatuses" + } + } + }, + "components": { + "schemas": { + "AccountVote": { + "type": "object", + "description": "Indexes of a proposal that the account has voted for across all active vote plans.", + "required": [ + "vote_plan_id", + "votes" + ], + "properties": { + "vote_plan_id": { + "type": "string", + "title": "Unique ID of a vote plan.", + "description": "The hex-encoded ID of the vote plan.", + "example": "a6a3c0447aeb9cc54cf6422ba32b294e5e1c3ef6d782f2acff4a70694c4d1663", + "maxLength": 64, + "minLength": 64, + "pattern": "[0-9a-f]{64}" + }, + "votes": { + "type": "array", + "description": "Array of the proposal numbers voted for by the account ID within the vote plan.", + "items": { + "type": "integer", + "format": "uint8" + } + } + }, + "example": { + "vote_plan_id": "a6a3c0447aeb9cc54cf6422ba32b294e5e1c3ef6d782f2acff4a70694c4d1663", + "votes": [ + 1, + 3, + 9, + 123 + ] + } + }, + "Animals": { + "type": "string", + "description": "A query parameter that is one of these animals.", + "enum": [ + "Dogs", + "Cats", + "Rabbits" + ] + }, + "BlockDate": { + "type": "object", + "description": "Block time defined as the pair (epoch, slot).", + "required": [ + "epoch", + "slot_id" + ], + "properties": { + "epoch": { + "type": "integer", + "format": "uint32", + "title": "Epoch number.", + "description": "Block's epoch." + }, + "slot_id": { + "type": "integer", + "format": "uint32", + "title": "Slot number.", + "description": "Block's slot number." + } + }, + "example": { + "epoch": 1, + "slot_id": 5 + } + }, + "DelegatePublicKey": { + "type": "object", + "description": "Delegate Public Key", + "required": [ + "address" + ], + "properties": { + "address": { + "type": "string", + "description": "Delegate Public Key in hex format", + "pattern": "0x[0-9a-f]{64}" + } + }, + "example": { + "address": "0xad4b948699193634a39dd56f779a2951a24779ad52aa7916f6912b8ec4702cee" + } + }, + "FragmentStatus": { + "type": "object", + "description": "DEPRECATED: Possible fragment statuses.", + "oneOf": [ + { + "$ref": "#/components/schemas/StatusPending" + }, + { + "$ref": "#/components/schemas/StatusRejected" + }, + { + "$ref": "#/components/schemas/StatusInABlock" + } + ] + }, + "FragmentsBatch": { + "type": "object", + "description": "Batch of hex-encoded fragments.", + "required": [ + "fail_fast", + "fragments" + ], + "properties": { + "fail_fast": { + "type": "boolean", + "description": "Fragments are processed sequentially. If this is true, processing is\nstopped after the first error occurs." + }, + "fragments": { + "type": "array", + "description": "Array of hex-encoded fragments bytes.", + "items": { + "type": "string", + "title": "Hex-encoded fragment's bytes." + } + } + }, + "example": { + "fail_fast": false, + "fragments": [] + } + }, + "FragmentsProcessingSummary": { + "type": "object", + "description": "Information about whether a message was accepted or rejected.", + "required": [ + "accepted", + "rejected" + ], + "properties": { + "accepted": { + "type": "array", + "description": "IDs of accepted fragments.", + "items": { + "type": "string", + "title": "Unique ID of a fragment.", + "description": "A fragment is the binary representation of a signed transaction.\nThe fragment ID is the hex-encoded representation of 32 bytes.", + "example": "7db6f91f3c92c0aef7b3dd497e9ea275229d2ab4dba6a1b30ce6b32db9c9c3b2" + } + }, + "rejected": { + "type": "array", + "description": "Detailed information about rejected fragments.", + "items": { + "$ref": "#/components/schemas/RejectedFragment" + } + } + }, + "example": { + "accepted": [ + "7db6f91f3c92c0aef7b3dd497e9ea275229d2ab4dba6a1b30ce6b32db9c9c3b2" + ], + "rejected": [ + { + "id": "7db6f91f3c92c0aef7b3dd497e9ea275229d2ab4dba6a1b30ce6b32db9c9c3b2", + "pool_number": 1, + "reason": "FragmentAlreadyInLog" + } + ] + } + }, + "Hash": { + "type": "object", + "description": "Blake2b256 hash wrapper.", + "required": [ + "hash" + ], + "properties": { + "hash": { + "type": "string", + "description": "Blake2b256 hash encoded in hex.", + "maxLength": 64, + "minLength": 64, + "pattern": "[0-9a-f]{64}" + } + }, + "example": { + "hash": "928b20366943e2afd11ebc0eae2e53a93bf177a4fcf35bcc64d503704e65e202" + } + }, + "ReasonRejected": { + "type": "string", + "description": "The reason for which a fragment was rejected.", + "enum": [ + "FragmentAlreadyInLog", + "FragmentInvalid", + "PreviousFragmentInvalid", + "PoolOverflow" + ] + }, + "RejectedFragment": { + "type": "object", + "description": "Information about a rejected fragment.", + "required": [ + "id", + "pool_number", + "reason" + ], + "properties": { + "id": { + "type": "string", + "title": "Unique ID of a fragment.", + "description": "The ID of the rejected fragment.\n\nCurrently, the hex encoded bytes that represent the fragment ID. In the\nfuture, this might change to including the prefix \"0x\".", + "example": "7db6f91f3c92c0aef7b3dd497e9ea275229d2ab4dba6a1b30ce6b32db9c9c3b2", + "maxLength": 64, + "minLength": 64, + "pattern": "[0-9a-f]{64}" + }, + "pool_number": { + "type": "integer", + "format": "uint64", + "description": "The number of the pool that caused this error." + }, + "reason": { + "allOf": [ + { + "$ref": "#/components/schemas/ReasonRejected" + }, + { + "description": "The reason why this fragment was rejected." + } + ] + } + }, + "example": { + "id": "7db6f91f3c92c0aef7b3dd497e9ea275229d2ab4dba6a1b30ce6b32db9c9c3b2", + "pool_number": 1, + "reason": "FragmentAlreadyInLog" + } + }, + "ServerErrorPayload": { + "type": "object", + "description": "Response payload to a Bad request.", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Unique ID of this Server Error so that it can be located easily for debugging." + }, + "msg": { + "type": "string", + "description": "*Optional* SHORT Error message.\nWill not contain sensitive information, internal details or backtraces." + }, + "issue": { + "type": "string", + "format": "url", + "description": "A URL to report an issue." + } + }, + "example": { + "id": "590d44d5-9069-43c3-be65-90fddb27c3f4", + "issue": "https://github.com/input-output-hk/catalyst-core/issues/new?template=bug_report.md&title=Internal+Server+Error+-+590d44d5-9069-43c3-be65-90fddb27c3f4", + "msg": "Server Error" + } + }, + "StatusInABlock": { + "type": "object", + "description": "DEPRECATED: Fragment is included in a block.", + "required": [ + "date", + "block" + ], + "properties": { + "date": { + "allOf": [ + { + "$ref": "#/components/schemas/BlockDate" + }, + { + "description": "Block date at which the fragment was included in a block." + } + ] + }, + "block": { + "allOf": [ + { + "$ref": "#/components/schemas/Hash" + }, + { + "description": "Hash of the block the fragment was included in." + } + ] + } + }, + "example": { + "block": { + "hash": "928b20366943e2afd11ebc0eae2e53a93bf177a4fcf35bcc64d503704e65e202" + }, + "date": { + "epoch": 1, + "slot_id": 5 + } + } + }, + "StatusPending": { + "type": "object", + "description": "DEPRECATED: Fragment is pending." + }, + "StatusRejected": { + "type": "object", + "description": "DEPRECATED: Fragment was rejected.", + "required": [ + "reason" + ], + "properties": { + "reason": { + "type": "string", + "description": "Reason the fragment was rejected." + } + }, + "example": { + "reason": "Transaction malformed" + } + }, + "VotePlan": { + "type": "object", + "description": "Vote Plan", + "required": [ + "voting_token" + ], + "properties": { + "voting_token": { + "type": "string", + "description": "Voting token identifier", + "maxLength": 121, + "minLength": 59, + "pattern": "[0-9a-f]{56}\\.[0-9a-f]{2,64}" + } + }, + "example": { + "voting_token": "134c2d0a0b5761445d3f2d08492a5c193e3a19194453511426153630.0418401957301613" + } + }, + "VoterGroupId": { + "type": "string", + "description": "Voter Group ID.", + "enum": [ + "rep", + "direct" + ] + }, + "VoterInfo": { + "type": "object", + "description": "Voter Info", + "required": [ + "voting_power", + "voting_group", + "delegations_power", + "delegations_count", + "voting_power_saturation" + ], + "properties": { + "voting_power": { + "type": "integer", + "format": "int64", + "description": "Voter's voting power.\nThis is the true voting power, subject to minimum voting power and max cap.", + "minimum": 0.0 + }, + "voting_group": { + "allOf": [ + { + "$ref": "#/components/schemas/VoterGroupId" + }, + { + "description": "Voter's voting group." + } + ] + }, + "delegations_power": { + "type": "integer", + "format": "int64", + "description": "Total voting power delegated to this voter.\nThis is not capped and not subject to minimum voting power.", + "minimum": 0.0 + }, + "delegations_count": { + "type": "integer", + "format": "int64", + "description": "Number of registration which delegated to this voter.", + "minimum": 0.0 + }, + "voting_power_saturation": { + "type": "number", + "format": "double", + "description": "Voting power's share of the total voting power.\nCan be used to gauge potential voting power saturation.\nThis value is NOT saturated however, and gives the raw share of total registered\nvoting power.", + "maximum": 100.0, + "minimum": 0.0 + }, + "delegator_addresses": { + "type": "array", + "description": "List of stake public key addresses which delegated to this voting key.", + "items": { + "$ref": "#/components/schemas/DelegatePublicKey" + } + } + }, + "example": { + "delegations_count": 0, + "delegations_power": 0, + "delegator_addresses": [ + { + "address": "0xad4b948699193634a39dd56f779a2951a24779ad52aa7916f6912b8ec4702cee" + } + ], + "voting_group": "rep", + "voting_power": 0, + "voting_power_saturation": 0.0 + } + }, + "VoterRegistration": { + "type": "object", + "description": "Voter's registration info.", + "required": [ + "voter_info", + "as_at", + "last_updated", + "final" + ], + "properties": { + "voter_info": { + "allOf": [ + { + "$ref": "#/components/schemas/VoterInfo" + }, + { + "description": "Voter's information." + } + ] + }, + "as_at": { + "type": "string", + "format": "date-time", + "description": "Date and time the latest snapshot represents." + }, + "last_updated": { + "type": "string", + "format": "date-time", + "description": "Date and time for the latest update to this snapshot information." + }, + "final": { + "type": "boolean", + "description": "`True` - this is the final snapshot which will be used for voting power in the\nevent. `False` - this is an interim snapshot, subject to change." + } + }, + "example": { + "as_at": "2024-01-18T14:20:31.322712128+00:00", + "final": true, + "last_updated": "2024-01-18T14:20:31.322712376+00:00", + "voter_info": { + "delegations_count": 0, + "delegations_power": 0, + "delegator_addresses": [ + { + "address": "0xad4b948699193634a39dd56f779a2951a24779ad52aa7916f6912b8ec4702cee" + } + ], + "voting_group": "rep", + "voting_power": 0, + "voting_power_saturation": 0.0 + } + } + } + } + } +} \ No newline at end of file diff --git a/catalyst-gateway/tests/cat-gateway.log b/catalyst-gateway/tests/cat-gateway.log new file mode 100644 index 00000000000..a232fc0ff9c --- /dev/null +++ b/catalyst-gateway/tests/cat-gateway.log @@ -0,0 +1,95 @@ +{"timestamp":"2024-01-29T21:59:48.647316572Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-bc76-c32f-9af2-eae160911f63\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:48.696558699Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-bc76-c32f-9af2-eae160911f63\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:48.719912036Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-ba76-c32f-9af2-eae160911f63\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:48.777434529Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"19f4f602-b672-2798-36ac-cff630290a71\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.123857428Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"id\", reason: \"verification failed. multipleOf(5)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.177215381Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"id\", reason: \"verification failed. multipleOf(5)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.265642247Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParsePathError { name: \"id\", reason: \"failed to parse \\\"integer(int32)\\\": number too large to fit in target type\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.289820252Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"id\", reason: \"verification failed. minimum(5, exclusive: false)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.313816322Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"id\", reason: \"verification failed. minimum(5, exclusive: false)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.341860094Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"id\", reason: \"verification failed. multipleOf(5)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.374086948Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"id\", reason: \"verification failed. minimum(5, exclusive: false)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.404442762Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"id\", reason: \"verification failed. minimum(5, exclusive: false)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.697474436Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParsePathError { name: \"id\", reason: \"failed to parse \\\"integer(int32)\\\": invalid digit found in string\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.817151982Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParsePathError { name: \"id\", reason: \"failed to parse \\\"integer(int32)\\\": invalid digit found in string\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:49.852084002Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParsePathError { name: \"id\", reason: \"failed to parse \\\"integer(int32)\\\": invalid digit found in string\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.055125014Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParsePathError { name: \"id\", reason: \"failed to parse \\\"integer(int32)\\\": invalid digit found in string\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.199985165Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParsePathError { name: \"id\", reason: \"failed to parse \\\"integer(int32)\\\": invalid digit found in string\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.43973658Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.624414385Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParsePathError { name: \"id\", reason: \"failed to parse \\\"integer(int32)\\\": invalid digit found in string\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.732457516Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.759511854Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.787266139Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.813542975Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.847856846Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.885782947Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.908558534Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:50.927012345Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-ba76-c32f-9af2-eae160911f63\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:51.173752829Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:51.90134507Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:52.262904777Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.029410021Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.055763477Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.162685895Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.32692486Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.6687125Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.703484841Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.739268062Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.765442353Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.797903476Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:53.860523106Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.396252236Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-ba76-c32f-9af2-01113669aeef\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.421333163Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-ba76-c32f-29af-01113669aeef\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.445484273Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-ba76-23cf-29af-01113669aeef\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.468724493Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"e68c5023-67ab-23cf-29af-01113669aeef\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.492616737Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"023568ce-67ab-23cf-29af-01113669aeef\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.515255858Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"01113669-aeef-0235-68ce-23cf29af67ab\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.53766796Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"01113669-0235-23cf-29af-67ab68ceaeef\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.579980297Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"01113669-0235-23cf-29af-6678aabceeef\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.634490476Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"01113669-0235-23c0-29a0-6678aabceee0\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.653596068Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002558-0124-13b0-1890-556799abddd0\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.673568352Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002558-0124-13b0-1890-556799ab0000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.693485964Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002558-0124-1300-1890-556799a00000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.713446904Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002558-0124-1300-1800-556700a00000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.774436205Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002550-0124-1300-1000-556700a00000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.794764881Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0124-1300-1000-006700a00000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:57.849828306Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0024-0300-0000-006700a00000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:58.026211276Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0024-0300-0000-006700000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:58.046379422Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0024-0300-0000-006000000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:58.075704168Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0024-0300-0000-000000000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:58.103851746Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0024-0000-0000-000000000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:58.123486597Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0020-0000-0000-000000000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:58.142724595Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00002000-0000-0000-0000-000000000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:58.163268753Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00000000-0000-0000-0000-000000000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:59.084266559Z","level":"ERROR","fields":{"message":"id: 15, action: Some(\"00000000-0000-0000-0000-000000000000\")"},"target":"cat_gateway::service::api::test_endpoints::test_get","filename":"bin/src/service/api/test_endpoints/test_get.rs","line_number":65,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:59.105410206Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"action\", reason: \"verification failed. pattern(\\\"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\\\")\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:59.370602934Z","level":"ERROR","fields":{"message":"liveness check - error"},"target":"cat_gateway::service::api::health::live_get","filename":"bin/src/service/api/health/live_get.rs","line_number":42,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:59.374951119Z","level":"ERROR","fields":{"message":"liveness check - error"},"target":"cat_gateway::service::api::health::live_get","filename":"bin/src/service/api/health/live_get.rs","line_number":42,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T21:59:59.395969976Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"voting_key\", reason: \"verification failed. minLength(66)\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(20)"} +{"timestamp":"2024-01-29T22:00:01.165323945Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found [].\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.457321241Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found 2.225073858507e-311.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.466132191Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found 2.225073858507e-311.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.475409834Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found false.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.48514536Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found false.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.494409655Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found false.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.503496974Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found false.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.512317245Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found [].\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:01.614474362Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseRequestPayloadError { reason: \"Expected input type \\\"FragmentsBatch\\\", found [].\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.05729149Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.092166707Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.490812376Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.506878367Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.531573828Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.567985955Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.610809288Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.625505048Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.84595003Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:02.888060029Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.194113543Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.308670335Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.342251523Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.357465507Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.372249411Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.387530749Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.403979153Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} +{"timestamp":"2024-01-29T22:00:03.679527875Z","level":"ERROR","fields":{"message":"HTTP Response Error:","err":"Error { source: Some(ParseParamError { name: \"fragment_ids\", reason: \"Type \\\"string\\\" expects an input value.\" }) }"},"target":"cat_gateway::service::utilities::middleware::tracing_mw","filename":"bin/src/service/utilities/middleware/tracing_mw.rs","line_number":346,"threadName":"tokio-runtime-worker","threadId":"ThreadId(2)"} diff --git a/catalyst-gateway/tests/keeper.json b/catalyst-gateway/tests/keeper.json new file mode 100644 index 00000000000..53946803953 --- /dev/null +++ b/catalyst-gateway/tests/keeper.json @@ -0,0 +1,430 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Keeper API", + "description": "report execution of cron jobs through a mechanism other than mail", + "contact": { + "name": "Joshua M. Clulow", + "url": "https://github.com/jclulow/keeper" + }, + "version": "1.0" + }, + "paths": { + "/enrol": { + "post": { + "operationId": "enrol", + "parameters": [ + { + "name": "Authorization", + "schema": { + "type": "string" + }, + "in": "header", + "description": "Authorization header (bearer token)", + "required": true, + "deprecated": false + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "EnrolBody", + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "required": [ + "host", + "key" + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "successful creation" + } + } + } + }, + "/global/jobs": { + "get": { + "operationId": "global_jobs", + "parameters": [ + { + "name": "Authorization", + "schema": { + "type": "string" + }, + "in": "header", + "description": "Authorization header (bearer token)", + "required": true, + "deprecated": false + } + ], + "responses": { + "201": { + "description": "successful creation", + "content": { + "application/json": { + "schema": { + "title": "GlobalJobsResult", + "type": "object", + "properties": { + "summary": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ReportSummary" + } + } + }, + "required": [ + "summary" + ] + } + } + } + } + } + } + }, + "/ping": { + "get": { + "operationId": "ping", + "parameters": [ + { + "name": "Authorization", + "schema": { + "type": "string" + }, + "in": "header", + "description": "Authorization header (bearer token)", + "required": true, + "deprecated": false + } + ], + "responses": { + "201": { + "description": "successful creation", + "content": { + "application/json": { + "schema": { + "title": "PingResult", + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "ok": { + "type": "boolean" + } + }, + "required": [ + "host", + "ok" + ] + } + } + } + } + } + } + }, + "/report/finish": { + "post": { + "operationId": "report_finish", + "parameters": [ + { + "name": "Authorization", + "schema": { + "type": "string" + }, + "in": "header", + "description": "Authorization header (bearer token)", + "required": true, + "deprecated": false + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "ReportFinishBody", + "type": "object", + "properties": { + "duration_millis": { + "type": "integer", + "format": "int32" + }, + "end_time": { + "type": "string", + "format": "date-time" + }, + "exit_status": { + "type": "integer", + "format": "int32" + }, + "id": { + "$ref": "#/components/schemas/ReportId" + } + }, + "required": [ + "duration_millis", + "end_time", + "exit_status", + "id" + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "successful creation", + "content": { + "application/json": { + "schema": { + "title": "ReportResult", + "type": "object", + "properties": { + "existed_already": { + "type": "boolean" + } + }, + "required": [ + "existed_already" + ] + } + } + } + } + } + } + }, + "/report/output": { + "post": { + "operationId": "report_output", + "parameters": [ + { + "name": "Authorization", + "schema": { + "type": "string" + }, + "in": "header", + "description": "Authorization header (bearer token)", + "required": true, + "deprecated": false + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "ReportOutputBody", + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/ReportId" + }, + "record": { + "$ref": "#/components/schemas/OutputRecord" + } + }, + "required": [ + "id", + "record" + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "successful creation", + "content": { + "application/json": { + "schema": { + "title": "ReportResult", + "type": "object", + "properties": { + "existed_already": { + "type": "boolean" + } + }, + "required": [ + "existed_already" + ] + } + } + } + } + } + } + }, + "/report/start": { + "post": { + "operationId": "report_start", + "parameters": [ + { + "name": "Authorization", + "schema": { + "type": "string" + }, + "in": "header", + "description": "Authorization header (bearer token)", + "required": true, + "deprecated": false + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "title": "ReportStartBody", + "type": "object", + "properties": { + "id": { + "$ref": "#/components/schemas/ReportId" + }, + "script": { + "type": "string" + }, + "start_time": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "id", + "script", + "start_time" + ] + } + } + }, + "required": true + }, + "responses": { + "201": { + "description": "successful creation", + "content": { + "application/json": { + "schema": { + "title": "ReportResult", + "type": "object", + "properties": { + "existed_already": { + "type": "boolean" + } + }, + "required": [ + "existed_already" + ] + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "OutputRecord": { + "type": "object", + "properties": { + "msg": { + "type": "string" + }, + "stream": { + "type": "string" + }, + "time": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "msg", + "stream", + "time" + ] + }, + "ReportId": { + "type": "object", + "properties": { + "host": { + "type": "string" + }, + "job": { + "type": "string" + }, + "pid": { + "type": "integer", + "format": "uint64", + "minimum": 0 + }, + "time": { + "type": "string", + "format": "date-time" + }, + "uuid": { + "type": "string" + } + }, + "required": [ + "host", + "job", + "pid", + "time", + "uuid" + ] + }, + "ReportSummary": { + "type": "object", + "properties": { + "age_seconds": { + "type": "integer", + "format": "int32" + }, + "duration_seconds": { + "type": "integer", + "format": "int32" + }, + "host": { + "type": "string" + }, + "job": { + "type": "string" + }, + "status": { + "type": "integer", + "format": "int32" + }, + "when": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "age_seconds", + "duration_seconds", + "host", + "job", + "status", + "when" + ] + } + } + } +} \ No newline at end of file