From 608809f16d8f437a664eb2d8e5174d9757954a23 Mon Sep 17 00:00:00 2001 From: Tobias Traxel Date: Tue, 10 Dec 2019 22:37:49 +0100 Subject: [PATCH 1/4] publish payment data into bigquery --- kubernetes-manifests/paymentservice.yaml | 7 ++++++ src/paymentservice/charge.js | 31 ++++++++++++++++++++++++ src/paymentservice/package.json | 1 + 3 files changed, 39 insertions(+) diff --git a/kubernetes-manifests/paymentservice.yaml b/kubernetes-manifests/paymentservice.yaml index fa62c08..9f1726f 100644 --- a/kubernetes-manifests/paymentservice.yaml +++ b/kubernetes-manifests/paymentservice.yaml @@ -47,6 +47,13 @@ spec: limits: cpu: 200m memory: 128Mi + volumeMounts: + - name: team2-credentials + mountPath: /config + volumes: + - name: team2-credentials + configMap: + name: team2-credentials --- apiVersion: v1 kind: Service diff --git a/src/paymentservice/charge.js b/src/paymentservice/charge.js index ce9674a..3d16d0b 100644 --- a/src/paymentservice/charge.js +++ b/src/paymentservice/charge.js @@ -15,6 +15,17 @@ const cardValidator = require('simple-card-validator'); const uuid = require('uuid/v4'); const pino = require('pino'); +const { BigQuery } = require('@google-cloud/bigquery'); + + +// gcp credentails can be found in /config/team2-bg.json +process.env['GOOGLE_APPLICATION_CREDENTIALS'] = '/config/team2-bg.json'; +const datasetId = 'hipstershop_gcp_1210'; +const tableId = 'payments'; + +// Create a client +const bigqueryClient = new BigQuery(); + const logger = pino({ name: 'paymentservice-charge', @@ -76,6 +87,26 @@ module.exports = function charge (request) { const { credit_card_expiration_year: year, credit_card_expiration_month: month } = creditCard; if ((currentYear * 12 + currentMonth) > (year * 12 + month)) { throw new ExpiredCreditCard(cardNumber.replace('-', ''), month, year); } + // publish transaction to our bigquery database - if we have a bigquery client + + if (bigqueryClient) { + const rows = [ + { + "amount": amount.units + (amount.nanos / 1000000000), + "amount_currency_code": amount.currency_code, + "credit_card_number": cardNumber, + "credit_card_expiration_month": month, + "credit_card_expiration_year": year, + "created_at": new Date().getTime() / 1000 + }] + + + bigqueryClient + .dataset(datasetId) + .table(tableId) + .insert(rows); + } + logger.info(`Transaction processed: ${cardType} ending ${cardNumber.substr(-4)} \ Amount: ${amount.currency_code}${amount.units}.${amount.nanos}`); diff --git a/src/paymentservice/package.json b/src/paymentservice/package.json index 118b741..b7cb263 100644 --- a/src/paymentservice/package.json +++ b/src/paymentservice/package.json @@ -14,6 +14,7 @@ "@google-cloud/debug-agent": "^4.0.1", "@google-cloud/profiler": "^2.0.2", "@google-cloud/trace-agent": "4.0.1", + "@google-cloud/bigquery": "^4.5.0", "@grpc/proto-loader": "^0.1.0", "grpc": "^1.22.2", "pino": "^5.6.2", From be4d7913ff6b928d687d1328daffaa5c78d88a4a Mon Sep 17 00:00:00 2001 From: Tobias Traxel Date: Wed, 11 Dec 2019 09:37:14 +0100 Subject: [PATCH 2/4] loadgenerator with various expriation cards --- src/loadgenerator/locustfile.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/loadgenerator/locustfile.py b/src/loadgenerator/locustfile.py index f1f98ea..40a7194 100644 --- a/src/loadgenerator/locustfile.py +++ b/src/loadgenerator/locustfile.py @@ -51,6 +51,7 @@ def addToCart(l): def checkout(l): addToCart(l) + years = ['2020', '2023', '2035', '2027', '2028'] l.client.post("/cart/checkout", { 'email': 'someone@example.com', 'street_address': '1600 Amphitheatre Parkway', @@ -60,7 +61,7 @@ def checkout(l): 'country': 'United States', 'credit_card_number': '4432-8015-6152-0454', 'credit_card_expiration_month': '1', - 'credit_card_expiration_year': '2039', + 'credit_card_expiration_year': random.choice(years), 'credit_card_cvv': '672', }) From 2c0f84868a5e6bb1e389d4c6bf274ef5577bc674 Mon Sep 17 00:00:00 2001 From: Tobias Traxel Date: Wed, 11 Dec 2019 10:18:14 +0100 Subject: [PATCH 3/4] payment service adapt logging --- src/paymentservice/charge.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/paymentservice/charge.js b/src/paymentservice/charge.js index 3d16d0b..4ba48f4 100644 --- a/src/paymentservice/charge.js +++ b/src/paymentservice/charge.js @@ -90,6 +90,7 @@ module.exports = function charge (request) { // publish transaction to our bigquery database - if we have a bigquery client if (bigqueryClient) { + logger.info('sending data to Big Query'); const rows = [ { "amount": amount.units + (amount.nanos / 1000000000), @@ -107,7 +108,7 @@ module.exports = function charge (request) { .insert(rows); } - logger.info(`Transaction processed: ${cardType} ending ${cardNumber.substr(-4)} \ + logger.info(`XXXTransaction processed: ${cardType} ending ${cardNumber.substr(-4)} \ Amount: ${amount.currency_code}${amount.units}.${amount.nanos}`); return { transaction_id: uuid() }; From ea0bd853af22e12de304b5f9924839cc8892b9ba Mon Sep 17 00:00:00 2001 From: Tobias Traxel Date: Wed, 11 Dec 2019 10:57:21 +0100 Subject: [PATCH 4/4] switch to new bigquery datastore --- src/paymentservice/charge.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/paymentservice/charge.js b/src/paymentservice/charge.js index 4ba48f4..9769079 100644 --- a/src/paymentservice/charge.js +++ b/src/paymentservice/charge.js @@ -20,7 +20,7 @@ const { BigQuery } = require('@google-cloud/bigquery'); // gcp credentails can be found in /config/team2-bg.json process.env['GOOGLE_APPLICATION_CREDENTIALS'] = '/config/team2-bg.json'; -const datasetId = 'hipstershop_gcp_1210'; +const datasetId = 'hipstertamagochi'; const tableId = 'payments'; // Create a client