diff --git a/components/fctl/Earthfile b/components/fctl/Earthfile index df6d8b8b7b..a68f1957d0 100644 --- a/components/fctl/Earthfile +++ b/components/fctl/Earthfile @@ -47,4 +47,20 @@ tidy: FROM core+builder-image COPY --pass-args (+sources/src) /src WORKDIR /src/components/fctl - DO --pass-args stack+GO_TIDY \ No newline at end of file + DO --pass-args stack+GO_TIDY + +generate-membership-client: + FROM openapitools/openapi-generator-cli:v6.6.0 + WORKDIR /src + COPY membership-swagger.yaml . + RUN docker-entrypoint.sh generate \ + -i ./membership-swagger.yaml \ + -g go \ + -o ./membershipclient \ + --git-user-id=formancehq \ + --git-repo-id=fctl \ + -p packageVersion=latest \ + -p isGoSubmodule=true \ + -p packageName=membershipclient + RUN rm -rf ./membershipclient/test + SAVE ARTIFACT ./membershipclient AS LOCAL membershipclient \ No newline at end of file diff --git a/components/fctl/main.go b/components/fctl/main.go index 6f99b64b04..719a820625 100644 --- a/components/fctl/main.go +++ b/components/fctl/main.go @@ -1,5 +1,3 @@ -//go:generate docker run --rm -w /local -v ${PWD}:/local openapitools/openapi-generator-cli:v6.6.0 generate -i ./membership-swagger.yaml -g go -o ./membershipclient --git-user-id=formancehq --git-repo-id=fctl -p packageVersion=latest -p isGoSubmodule=true -p packageName=membershipclient -//go:generate rm -rf ./membershipclient/test package main import ( diff --git a/components/fctl/membership-swagger.yaml b/components/fctl/membership-swagger.yaml index fefc451109..1df3e9a777 100644 --- a/components/fctl/membership-swagger.yaml +++ b/components/fctl/membership-swagger.yaml @@ -5,8 +5,8 @@ info: version: "0.1.0" servers: -- url: http://localhost:8080 - description: Local server + - url: http://localhost:8080 + description: Local server paths: /_info: @@ -52,7 +52,7 @@ paths: application/json: schema: $ref: '#/components/schemas/Error' - + /organizations/expanded: get: summary: List organizations of the connected user with expanded data @@ -69,11 +69,11 @@ paths: summary: Read organization operationId: readOrganization parameters: - - name: organizationId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true responses: 200: description: OK @@ -85,11 +85,11 @@ paths: summary: Delete organization operationId: deleteOrganization parameters: - - name: organizationId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true responses: 400: description: Error @@ -110,11 +110,11 @@ paths: summary: List users of organization operationId: listUsersOfOrganization parameters: - - name: organizationId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true responses: 403: description: Not Authorized @@ -130,16 +130,16 @@ paths: $ref: '#/components/schemas/ListUsersResponse' /organizations/{organizationId}/users/{userId}: parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: userId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: userId + in: path + schema: + type: string + required: true get: summary: Read user of organization @@ -165,7 +165,7 @@ paths: $ref: '#/components/schemas/ReadUserResponse' put: summary: Update user role within an organization - operationId: updateOrganizationUser + operationId: upsertOrganizationUser requestBody: content: application/json: @@ -217,24 +217,24 @@ paths: summary: List stacks operationId: listStacks parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: all - in: query - description: Include deleted and disabled stacks - schema: - type: boolean - required: false - - name: deleted - in: query - description: Include deleted stacks - deprecated: true - schema: - type: boolean - required: false + - name: organizationId + in: path + schema: + type: string + required: true + - name: all + in: query + description: Include deleted and disabled stacks + schema: + type: boolean + required: false + - name: deleted + in: query + description: Include deleted stacks + deprecated: true + schema: + type: boolean + required: false responses: 200: description: List of stacks @@ -246,11 +246,11 @@ paths: summary: Create stack operationId: createStack parameters: - - name: organizationId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true requestBody: content: application/json: @@ -280,16 +280,16 @@ paths: summary: Find stack operationId: getStack parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: stackId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true responses: 200: description: OK @@ -313,16 +313,16 @@ paths: summary: Delete stack operationId: deleteStack parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: stackId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true responses: 204: description: Stack deleted @@ -344,21 +344,135 @@ paths: application/json: schema: $ref: '#/components/schemas/Error' + /organizations/{organizationId}/stacks/{stackId}/users: + get: + summary: List stack users accesses within an organization + operationId: listStackUsersAccesses + parameters: + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true + responses: + 200: + description: Stack users access roles array + content: + application/json: + schema: + $ref: '#/components/schemas/StackUserAccessResponse' + 403: + description: Not Authorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /organizations/{organizationId}/stacks/{stackId}/users/{userId}: + delete: + summary: Delete stack user access role within an organization + operationId: deleteStackUserAccess + parameters: + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true + - name: userId + in: path + schema: + type: string + required: true + responses: + 403: + description: Not Authorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 204: + description: Updated user + put: + summary: Update stack user access role within an organization + operationId: upsertStackUserAccess + parameters: + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true + - name: userId + in: path + schema: + type: string + required: true + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdatableStackUserRole' + responses: + 400: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 403: + description: Not Authorized + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 404: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 204: + description: Updated user /organizations/{organizationId}/stacks/{stackId}/disable: put: summary: Disable stack operationId: disableStack parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: stackId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true responses: 204: description: Stack disabled @@ -385,16 +499,16 @@ paths: summary: Enable stack operationId: enableStack parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: stackId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true responses: 204: description: Stack enabled @@ -421,16 +535,16 @@ paths: summary: Restore stack operationId: restoreStack parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: stackId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true responses: 200: description: OK @@ -458,16 +572,16 @@ paths: $ref: '#/components/schemas/Error' /organizations/{organizationId}/stacks/{stackId}/stargate/enable: parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: stackId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true put: summary: Enable stargate on a stack operationId: enableStargate @@ -488,16 +602,16 @@ paths: $ref: '#/components/schemas/Error' /organizations/{organizationId}/stacks/{stackId}/stargate/disable: parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: stackId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: stackId + in: path + schema: + type: string + required: true put: summary: Disable stargate on a stack operationId: disableStargate @@ -521,18 +635,18 @@ paths: summary: List invitations of the user operationId: listInvitations parameters: - - in: query - name: status - required: false - description: Status of organizations - schema: - type: string - - in: query - name: organization - required: false - description: Status of organizations - schema: - type: string + - in: query + name: status + required: false + description: Status of organizations + schema: + type: string + - in: query + name: organization + required: false + description: Status of organizations + schema: + type: string responses: 200: description: List of the invitations for the connected user @@ -545,11 +659,11 @@ paths: summary: Accept invitation operationId: acceptInvitation parameters: - - name: invitationId - in: path - schema: - type: string - required: true + - name: invitationId + in: path + schema: + type: string + required: true responses: 204: description: Invitation accepted @@ -576,11 +690,11 @@ paths: summary: Decline invitation operationId: declineInvitation parameters: - - name: invitationId - in: path - schema: - type: string - required: true + - name: invitationId + in: path + schema: + type: string + required: true responses: 204: description: Invitation declined @@ -607,17 +721,17 @@ paths: summary: List invitations of the organization operationId: listOrganizationInvitations parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - in: query - name: status - required: false - description: Status of organizations - schema: - type: string + - name: organizationId + in: path + schema: + type: string + required: true + - in: query + name: status + required: false + description: Status of organizations + schema: + type: string responses: 200: description: List of the invitations for the organization @@ -641,16 +755,16 @@ paths: summary: Create invitation operationId: createInvitation parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: email - in: query - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: email + in: query + schema: + type: string + required: true responses: 201: description: Invitation created @@ -669,16 +783,16 @@ paths: summary: Delete invitation operationId: deleteInvitation parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: invitationId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: invitationId + in: path + schema: + type: string + required: true responses: 204: description: Invitation deleted @@ -702,11 +816,11 @@ paths: $ref: '#/components/schemas/Error' /organizations/{organizationId}/regions: parameters: - - name: organizationId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true get: summary: List regions @@ -765,16 +879,16 @@ paths: $ref: '#/components/schemas/CreatedPrivateRegionResponse' /organizations/{organizationId}/regions/{regionId}: parameters: - - name: organizationId - in: path - schema: - type: string - required: true - - name: regionId - in: path - schema: - type: string - required: true + - name: organizationId + in: path + schema: + type: string + required: true + - name: regionId + in: path + schema: + type: string + required: true get: summary: Get region operationId: getRegion @@ -821,6 +935,42 @@ paths: application/json: schema: $ref: '#/components/schemas/Error' + + /organizations/{organizationId}/regions/{regionId}/versions: + parameters: + - name: organizationId + in: path + schema: + type: string + required: true + - name: regionId + in: path + schema: + type: string + required: true + get: + summary: Get region versions + operationId: getRegionVersions + responses: + 404: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 403: + description: Error + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + 200: + description: Get a specific region + content: + application/json: + schema: + $ref: '#/components/schemas/GetRegionVersionsResponse' + /me: get: summary: Read user @@ -833,7 +983,7 @@ paths: schema: $ref: '#/components/schemas/ReadUserResponse' security: -- oauth2: [] + - oauth2: [] components: securitySchemes: @@ -853,95 +1003,95 @@ components: name: type: string required: - - name + - name CreatedPrivateRegionResponse: properties: data: $ref: '#/components/schemas/PrivateRegion' required: - - data + - data PrivateRegion: allOf: - - $ref: '#/components/schemas/Region' - - type: object - properties: - organizationID: - type: string - creatorID: - type: string - secret: - type: object - properties: - lastDigits: - type: string - clear: - type: string - required: - - lastDigits - required: - - organizationID - - creatorID + - $ref: '#/components/schemas/Region' + - type: object + properties: + organizationID: + type: string + creatorID: + type: string + secret: + type: object + properties: + lastDigits: + type: string + clear: + type: string + required: + - lastDigits + required: + - organizationID + - creatorID PublicRegion: allOf: - - $ref: '#/components/schemas/Region' - - type: object - properties: - production: - type: boolean - required: - - production + - $ref: '#/components/schemas/Region' + - type: object + properties: + production: + type: boolean + required: + - production AnyRegion: allOf: - - $ref: '#/components/schemas/Region' - - type: object - properties: - clientID: - type: string - organizationID: - type: string - creator: - $ref: '#/components/schemas/User' - production: - type: boolean - public: - type: boolean - version: - type: string - required: - - public + - $ref: '#/components/schemas/Region' + - type: object + properties: + clientID: + type: string + organizationID: + type: string + creator: + $ref: '#/components/schemas/User' + production: + type: boolean + public: + type: boolean + version: + type: string + required: + - public OrganizationData: type: object required: - - name + - name properties: name: type: string description: Organization name Organization: allOf: - - $ref: '#/components/schemas/OrganizationData' - - type: object - required: - - id - - ownerId - properties: - id: - type: string - description: Organization ID - ownerId: - type: string - description: Owner ID - availableStacks: - type: integer - description: Number of available stacks - availableSandboxes: - type: integer - description: Number of available sandboxes + - $ref: '#/components/schemas/OrganizationData' + - type: object + required: + - id + - ownerId + properties: + id: + type: string + description: Organization ID + ownerId: + type: string + description: Owner ID + availableStacks: + type: integer + description: Number of available stacks + availableSandboxes: + type: integer + description: Number of available sandboxes StackData: type: object required: - - name - - metadata + - name + - metadata properties: name: type: string @@ -963,25 +1113,25 @@ components: status: type: string enum: - - UNKNOWN - - PROGRESSING - - READY - - DISABLED - - DELETED + - UNKNOWN + - PROGRESSING + - READY + - DISABLED + - DELETED state: type: string enum: - - ACTIVE - - DISABLED - - DELETED + - ACTIVE + - DISABLED + - DELETED expectedStatus: type: string enum: - - UNKNOWN - - PROGRESSING - - READY - - DISABLED - - DELETED + - UNKNOWN + - PROGRESSING + - READY + - DISABLED + - DELETED lastStateUpdate: type: string format: date-time @@ -991,95 +1141,85 @@ components: lastStatusUpdate: type: string format: date-time - BillingPortal: - type: object - required: - - url - properties: - url: - type: string - description: Billing portal URL - BillingSetup: - type: object - required: - - url - properties: - url: - type: string - description: Billing portal URL Stack: allOf: - - $ref: '#/components/schemas/StackData' - - $ref: '#/components/schemas/StackLifeCycle' - - type: object - required: - - id - - organizationId - - uri - - regionID - - stargateEnabled - properties: - id: - type: string - description: Stack ID - organizationId: - type: string - description: Organization ID - uri: - type: string - description: Base stack uri - regionID: - type: string - description: The region where the stack is installed - stargateEnabled: - type: boolean - createdAt: - type: string - format: date-time - deletedAt: - type: string - format: date-time - disabledAt: - type: string - format: date-time + - $ref: '#/components/schemas/StackData' + - $ref: '#/components/schemas/StackLifeCycle' + - type: object + required: + - id + - organizationId + - uri + - regionID + - stargateEnabled + properties: + id: + type: string + description: Stack ID + organizationId: + type: string + description: Organization ID + uri: + type: string + description: Base stack uri + regionID: + type: string + description: The region where the stack is installed + stargateEnabled: + type: boolean + createdAt: + type: string + format: date-time + deletedAt: + type: string + format: date-time + disabledAt: + type: string + format: date-time UserData: allOf: - - type: object - properties: - email: - type: string - required: - - email + - type: object + properties: + email: + type: string + required: + - email UpdatableUserRole: type: array items: allOf: - - type: string - enum: [ADMIN] + - type: string + enum: [ADMIN, GUEST] + UpdatableStackUserRole: + type: array + items: + allOf: + - type: string + enum: [ADMIN, GUEST] Roles: type: array description: User roles items: allOf: - - type: string - enum: - - ADMIN - - GUEST + - type: string + enum: + - ADMIN + - GUEST User: allOf: - - $ref: '#/components/schemas/UserData' - - type: object - properties: - roles: - $ref: '#/components/schemas/Roles' - - type: object - required: - - id - properties: - id: - type: string - description: User ID - + - $ref: '#/components/schemas/UserData' + - type: object + properties: + roles: + $ref: '#/components/schemas/Roles' + - type: object + required: + - id + properties: + id: + type: string + description: User ID + OrganizationArray: type: array items: @@ -1092,6 +1232,32 @@ components: type: array items: $ref: '#/components/schemas/User' + StackUserAccess: + allOf: + - type: object + properties: + roles: + $ref: '#/components/schemas/UpdatableStackUserRole' + - type: object + required: + - stackId + - userId + properties: + stackId: + type: string + description: Stack ID + userId: + type: string + description: User ID + StackUserAccessResponse: + type: object + properties: + data: + $ref: '#/components/schemas/StackUserAccessArray' + StackUserAccessArray: + type: array + items: + $ref: '#/components/schemas/StackUserAccess' ListOrganizationResponse: type: object properties: @@ -1111,16 +1277,6 @@ components: properties: data: $ref: '#/components/schemas/StackArray' - BillingPortalResponse: - type: object - properties: - data: - $ref: '#/components/schemas/BillingPortal' - BillingSetupResponse: - type: object - properties: - data: - $ref: '#/components/schemas/BillingSetup' ListUsersResponse: type: object properties: @@ -1128,13 +1284,13 @@ components: $ref: '#/components/schemas/UserArray' CreateStackRequest: allOf: - - $ref: '#/components/schemas/StackData' - - type: object - properties: - regionID: - type: string - required: - - regionID + - $ref: '#/components/schemas/StackData' + - type: object + properties: + regionID: + type: string + required: + - regionID CreateStackResponse: type: object properties: @@ -1167,7 +1323,7 @@ components: errorMessage: type: string required: - - errorCode + - errorCode Invitation: type: object properties: @@ -1180,9 +1336,9 @@ components: status: type: string enum: - - pending - - accepted - - rejected + - pending + - accepted + - rejected creationDate: type: string format: date-time @@ -1190,19 +1346,19 @@ components: type: string format: date-time required: - - creationDate - - status - - userEmail - - organizationId - - id + - creationDate + - status + - userEmail + - organizationId + - id Region: type: object required: - - id - - baseUrl - - active - - createdAt - - name + - id + - baseUrl + - active + - createdAt + - name properties: id: type: string @@ -1225,15 +1381,15 @@ components: type: array items: allOf: - - $ref: '#/components/schemas/Organization' - - type: object - properties: - totalStacks: - type: integer - totalUsers: - type: integer - owner: - $ref: '#/components/schemas/User' + - $ref: '#/components/schemas/Organization' + - type: object + properties: + totalStacks: + type: integer + totalUsers: + type: integer + owner: + $ref: '#/components/schemas/User' ListRegionsResponse: type: object properties: @@ -1242,18 +1398,43 @@ components: items: $ref: '#/components/schemas/AnyRegion' required: - - data + - data + GetRegionResponse: type: object properties: data: $ref: '#/components/schemas/AnyRegion' required: - - data + - data + ServerInfo: type: object required: - - version + - version properties: version: - type: string \ No newline at end of file + type: string + + Version: + type: object + required: + - name + - versions + properties: + name: + type: string + versions: + type: object + additionalProperties: + type: string + + GetRegionVersionsResponse: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/Version' + required: + - data diff --git a/components/fctl/membershipclient/.openapi-generator/FILES b/components/fctl/membershipclient/.openapi-generator/FILES index 094c5b46fc..e4985fdbc4 100644 --- a/components/fctl/membershipclient/.openapi-generator/FILES +++ b/components/fctl/membershipclient/.openapi-generator/FILES @@ -1,4 +1,5 @@ .gitignore +.openapi-generator-ignore .travis.yml README.md api/openapi.yaml @@ -7,10 +8,6 @@ client.go configuration.go docs/AnyRegion.md docs/AnyRegionAllOf.md -docs/BillingPortal.md -docs/BillingPortalResponse.md -docs/BillingSetup.md -docs/BillingSetupResponse.md docs/CreateInvitationResponse.md docs/CreateOrganizationResponse.md docs/CreatePrivateRegionRequest.md @@ -21,6 +18,7 @@ docs/CreatedPrivateRegionResponse.md docs/DefaultApi.md docs/Error.md docs/GetRegionResponse.md +docs/GetRegionVersionsResponse.md docs/Invitation.md docs/ListInvitationsResponse.md docs/ListOrganizationExpandedResponse.md @@ -45,20 +43,21 @@ docs/Stack.md docs/StackAllOf.md docs/StackData.md docs/StackLifeCycle.md +docs/StackUserAccess.md +docs/StackUserAccessAllOf.md +docs/StackUserAccessAllOf1.md +docs/StackUserAccessResponse.md docs/User.md docs/UserAllOf.md docs/UserAllOf1.md docs/UserData.md docs/UserDataAllOf.md +docs/Version.md git_push.sh go.mod go.sum model_any_region.go model_any_region_all_of.go -model_billing_portal.go -model_billing_portal_response.go -model_billing_setup.go -model_billing_setup_response.go model_create_invitation_response.go model_create_organization_response.go model_create_private_region_request.go @@ -68,6 +67,7 @@ model_create_stack_response.go model_created_private_region_response.go model_error.go model_get_region_response.go +model_get_region_versions_response.go model_invitation.go model_list_invitations_response.go model_list_organization_expanded_response.go @@ -92,11 +92,16 @@ model_stack.go model_stack_all_of.go model_stack_data.go model_stack_life_cycle.go +model_stack_user_access.go +model_stack_user_access_all_of.go +model_stack_user_access_all_of_1.go +model_stack_user_access_response.go model_user.go model_user_all_of.go model_user_all_of_1.go model_user_data.go model_user_data_all_of.go +model_version.go response.go test/api_default_test.go utils.go diff --git a/components/fctl/membershipclient/README.md b/components/fctl/membershipclient/README.md index f54e3192e9..15d275f1f0 100644 --- a/components/fctl/membershipclient/README.md +++ b/components/fctl/membershipclient/README.md @@ -88,12 +88,14 @@ Class | Method | HTTP request | Description *DefaultApi* | [**DeleteOrganization**](docs/DefaultApi.md#deleteorganization) | **Delete** /organizations/{organizationId} | Delete organization *DefaultApi* | [**DeleteRegion**](docs/DefaultApi.md#deleteregion) | **Delete** /organizations/{organizationId}/regions/{regionId} | Delete region *DefaultApi* | [**DeleteStack**](docs/DefaultApi.md#deletestack) | **Delete** /organizations/{organizationId}/stacks/{stackId} | Delete stack +*DefaultApi* | [**DeleteStackUserAccess**](docs/DefaultApi.md#deletestackuseraccess) | **Delete** /organizations/{organizationId}/stacks/{stackId}/users/{userId} | Delete stack user access role within an organization *DefaultApi* | [**DeleteUserFromOrganization**](docs/DefaultApi.md#deleteuserfromorganization) | **Delete** /organizations/{organizationId}/users/{userId} | delete user from organization *DefaultApi* | [**DisableStack**](docs/DefaultApi.md#disablestack) | **Put** /organizations/{organizationId}/stacks/{stackId}/disable | Disable stack *DefaultApi* | [**DisableStargate**](docs/DefaultApi.md#disablestargate) | **Put** /organizations/{organizationId}/stacks/{stackId}/stargate/disable | Disable stargate on a stack *DefaultApi* | [**EnableStack**](docs/DefaultApi.md#enablestack) | **Put** /organizations/{organizationId}/stacks/{stackId}/enable | Enable stack *DefaultApi* | [**EnableStargate**](docs/DefaultApi.md#enablestargate) | **Put** /organizations/{organizationId}/stacks/{stackId}/stargate/enable | Enable stargate on a stack *DefaultApi* | [**GetRegion**](docs/DefaultApi.md#getregion) | **Get** /organizations/{organizationId}/regions/{regionId} | Get region +*DefaultApi* | [**GetRegionVersions**](docs/DefaultApi.md#getregionversions) | **Get** /organizations/{organizationId}/regions/{regionId}/versions | Get region versions *DefaultApi* | [**GetServerInfo**](docs/DefaultApi.md#getserverinfo) | **Get** /_info | Get server info *DefaultApi* | [**GetStack**](docs/DefaultApi.md#getstack) | **Get** /organizations/{organizationId}/stacks/{stackId} | Find stack *DefaultApi* | [**ListInvitations**](docs/DefaultApi.md#listinvitations) | **Get** /me/invitations | List invitations of the user @@ -101,23 +103,21 @@ Class | Method | HTTP request | Description *DefaultApi* | [**ListOrganizations**](docs/DefaultApi.md#listorganizations) | **Get** /organizations | List organizations of the connected user *DefaultApi* | [**ListOrganizationsExpanded**](docs/DefaultApi.md#listorganizationsexpanded) | **Get** /organizations/expanded | List organizations of the connected user with expanded data *DefaultApi* | [**ListRegions**](docs/DefaultApi.md#listregions) | **Get** /organizations/{organizationId}/regions | List regions +*DefaultApi* | [**ListStackUsersAccesses**](docs/DefaultApi.md#liststackusersaccesses) | **Get** /organizations/{organizationId}/stacks/{stackId}/users | List stack users accesses within an organization *DefaultApi* | [**ListStacks**](docs/DefaultApi.md#liststacks) | **Get** /organizations/{organizationId}/stacks | List stacks *DefaultApi* | [**ListUsersOfOrganization**](docs/DefaultApi.md#listusersoforganization) | **Get** /organizations/{organizationId}/users | List users of organization *DefaultApi* | [**ReadConnectedUser**](docs/DefaultApi.md#readconnecteduser) | **Get** /me | Read user *DefaultApi* | [**ReadOrganization**](docs/DefaultApi.md#readorganization) | **Get** /organizations/{organizationId} | Read organization *DefaultApi* | [**ReadUserOfOrganization**](docs/DefaultApi.md#readuseroforganization) | **Get** /organizations/{organizationId}/users/{userId} | Read user of organization *DefaultApi* | [**RestoreStack**](docs/DefaultApi.md#restorestack) | **Put** /organizations/{organizationId}/stacks/{stackId}/restore | Restore stack -*DefaultApi* | [**UpdateOrganizationUser**](docs/DefaultApi.md#updateorganizationuser) | **Put** /organizations/{organizationId}/users/{userId} | Update user role within an organization +*DefaultApi* | [**UpsertOrganizationUser**](docs/DefaultApi.md#upsertorganizationuser) | **Put** /organizations/{organizationId}/users/{userId} | Update user role within an organization +*DefaultApi* | [**UpsertStackUserAccess**](docs/DefaultApi.md#upsertstackuseraccess) | **Put** /organizations/{organizationId}/stacks/{stackId}/users/{userId} | Update stack user access role within an organization ## Documentation For Models - [AnyRegion](docs/AnyRegion.md) - [AnyRegionAllOf](docs/AnyRegionAllOf.md) - - [BillingPortal](docs/BillingPortal.md) - - [BillingPortalResponse](docs/BillingPortalResponse.md) - - [BillingSetup](docs/BillingSetup.md) - - [BillingSetupResponse](docs/BillingSetupResponse.md) - [CreateInvitationResponse](docs/CreateInvitationResponse.md) - [CreateOrganizationResponse](docs/CreateOrganizationResponse.md) - [CreatePrivateRegionRequest](docs/CreatePrivateRegionRequest.md) @@ -127,6 +127,7 @@ Class | Method | HTTP request | Description - [CreatedPrivateRegionResponse](docs/CreatedPrivateRegionResponse.md) - [Error](docs/Error.md) - [GetRegionResponse](docs/GetRegionResponse.md) + - [GetRegionVersionsResponse](docs/GetRegionVersionsResponse.md) - [Invitation](docs/Invitation.md) - [ListInvitationsResponse](docs/ListInvitationsResponse.md) - [ListOrganizationExpandedResponse](docs/ListOrganizationExpandedResponse.md) @@ -151,11 +152,16 @@ Class | Method | HTTP request | Description - [StackAllOf](docs/StackAllOf.md) - [StackData](docs/StackData.md) - [StackLifeCycle](docs/StackLifeCycle.md) + - [StackUserAccess](docs/StackUserAccess.md) + - [StackUserAccessAllOf](docs/StackUserAccessAllOf.md) + - [StackUserAccessAllOf1](docs/StackUserAccessAllOf1.md) + - [StackUserAccessResponse](docs/StackUserAccessResponse.md) - [User](docs/User.md) - [UserAllOf](docs/UserAllOf.md) - [UserAllOf1](docs/UserAllOf1.md) - [UserData](docs/UserData.md) - [UserDataAllOf](docs/UserDataAllOf.md) + - [Version](docs/Version.md) ## Documentation For Authorization diff --git a/components/fctl/membershipclient/api/openapi.yaml b/components/fctl/membershipclient/api/openapi.yaml index e1cbcbe876..4b0c9e2b60 100644 --- a/components/fctl/membershipclient/api/openapi.yaml +++ b/components/fctl/membershipclient/api/openapi.yaml @@ -207,7 +207,7 @@ paths: description: Read a user summary: Read user of organization put: - operationId: updateOrganizationUser + operationId: upsertOrganizationUser parameters: - explode: false in: path @@ -398,6 +398,136 @@ paths: $ref: '#/components/schemas/Error' description: Not Authorized summary: Find stack + /organizations/{organizationId}/stacks/{stackId}/users: + get: + operationId: listStackUsersAccesses + parameters: + - explode: false + in: path + name: organizationId + required: true + schema: + type: string + style: simple + - explode: false + in: path + name: stackId + required: true + schema: + type: string + style: simple + responses: + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/StackUserAccessResponse' + description: Stack users access roles array + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Not Authorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Error + summary: List stack users accesses within an organization + /organizations/{organizationId}/stacks/{stackId}/users/{userId}: + delete: + operationId: deleteStackUserAccess + parameters: + - explode: false + in: path + name: organizationId + required: true + schema: + type: string + style: simple + - explode: false + in: path + name: stackId + required: true + schema: + type: string + style: simple + - explode: false + in: path + name: userId + required: true + schema: + type: string + style: simple + responses: + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Not Authorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Error + "204": + description: Updated user + summary: Delete stack user access role within an organization + put: + operationId: upsertStackUserAccess + parameters: + - explode: false + in: path + name: organizationId + required: true + schema: + type: string + style: simple + - explode: false + in: path + name: stackId + required: true + schema: + type: string + style: simple + - explode: false + in: path + name: userId + required: true + schema: + type: string + style: simple + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UpdatableStackUserRole' + responses: + "400": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Error + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Not Authorized + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Error + "204": + description: Updated user + summary: Update stack user access role within an organization /organizations/{organizationId}/stacks/{stackId}/disable: put: operationId: disableStack @@ -943,6 +1073,44 @@ paths: $ref: '#/components/schemas/GetRegionResponse' description: Get a specific region summary: Get region + /organizations/{organizationId}/regions/{regionId}/versions: + get: + operationId: getRegionVersions + parameters: + - explode: false + in: path + name: organizationId + required: true + schema: + type: string + style: simple + - explode: false + in: path + name: regionId + required: true + schema: + type: string + style: simple + responses: + "404": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Error + "403": + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + description: Error + "200": + content: + application/json: + schema: + $ref: '#/components/schemas/GetRegionVersionsResponse' + description: Get a specific region + summary: Get region versions /me: get: operationId: readConnectedUser @@ -1053,22 +1221,6 @@ components: - state - status type: object - BillingPortal: - properties: - url: - description: Billing portal URL - type: string - required: - - url - type: object - BillingSetup: - properties: - url: - description: Billing portal URL - type: string - required: - - url - type: object Stack: allOf: - $ref: '#/components/schemas/StackData' @@ -1082,6 +1234,15 @@ components: allOf: - enum: - ADMIN + - GUEST + type: string + type: array + UpdatableStackUserRole: + items: + allOf: + - enum: + - ADMIN + - GUEST type: string type: array Roles: @@ -1110,6 +1271,25 @@ components: items: $ref: '#/components/schemas/User' type: array + StackUserAccess: + allOf: + - $ref: '#/components/schemas/StackUserAccess_allOf' + - $ref: '#/components/schemas/StackUserAccess_allOf_1' + StackUserAccessResponse: + example: + data: + - null + - null + properties: + data: + items: + $ref: '#/components/schemas/StackUserAccess' + type: array + type: object + StackUserAccessArray: + items: + $ref: '#/components/schemas/StackUserAccess' + type: array ListOrganizationResponse: example: data: @@ -1143,16 +1323,6 @@ components: $ref: '#/components/schemas/Stack' type: array type: object - BillingPortalResponse: - properties: - data: - $ref: '#/components/schemas/BillingPortal' - type: object - BillingSetupResponse: - properties: - data: - $ref: '#/components/schemas/BillingSetup' - type: object ListUsersResponse: example: data: @@ -1326,6 +1496,39 @@ components: required: - version type: object + Version: + example: + versions: + key: versions + name: name + properties: + name: + type: string + versions: + additionalProperties: + type: string + type: object + required: + - name + - versions + type: object + GetRegionVersionsResponse: + example: + data: + - versions: + key: versions + name: name + - versions: + key: versions + name: name + properties: + data: + items: + $ref: '#/components/schemas/Version' + type: array + required: + - data + type: object PrivateRegion_allOf_secret: properties: lastDigits: @@ -1457,6 +1660,31 @@ components: - id type: object example: null + StackUserAccess_allOf: + properties: + roles: + items: + allOf: + - enum: + - ADMIN + - GUEST + type: string + type: array + type: object + example: null + StackUserAccess_allOf_1: + properties: + stackId: + description: Stack ID + type: string + userId: + description: User ID + type: string + required: + - stackId + - userId + type: object + example: null CreateStackRequest_allOf: properties: regionID: diff --git a/components/fctl/membershipclient/api_default.go b/components/fctl/membershipclient/api_default.go index cf9f4c7b43..ba731da1d9 100644 --- a/components/fctl/membershipclient/api_default.go +++ b/components/fctl/membershipclient/api_default.go @@ -1265,6 +1265,126 @@ func (a *DefaultApiService) DeleteStackExecute(r ApiDeleteStackRequest) (*http.R return localVarHTTPResponse, nil } +type ApiDeleteStackUserAccessRequest struct { + ctx context.Context + ApiService *DefaultApiService + organizationId string + stackId string + userId string +} + +func (r ApiDeleteStackUserAccessRequest) Execute() (*http.Response, error) { + return r.ApiService.DeleteStackUserAccessExecute(r) +} + +/* +DeleteStackUserAccess Delete stack user access role within an organization + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param organizationId + @param stackId + @param userId + @return ApiDeleteStackUserAccessRequest +*/ +func (a *DefaultApiService) DeleteStackUserAccess(ctx context.Context, organizationId string, stackId string, userId string) ApiDeleteStackUserAccessRequest { + return ApiDeleteStackUserAccessRequest{ + ApiService: a, + ctx: ctx, + organizationId: organizationId, + stackId: stackId, + userId: userId, + } +} + +// Execute executes the request +func (a *DefaultApiService) DeleteStackUserAccessExecute(r ApiDeleteStackUserAccessRequest) (*http.Response, error) { + var ( + localVarHTTPMethod = http.MethodDelete + localVarPostBody interface{} + formFiles []formFile + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.DeleteStackUserAccess") + if err != nil { + return nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/organizations/{organizationId}/stacks/{stackId}/users/{userId}" + localVarPath = strings.Replace(localVarPath, "{"+"organizationId"+"}", url.PathEscape(parameterValueToString(r.organizationId, "organizationId")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"stackId"+"}", url.PathEscape(parameterValueToString(r.stackId, "stackId")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"userId"+"}", url.PathEscape(parameterValueToString(r.userId, "userId")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 403 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 404 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarHTTPResponse, newErr + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} + type ApiDeleteUserFromOrganizationRequest struct { ctx context.Context ApiService *DefaultApiService @@ -1992,6 +2112,133 @@ func (a *DefaultApiService) GetRegionExecute(r ApiGetRegionRequest) (*GetRegionR return localVarReturnValue, localVarHTTPResponse, nil } +type ApiGetRegionVersionsRequest struct { + ctx context.Context + ApiService *DefaultApiService + organizationId string + regionId string +} + +func (r ApiGetRegionVersionsRequest) Execute() (*GetRegionVersionsResponse, *http.Response, error) { + return r.ApiService.GetRegionVersionsExecute(r) +} + +/* +GetRegionVersions Get region versions + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param organizationId + @param regionId + @return ApiGetRegionVersionsRequest +*/ +func (a *DefaultApiService) GetRegionVersions(ctx context.Context, organizationId string, regionId string) ApiGetRegionVersionsRequest { + return ApiGetRegionVersionsRequest{ + ApiService: a, + ctx: ctx, + organizationId: organizationId, + regionId: regionId, + } +} + +// Execute executes the request +// @return GetRegionVersionsResponse +func (a *DefaultApiService) GetRegionVersionsExecute(r ApiGetRegionVersionsRequest) (*GetRegionVersionsResponse, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *GetRegionVersionsResponse + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.GetRegionVersions") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/organizations/{organizationId}/regions/{regionId}/versions" + localVarPath = strings.Replace(localVarPath, "{"+"organizationId"+"}", url.PathEscape(parameterValueToString(r.organizationId, "organizationId")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"regionId"+"}", url.PathEscape(parameterValueToString(r.regionId, "regionId")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 404 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 403 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} + type ApiGetServerInfoRequest struct { ctx context.Context ApiService *DefaultApiService @@ -2780,6 +3027,132 @@ func (a *DefaultApiService) ListRegionsExecute(r ApiListRegionsRequest) (*ListRe return localVarReturnValue, localVarHTTPResponse, nil } +type ApiListStackUsersAccessesRequest struct { + ctx context.Context + ApiService *DefaultApiService + organizationId string + stackId string +} + +func (r ApiListStackUsersAccessesRequest) Execute() (*StackUserAccessResponse, *http.Response, error) { + return r.ApiService.ListStackUsersAccessesExecute(r) +} + +/* +ListStackUsersAccesses List stack users accesses within an organization + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param organizationId + @param stackId + @return ApiListStackUsersAccessesRequest +*/ +func (a *DefaultApiService) ListStackUsersAccesses(ctx context.Context, organizationId string, stackId string) ApiListStackUsersAccessesRequest { + return ApiListStackUsersAccessesRequest{ + ApiService: a, + ctx: ctx, + organizationId: organizationId, + stackId: stackId, + } +} + +// Execute executes the request +// @return StackUserAccessResponse +func (a *DefaultApiService) ListStackUsersAccessesExecute(r ApiListStackUsersAccessesRequest) (*StackUserAccessResponse, *http.Response, error) { + var ( + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *StackUserAccessResponse + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.ListStackUsersAccesses") + if err != nil { + return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/organizations/{organizationId}/stacks/{stackId}/users" + localVarPath = strings.Replace(localVarPath, "{"+"organizationId"+"}", url.PathEscape(parameterValueToString(r.organizationId, "organizationId")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"stackId"+"}", url.PathEscape(parameterValueToString(r.stackId, "stackId")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return localVarReturnValue, nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarReturnValue, localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 403 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarReturnValue, localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 404 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarReturnValue, localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: err.Error(), + } + return localVarReturnValue, localVarHTTPResponse, newErr + } + + return localVarReturnValue, localVarHTTPResponse, nil +} + type ApiListStacksRequest struct { ctx context.Context ApiService *DefaultApiService @@ -3476,7 +3849,7 @@ func (a *DefaultApiService) RestoreStackExecute(r ApiRestoreStackRequest) (*Crea return localVarReturnValue, localVarHTTPResponse, nil } -type ApiUpdateOrganizationUserRequest struct { +type ApiUpsertOrganizationUserRequest struct { ctx context.Context ApiService *DefaultApiService organizationId string @@ -3484,25 +3857,25 @@ type ApiUpdateOrganizationUserRequest struct { requestBody *[]string } -func (r ApiUpdateOrganizationUserRequest) RequestBody(requestBody []string) ApiUpdateOrganizationUserRequest { +func (r ApiUpsertOrganizationUserRequest) RequestBody(requestBody []string) ApiUpsertOrganizationUserRequest { r.requestBody = &requestBody return r } -func (r ApiUpdateOrganizationUserRequest) Execute() (*http.Response, error) { - return r.ApiService.UpdateOrganizationUserExecute(r) +func (r ApiUpsertOrganizationUserRequest) Execute() (*http.Response, error) { + return r.ApiService.UpsertOrganizationUserExecute(r) } /* -UpdateOrganizationUser Update user role within an organization +UpsertOrganizationUser Update user role within an organization @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @param organizationId @param userId - @return ApiUpdateOrganizationUserRequest + @return ApiUpsertOrganizationUserRequest */ -func (a *DefaultApiService) UpdateOrganizationUser(ctx context.Context, organizationId string, userId string) ApiUpdateOrganizationUserRequest { - return ApiUpdateOrganizationUserRequest{ +func (a *DefaultApiService) UpsertOrganizationUser(ctx context.Context, organizationId string, userId string) ApiUpsertOrganizationUserRequest { + return ApiUpsertOrganizationUserRequest{ ApiService: a, ctx: ctx, organizationId: organizationId, @@ -3511,14 +3884,14 @@ func (a *DefaultApiService) UpdateOrganizationUser(ctx context.Context, organiza } // Execute executes the request -func (a *DefaultApiService) UpdateOrganizationUserExecute(r ApiUpdateOrganizationUserRequest) (*http.Response, error) { +func (a *DefaultApiService) UpsertOrganizationUserExecute(r ApiUpsertOrganizationUserRequest) (*http.Response, error) { var ( localVarHTTPMethod = http.MethodPut localVarPostBody interface{} formFiles []formFile ) - localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.UpdateOrganizationUser") + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.UpsertOrganizationUser") if err != nil { return nil, &GenericOpenAPIError{error: err.Error()} } @@ -3610,3 +3983,142 @@ func (a *DefaultApiService) UpdateOrganizationUserExecute(r ApiUpdateOrganizatio return localVarHTTPResponse, nil } + +type ApiUpsertStackUserAccessRequest struct { + ctx context.Context + ApiService *DefaultApiService + organizationId string + stackId string + userId string + requestBody *[]string +} + +func (r ApiUpsertStackUserAccessRequest) RequestBody(requestBody []string) ApiUpsertStackUserAccessRequest { + r.requestBody = &requestBody + return r +} + +func (r ApiUpsertStackUserAccessRequest) Execute() (*http.Response, error) { + return r.ApiService.UpsertStackUserAccessExecute(r) +} + +/* +UpsertStackUserAccess Update stack user access role within an organization + + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param organizationId + @param stackId + @param userId + @return ApiUpsertStackUserAccessRequest +*/ +func (a *DefaultApiService) UpsertStackUserAccess(ctx context.Context, organizationId string, stackId string, userId string) ApiUpsertStackUserAccessRequest { + return ApiUpsertStackUserAccessRequest{ + ApiService: a, + ctx: ctx, + organizationId: organizationId, + stackId: stackId, + userId: userId, + } +} + +// Execute executes the request +func (a *DefaultApiService) UpsertStackUserAccessExecute(r ApiUpsertStackUserAccessRequest) (*http.Response, error) { + var ( + localVarHTTPMethod = http.MethodPut + localVarPostBody interface{} + formFiles []formFile + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.UpsertStackUserAccess") + if err != nil { + return nil, &GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/organizations/{organizationId}/stacks/{stackId}/users/{userId}" + localVarPath = strings.Replace(localVarPath, "{"+"organizationId"+"}", url.PathEscape(parameterValueToString(r.organizationId, "organizationId")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"stackId"+"}", url.PathEscape(parameterValueToString(r.stackId, "stackId")), -1) + localVarPath = strings.Replace(localVarPath, "{"+"userId"+"}", url.PathEscape(parameterValueToString(r.userId, "userId")), -1) + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := url.Values{} + localVarFormParams := url.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{"application/json"} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = r.requestBody + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := io.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := &GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + if localVarHTTPResponse.StatusCode == 400 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 403 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarHTTPResponse, newErr + } + if localVarHTTPResponse.StatusCode == 404 { + var v Error + err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) + if err != nil { + newErr.error = err.Error() + return localVarHTTPResponse, newErr + } + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v + return localVarHTTPResponse, newErr + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} diff --git a/components/fctl/membershipclient/docs/BillingPortal.md b/components/fctl/membershipclient/docs/BillingPortal.md deleted file mode 100644 index 781d4a15e9..0000000000 --- a/components/fctl/membershipclient/docs/BillingPortal.md +++ /dev/null @@ -1,51 +0,0 @@ -# BillingPortal - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Url** | **string** | Billing portal URL | - -## Methods - -### NewBillingPortal - -`func NewBillingPortal(url string, ) *BillingPortal` - -NewBillingPortal instantiates a new BillingPortal object -This constructor will assign default values to properties that have it defined, -and makes sure properties required by API are set, but the set of arguments -will change when the set of required properties is changed - -### NewBillingPortalWithDefaults - -`func NewBillingPortalWithDefaults() *BillingPortal` - -NewBillingPortalWithDefaults instantiates a new BillingPortal object -This constructor will only assign default values to properties that have it defined, -but it doesn't guarantee that properties required by API are set - -### GetUrl - -`func (o *BillingPortal) GetUrl() string` - -GetUrl returns the Url field if non-nil, zero value otherwise. - -### GetUrlOk - -`func (o *BillingPortal) GetUrlOk() (*string, bool)` - -GetUrlOk returns a tuple with the Url field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetUrl - -`func (o *BillingPortal) SetUrl(v string)` - -SetUrl sets Url field to given value. - - - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/components/fctl/membershipclient/docs/BillingSetup.md b/components/fctl/membershipclient/docs/BillingSetup.md deleted file mode 100644 index c1985f2997..0000000000 --- a/components/fctl/membershipclient/docs/BillingSetup.md +++ /dev/null @@ -1,51 +0,0 @@ -# BillingSetup - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Url** | **string** | Billing portal URL | - -## Methods - -### NewBillingSetup - -`func NewBillingSetup(url string, ) *BillingSetup` - -NewBillingSetup instantiates a new BillingSetup object -This constructor will assign default values to properties that have it defined, -and makes sure properties required by API are set, but the set of arguments -will change when the set of required properties is changed - -### NewBillingSetupWithDefaults - -`func NewBillingSetupWithDefaults() *BillingSetup` - -NewBillingSetupWithDefaults instantiates a new BillingSetup object -This constructor will only assign default values to properties that have it defined, -but it doesn't guarantee that properties required by API are set - -### GetUrl - -`func (o *BillingSetup) GetUrl() string` - -GetUrl returns the Url field if non-nil, zero value otherwise. - -### GetUrlOk - -`func (o *BillingSetup) GetUrlOk() (*string, bool)` - -GetUrlOk returns a tuple with the Url field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetUrl - -`func (o *BillingSetup) SetUrl(v string)` - -SetUrl sets Url field to given value. - - - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/components/fctl/membershipclient/docs/BillingSetupResponse.md b/components/fctl/membershipclient/docs/BillingSetupResponse.md deleted file mode 100644 index c786bc5d97..0000000000 --- a/components/fctl/membershipclient/docs/BillingSetupResponse.md +++ /dev/null @@ -1,56 +0,0 @@ -# BillingSetupResponse - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Data** | Pointer to [**BillingSetup**](BillingSetup.md) | | [optional] - -## Methods - -### NewBillingSetupResponse - -`func NewBillingSetupResponse() *BillingSetupResponse` - -NewBillingSetupResponse instantiates a new BillingSetupResponse object -This constructor will assign default values to properties that have it defined, -and makes sure properties required by API are set, but the set of arguments -will change when the set of required properties is changed - -### NewBillingSetupResponseWithDefaults - -`func NewBillingSetupResponseWithDefaults() *BillingSetupResponse` - -NewBillingSetupResponseWithDefaults instantiates a new BillingSetupResponse object -This constructor will only assign default values to properties that have it defined, -but it doesn't guarantee that properties required by API are set - -### GetData - -`func (o *BillingSetupResponse) GetData() BillingSetup` - -GetData returns the Data field if non-nil, zero value otherwise. - -### GetDataOk - -`func (o *BillingSetupResponse) GetDataOk() (*BillingSetup, bool)` - -GetDataOk returns a tuple with the Data field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetData - -`func (o *BillingSetupResponse) SetData(v BillingSetup)` - -SetData sets Data field to given value. - -### HasData - -`func (o *BillingSetupResponse) HasData() bool` - -HasData returns a boolean if a field has been set. - - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/components/fctl/membershipclient/docs/DefaultApi.md b/components/fctl/membershipclient/docs/DefaultApi.md index a0f481d1ae..6be4277e83 100644 --- a/components/fctl/membershipclient/docs/DefaultApi.md +++ b/components/fctl/membershipclient/docs/DefaultApi.md @@ -14,12 +14,14 @@ Method | HTTP request | Description [**DeleteOrganization**](DefaultApi.md#DeleteOrganization) | **Delete** /organizations/{organizationId} | Delete organization [**DeleteRegion**](DefaultApi.md#DeleteRegion) | **Delete** /organizations/{organizationId}/regions/{regionId} | Delete region [**DeleteStack**](DefaultApi.md#DeleteStack) | **Delete** /organizations/{organizationId}/stacks/{stackId} | Delete stack +[**DeleteStackUserAccess**](DefaultApi.md#DeleteStackUserAccess) | **Delete** /organizations/{organizationId}/stacks/{stackId}/users/{userId} | Delete stack user access role within an organization [**DeleteUserFromOrganization**](DefaultApi.md#DeleteUserFromOrganization) | **Delete** /organizations/{organizationId}/users/{userId} | delete user from organization [**DisableStack**](DefaultApi.md#DisableStack) | **Put** /organizations/{organizationId}/stacks/{stackId}/disable | Disable stack [**DisableStargate**](DefaultApi.md#DisableStargate) | **Put** /organizations/{organizationId}/stacks/{stackId}/stargate/disable | Disable stargate on a stack [**EnableStack**](DefaultApi.md#EnableStack) | **Put** /organizations/{organizationId}/stacks/{stackId}/enable | Enable stack [**EnableStargate**](DefaultApi.md#EnableStargate) | **Put** /organizations/{organizationId}/stacks/{stackId}/stargate/enable | Enable stargate on a stack [**GetRegion**](DefaultApi.md#GetRegion) | **Get** /organizations/{organizationId}/regions/{regionId} | Get region +[**GetRegionVersions**](DefaultApi.md#GetRegionVersions) | **Get** /organizations/{organizationId}/regions/{regionId}/versions | Get region versions [**GetServerInfo**](DefaultApi.md#GetServerInfo) | **Get** /_info | Get server info [**GetStack**](DefaultApi.md#GetStack) | **Get** /organizations/{organizationId}/stacks/{stackId} | Find stack [**ListInvitations**](DefaultApi.md#ListInvitations) | **Get** /me/invitations | List invitations of the user @@ -27,13 +29,15 @@ Method | HTTP request | Description [**ListOrganizations**](DefaultApi.md#ListOrganizations) | **Get** /organizations | List organizations of the connected user [**ListOrganizationsExpanded**](DefaultApi.md#ListOrganizationsExpanded) | **Get** /organizations/expanded | List organizations of the connected user with expanded data [**ListRegions**](DefaultApi.md#ListRegions) | **Get** /organizations/{organizationId}/regions | List regions +[**ListStackUsersAccesses**](DefaultApi.md#ListStackUsersAccesses) | **Get** /organizations/{organizationId}/stacks/{stackId}/users | List stack users accesses within an organization [**ListStacks**](DefaultApi.md#ListStacks) | **Get** /organizations/{organizationId}/stacks | List stacks [**ListUsersOfOrganization**](DefaultApi.md#ListUsersOfOrganization) | **Get** /organizations/{organizationId}/users | List users of organization [**ReadConnectedUser**](DefaultApi.md#ReadConnectedUser) | **Get** /me | Read user [**ReadOrganization**](DefaultApi.md#ReadOrganization) | **Get** /organizations/{organizationId} | Read organization [**ReadUserOfOrganization**](DefaultApi.md#ReadUserOfOrganization) | **Get** /organizations/{organizationId}/users/{userId} | Read user of organization [**RestoreStack**](DefaultApi.md#RestoreStack) | **Put** /organizations/{organizationId}/stacks/{stackId}/restore | Restore stack -[**UpdateOrganizationUser**](DefaultApi.md#UpdateOrganizationUser) | **Put** /organizations/{organizationId}/users/{userId} | Update user role within an organization +[**UpsertOrganizationUser**](DefaultApi.md#UpsertOrganizationUser) | **Put** /organizations/{organizationId}/users/{userId} | Update user role within an organization +[**UpsertStackUserAccess**](DefaultApi.md#UpsertStackUserAccess) | **Put** /organizations/{organizationId}/stacks/{stackId}/users/{userId} | Update stack user access role within an organization @@ -698,6 +702,78 @@ Name | Type | Description | Notes +### Return type + + (empty response body) + +### Authorization + +[oauth2](../README.md#oauth2) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + +## DeleteStackUserAccess + +> DeleteStackUserAccess(ctx, organizationId, stackId, userId).Execute() + +Delete stack user access role within an organization + +### Example + +```go +package main + +import ( + "context" + "fmt" + "os" + openapiclient "github.com/formancehq/fctl/membershipclient" +) + +func main() { + organizationId := "organizationId_example" // string | + stackId := "stackId_example" // string | + userId := "userId_example" // string | + + configuration := openapiclient.NewConfiguration() + apiClient := openapiclient.NewAPIClient(configuration) + r, err := apiClient.DefaultApi.DeleteStackUserAccess(context.Background(), organizationId, stackId, userId).Execute() + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.DeleteStackUserAccess``: %v\n", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + } +} +``` + +### Path Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**organizationId** | **string** | | +**stackId** | **string** | | +**userId** | **string** | | + +### Other Parameters + +Other parameters are passed through a pointer to a apiDeleteStackUserAccessRequest struct via the builder pattern + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + + + + ### Return type (empty response body) @@ -1134,6 +1210,77 @@ Name | Type | Description | Notes [[Back to README]](../README.md) +## GetRegionVersions + +> GetRegionVersionsResponse GetRegionVersions(ctx, organizationId, regionId).Execute() + +Get region versions + +### Example + +```go +package main + +import ( + "context" + "fmt" + "os" + openapiclient "github.com/formancehq/fctl/membershipclient" +) + +func main() { + organizationId := "organizationId_example" // string | + regionId := "regionId_example" // string | + + configuration := openapiclient.NewConfiguration() + apiClient := openapiclient.NewAPIClient(configuration) + resp, r, err := apiClient.DefaultApi.GetRegionVersions(context.Background(), organizationId, regionId).Execute() + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.GetRegionVersions``: %v\n", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + } + // response from `GetRegionVersions`: GetRegionVersionsResponse + fmt.Fprintf(os.Stdout, "Response from `DefaultApi.GetRegionVersions`: %v\n", resp) +} +``` + +### Path Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**organizationId** | **string** | | +**regionId** | **string** | | + +### Other Parameters + +Other parameters are passed through a pointer to a apiGetRegionVersionsRequest struct via the builder pattern + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + + + +### Return type + +[**GetRegionVersionsResponse**](GetRegionVersionsResponse.md) + +### Authorization + +[oauth2](../README.md#oauth2) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + ## GetServerInfo > ServerInfo GetServerInfo(ctx).Execute() @@ -1586,6 +1733,77 @@ Name | Type | Description | Notes [[Back to README]](../README.md) +## ListStackUsersAccesses + +> StackUserAccessResponse ListStackUsersAccesses(ctx, organizationId, stackId).Execute() + +List stack users accesses within an organization + +### Example + +```go +package main + +import ( + "context" + "fmt" + "os" + openapiclient "github.com/formancehq/fctl/membershipclient" +) + +func main() { + organizationId := "organizationId_example" // string | + stackId := "stackId_example" // string | + + configuration := openapiclient.NewConfiguration() + apiClient := openapiclient.NewAPIClient(configuration) + resp, r, err := apiClient.DefaultApi.ListStackUsersAccesses(context.Background(), organizationId, stackId).Execute() + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.ListStackUsersAccesses``: %v\n", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + } + // response from `ListStackUsersAccesses`: StackUserAccessResponse + fmt.Fprintf(os.Stdout, "Response from `DefaultApi.ListStackUsersAccesses`: %v\n", resp) +} +``` + +### Path Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**organizationId** | **string** | | +**stackId** | **string** | | + +### Other Parameters + +Other parameters are passed through a pointer to a apiListStackUsersAccessesRequest struct via the builder pattern + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + + + +### Return type + +[**StackUserAccessResponse**](StackUserAccessResponse.md) + +### Authorization + +[oauth2](../README.md#oauth2) + +### HTTP request headers + +- **Content-Type**: Not defined +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + ## ListStacks > ListStacksResponse ListStacks(ctx, organizationId).All(all).Deleted(deleted).Execute() @@ -1995,9 +2213,9 @@ Name | Type | Description | Notes [[Back to README]](../README.md) -## UpdateOrganizationUser +## UpsertOrganizationUser -> UpdateOrganizationUser(ctx, organizationId, userId).RequestBody(requestBody).Execute() +> UpsertOrganizationUser(ctx, organizationId, userId).RequestBody(requestBody).Execute() Update user role within an organization @@ -2020,9 +2238,9 @@ func main() { configuration := openapiclient.NewConfiguration() apiClient := openapiclient.NewAPIClient(configuration) - r, err := apiClient.DefaultApi.UpdateOrganizationUser(context.Background(), organizationId, userId).RequestBody(requestBody).Execute() + r, err := apiClient.DefaultApi.UpsertOrganizationUser(context.Background(), organizationId, userId).RequestBody(requestBody).Execute() if err != nil { - fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.UpdateOrganizationUser``: %v\n", err) + fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.UpsertOrganizationUser``: %v\n", err) fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) } } @@ -2039,7 +2257,7 @@ Name | Type | Description | Notes ### Other Parameters -Other parameters are passed through a pointer to a apiUpdateOrganizationUserRequest struct via the builder pattern +Other parameters are passed through a pointer to a apiUpsertOrganizationUserRequest struct via the builder pattern Name | Type | Description | Notes @@ -2065,3 +2283,77 @@ Name | Type | Description | Notes [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +## UpsertStackUserAccess + +> UpsertStackUserAccess(ctx, organizationId, stackId, userId).RequestBody(requestBody).Execute() + +Update stack user access role within an organization + +### Example + +```go +package main + +import ( + "context" + "fmt" + "os" + openapiclient "github.com/formancehq/fctl/membershipclient" +) + +func main() { + organizationId := "organizationId_example" // string | + stackId := "stackId_example" // string | + userId := "userId_example" // string | + requestBody := []string{"Property_example"} // []string | (optional) + + configuration := openapiclient.NewConfiguration() + apiClient := openapiclient.NewAPIClient(configuration) + r, err := apiClient.DefaultApi.UpsertStackUserAccess(context.Background(), organizationId, stackId, userId).RequestBody(requestBody).Execute() + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.UpsertStackUserAccess``: %v\n", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + } +} +``` + +### Path Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**organizationId** | **string** | | +**stackId** | **string** | | +**userId** | **string** | | + +### Other Parameters + +Other parameters are passed through a pointer to a apiUpsertStackUserAccessRequest struct via the builder pattern + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + + + + **requestBody** | **[]string** | | + +### Return type + + (empty response body) + +### Authorization + +[oauth2](../README.md#oauth2) + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: application/json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + diff --git a/components/fctl/membershipclient/docs/UpdateUserResponse.md b/components/fctl/membershipclient/docs/GetRegionVersionsResponse.md similarity index 58% rename from components/fctl/membershipclient/docs/UpdateUserResponse.md rename to components/fctl/membershipclient/docs/GetRegionVersionsResponse.md index b96e36fcbf..fdba5d82d2 100644 --- a/components/fctl/membershipclient/docs/UpdateUserResponse.md +++ b/components/fctl/membershipclient/docs/GetRegionVersionsResponse.md @@ -1,46 +1,46 @@ -# UpdateUserResponse +# GetRegionVersionsResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**Data** | [**User**](User.md) | | +**Data** | [**[]Version**](Version.md) | | ## Methods -### NewUpdateUserResponse +### NewGetRegionVersionsResponse -`func NewUpdateUserResponse(data User, ) *UpdateUserResponse` +`func NewGetRegionVersionsResponse(data []Version, ) *GetRegionVersionsResponse` -NewUpdateUserResponse instantiates a new UpdateUserResponse object +NewGetRegionVersionsResponse instantiates a new GetRegionVersionsResponse object This constructor will assign default values to properties that have it defined, and makes sure properties required by API are set, but the set of arguments will change when the set of required properties is changed -### NewUpdateUserResponseWithDefaults +### NewGetRegionVersionsResponseWithDefaults -`func NewUpdateUserResponseWithDefaults() *UpdateUserResponse` +`func NewGetRegionVersionsResponseWithDefaults() *GetRegionVersionsResponse` -NewUpdateUserResponseWithDefaults instantiates a new UpdateUserResponse object +NewGetRegionVersionsResponseWithDefaults instantiates a new GetRegionVersionsResponse object This constructor will only assign default values to properties that have it defined, but it doesn't guarantee that properties required by API are set ### GetData -`func (o *UpdateUserResponse) GetData() User` +`func (o *GetRegionVersionsResponse) GetData() []Version` GetData returns the Data field if non-nil, zero value otherwise. ### GetDataOk -`func (o *UpdateUserResponse) GetDataOk() (*User, bool)` +`func (o *GetRegionVersionsResponse) GetDataOk() (*[]Version, bool)` GetDataOk returns a tuple with the Data field if it's non-nil, zero value otherwise and a boolean to check if the value has been set. ### SetData -`func (o *UpdateUserResponse) SetData(v User)` +`func (o *GetRegionVersionsResponse) SetData(v []Version)` SetData sets Data field to given value. diff --git a/components/fctl/membershipclient/docs/StackUserAccess.md b/components/fctl/membershipclient/docs/StackUserAccess.md new file mode 100644 index 0000000000..4a394c2b8b --- /dev/null +++ b/components/fctl/membershipclient/docs/StackUserAccess.md @@ -0,0 +1,98 @@ +# StackUserAccess + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Roles** | Pointer to **[]string** | | [optional] +**StackId** | **string** | Stack ID | +**UserId** | **string** | User ID | + +## Methods + +### NewStackUserAccess + +`func NewStackUserAccess(stackId string, userId string, ) *StackUserAccess` + +NewStackUserAccess instantiates a new StackUserAccess object +This constructor will assign default values to properties that have it defined, +and makes sure properties required by API are set, but the set of arguments +will change when the set of required properties is changed + +### NewStackUserAccessWithDefaults + +`func NewStackUserAccessWithDefaults() *StackUserAccess` + +NewStackUserAccessWithDefaults instantiates a new StackUserAccess object +This constructor will only assign default values to properties that have it defined, +but it doesn't guarantee that properties required by API are set + +### GetRoles + +`func (o *StackUserAccess) GetRoles() []string` + +GetRoles returns the Roles field if non-nil, zero value otherwise. + +### GetRolesOk + +`func (o *StackUserAccess) GetRolesOk() (*[]string, bool)` + +GetRolesOk returns a tuple with the Roles field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetRoles + +`func (o *StackUserAccess) SetRoles(v []string)` + +SetRoles sets Roles field to given value. + +### HasRoles + +`func (o *StackUserAccess) HasRoles() bool` + +HasRoles returns a boolean if a field has been set. + +### GetStackId + +`func (o *StackUserAccess) GetStackId() string` + +GetStackId returns the StackId field if non-nil, zero value otherwise. + +### GetStackIdOk + +`func (o *StackUserAccess) GetStackIdOk() (*string, bool)` + +GetStackIdOk returns a tuple with the StackId field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetStackId + +`func (o *StackUserAccess) SetStackId(v string)` + +SetStackId sets StackId field to given value. + + +### GetUserId + +`func (o *StackUserAccess) GetUserId() string` + +GetUserId returns the UserId field if non-nil, zero value otherwise. + +### GetUserIdOk + +`func (o *StackUserAccess) GetUserIdOk() (*string, bool)` + +GetUserIdOk returns a tuple with the UserId field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetUserId + +`func (o *StackUserAccess) SetUserId(v string)` + +SetUserId sets UserId field to given value. + + + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/components/fctl/membershipclient/docs/StackUserAccessAllOf.md b/components/fctl/membershipclient/docs/StackUserAccessAllOf.md new file mode 100644 index 0000000000..c61f190f60 --- /dev/null +++ b/components/fctl/membershipclient/docs/StackUserAccessAllOf.md @@ -0,0 +1,56 @@ +# StackUserAccessAllOf + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Roles** | Pointer to **[]string** | | [optional] + +## Methods + +### NewStackUserAccessAllOf + +`func NewStackUserAccessAllOf() *StackUserAccessAllOf` + +NewStackUserAccessAllOf instantiates a new StackUserAccessAllOf object +This constructor will assign default values to properties that have it defined, +and makes sure properties required by API are set, but the set of arguments +will change when the set of required properties is changed + +### NewStackUserAccessAllOfWithDefaults + +`func NewStackUserAccessAllOfWithDefaults() *StackUserAccessAllOf` + +NewStackUserAccessAllOfWithDefaults instantiates a new StackUserAccessAllOf object +This constructor will only assign default values to properties that have it defined, +but it doesn't guarantee that properties required by API are set + +### GetRoles + +`func (o *StackUserAccessAllOf) GetRoles() []string` + +GetRoles returns the Roles field if non-nil, zero value otherwise. + +### GetRolesOk + +`func (o *StackUserAccessAllOf) GetRolesOk() (*[]string, bool)` + +GetRolesOk returns a tuple with the Roles field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetRoles + +`func (o *StackUserAccessAllOf) SetRoles(v []string)` + +SetRoles sets Roles field to given value. + +### HasRoles + +`func (o *StackUserAccessAllOf) HasRoles() bool` + +HasRoles returns a boolean if a field has been set. + + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/components/fctl/membershipclient/docs/StackUserAccessAllOf1.md b/components/fctl/membershipclient/docs/StackUserAccessAllOf1.md new file mode 100644 index 0000000000..5da696174f --- /dev/null +++ b/components/fctl/membershipclient/docs/StackUserAccessAllOf1.md @@ -0,0 +1,72 @@ +# StackUserAccessAllOf1 + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**StackId** | **string** | Stack ID | +**UserId** | **string** | User ID | + +## Methods + +### NewStackUserAccessAllOf1 + +`func NewStackUserAccessAllOf1(stackId string, userId string, ) *StackUserAccessAllOf1` + +NewStackUserAccessAllOf1 instantiates a new StackUserAccessAllOf1 object +This constructor will assign default values to properties that have it defined, +and makes sure properties required by API are set, but the set of arguments +will change when the set of required properties is changed + +### NewStackUserAccessAllOf1WithDefaults + +`func NewStackUserAccessAllOf1WithDefaults() *StackUserAccessAllOf1` + +NewStackUserAccessAllOf1WithDefaults instantiates a new StackUserAccessAllOf1 object +This constructor will only assign default values to properties that have it defined, +but it doesn't guarantee that properties required by API are set + +### GetStackId + +`func (o *StackUserAccessAllOf1) GetStackId() string` + +GetStackId returns the StackId field if non-nil, zero value otherwise. + +### GetStackIdOk + +`func (o *StackUserAccessAllOf1) GetStackIdOk() (*string, bool)` + +GetStackIdOk returns a tuple with the StackId field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetStackId + +`func (o *StackUserAccessAllOf1) SetStackId(v string)` + +SetStackId sets StackId field to given value. + + +### GetUserId + +`func (o *StackUserAccessAllOf1) GetUserId() string` + +GetUserId returns the UserId field if non-nil, zero value otherwise. + +### GetUserIdOk + +`func (o *StackUserAccessAllOf1) GetUserIdOk() (*string, bool)` + +GetUserIdOk returns a tuple with the UserId field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetUserId + +`func (o *StackUserAccessAllOf1) SetUserId(v string)` + +SetUserId sets UserId field to given value. + + + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/components/fctl/membershipclient/docs/BillingPortalResponse.md b/components/fctl/membershipclient/docs/StackUserAccessResponse.md similarity index 57% rename from components/fctl/membershipclient/docs/BillingPortalResponse.md rename to components/fctl/membershipclient/docs/StackUserAccessResponse.md index 18a8cfd055..deabe63803 100644 --- a/components/fctl/membershipclient/docs/BillingPortalResponse.md +++ b/components/fctl/membershipclient/docs/StackUserAccessResponse.md @@ -1,52 +1,52 @@ -# BillingPortalResponse +# StackUserAccessResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**Data** | Pointer to [**BillingPortal**](BillingPortal.md) | | [optional] +**Data** | Pointer to [**[]StackUserAccess**](StackUserAccess.md) | | [optional] ## Methods -### NewBillingPortalResponse +### NewStackUserAccessResponse -`func NewBillingPortalResponse() *BillingPortalResponse` +`func NewStackUserAccessResponse() *StackUserAccessResponse` -NewBillingPortalResponse instantiates a new BillingPortalResponse object +NewStackUserAccessResponse instantiates a new StackUserAccessResponse object This constructor will assign default values to properties that have it defined, and makes sure properties required by API are set, but the set of arguments will change when the set of required properties is changed -### NewBillingPortalResponseWithDefaults +### NewStackUserAccessResponseWithDefaults -`func NewBillingPortalResponseWithDefaults() *BillingPortalResponse` +`func NewStackUserAccessResponseWithDefaults() *StackUserAccessResponse` -NewBillingPortalResponseWithDefaults instantiates a new BillingPortalResponse object +NewStackUserAccessResponseWithDefaults instantiates a new StackUserAccessResponse object This constructor will only assign default values to properties that have it defined, but it doesn't guarantee that properties required by API are set ### GetData -`func (o *BillingPortalResponse) GetData() BillingPortal` +`func (o *StackUserAccessResponse) GetData() []StackUserAccess` GetData returns the Data field if non-nil, zero value otherwise. ### GetDataOk -`func (o *BillingPortalResponse) GetDataOk() (*BillingPortal, bool)` +`func (o *StackUserAccessResponse) GetDataOk() (*[]StackUserAccess, bool)` GetDataOk returns a tuple with the Data field if it's non-nil, zero value otherwise and a boolean to check if the value has been set. ### SetData -`func (o *BillingPortalResponse) SetData(v BillingPortal)` +`func (o *StackUserAccessResponse) SetData(v []StackUserAccess)` SetData sets Data field to given value. ### HasData -`func (o *BillingPortalResponse) HasData() bool` +`func (o *StackUserAccessResponse) HasData() bool` HasData returns a boolean if a field has been set. diff --git a/components/fctl/membershipclient/docs/UpdatableUserData.md b/components/fctl/membershipclient/docs/UpdatableUserData.md deleted file mode 100644 index c565fb5286..0000000000 --- a/components/fctl/membershipclient/docs/UpdatableUserData.md +++ /dev/null @@ -1,56 +0,0 @@ -# UpdatableUserData - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Metadata** | Pointer to **map[string]string** | | [optional] - -## Methods - -### NewUpdatableUserData - -`func NewUpdatableUserData() *UpdatableUserData` - -NewUpdatableUserData instantiates a new UpdatableUserData object -This constructor will assign default values to properties that have it defined, -and makes sure properties required by API are set, but the set of arguments -will change when the set of required properties is changed - -### NewUpdatableUserDataWithDefaults - -`func NewUpdatableUserDataWithDefaults() *UpdatableUserData` - -NewUpdatableUserDataWithDefaults instantiates a new UpdatableUserData object -This constructor will only assign default values to properties that have it defined, -but it doesn't guarantee that properties required by API are set - -### GetMetadata - -`func (o *UpdatableUserData) GetMetadata() map[string]string` - -GetMetadata returns the Metadata field if non-nil, zero value otherwise. - -### GetMetadataOk - -`func (o *UpdatableUserData) GetMetadataOk() (*map[string]string, bool)` - -GetMetadataOk returns a tuple with the Metadata field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetMetadata - -`func (o *UpdatableUserData) SetMetadata(v map[string]string)` - -SetMetadata sets Metadata field to given value. - -### HasMetadata - -`func (o *UpdatableUserData) HasMetadata() bool` - -HasMetadata returns a boolean if a field has been set. - - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/components/fctl/membershipclient/docs/UpdateUserAccessData.md b/components/fctl/membershipclient/docs/UpdateUserAccessData.md deleted file mode 100644 index b3987ed4fc..0000000000 --- a/components/fctl/membershipclient/docs/UpdateUserAccessData.md +++ /dev/null @@ -1,56 +0,0 @@ -# UpdateUserAccessData - -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**IsAdmin** | Pointer to **bool** | Is the user an admin of the organization | [optional] - -## Methods - -### NewUpdateUserAccessData - -`func NewUpdateUserAccessData() *UpdateUserAccessData` - -NewUpdateUserAccessData instantiates a new UpdateUserAccessData object -This constructor will assign default values to properties that have it defined, -and makes sure properties required by API are set, but the set of arguments -will change when the set of required properties is changed - -### NewUpdateUserAccessDataWithDefaults - -`func NewUpdateUserAccessDataWithDefaults() *UpdateUserAccessData` - -NewUpdateUserAccessDataWithDefaults instantiates a new UpdateUserAccessData object -This constructor will only assign default values to properties that have it defined, -but it doesn't guarantee that properties required by API are set - -### GetIsAdmin - -`func (o *UpdateUserAccessData) GetIsAdmin() bool` - -GetIsAdmin returns the IsAdmin field if non-nil, zero value otherwise. - -### GetIsAdminOk - -`func (o *UpdateUserAccessData) GetIsAdminOk() (*bool, bool)` - -GetIsAdminOk returns a tuple with the IsAdmin field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetIsAdmin - -`func (o *UpdateUserAccessData) SetIsAdmin(v bool)` - -SetIsAdmin sets IsAdmin field to given value. - -### HasIsAdmin - -`func (o *UpdateUserAccessData) HasIsAdmin() bool` - -HasIsAdmin returns a boolean if a field has been set. - - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - - diff --git a/components/fctl/membershipclient/docs/Version.md b/components/fctl/membershipclient/docs/Version.md new file mode 100644 index 0000000000..30baa329bb --- /dev/null +++ b/components/fctl/membershipclient/docs/Version.md @@ -0,0 +1,72 @@ +# Version + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Name** | **string** | | +**Versions** | **map[string]string** | | + +## Methods + +### NewVersion + +`func NewVersion(name string, versions map[string]string, ) *Version` + +NewVersion instantiates a new Version object +This constructor will assign default values to properties that have it defined, +and makes sure properties required by API are set, but the set of arguments +will change when the set of required properties is changed + +### NewVersionWithDefaults + +`func NewVersionWithDefaults() *Version` + +NewVersionWithDefaults instantiates a new Version object +This constructor will only assign default values to properties that have it defined, +but it doesn't guarantee that properties required by API are set + +### GetName + +`func (o *Version) GetName() string` + +GetName returns the Name field if non-nil, zero value otherwise. + +### GetNameOk + +`func (o *Version) GetNameOk() (*string, bool)` + +GetNameOk returns a tuple with the Name field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetName + +`func (o *Version) SetName(v string)` + +SetName sets Name field to given value. + + +### GetVersions + +`func (o *Version) GetVersions() map[string]string` + +GetVersions returns the Versions field if non-nil, zero value otherwise. + +### GetVersionsOk + +`func (o *Version) GetVersionsOk() (*map[string]string, bool)` + +GetVersionsOk returns a tuple with the Versions field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetVersions + +`func (o *Version) SetVersions(v map[string]string)` + +SetVersions sets Versions field to given value. + + + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/components/fctl/membershipclient/go.sum b/components/fctl/membershipclient/go.sum index 3dee6d6816..734252e681 100644 --- a/components/fctl/membershipclient/go.sum +++ b/components/fctl/membershipclient/go.sum @@ -1,360 +1,13 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e h1:bRhVy7zSSasaqNksaRZiA5EEI+Ei4I1nO5Jh72wfHlg= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210323180902-22b0adad7558/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/components/fctl/membershipclient/model_billing_portal.go b/components/fctl/membershipclient/model_billing_portal.go deleted file mode 100644 index 04b581c4e5..0000000000 --- a/components/fctl/membershipclient/model_billing_portal.go +++ /dev/null @@ -1,118 +0,0 @@ -/* -Membership API - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: 0.1.0 -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package membershipclient - -import ( - "encoding/json" -) - -// checks if the BillingPortal type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &BillingPortal{} - -// BillingPortal struct for BillingPortal -type BillingPortal struct { - // Billing portal URL - Url string `json:"url"` -} - -// NewBillingPortal instantiates a new BillingPortal object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewBillingPortal(url string) *BillingPortal { - this := BillingPortal{} - this.Url = url - return &this -} - -// NewBillingPortalWithDefaults instantiates a new BillingPortal object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewBillingPortalWithDefaults() *BillingPortal { - this := BillingPortal{} - return &this -} - -// GetUrl returns the Url field value -func (o *BillingPortal) GetUrl() string { - if o == nil { - var ret string - return ret - } - - return o.Url -} - -// GetUrlOk returns a tuple with the Url field value -// and a boolean to check if the value has been set. -func (o *BillingPortal) GetUrlOk() (*string, bool) { - if o == nil { - return nil, false - } - return &o.Url, true -} - -// SetUrl sets field value -func (o *BillingPortal) SetUrl(v string) { - o.Url = v -} - -func (o BillingPortal) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o BillingPortal) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - toSerialize["url"] = o.Url - return toSerialize, nil -} - -type NullableBillingPortal struct { - value *BillingPortal - isSet bool -} - -func (v NullableBillingPortal) Get() *BillingPortal { - return v.value -} - -func (v *NullableBillingPortal) Set(val *BillingPortal) { - v.value = val - v.isSet = true -} - -func (v NullableBillingPortal) IsSet() bool { - return v.isSet -} - -func (v *NullableBillingPortal) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableBillingPortal(val *BillingPortal) *NullableBillingPortal { - return &NullableBillingPortal{value: val, isSet: true} -} - -func (v NullableBillingPortal) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableBillingPortal) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/components/fctl/membershipclient/model_billing_portal_response.go b/components/fctl/membershipclient/model_billing_portal_response.go deleted file mode 100644 index 1983dedbd2..0000000000 --- a/components/fctl/membershipclient/model_billing_portal_response.go +++ /dev/null @@ -1,126 +0,0 @@ -/* -Membership API - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: 0.1.0 -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package membershipclient - -import ( - "encoding/json" -) - -// checks if the BillingPortalResponse type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &BillingPortalResponse{} - -// BillingPortalResponse struct for BillingPortalResponse -type BillingPortalResponse struct { - Data *BillingPortal `json:"data,omitempty"` -} - -// NewBillingPortalResponse instantiates a new BillingPortalResponse object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewBillingPortalResponse() *BillingPortalResponse { - this := BillingPortalResponse{} - return &this -} - -// NewBillingPortalResponseWithDefaults instantiates a new BillingPortalResponse object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewBillingPortalResponseWithDefaults() *BillingPortalResponse { - this := BillingPortalResponse{} - return &this -} - -// GetData returns the Data field value if set, zero value otherwise. -func (o *BillingPortalResponse) GetData() BillingPortal { - if o == nil || IsNil(o.Data) { - var ret BillingPortal - return ret - } - return *o.Data -} - -// GetDataOk returns a tuple with the Data field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *BillingPortalResponse) GetDataOk() (*BillingPortal, bool) { - if o == nil || IsNil(o.Data) { - return nil, false - } - return o.Data, true -} - -// HasData returns a boolean if a field has been set. -func (o *BillingPortalResponse) HasData() bool { - if o != nil && !IsNil(o.Data) { - return true - } - - return false -} - -// SetData gets a reference to the given BillingPortal and assigns it to the Data field. -func (o *BillingPortalResponse) SetData(v BillingPortal) { - o.Data = &v -} - -func (o BillingPortalResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o BillingPortalResponse) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Data) { - toSerialize["data"] = o.Data - } - return toSerialize, nil -} - -type NullableBillingPortalResponse struct { - value *BillingPortalResponse - isSet bool -} - -func (v NullableBillingPortalResponse) Get() *BillingPortalResponse { - return v.value -} - -func (v *NullableBillingPortalResponse) Set(val *BillingPortalResponse) { - v.value = val - v.isSet = true -} - -func (v NullableBillingPortalResponse) IsSet() bool { - return v.isSet -} - -func (v *NullableBillingPortalResponse) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableBillingPortalResponse(val *BillingPortalResponse) *NullableBillingPortalResponse { - return &NullableBillingPortalResponse{value: val, isSet: true} -} - -func (v NullableBillingPortalResponse) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableBillingPortalResponse) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/components/fctl/membershipclient/model_billing_setup.go b/components/fctl/membershipclient/model_billing_setup.go deleted file mode 100644 index b2727717fd..0000000000 --- a/components/fctl/membershipclient/model_billing_setup.go +++ /dev/null @@ -1,118 +0,0 @@ -/* -Membership API - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: 0.1.0 -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package membershipclient - -import ( - "encoding/json" -) - -// checks if the BillingSetup type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &BillingSetup{} - -// BillingSetup struct for BillingSetup -type BillingSetup struct { - // Billing portal URL - Url string `json:"url"` -} - -// NewBillingSetup instantiates a new BillingSetup object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewBillingSetup(url string) *BillingSetup { - this := BillingSetup{} - this.Url = url - return &this -} - -// NewBillingSetupWithDefaults instantiates a new BillingSetup object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewBillingSetupWithDefaults() *BillingSetup { - this := BillingSetup{} - return &this -} - -// GetUrl returns the Url field value -func (o *BillingSetup) GetUrl() string { - if o == nil { - var ret string - return ret - } - - return o.Url -} - -// GetUrlOk returns a tuple with the Url field value -// and a boolean to check if the value has been set. -func (o *BillingSetup) GetUrlOk() (*string, bool) { - if o == nil { - return nil, false - } - return &o.Url, true -} - -// SetUrl sets field value -func (o *BillingSetup) SetUrl(v string) { - o.Url = v -} - -func (o BillingSetup) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o BillingSetup) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - toSerialize["url"] = o.Url - return toSerialize, nil -} - -type NullableBillingSetup struct { - value *BillingSetup - isSet bool -} - -func (v NullableBillingSetup) Get() *BillingSetup { - return v.value -} - -func (v *NullableBillingSetup) Set(val *BillingSetup) { - v.value = val - v.isSet = true -} - -func (v NullableBillingSetup) IsSet() bool { - return v.isSet -} - -func (v *NullableBillingSetup) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableBillingSetup(val *BillingSetup) *NullableBillingSetup { - return &NullableBillingSetup{value: val, isSet: true} -} - -func (v NullableBillingSetup) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableBillingSetup) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/components/fctl/membershipclient/model_billing_setup_response.go b/components/fctl/membershipclient/model_billing_setup_response.go deleted file mode 100644 index af8756188e..0000000000 --- a/components/fctl/membershipclient/model_billing_setup_response.go +++ /dev/null @@ -1,126 +0,0 @@ -/* -Membership API - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: 0.1.0 -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package membershipclient - -import ( - "encoding/json" -) - -// checks if the BillingSetupResponse type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &BillingSetupResponse{} - -// BillingSetupResponse struct for BillingSetupResponse -type BillingSetupResponse struct { - Data *BillingSetup `json:"data,omitempty"` -} - -// NewBillingSetupResponse instantiates a new BillingSetupResponse object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewBillingSetupResponse() *BillingSetupResponse { - this := BillingSetupResponse{} - return &this -} - -// NewBillingSetupResponseWithDefaults instantiates a new BillingSetupResponse object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewBillingSetupResponseWithDefaults() *BillingSetupResponse { - this := BillingSetupResponse{} - return &this -} - -// GetData returns the Data field value if set, zero value otherwise. -func (o *BillingSetupResponse) GetData() BillingSetup { - if o == nil || IsNil(o.Data) { - var ret BillingSetup - return ret - } - return *o.Data -} - -// GetDataOk returns a tuple with the Data field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *BillingSetupResponse) GetDataOk() (*BillingSetup, bool) { - if o == nil || IsNil(o.Data) { - return nil, false - } - return o.Data, true -} - -// HasData returns a boolean if a field has been set. -func (o *BillingSetupResponse) HasData() bool { - if o != nil && !IsNil(o.Data) { - return true - } - - return false -} - -// SetData gets a reference to the given BillingSetup and assigns it to the Data field. -func (o *BillingSetupResponse) SetData(v BillingSetup) { - o.Data = &v -} - -func (o BillingSetupResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o BillingSetupResponse) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Data) { - toSerialize["data"] = o.Data - } - return toSerialize, nil -} - -type NullableBillingSetupResponse struct { - value *BillingSetupResponse - isSet bool -} - -func (v NullableBillingSetupResponse) Get() *BillingSetupResponse { - return v.value -} - -func (v *NullableBillingSetupResponse) Set(val *BillingSetupResponse) { - v.value = val - v.isSet = true -} - -func (v NullableBillingSetupResponse) IsSet() bool { - return v.isSet -} - -func (v *NullableBillingSetupResponse) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableBillingSetupResponse(val *BillingSetupResponse) *NullableBillingSetupResponse { - return &NullableBillingSetupResponse{value: val, isSet: true} -} - -func (v NullableBillingSetupResponse) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableBillingSetupResponse) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/components/fctl/membershipclient/model_get_region_versions_response.go b/components/fctl/membershipclient/model_get_region_versions_response.go new file mode 100644 index 0000000000..1ab1643d31 --- /dev/null +++ b/components/fctl/membershipclient/model_get_region_versions_response.go @@ -0,0 +1,117 @@ +/* +Membership API + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package membershipclient + +import ( + "encoding/json" +) + +// checks if the GetRegionVersionsResponse type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &GetRegionVersionsResponse{} + +// GetRegionVersionsResponse struct for GetRegionVersionsResponse +type GetRegionVersionsResponse struct { + Data []Version `json:"data"` +} + +// NewGetRegionVersionsResponse instantiates a new GetRegionVersionsResponse object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewGetRegionVersionsResponse(data []Version) *GetRegionVersionsResponse { + this := GetRegionVersionsResponse{} + this.Data = data + return &this +} + +// NewGetRegionVersionsResponseWithDefaults instantiates a new GetRegionVersionsResponse object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewGetRegionVersionsResponseWithDefaults() *GetRegionVersionsResponse { + this := GetRegionVersionsResponse{} + return &this +} + +// GetData returns the Data field value +func (o *GetRegionVersionsResponse) GetData() []Version { + if o == nil { + var ret []Version + return ret + } + + return o.Data +} + +// GetDataOk returns a tuple with the Data field value +// and a boolean to check if the value has been set. +func (o *GetRegionVersionsResponse) GetDataOk() ([]Version, bool) { + if o == nil { + return nil, false + } + return o.Data, true +} + +// SetData sets field value +func (o *GetRegionVersionsResponse) SetData(v []Version) { + o.Data = v +} + +func (o GetRegionVersionsResponse) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o GetRegionVersionsResponse) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["data"] = o.Data + return toSerialize, nil +} + +type NullableGetRegionVersionsResponse struct { + value *GetRegionVersionsResponse + isSet bool +} + +func (v NullableGetRegionVersionsResponse) Get() *GetRegionVersionsResponse { + return v.value +} + +func (v *NullableGetRegionVersionsResponse) Set(val *GetRegionVersionsResponse) { + v.value = val + v.isSet = true +} + +func (v NullableGetRegionVersionsResponse) IsSet() bool { + return v.isSet +} + +func (v *NullableGetRegionVersionsResponse) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableGetRegionVersionsResponse(val *GetRegionVersionsResponse) *NullableGetRegionVersionsResponse { + return &NullableGetRegionVersionsResponse{value: val, isSet: true} +} + +func (v NullableGetRegionVersionsResponse) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableGetRegionVersionsResponse) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/components/fctl/membershipclient/model_stack_user_access.go b/components/fctl/membershipclient/model_stack_user_access.go new file mode 100644 index 0000000000..fcf8044c62 --- /dev/null +++ b/components/fctl/membershipclient/model_stack_user_access.go @@ -0,0 +1,182 @@ +/* +Membership API + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package membershipclient + +import ( + "encoding/json" +) + +// checks if the StackUserAccess type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &StackUserAccess{} + +// StackUserAccess struct for StackUserAccess +type StackUserAccess struct { + Roles []string `json:"roles,omitempty"` + // Stack ID + StackId string `json:"stackId"` + // User ID + UserId string `json:"userId"` +} + +// NewStackUserAccess instantiates a new StackUserAccess object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewStackUserAccess(stackId string, userId string) *StackUserAccess { + this := StackUserAccess{} + this.StackId = stackId + this.UserId = userId + return &this +} + +// NewStackUserAccessWithDefaults instantiates a new StackUserAccess object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewStackUserAccessWithDefaults() *StackUserAccess { + this := StackUserAccess{} + return &this +} + +// GetRoles returns the Roles field value if set, zero value otherwise. +func (o *StackUserAccess) GetRoles() []string { + if o == nil || IsNil(o.Roles) { + var ret []string + return ret + } + return o.Roles +} + +// GetRolesOk returns a tuple with the Roles field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *StackUserAccess) GetRolesOk() ([]string, bool) { + if o == nil || IsNil(o.Roles) { + return nil, false + } + return o.Roles, true +} + +// HasRoles returns a boolean if a field has been set. +func (o *StackUserAccess) HasRoles() bool { + if o != nil && !IsNil(o.Roles) { + return true + } + + return false +} + +// SetRoles gets a reference to the given []string and assigns it to the Roles field. +func (o *StackUserAccess) SetRoles(v []string) { + o.Roles = v +} + +// GetStackId returns the StackId field value +func (o *StackUserAccess) GetStackId() string { + if o == nil { + var ret string + return ret + } + + return o.StackId +} + +// GetStackIdOk returns a tuple with the StackId field value +// and a boolean to check if the value has been set. +func (o *StackUserAccess) GetStackIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.StackId, true +} + +// SetStackId sets field value +func (o *StackUserAccess) SetStackId(v string) { + o.StackId = v +} + +// GetUserId returns the UserId field value +func (o *StackUserAccess) GetUserId() string { + if o == nil { + var ret string + return ret + } + + return o.UserId +} + +// GetUserIdOk returns a tuple with the UserId field value +// and a boolean to check if the value has been set. +func (o *StackUserAccess) GetUserIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.UserId, true +} + +// SetUserId sets field value +func (o *StackUserAccess) SetUserId(v string) { + o.UserId = v +} + +func (o StackUserAccess) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o StackUserAccess) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Roles) { + toSerialize["roles"] = o.Roles + } + toSerialize["stackId"] = o.StackId + toSerialize["userId"] = o.UserId + return toSerialize, nil +} + +type NullableStackUserAccess struct { + value *StackUserAccess + isSet bool +} + +func (v NullableStackUserAccess) Get() *StackUserAccess { + return v.value +} + +func (v *NullableStackUserAccess) Set(val *StackUserAccess) { + v.value = val + v.isSet = true +} + +func (v NullableStackUserAccess) IsSet() bool { + return v.isSet +} + +func (v *NullableStackUserAccess) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableStackUserAccess(val *StackUserAccess) *NullableStackUserAccess { + return &NullableStackUserAccess{value: val, isSet: true} +} + +func (v NullableStackUserAccess) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableStackUserAccess) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/components/fctl/membershipclient/model_stack_user_access_all_of.go b/components/fctl/membershipclient/model_stack_user_access_all_of.go new file mode 100644 index 0000000000..f15d2556b8 --- /dev/null +++ b/components/fctl/membershipclient/model_stack_user_access_all_of.go @@ -0,0 +1,126 @@ +/* +Membership API + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package membershipclient + +import ( + "encoding/json" +) + +// checks if the StackUserAccessAllOf type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &StackUserAccessAllOf{} + +// StackUserAccessAllOf struct for StackUserAccessAllOf +type StackUserAccessAllOf struct { + Roles []string `json:"roles,omitempty"` +} + +// NewStackUserAccessAllOf instantiates a new StackUserAccessAllOf object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewStackUserAccessAllOf() *StackUserAccessAllOf { + this := StackUserAccessAllOf{} + return &this +} + +// NewStackUserAccessAllOfWithDefaults instantiates a new StackUserAccessAllOf object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewStackUserAccessAllOfWithDefaults() *StackUserAccessAllOf { + this := StackUserAccessAllOf{} + return &this +} + +// GetRoles returns the Roles field value if set, zero value otherwise. +func (o *StackUserAccessAllOf) GetRoles() []string { + if o == nil || IsNil(o.Roles) { + var ret []string + return ret + } + return o.Roles +} + +// GetRolesOk returns a tuple with the Roles field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *StackUserAccessAllOf) GetRolesOk() ([]string, bool) { + if o == nil || IsNil(o.Roles) { + return nil, false + } + return o.Roles, true +} + +// HasRoles returns a boolean if a field has been set. +func (o *StackUserAccessAllOf) HasRoles() bool { + if o != nil && !IsNil(o.Roles) { + return true + } + + return false +} + +// SetRoles gets a reference to the given []string and assigns it to the Roles field. +func (o *StackUserAccessAllOf) SetRoles(v []string) { + o.Roles = v +} + +func (o StackUserAccessAllOf) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o StackUserAccessAllOf) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Roles) { + toSerialize["roles"] = o.Roles + } + return toSerialize, nil +} + +type NullableStackUserAccessAllOf struct { + value *StackUserAccessAllOf + isSet bool +} + +func (v NullableStackUserAccessAllOf) Get() *StackUserAccessAllOf { + return v.value +} + +func (v *NullableStackUserAccessAllOf) Set(val *StackUserAccessAllOf) { + v.value = val + v.isSet = true +} + +func (v NullableStackUserAccessAllOf) IsSet() bool { + return v.isSet +} + +func (v *NullableStackUserAccessAllOf) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableStackUserAccessAllOf(val *StackUserAccessAllOf) *NullableStackUserAccessAllOf { + return &NullableStackUserAccessAllOf{value: val, isSet: true} +} + +func (v NullableStackUserAccessAllOf) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableStackUserAccessAllOf) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/components/fctl/membershipclient/model_stack_user_access_all_of_1.go b/components/fctl/membershipclient/model_stack_user_access_all_of_1.go new file mode 100644 index 0000000000..eb6c9e91f8 --- /dev/null +++ b/components/fctl/membershipclient/model_stack_user_access_all_of_1.go @@ -0,0 +1,146 @@ +/* +Membership API + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package membershipclient + +import ( + "encoding/json" +) + +// checks if the StackUserAccessAllOf1 type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &StackUserAccessAllOf1{} + +// StackUserAccessAllOf1 struct for StackUserAccessAllOf1 +type StackUserAccessAllOf1 struct { + // Stack ID + StackId string `json:"stackId"` + // User ID + UserId string `json:"userId"` +} + +// NewStackUserAccessAllOf1 instantiates a new StackUserAccessAllOf1 object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewStackUserAccessAllOf1(stackId string, userId string) *StackUserAccessAllOf1 { + this := StackUserAccessAllOf1{} + this.StackId = stackId + this.UserId = userId + return &this +} + +// NewStackUserAccessAllOf1WithDefaults instantiates a new StackUserAccessAllOf1 object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewStackUserAccessAllOf1WithDefaults() *StackUserAccessAllOf1 { + this := StackUserAccessAllOf1{} + return &this +} + +// GetStackId returns the StackId field value +func (o *StackUserAccessAllOf1) GetStackId() string { + if o == nil { + var ret string + return ret + } + + return o.StackId +} + +// GetStackIdOk returns a tuple with the StackId field value +// and a boolean to check if the value has been set. +func (o *StackUserAccessAllOf1) GetStackIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.StackId, true +} + +// SetStackId sets field value +func (o *StackUserAccessAllOf1) SetStackId(v string) { + o.StackId = v +} + +// GetUserId returns the UserId field value +func (o *StackUserAccessAllOf1) GetUserId() string { + if o == nil { + var ret string + return ret + } + + return o.UserId +} + +// GetUserIdOk returns a tuple with the UserId field value +// and a boolean to check if the value has been set. +func (o *StackUserAccessAllOf1) GetUserIdOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.UserId, true +} + +// SetUserId sets field value +func (o *StackUserAccessAllOf1) SetUserId(v string) { + o.UserId = v +} + +func (o StackUserAccessAllOf1) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o StackUserAccessAllOf1) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["stackId"] = o.StackId + toSerialize["userId"] = o.UserId + return toSerialize, nil +} + +type NullableStackUserAccessAllOf1 struct { + value *StackUserAccessAllOf1 + isSet bool +} + +func (v NullableStackUserAccessAllOf1) Get() *StackUserAccessAllOf1 { + return v.value +} + +func (v *NullableStackUserAccessAllOf1) Set(val *StackUserAccessAllOf1) { + v.value = val + v.isSet = true +} + +func (v NullableStackUserAccessAllOf1) IsSet() bool { + return v.isSet +} + +func (v *NullableStackUserAccessAllOf1) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableStackUserAccessAllOf1(val *StackUserAccessAllOf1) *NullableStackUserAccessAllOf1 { + return &NullableStackUserAccessAllOf1{value: val, isSet: true} +} + +func (v NullableStackUserAccessAllOf1) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableStackUserAccessAllOf1) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/components/fctl/membershipclient/model_stack_user_access_response.go b/components/fctl/membershipclient/model_stack_user_access_response.go new file mode 100644 index 0000000000..cba9560bbd --- /dev/null +++ b/components/fctl/membershipclient/model_stack_user_access_response.go @@ -0,0 +1,126 @@ +/* +Membership API + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package membershipclient + +import ( + "encoding/json" +) + +// checks if the StackUserAccessResponse type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &StackUserAccessResponse{} + +// StackUserAccessResponse struct for StackUserAccessResponse +type StackUserAccessResponse struct { + Data []StackUserAccess `json:"data,omitempty"` +} + +// NewStackUserAccessResponse instantiates a new StackUserAccessResponse object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewStackUserAccessResponse() *StackUserAccessResponse { + this := StackUserAccessResponse{} + return &this +} + +// NewStackUserAccessResponseWithDefaults instantiates a new StackUserAccessResponse object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewStackUserAccessResponseWithDefaults() *StackUserAccessResponse { + this := StackUserAccessResponse{} + return &this +} + +// GetData returns the Data field value if set, zero value otherwise. +func (o *StackUserAccessResponse) GetData() []StackUserAccess { + if o == nil || IsNil(o.Data) { + var ret []StackUserAccess + return ret + } + return o.Data +} + +// GetDataOk returns a tuple with the Data field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *StackUserAccessResponse) GetDataOk() ([]StackUserAccess, bool) { + if o == nil || IsNil(o.Data) { + return nil, false + } + return o.Data, true +} + +// HasData returns a boolean if a field has been set. +func (o *StackUserAccessResponse) HasData() bool { + if o != nil && !IsNil(o.Data) { + return true + } + + return false +} + +// SetData gets a reference to the given []StackUserAccess and assigns it to the Data field. +func (o *StackUserAccessResponse) SetData(v []StackUserAccess) { + o.Data = v +} + +func (o StackUserAccessResponse) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o StackUserAccessResponse) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + if !IsNil(o.Data) { + toSerialize["data"] = o.Data + } + return toSerialize, nil +} + +type NullableStackUserAccessResponse struct { + value *StackUserAccessResponse + isSet bool +} + +func (v NullableStackUserAccessResponse) Get() *StackUserAccessResponse { + return v.value +} + +func (v *NullableStackUserAccessResponse) Set(val *StackUserAccessResponse) { + v.value = val + v.isSet = true +} + +func (v NullableStackUserAccessResponse) IsSet() bool { + return v.isSet +} + +func (v *NullableStackUserAccessResponse) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableStackUserAccessResponse(val *StackUserAccessResponse) *NullableStackUserAccessResponse { + return &NullableStackUserAccessResponse{value: val, isSet: true} +} + +func (v NullableStackUserAccessResponse) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableStackUserAccessResponse) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/components/fctl/membershipclient/model_updatable_user_data.go b/components/fctl/membershipclient/model_updatable_user_data.go deleted file mode 100644 index 3b8baafaf8..0000000000 --- a/components/fctl/membershipclient/model_updatable_user_data.go +++ /dev/null @@ -1,126 +0,0 @@ -/* -Membership API - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: 0.1.0 -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package membershipclient - -import ( - "encoding/json" -) - -// checks if the UpdatableUserData type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &UpdatableUserData{} - -// UpdatableUserData struct for UpdatableUserData -type UpdatableUserData struct { - Metadata *map[string]string `json:"metadata,omitempty"` -} - -// NewUpdatableUserData instantiates a new UpdatableUserData object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewUpdatableUserData() *UpdatableUserData { - this := UpdatableUserData{} - return &this -} - -// NewUpdatableUserDataWithDefaults instantiates a new UpdatableUserData object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewUpdatableUserDataWithDefaults() *UpdatableUserData { - this := UpdatableUserData{} - return &this -} - -// GetMetadata returns the Metadata field value if set, zero value otherwise. -func (o *UpdatableUserData) GetMetadata() map[string]string { - if o == nil || IsNil(o.Metadata) { - var ret map[string]string - return ret - } - return *o.Metadata -} - -// GetMetadataOk returns a tuple with the Metadata field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *UpdatableUserData) GetMetadataOk() (*map[string]string, bool) { - if o == nil || IsNil(o.Metadata) { - return nil, false - } - return o.Metadata, true -} - -// HasMetadata returns a boolean if a field has been set. -func (o *UpdatableUserData) HasMetadata() bool { - if o != nil && !IsNil(o.Metadata) { - return true - } - - return false -} - -// SetMetadata gets a reference to the given map[string]string and assigns it to the Metadata field. -func (o *UpdatableUserData) SetMetadata(v map[string]string) { - o.Metadata = &v -} - -func (o UpdatableUserData) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o UpdatableUserData) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.Metadata) { - toSerialize["metadata"] = o.Metadata - } - return toSerialize, nil -} - -type NullableUpdatableUserData struct { - value *UpdatableUserData - isSet bool -} - -func (v NullableUpdatableUserData) Get() *UpdatableUserData { - return v.value -} - -func (v *NullableUpdatableUserData) Set(val *UpdatableUserData) { - v.value = val - v.isSet = true -} - -func (v NullableUpdatableUserData) IsSet() bool { - return v.isSet -} - -func (v *NullableUpdatableUserData) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableUpdatableUserData(val *UpdatableUserData) *NullableUpdatableUserData { - return &NullableUpdatableUserData{value: val, isSet: true} -} - -func (v NullableUpdatableUserData) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableUpdatableUserData) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/components/fctl/membershipclient/model_update_user_access_data.go b/components/fctl/membershipclient/model_update_user_access_data.go deleted file mode 100644 index ffb55813b8..0000000000 --- a/components/fctl/membershipclient/model_update_user_access_data.go +++ /dev/null @@ -1,127 +0,0 @@ -/* -Membership API - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: 0.1.0 -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package membershipclient - -import ( - "encoding/json" -) - -// checks if the UpdateUserAccessData type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &UpdateUserAccessData{} - -// UpdateUserAccessData struct for UpdateUserAccessData -type UpdateUserAccessData struct { - // Is the user an admin of the organization - IsAdmin *bool `json:"isAdmin,omitempty"` -} - -// NewUpdateUserAccessData instantiates a new UpdateUserAccessData object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewUpdateUserAccessData() *UpdateUserAccessData { - this := UpdateUserAccessData{} - return &this -} - -// NewUpdateUserAccessDataWithDefaults instantiates a new UpdateUserAccessData object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewUpdateUserAccessDataWithDefaults() *UpdateUserAccessData { - this := UpdateUserAccessData{} - return &this -} - -// GetIsAdmin returns the IsAdmin field value if set, zero value otherwise. -func (o *UpdateUserAccessData) GetIsAdmin() bool { - if o == nil || IsNil(o.IsAdmin) { - var ret bool - return ret - } - return *o.IsAdmin -} - -// GetIsAdminOk returns a tuple with the IsAdmin field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *UpdateUserAccessData) GetIsAdminOk() (*bool, bool) { - if o == nil || IsNil(o.IsAdmin) { - return nil, false - } - return o.IsAdmin, true -} - -// HasIsAdmin returns a boolean if a field has been set. -func (o *UpdateUserAccessData) HasIsAdmin() bool { - if o != nil && !IsNil(o.IsAdmin) { - return true - } - - return false -} - -// SetIsAdmin gets a reference to the given bool and assigns it to the IsAdmin field. -func (o *UpdateUserAccessData) SetIsAdmin(v bool) { - o.IsAdmin = &v -} - -func (o UpdateUserAccessData) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o UpdateUserAccessData) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - if !IsNil(o.IsAdmin) { - toSerialize["isAdmin"] = o.IsAdmin - } - return toSerialize, nil -} - -type NullableUpdateUserAccessData struct { - value *UpdateUserAccessData - isSet bool -} - -func (v NullableUpdateUserAccessData) Get() *UpdateUserAccessData { - return v.value -} - -func (v *NullableUpdateUserAccessData) Set(val *UpdateUserAccessData) { - v.value = val - v.isSet = true -} - -func (v NullableUpdateUserAccessData) IsSet() bool { - return v.isSet -} - -func (v *NullableUpdateUserAccessData) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableUpdateUserAccessData(val *UpdateUserAccessData) *NullableUpdateUserAccessData { - return &NullableUpdateUserAccessData{value: val, isSet: true} -} - -func (v NullableUpdateUserAccessData) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableUpdateUserAccessData) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/components/fctl/membershipclient/model_update_user_response.go b/components/fctl/membershipclient/model_update_user_response.go deleted file mode 100644 index be55635bd8..0000000000 --- a/components/fctl/membershipclient/model_update_user_response.go +++ /dev/null @@ -1,117 +0,0 @@ -/* -Membership API - -No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) - -API version: 0.1.0 -*/ - -// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. - -package membershipclient - -import ( - "encoding/json" -) - -// checks if the UpdateUserResponse type satisfies the MappedNullable interface at compile time -var _ MappedNullable = &UpdateUserResponse{} - -// UpdateUserResponse struct for UpdateUserResponse -type UpdateUserResponse struct { - Data User `json:"data"` -} - -// NewUpdateUserResponse instantiates a new UpdateUserResponse object -// This constructor will assign default values to properties that have it defined, -// and makes sure properties required by API are set, but the set of arguments -// will change when the set of required properties is changed -func NewUpdateUserResponse(data User) *UpdateUserResponse { - this := UpdateUserResponse{} - this.Data = data - return &this -} - -// NewUpdateUserResponseWithDefaults instantiates a new UpdateUserResponse object -// This constructor will only assign default values to properties that have it defined, -// but it doesn't guarantee that properties required by API are set -func NewUpdateUserResponseWithDefaults() *UpdateUserResponse { - this := UpdateUserResponse{} - return &this -} - -// GetData returns the Data field value -func (o *UpdateUserResponse) GetData() User { - if o == nil { - var ret User - return ret - } - - return o.Data -} - -// GetDataOk returns a tuple with the Data field value -// and a boolean to check if the value has been set. -func (o *UpdateUserResponse) GetDataOk() (*User, bool) { - if o == nil { - return nil, false - } - return &o.Data, true -} - -// SetData sets field value -func (o *UpdateUserResponse) SetData(v User) { - o.Data = v -} - -func (o UpdateUserResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() - if err != nil { - return []byte{}, err - } - return json.Marshal(toSerialize) -} - -func (o UpdateUserResponse) ToMap() (map[string]interface{}, error) { - toSerialize := map[string]interface{}{} - toSerialize["data"] = o.Data - return toSerialize, nil -} - -type NullableUpdateUserResponse struct { - value *UpdateUserResponse - isSet bool -} - -func (v NullableUpdateUserResponse) Get() *UpdateUserResponse { - return v.value -} - -func (v *NullableUpdateUserResponse) Set(val *UpdateUserResponse) { - v.value = val - v.isSet = true -} - -func (v NullableUpdateUserResponse) IsSet() bool { - return v.isSet -} - -func (v *NullableUpdateUserResponse) Unset() { - v.value = nil - v.isSet = false -} - -func NewNullableUpdateUserResponse(val *UpdateUserResponse) *NullableUpdateUserResponse { - return &NullableUpdateUserResponse{value: val, isSet: true} -} - -func (v NullableUpdateUserResponse) MarshalJSON() ([]byte, error) { - return json.Marshal(v.value) -} - -func (v *NullableUpdateUserResponse) UnmarshalJSON(src []byte) error { - v.isSet = true - return json.Unmarshal(src, &v.value) -} - - diff --git a/components/fctl/membershipclient/model_version.go b/components/fctl/membershipclient/model_version.go new file mode 100644 index 0000000000..035060778a --- /dev/null +++ b/components/fctl/membershipclient/model_version.go @@ -0,0 +1,144 @@ +/* +Membership API + +No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + +API version: 0.1.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package membershipclient + +import ( + "encoding/json" +) + +// checks if the Version type satisfies the MappedNullable interface at compile time +var _ MappedNullable = &Version{} + +// Version struct for Version +type Version struct { + Name string `json:"name"` + Versions map[string]string `json:"versions"` +} + +// NewVersion instantiates a new Version object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewVersion(name string, versions map[string]string) *Version { + this := Version{} + this.Name = name + this.Versions = versions + return &this +} + +// NewVersionWithDefaults instantiates a new Version object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewVersionWithDefaults() *Version { + this := Version{} + return &this +} + +// GetName returns the Name field value +func (o *Version) GetName() string { + if o == nil { + var ret string + return ret + } + + return o.Name +} + +// GetNameOk returns a tuple with the Name field value +// and a boolean to check if the value has been set. +func (o *Version) GetNameOk() (*string, bool) { + if o == nil { + return nil, false + } + return &o.Name, true +} + +// SetName sets field value +func (o *Version) SetName(v string) { + o.Name = v +} + +// GetVersions returns the Versions field value +func (o *Version) GetVersions() map[string]string { + if o == nil { + var ret map[string]string + return ret + } + + return o.Versions +} + +// GetVersionsOk returns a tuple with the Versions field value +// and a boolean to check if the value has been set. +func (o *Version) GetVersionsOk() (*map[string]string, bool) { + if o == nil { + return nil, false + } + return &o.Versions, true +} + +// SetVersions sets field value +func (o *Version) SetVersions(v map[string]string) { + o.Versions = v +} + +func (o Version) MarshalJSON() ([]byte, error) { + toSerialize,err := o.ToMap() + if err != nil { + return []byte{}, err + } + return json.Marshal(toSerialize) +} + +func (o Version) ToMap() (map[string]interface{}, error) { + toSerialize := map[string]interface{}{} + toSerialize["name"] = o.Name + toSerialize["versions"] = o.Versions + return toSerialize, nil +} + +type NullableVersion struct { + value *Version + isSet bool +} + +func (v NullableVersion) Get() *Version { + return v.value +} + +func (v *NullableVersion) Set(val *Version) { + v.value = val + v.isSet = true +} + +func (v NullableVersion) IsSet() bool { + return v.isSet +} + +func (v *NullableVersion) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableVersion(val *Version) *NullableVersion { + return &NullableVersion{value: val, isSet: true} +} + +func (v NullableVersion) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableVersion) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} + + diff --git a/components/fctl/workflow.yaml b/components/fctl/workflow.yaml deleted file mode 100644 index 702427f0b9..0000000000 --- a/components/fctl/workflow.yaml +++ /dev/null @@ -1,27 +0,0 @@ ---- -stages: -- send: - source: - payment: - id: "${paymentID}" - destination: - account: - id: "${paymentID}:pending" - ledger: "${ledger}" - amount: - amount: "${amount}" - asset: "EUR/2" -- wait_event: - event: processed -- send: - source: - account: - id: "${paymentID}:pending" - ledger: "${ledger}" - destination: - account: - id: "${user}" - ledger: "${ledger}" - amount: - amount: "${amount}" - asset: "EUR/2" diff --git a/components/operator/internal/controllers/stack/testdata/monopod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/monopod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml index d4634f38de..b5a9fcf4d1 100644 --- a/components/operator/internal/controllers/stack/testdata/monopod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/monopod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/monopod-latest/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/monopod-latest/results/configmaps--v1/search-benthos-streams.yaml index faf22139cc..99b149e96b 100644 --- a/components/operator/internal/controllers/stack/testdata/monopod-latest/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/monopod-latest/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/monopod-ledgerv1/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/monopod-ledgerv1/results/configmaps--v1/search-benthos-streams.yaml index 4690e3b788..3591f216bf 100644 --- a/components/operator/internal/controllers/stack/testdata/monopod-ledgerv1/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/monopod-ledgerv1/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/monopod-payments-after-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/monopod-payments-after-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml index 28c51b8ace..c293590e51 100644 --- a/components/operator/internal/controllers/stack/testdata/monopod-payments-after-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/monopod-payments-after-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/monopod-payments-before-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/monopod-payments-before-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml index 96a473ccdc..1accc20e81 100644 --- a/components/operator/internal/controllers/stack/testdata/monopod-payments-before-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/monopod-payments-before-v1.0.0-alpha.6/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/monopod-search-before-v0.7.0/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/monopod-search-before-v0.7.0/results/configmaps--v1/search-benthos-streams.yaml index 2c7feeea6e..af881e985a 100644 --- a/components/operator/internal/controllers/stack/testdata/monopod-search-before-v0.7.0/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/monopod-search-before-v0.7.0/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-debug/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-debug/results/configmaps--v1/search-benthos-streams.yaml index 2616bf1aac..3d6a19484f 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-debug/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-debug/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-debug/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-debug/results/deployments-apps-v1/search-benthos.yaml index d3cce60c7b..a7f190c239 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-debug/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-debug/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml index 80e3206cca..04c1110e96 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/deployments-apps-v1/search-benthos.yaml index 04875be997..d13b5ed3ad 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-disabled-one-service/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/configmaps--v1/search-benthos-streams.yaml index d121a50cc5..41674e812f 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/deployments-apps-v1/search-benthos.yaml index c8a8681636..63cf56f61c 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-no-monitoring/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: iXL4EcTjD7D2Zkq9Qb1D6Bctp8pGhkzkiwtjjBeKSnU= + stack.formance.cloud/volumes-hash: EzO6HC1Z4jk4Ld2Ua4vIfjNEaYrtFQPY3G06P14GkrU= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/configmaps--v1/search-benthos-streams.yaml index b1abd6db78..afac799af1 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/deployments-apps-v1/search-benthos.yaml index f8e56a1b75..430a9b6ed9 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-check-scopes/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/configmaps--v1/search-benthos-streams.yaml index f1c8d7a954..43ab792fa8 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/deployments-apps-v1/search-benthos.yaml index d68261f5ce..960212c6d8 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-custom-registry/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/configmaps--v1/search-benthos-streams.yaml index d485f62506..bb650d12bc 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/deployments-apps-v1/search-benthos.yaml index adb5ff874b..a8a6dcbda6 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-gateway-fallback/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/configmaps--v1/search-benthos-streams.yaml index 71a3dd88f7..2abc68bab8 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/deployments-apps-v1/search-benthos.yaml index c330b417fb..fdd4337658 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest-with-secrets/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest/results/configmaps--v1/search-benthos-streams.yaml index 661889f435..63a287cfae 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-latest/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-latest/results/deployments-apps-v1/search-benthos.yaml index 9c79a4a79b..4c8f8c5cdb 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-latest/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-latest/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/configmaps--v1/search-benthos-streams.yaml index a157d515f7..ad9e5db172 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/deployments-apps-v1/search-benthos.yaml index 53f5f4dc24..7c886c8fa5 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-orchestration-v0.2.0/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: zAMPIto8AXFdiwdNiCVG3o8e_2plT6XlsIrrlxf0NcA= + stack.formance.cloud/volumes-hash: Zas1IqJbhfN4PIGns5xxVW6s2zu7A-qQ0uJgR82mbNQ= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/configmaps--v1/search-benthos-streams.yaml index e4c0885e48..76f2d33b1f 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/deployments-apps-v1/search-benthos.yaml index 4a1be92a3f..f917588e71 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-service-annotation/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: iXL4EcTjD7D2Zkq9Qb1D6Bctp8pGhkzkiwtjjBeKSnU= + stack.formance.cloud/volumes-hash: EzO6HC1Z4jk4Ld2Ua4vIfjNEaYrtFQPY3G06P14GkrU= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/configmaps--v1/search-benthos-streams.yaml index 9bc3d1776f..91bdd5e8ea 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/deployments-apps-v1/search-benthos.yaml index 360c6d3e42..c2316172ad 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log-unvalid-tag/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: ohqyd8i40N1OhA-WN_ifFolSeJokKiFPJd4m-8X3ybA= + stack.formance.cloud/volumes-hash: N51Q5ybfoJgUQ5aJzKW0j9antWOEQn2YykvrD29h3no= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/configmaps--v1/search-benthos-streams.yaml index eb22c15698..01e166ba7e 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/deployments-apps-v1/search-benthos.yaml index 138f43b459..f57a47856c 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-with-audit-log/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: ohqyd8i40N1OhA-WN_ifFolSeJokKiFPJd4m-8X3ybA= + stack.formance.cloud/volumes-hash: N51Q5ybfoJgUQ5aJzKW0j9antWOEQn2YykvrD29h3no= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos diff --git a/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/configmaps--v1/search-benthos-streams.yaml b/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/configmaps--v1/search-benthos-streams.yaml index 3291204469..9cc26077e0 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/configmaps--v1/search-benthos-streams.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/configmaps--v1/search-benthos-streams.yaml @@ -1,6 +1,6 @@ apiVersion: v1 data: - ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: \"\\\"\" + item.value.string() + \"\\\"\" },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" + ledger_ingestion_v1.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search\n\npipeline:\n processors:\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v1\n processors:\n - bloblang: |\n map account {\n root = this.map_each(v -> v.value.map_each(v2 -> {\n \"action\": \"upsert\",\n \"id\": v.key,\n \"document\": {\n \"data\": {\n \"address\": v.key\n },\n \"indexed\": {\n \"address\": v.key\n },\n \"kind\": \"ACCOUNT\"\n }\n }).values()).values().flatten()\n }\n\n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"%s\".format(this.txid),\n \"document\": {\n \"data\": {\n \"postings\": this.postings,\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"metadata\": if this.metadata { this.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.reference,\n \"txid\": this.txid,\n \"timestamp\": this.timestamp,\n \"asset\": this.postings.map_each(p -> p.asset),\n \"source\": this.postings.map_each(p -> p.source),\n \"destination\": this.postings.map_each(p -> p.destination),\n \"amount\": this.postings.map_each(p -> if p.asset.contains(\"/\") {\n [\n p.amount,\n p.amount / if p.asset.split(\"/\").index(1).number(){ range(0, p.asset.split(\"/\").index(1).number()).fold(1, t -> t.tally * 10) } else { 1 } # amount / pow(10, decimal part of asset)\n ]\n } else { [ p.amount ] }).flatten().map_each(v -> \"%v\".format(v))\n },\n \"kind\": \"TRANSACTION\"\n }\n }\n }\n\n map committedTransactions {\n root = [\n this.payload.transactions.map_each(t -> t.apply(\"tx\")).map_each(t -> t.assign({\n \"id\": \"TRANSACTION-%s-%s\".format(this.payload.ledger, t.id)\n })),\n this.payload.transactions.map_each(t -> t.postings.map_each(p -> [{\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.source),\n \"document\": {\n \"data\": {\n \"address\": p.source,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.source\n },\n \"kind\": \"ACCOUNT\"\n }\n }, {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, p.destination),\n \"document\": {\n \"data\": {\n \"address\": p.destination,\n \"metadata\": {}\n },\n \"indexed\": {\n \"address\": p.destination\n },\n \"kind\": \"ACCOUNT\"\n }\n }])).flatten().flatten()\n ].flatten().map_each(t -> t.merge({\n \"document\": {\n \"when\": this.date,\n \"ledger\": this.payload.ledger,\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger\n }\n },\n }))\n }\n\n root = this.apply(\"committedTransactions\")\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v1\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value.string() + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value.string() + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": {\n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value.string() },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n\noutput:\n resource: elasticsearch\n" ledger_ingestion_v2.yaml: "input:\n event_bus:\n topic: ledger\n consumer_group: search-ledgerv2\n\npipeline:\n processors:\n - log:\n message: \"receive message: ${! this }\"\n - switch_event_type:\n events:\n - label: COMMITTED_TRANSACTIONS\n version: v2\n processors:\n - bloblang: |\n map amount {\n root = [this.amount]\n let hasDecimals = this.asset.split(\"/\").length() > 1\n let decimals = if $hasDecimals { this.asset.split(\"/\").index(1).number() } else { 0 }\n root = if $decimals > 0 {\n root.append(\n this.amount / range(0, $decimals).fold(1, t -> t.tally * 10) # Just a pow...\n )\n }\n root = root.flatten()\n }\n \n map tx {\n root = {\n \"action\": \"index\",\n \"id\": \"TRANSACTION-%s-%s\".format(this.ledger, this.transaction.id),\n \"document\": {\n \"data\": {\n \"postings\": this.transaction.postings,\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"metadata\": if this.transaction.metadata { this.transaction.metadata } else {{}}\n },\n \"indexed\": {\n \"reference\": this.transaction.reference,\n \"txid\": this.transaction.id,\n \"timestamp\": this.transaction.timestamp,\n \"asset\": this.transaction.postings.map_each(p -> p.asset),\n \"source\": this.transaction.postings.map_each(p -> p.source),\n \"destination\": this.transaction.postings.map_each(p -> p.destination),\n \"amount\": this.transaction.postings.map_each(p -> p.apply(\"amount\"))\n },\n \"kind\": \"TRANSACTION\",\n \"when\": this.date\n }\n }\n }\n \n map account {\n root = {\n \"action\": \"upsert\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.ledger, this.account),\n \"document\": {\n \"data\": { \n \"address\": this.account,\n \"metadata\": {}\n },\n \"indexed\": { \n \"address\": this.account\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }\n }\n \n root = []\n root = root.append(\n this.payload.transactions.map_each(transaction -> {\n \"transaction\": transaction,\n \"ledger\": this.payload.ledger\n }.apply(\"tx\"))\n )\n root = root.append(\n this.payload.transactions.\n map_each(transaction -> transaction.postings.map_each(posting -> [\n posting.source,\n posting.destination\n ]).\n flatten().\n map_each(account -> {\n \"account\": account,\n \"ledger\": this.payload.ledger\n }.apply(\"account\"))\n ).\n flatten()\n )\n root = root.append(\n this.payload.accountMetadata.map_each(item -> item.value.map_each(metadata -> {\n \"script\": \"ctx._source.data.metadata[\\\"\" + metadata.key + \"\\\"]=\\\"\" + metadata.value + \"\\\"\",\n \"action\": \"update\",\n \"id\": \"ACCOUNT-%s-%s\".format(this.payload.ledger, item.key),\n \"upsert\": {\n \"data\": { \n \"address\": item.key,\n \"metadata\": { metadata.key: metadata.value }\n },\n \"indexed\": { \n \"address\": item.key\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()).values().flatten()\n )\n root = root.flatten()\n \n let overlay = {\n \"data\": {\n \"ledger\": this.payload.ledger\n },\n \"indexed\": {\n \"ledger\": this.payload.ledger \n }\n }\n \n root = root.map_each(cmd -> match cmd.action {\n cmd.action == \"update\" => if cmd.exists(\"upsert\") { cmd.merge({\n \"upsert\": $overlay\n }) } else { cmd },\n _ => cmd.merge({\n \"document\": $overlay\n }) \n })\n - log:\n message: \"Computed: ${! this }\"\n - unarchive:\n format: json_array\n - label: SAVED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = this.payload.metadata.map_each(item -> {\n \"script\": \"if (ctx._source.data.metadata == null) { ctx._source.data.metadata = ['\" + item.key + \"': '\" + item.value + \"'] } ctx._source.data.metadata['\" + item.key + \"']='\" + item.value + \"'\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId),\n \"upsert\": {\n \"data\": { \n \"address\": this.payload.targetId,\n \"metadata\": { item.key: item.value },\n \"ledger\": this.payload.ledger\n },\n \"indexed\": { \n \"address\": this.payload.targetId,\n \"ledger\": this.payload.ledger\n },\n \"kind\": \"ACCOUNT\",\n \"when\": this.date\n }\n }).values()\n - unarchive:\n format: json_array\n - label: DELETED_METADATA\n version: v2\n processors:\n - bloblang: |\n root = {\n \"script\": \"ctx._source.data.metadata.remove(\\\"\" + this.payload.key + \"\\\")\",\n \"action\": \"update\",\n \"id\": \"%s-%s-%s\".format(this.payload.targetType, this.payload.ledger, this.payload.targetId)\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v1.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n meta batchSize = 100\n - postgres_query:\n service: ledger\n query: 'select count(*) as accounts_count from \"${! meta(\"ledger\") }\".accounts'\n - unarchive:\n format: json_array\n - bloblang: |\n meta loopCount = (this.accounts_count.number() / meta(\"batchSize\").number()).ceil()\n meta loopIndex = 0\n - bloblang: |\n root = if meta(\"loopCount\") == \"0\" {\n deleted() \n }\n - while:\n check: 'meta(\"loopIndex\") < meta(\"loopCount\")'\n processors:\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n offset ${! meta(\"loopIndex\").number() * meta(\"batchSize\").number() }\n limit ${! meta(\"batchSize\") }\n - bloblang:\n meta loopIndex = meta(\"loopIndex\").number() + 1\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\")\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" ledger_reindex_accounts_v2.yaml: "input:\n http_server:\n path: /\n\npipeline:\n processors:\n - bloblang: |\n meta ledger = this.ledger\n - postgres_query:\n service: ledger\n query: |\n select address, metadata\n from \"${! meta(\"ledger\") }\".accounts\n - unarchive:\n format: json_array\n - bloblang: |\n root = this.assign({\n \"metadata\": this.metadata.parse_json()\n })\n - bloblang: |\n root = {\n \"document\": {\n \"data\": { \n \"address\": this.address,\n \"ledger\": meta(\"ledger\"),\n \"metadata\": this.metadata\n },\n \"indexed\": {\n \"address\": this.address,\n \"ledger\": meta(\"ledger\")\n },\n \"kind\": \"ACCOUNT\",\n \"ledger\": meta(\"ledger\"),\n \"when\": this.date\n },\n \"id\": \"ACCOUNT-%s-%s\".format(meta(\"ledger\"), this.address),\n \"action\": \"upsert\"\n }\n\noutput:\n resource: elasticsearch\n" diff --git a/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/deployments-apps-v1/search-benthos.yaml b/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/deployments-apps-v1/search-benthos.yaml index 760038605b..84d06824f4 100644 --- a/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/deployments-apps-v1/search-benthos.yaml +++ b/components/operator/internal/controllers/stack/testdata/multipod-without-audit-log/results/deployments-apps-v1/search-benthos.yaml @@ -20,7 +20,7 @@ spec: template: metadata: annotations: - stack.formance.cloud/volumes-hash: iXL4EcTjD7D2Zkq9Qb1D6Bctp8pGhkzkiwtjjBeKSnU= + stack.formance.cloud/volumes-hash: EzO6HC1Z4jk4Ld2Ua4vIfjNEaYrtFQPY3G06P14GkrU= creationTimestamp: null labels: app.kubernetes.io/name: search-benthos