From 43b0ac45113adbcbcaf59a9d2eb83f1d03b8e3a2 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 11:05:45 +0200 Subject: [PATCH 1/9] move timing log messages from debug to info --- backend/src/graphql/resolver/BalanceResolver.ts | 17 +++++++++++++++++ .../src/graphql/resolver/TransactionResolver.ts | 16 +++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 87de0e0f7..a702cc08f 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -29,12 +29,19 @@ export class BalanceResolver { const gdtResolver = new GdtResolver() const balanceGDT = await gdtResolver.gdtBalance(context) + + logger.info(`time for load gdt balance: ${new Date().getTime() - now.getTime()} ms`) + let profilingTime = new Date() + logger.debug(`balanceGDT=${balanceGDT}`) const lastTransaction = context.lastTransaction ? context.lastTransaction : await getLastTransaction(user.id) + logger.info(`time for load lastTransaction from db (if not already done): ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() + logger.debug(`lastTransaction=${lastTransaction}`) // No balance found @@ -52,8 +59,12 @@ export class BalanceResolver { context.transactionCount || context.transactionCount === 0 ? context.transactionCount : await dbTransaction.count({ where: { userId: user.id } }) + logger.debug(`transactionCount=${count}`) + logger.info(`time for count transaction in db: ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() + const linkCount = await dbTransactionLink.count({ where: { userId: user.id, @@ -63,6 +74,9 @@ export class BalanceResolver { }) logger.debug(`linkCount=${linkCount}`) + logger.info(`time for count transaction links in db: ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() + // The decay is always calculated on the last booked transaction const calculatedDecay = calculateDecay( lastTransaction.balance, @@ -81,6 +95,9 @@ export class BalanceResolver { ? { sumHoldAvailableAmount: context.sumHoldAvailableAmount } : await transactionLinkSummary(user.id, now) + logger.info(`time for load transactionLinkSummary from db (if not already done): ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() + logger.debug(`context.sumHoldAvailableAmount=${context.sumHoldAvailableAmount}`) logger.debug(`sumHoldAvailableAmount=${sumHoldAvailableAmount}`) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 56c928995..c1d3e6bad 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -233,6 +233,8 @@ export class TransactionResolver { const lastTransaction = await getLastTransaction(user.id, ['contribution']) logger.debug(`lastTransaction=${lastTransaction}`) + logger.info(`time for get last transaction: ${new Date().getTime() - now.getTime()} ms`) + const balanceResolver = new BalanceResolver() context.lastTransaction = lastTransaction @@ -251,6 +253,8 @@ export class TransactionResolver { order, ) context.transactionCount = userTransactionsCount + let profilingTime = new Date() + logger.info(`time for getTransactionList: ${profilingTime.getTime() - now.getTime()} ms`) // find involved users; I am involved const involvedUserIds: number[] = [user.id] @@ -305,6 +309,9 @@ export class TransactionResolver { logger.debug(`involvedUserIds=`, involvedUserIds) logger.debug(`involvedRemoteUsers=`, involvedRemoteUsers) + logger.info(`time for collect involved user and load remote user: ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() + // We need to show the name for deleted users for old transactions const involvedDbUsers = await dbUser.find({ where: { id: In(involvedUserIds) }, @@ -313,12 +320,18 @@ export class TransactionResolver { }) const involvedUsers = involvedDbUsers.map((u) => new User(u)) logger.debug(`involvedUsers=`, involvedUsers) + logger.info(`time for load involved user from db: ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() const self = new User(user) const transactions: Transaction[] = [] const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, transactionLinkcount } = await transactionLinkSummary(user.id, now) + + logger.debug(`time for load transactionLinkSummary db: ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() + context.linkCount = transactionLinkcount logger.debug(`transactionLinkcount=${transactionLinkcount}`) context.sumHoldAvailableAmount = sumHoldAvailableAmount @@ -413,7 +426,8 @@ export class TransactionResolver { ).toDecimalPlaces(2, Decimal.ROUND_HALF_UP) } }) - + logger.info(`time for process transaction list and fill in decay db: ${new Date().getTime() - profilingTime.getTime()} ms`) + profilingTime = new Date() // Construct Result return new TransactionList(await balanceResolver.balance(context), transactions) } From 91435656e03b43374006ff48aec3f10b1319aea6 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 11:16:56 +0200 Subject: [PATCH 2/9] add decayLoggingView use in balanceResolver.balance to compress log output --- .../src/graphql/resolver/BalanceResolver.ts | 9 +++++---- backend/src/logging/DecayLogging.view.ts | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 backend/src/logging/DecayLogging.view.ts diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index a702cc08f..8103e0cff 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -15,6 +15,7 @@ import { calculateDecay } from '@/util/decay' import { GdtResolver } from './GdtResolver' import { getLastTransaction } from './util/getLastTransaction' import { transactionLinkSummary } from './util/transactionLinkSummary' +import { DecayLoggingView } from '@/logging/DecayLogging.view' @Resolver() export class BalanceResolver { @@ -85,9 +86,9 @@ export class BalanceResolver { ) logger.info( 'calculatedDecay', - lastTransaction.balance, - lastTransaction.balanceDate, - calculatedDecay, + lastTransaction.balance.toString(), + lastTransaction.balanceDate.toISOString(), + new DecayLoggingView(calculatedDecay), ) // The final balance is reduced by the link amount withheld @@ -115,7 +116,7 @@ export class BalanceResolver { count, linkCount, }) - logger.info('new Balance', balance, balanceGDT, count, linkCount, newBalance) + logger.info('new Balance', balance.toString(), balanceGDT?.toString(), count, linkCount, newBalance.toString()) return newBalance } diff --git a/backend/src/logging/DecayLogging.view.ts b/backend/src/logging/DecayLogging.view.ts new file mode 100644 index 000000000..aef7c6da6 --- /dev/null +++ b/backend/src/logging/DecayLogging.view.ts @@ -0,0 +1,20 @@ +import { Decay } from '@/graphql/model/Decay' +import { AbstractLoggingView } from '@logging/AbstractLogging.view' + +export class DecayLoggingView extends AbstractLoggingView { + public constructor(private self: Decay) { + super() + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public toJSON(): any { + return { + balance: this.decimalToString(this.self.balance), + decay: this.decimalToString(this.self.decay), + roundedDecay: this.decimalToString(this.self.roundedDecay), + start: this.dateToString(this.self.start), + end: this.dateToString(this.self.end), + duration: this.self.duration + } + } +} From 4f480faf7558f6f4495408234794e9c924f1a4e3 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 11:27:46 +0200 Subject: [PATCH 3/9] lint, add and use BalanceLoggingView in BalanceResolver.balance --- .../src/graphql/resolver/BalanceResolver.ts | 38 +++++++++++++++---- .../graphql/resolver/TransactionResolver.ts | 22 +++++++++-- backend/src/logging/BalanceLogging.view.ts | 18 +++++++++ backend/src/logging/DecayLogging.view.ts | 5 ++- 4 files changed, 69 insertions(+), 14 deletions(-) create mode 100644 backend/src/logging/BalanceLogging.view.ts diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 8103e0cff..e101a36d7 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -8,6 +8,7 @@ import { Resolver, Query, Ctx, Authorized } from 'type-graphql' import { Balance } from '@model/Balance' import { RIGHTS } from '@/auth/RIGHTS' +import { DecayLoggingView } from '@/logging/DecayLogging.view' import { Context, getUser } from '@/server/context' import { backendLogger as logger } from '@/server/logger' import { calculateDecay } from '@/util/decay' @@ -15,7 +16,7 @@ import { calculateDecay } from '@/util/decay' import { GdtResolver } from './GdtResolver' import { getLastTransaction } from './util/getLastTransaction' import { transactionLinkSummary } from './util/transactionLinkSummary' -import { DecayLoggingView } from '@/logging/DecayLogging.view' +import { BalanceLoggingView } from '@/logging/BalanceLogging.view' @Resolver() export class BalanceResolver { @@ -40,7 +41,11 @@ export class BalanceResolver { ? context.lastTransaction : await getLastTransaction(user.id) - logger.info(`time for load lastTransaction from db (if not already done): ${new Date().getTime() - profilingTime.getTime()} ms`) + logger.info( + `time for load lastTransaction from db (if not already done): ${ + new Date().getTime() - profilingTime.getTime() + } ms`, + ) profilingTime = new Date() logger.debug(`lastTransaction=${lastTransaction}`) @@ -60,11 +65,13 @@ export class BalanceResolver { context.transactionCount || context.transactionCount === 0 ? context.transactionCount : await dbTransaction.count({ where: { userId: user.id } }) - + logger.debug(`transactionCount=${count}`) - logger.info(`time for count transaction in db: ${new Date().getTime() - profilingTime.getTime()} ms`) - profilingTime = new Date() + logger.info( + `time for count transaction in db: ${new Date().getTime() - profilingTime.getTime()} ms`, + ) + profilingTime = new Date() const linkCount = await dbTransactionLink.count({ where: { @@ -75,7 +82,11 @@ export class BalanceResolver { }) logger.debug(`linkCount=${linkCount}`) - logger.info(`time for count transaction links in db: ${new Date().getTime() - profilingTime.getTime()} ms`) + logger.info( + `time for count transaction links in db: ${ + new Date().getTime() - profilingTime.getTime() + } ms`, + ) profilingTime = new Date() // The decay is always calculated on the last booked transaction @@ -96,7 +107,11 @@ export class BalanceResolver { ? { sumHoldAvailableAmount: context.sumHoldAvailableAmount } : await transactionLinkSummary(user.id, now) - logger.info(`time for load transactionLinkSummary from db (if not already done): ${new Date().getTime() - profilingTime.getTime()} ms`) + logger.info( + `time for load transactionLinkSummary from db (if not already done): ${ + new Date().getTime() - profilingTime.getTime() + } ms`, + ) profilingTime = new Date() logger.debug(`context.sumHoldAvailableAmount=${context.sumHoldAvailableAmount}`) @@ -116,7 +131,14 @@ export class BalanceResolver { count, linkCount, }) - logger.info('new Balance', balance.toString(), balanceGDT?.toString(), count, linkCount, newBalance.toString()) + logger.info( + 'new Balance', + balance.toString(), + balanceGDT?.toString(), + count, + linkCount, + new BalanceLoggingView(newBalance), + ) return newBalance } diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index c1d3e6bad..4a4843382 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -309,7 +309,11 @@ export class TransactionResolver { logger.debug(`involvedUserIds=`, involvedUserIds) logger.debug(`involvedRemoteUsers=`, involvedRemoteUsers) - logger.info(`time for collect involved user and load remote user: ${new Date().getTime() - profilingTime.getTime()} ms`) + logger.info( + `time for collect involved user and load remote user: ${ + new Date().getTime() - profilingTime.getTime() + } ms`, + ) profilingTime = new Date() // We need to show the name for deleted users for old transactions @@ -320,7 +324,9 @@ export class TransactionResolver { }) const involvedUsers = involvedDbUsers.map((u) => new User(u)) logger.debug(`involvedUsers=`, involvedUsers) - logger.info(`time for load involved user from db: ${new Date().getTime() - profilingTime.getTime()} ms`) + logger.info( + `time for load involved user from db: ${new Date().getTime() - profilingTime.getTime()} ms`, + ) profilingTime = new Date() const self = new User(user) @@ -329,7 +335,11 @@ export class TransactionResolver { const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, transactionLinkcount } = await transactionLinkSummary(user.id, now) - logger.debug(`time for load transactionLinkSummary db: ${new Date().getTime() - profilingTime.getTime()} ms`) + logger.debug( + `time for load transactionLinkSummary db: ${ + new Date().getTime() - profilingTime.getTime() + } ms`, + ) profilingTime = new Date() context.linkCount = transactionLinkcount @@ -426,7 +436,11 @@ export class TransactionResolver { ).toDecimalPlaces(2, Decimal.ROUND_HALF_UP) } }) - logger.info(`time for process transaction list and fill in decay db: ${new Date().getTime() - profilingTime.getTime()} ms`) + logger.info( + `time for process transaction list and fill in decay db: ${ + new Date().getTime() - profilingTime.getTime() + } ms`, + ) profilingTime = new Date() // Construct Result return new TransactionList(await balanceResolver.balance(context), transactions) diff --git a/backend/src/logging/BalanceLogging.view.ts b/backend/src/logging/BalanceLogging.view.ts new file mode 100644 index 000000000..5d20745d9 --- /dev/null +++ b/backend/src/logging/BalanceLogging.view.ts @@ -0,0 +1,18 @@ +import { Balance } from '@/graphql/model/Balance' +import { AbstractLoggingView } from '@logging/AbstractLogging.view' + +export class BalanceLoggingView extends AbstractLoggingView { + public constructor(private self: Balance) { + super() + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + public toJSON(): any { + return { + balance: this.decimalToString(this.self.balance), + balanceGDT: this.self.balanceGDT, + count: this.self.count, + linkCount: this.self.linkCount, + } + } +} diff --git a/backend/src/logging/DecayLogging.view.ts b/backend/src/logging/DecayLogging.view.ts index aef7c6da6..44fd392f9 100644 --- a/backend/src/logging/DecayLogging.view.ts +++ b/backend/src/logging/DecayLogging.view.ts @@ -1,6 +1,7 @@ -import { Decay } from '@/graphql/model/Decay' import { AbstractLoggingView } from '@logging/AbstractLogging.view' +import { Decay } from '@/graphql/model/Decay' + export class DecayLoggingView extends AbstractLoggingView { public constructor(private self: Decay) { super() @@ -14,7 +15,7 @@ export class DecayLoggingView extends AbstractLoggingView { roundedDecay: this.decimalToString(this.self.roundedDecay), start: this.dateToString(this.self.start), end: this.dateToString(this.self.end), - duration: this.self.duration + duration: this.self.duration, } } } From 7f97ff6cf8c39fe54866cc1e4a8ce7d5737f3e28 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 11:39:37 +0200 Subject: [PATCH 4/9] remove unnecessary join which slow down getLastTransaction call --- backend/src/graphql/resolver/TransactionResolver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 4a4843382..8c1bbf787 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -230,7 +230,7 @@ export class TransactionResolver { logger.info(`transactionList(user=${user.firstName}.${user.lastName}, ${user.emailId})`) // find current balance - const lastTransaction = await getLastTransaction(user.id, ['contribution']) + const lastTransaction = await getLastTransaction(user.id) logger.debug(`lastTransaction=${lastTransaction}`) logger.info(`time for get last transaction: ${new Date().getTime() - now.getTime()} ms`) From d64ceedd04fa8c8c01c2e1a5b35ddf62249b9b3c Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 11:46:22 +0200 Subject: [PATCH 5/9] let fetching gdt sum running parallel --- backend/src/graphql/resolver/BalanceResolver.ts | 10 ++++++---- backend/src/graphql/resolver/TransactionResolver.ts | 7 +++++++ backend/src/server/context.ts | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index e101a36d7..6f303ea2f 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -29,13 +29,15 @@ export class BalanceResolver { logger.addContext('user', user.id) logger.info(`balance(userId=${user.id})...`) - const gdtResolver = new GdtResolver() - const balanceGDT = await gdtResolver.gdtBalance(context) + if(!context.balanceGDT) { + const gdtResolver = new GdtResolver() + context.balanceGDT = await gdtResolver.gdtBalance(context) + } logger.info(`time for load gdt balance: ${new Date().getTime() - now.getTime()} ms`) let profilingTime = new Date() - logger.debug(`balanceGDT=${balanceGDT}`) + logger.debug(`balanceGDT=${context.balanceGDT}`) const lastTransaction = context.lastTransaction ? context.lastTransaction @@ -55,7 +57,7 @@ export class BalanceResolver { logger.info(`no balance found, return Default-Balance!`) return new Balance({ balance: new Decimal(0), - balanceGDT, + balanceGDT: context.balanceGDT, count: 0, linkCount: 0, }) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 8c1bbf787..eba5102e2 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -49,6 +49,7 @@ import { import { sendTransactionsToDltConnector } from './util/sendTransactionsToDltConnector' import { storeForeignUser } from './util/storeForeignUser' import { transactionLinkSummary } from './util/transactionLinkSummary' +import { GdtResolver } from './GdtResolver' export const executeTransaction = async ( amount: Decimal, @@ -229,6 +230,9 @@ export class TransactionResolver { logger.addContext('user', user.id) logger.info(`transactionList(user=${user.firstName}.${user.lastName}, ${user.emailId})`) + const gdtResolver = new GdtResolver() + const balanceGDTPromise = gdtResolver.gdtBalance(context) + // find current balance const lastTransaction = await getLastTransaction(user.id) logger.debug(`lastTransaction=${lastTransaction}`) @@ -442,6 +446,9 @@ export class TransactionResolver { } ms`, ) profilingTime = new Date() + const balanceGDT = await balanceGDTPromise + context.balanceGDT = balanceGDT + // Construct Result return new TransactionList(await balanceResolver.balance(context), transactions) } diff --git a/backend/src/server/context.ts b/backend/src/server/context.ts index 45f0a6c1f..a6038271c 100644 --- a/backend/src/server/context.ts +++ b/backend/src/server/context.ts @@ -16,6 +16,7 @@ export interface Context { gradidoID?: string // hack to use less DB calls for Balance Resolver lastTransaction?: dbTransaction | null + balanceGDT?: number | null transactionCount?: number linkCount?: number sumHoldAvailableAmount?: Decimal From 1df250620bcd6e6722cbbd6a0ed434dd6e0f39dc Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 12:13:18 +0200 Subject: [PATCH 6/9] lint, fix --- backend/src/graphql/resolver/BalanceResolver.ts | 11 +++++++---- backend/src/graphql/resolver/TransactionResolver.ts | 4 ++-- backend/src/logging/BalanceLogging.view.ts | 3 ++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 6f303ea2f..5ee47f7d1 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -8,6 +8,7 @@ import { Resolver, Query, Ctx, Authorized } from 'type-graphql' import { Balance } from '@model/Balance' import { RIGHTS } from '@/auth/RIGHTS' +import { BalanceLoggingView } from '@/logging/BalanceLogging.view' import { DecayLoggingView } from '@/logging/DecayLogging.view' import { Context, getUser } from '@/server/context' import { backendLogger as logger } from '@/server/logger' @@ -16,7 +17,6 @@ import { calculateDecay } from '@/util/decay' import { GdtResolver } from './GdtResolver' import { getLastTransaction } from './util/getLastTransaction' import { transactionLinkSummary } from './util/transactionLinkSummary' -import { BalanceLoggingView } from '@/logging/BalanceLogging.view' @Resolver() export class BalanceResolver { @@ -29,9 +29,12 @@ export class BalanceResolver { logger.addContext('user', user.id) logger.info(`balance(userId=${user.id})...`) - if(!context.balanceGDT) { + let balanceGDT + if (!context.balanceGDT) { const gdtResolver = new GdtResolver() - context.balanceGDT = await gdtResolver.gdtBalance(context) + balanceGDT = await gdtResolver.gdtBalance(context) + } else { + balanceGDT = context.balanceGDT } logger.info(`time for load gdt balance: ${new Date().getTime() - now.getTime()} ms`) @@ -57,7 +60,7 @@ export class BalanceResolver { logger.info(`no balance found, return Default-Balance!`) return new Balance({ balance: new Decimal(0), - balanceGDT: context.balanceGDT, + balanceGDT, count: 0, linkCount: 0, }) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index eba5102e2..0bbe0b331 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -38,6 +38,7 @@ import { calculateBalance } from '@/util/validate' import { virtualLinkTransaction, virtualDecayTransaction } from '@/util/virtualTransactions' import { BalanceResolver } from './BalanceResolver' +import { GdtResolver } from './GdtResolver' import { getCommunityByIdentifier, getCommunityName, isHomeCommunity } from './util/communities' import { findUserByIdentifier } from './util/findUserByIdentifier' import { getLastTransaction } from './util/getLastTransaction' @@ -49,7 +50,6 @@ import { import { sendTransactionsToDltConnector } from './util/sendTransactionsToDltConnector' import { storeForeignUser } from './util/storeForeignUser' import { transactionLinkSummary } from './util/transactionLinkSummary' -import { GdtResolver } from './GdtResolver' export const executeTransaction = async ( amount: Decimal, @@ -448,7 +448,7 @@ export class TransactionResolver { profilingTime = new Date() const balanceGDT = await balanceGDTPromise context.balanceGDT = balanceGDT - + // Construct Result return new TransactionList(await balanceResolver.balance(context), transactions) } diff --git a/backend/src/logging/BalanceLogging.view.ts b/backend/src/logging/BalanceLogging.view.ts index 5d20745d9..0fa73baf1 100644 --- a/backend/src/logging/BalanceLogging.view.ts +++ b/backend/src/logging/BalanceLogging.view.ts @@ -1,6 +1,7 @@ -import { Balance } from '@/graphql/model/Balance' import { AbstractLoggingView } from '@logging/AbstractLogging.view' +import { Balance } from '@/graphql/model/Balance' + export class BalanceLoggingView extends AbstractLoggingView { public constructor(private self: Balance) { super() From 14300dc9b6cb92e6d68dae4a06a8207ba21f7cf4 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 12:36:16 +0200 Subject: [PATCH 7/9] remove profiling logger messages --- .../src/graphql/resolver/BalanceResolver.ts | 29 ----------------- .../graphql/resolver/TransactionResolver.ts | 32 ++----------------- 2 files changed, 2 insertions(+), 59 deletions(-) diff --git a/backend/src/graphql/resolver/BalanceResolver.ts b/backend/src/graphql/resolver/BalanceResolver.ts index 5ee47f7d1..c023e3510 100644 --- a/backend/src/graphql/resolver/BalanceResolver.ts +++ b/backend/src/graphql/resolver/BalanceResolver.ts @@ -37,22 +37,12 @@ export class BalanceResolver { balanceGDT = context.balanceGDT } - logger.info(`time for load gdt balance: ${new Date().getTime() - now.getTime()} ms`) - let profilingTime = new Date() - logger.debug(`balanceGDT=${context.balanceGDT}`) const lastTransaction = context.lastTransaction ? context.lastTransaction : await getLastTransaction(user.id) - logger.info( - `time for load lastTransaction from db (if not already done): ${ - new Date().getTime() - profilingTime.getTime() - } ms`, - ) - profilingTime = new Date() - logger.debug(`lastTransaction=${lastTransaction}`) // No balance found @@ -73,11 +63,6 @@ export class BalanceResolver { logger.debug(`transactionCount=${count}`) - logger.info( - `time for count transaction in db: ${new Date().getTime() - profilingTime.getTime()} ms`, - ) - profilingTime = new Date() - const linkCount = await dbTransactionLink.count({ where: { userId: user.id, @@ -87,13 +72,6 @@ export class BalanceResolver { }) logger.debug(`linkCount=${linkCount}`) - logger.info( - `time for count transaction links in db: ${ - new Date().getTime() - profilingTime.getTime() - } ms`, - ) - profilingTime = new Date() - // The decay is always calculated on the last booked transaction const calculatedDecay = calculateDecay( lastTransaction.balance, @@ -112,13 +90,6 @@ export class BalanceResolver { ? { sumHoldAvailableAmount: context.sumHoldAvailableAmount } : await transactionLinkSummary(user.id, now) - logger.info( - `time for load transactionLinkSummary from db (if not already done): ${ - new Date().getTime() - profilingTime.getTime() - } ms`, - ) - profilingTime = new Date() - logger.debug(`context.sumHoldAvailableAmount=${context.sumHoldAvailableAmount}`) logger.debug(`sumHoldAvailableAmount=${sumHoldAvailableAmount}`) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 0bbe0b331..11888444c 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -237,8 +237,6 @@ export class TransactionResolver { const lastTransaction = await getLastTransaction(user.id) logger.debug(`lastTransaction=${lastTransaction}`) - logger.info(`time for get last transaction: ${new Date().getTime() - now.getTime()} ms`) - const balanceResolver = new BalanceResolver() context.lastTransaction = lastTransaction @@ -257,8 +255,6 @@ export class TransactionResolver { order, ) context.transactionCount = userTransactionsCount - let profilingTime = new Date() - logger.info(`time for getTransactionList: ${profilingTime.getTime() - now.getTime()} ms`) // find involved users; I am involved const involvedUserIds: number[] = [user.id] @@ -311,14 +307,7 @@ export class TransactionResolver { } } logger.debug(`involvedUserIds=`, involvedUserIds) - logger.debug(`involvedRemoteUsers=`, involvedRemoteUsers) - - logger.info( - `time for collect involved user and load remote user: ${ - new Date().getTime() - profilingTime.getTime() - } ms`, - ) - profilingTime = new Date() + logger.debug(`involvedRemoteUsers=`, involvedRemoteUsers) // We need to show the name for deleted users for old transactions const involvedDbUsers = await dbUser.find({ @@ -328,24 +317,13 @@ export class TransactionResolver { }) const involvedUsers = involvedDbUsers.map((u) => new User(u)) logger.debug(`involvedUsers=`, involvedUsers) - logger.info( - `time for load involved user from db: ${new Date().getTime() - profilingTime.getTime()} ms`, - ) - profilingTime = new Date() - + const self = new User(user) const transactions: Transaction[] = [] const { sumHoldAvailableAmount, sumAmount, lastDate, firstDate, transactionLinkcount } = await transactionLinkSummary(user.id, now) - logger.debug( - `time for load transactionLinkSummary db: ${ - new Date().getTime() - profilingTime.getTime() - } ms`, - ) - profilingTime = new Date() - context.linkCount = transactionLinkcount logger.debug(`transactionLinkcount=${transactionLinkcount}`) context.sumHoldAvailableAmount = sumHoldAvailableAmount @@ -440,12 +418,6 @@ export class TransactionResolver { ).toDecimalPlaces(2, Decimal.ROUND_HALF_UP) } }) - logger.info( - `time for process transaction list and fill in decay db: ${ - new Date().getTime() - profilingTime.getTime() - } ms`, - ) - profilingTime = new Date() const balanceGDT = await balanceGDTPromise context.balanceGDT = balanceGDT From 1cefe2df8e94f71dd8e3280b18dfb432b2faa9da Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 12:41:20 +0200 Subject: [PATCH 8/9] add migration for transactions.user_id index --- backend/src/config/index.ts | 2 +- database/migrations/0082-introduce_gms_registration.ts | 2 +- .../migrations/0085-add_index_transactions_user_id.ts | 10 ++++++++++ dht-node/src/config/index.ts | 2 +- federation/src/config/index.ts | 2 +- 5 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 database/migrations/0085-add_index_transactions_user_id.ts diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 82308a52b..37818d4bd 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -12,7 +12,7 @@ Decimal.set({ }) const constants = { - DB_VERSION: '0084-introduce_humhub_registration', + DB_VERSION: '0085-add_index_transactions_user_id', DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 LOG4JS_CONFIG: 'log4js-config.json', // default log level on production should be info diff --git a/database/migrations/0082-introduce_gms_registration.ts b/database/migrations/0082-introduce_gms_registration.ts index e02801a4f..b24be2bb5 100644 --- a/database/migrations/0082-introduce_gms_registration.ts +++ b/database/migrations/0082-introduce_gms_registration.ts @@ -50,5 +50,5 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom await queryFn('ALTER TABLE `user_contacts` DROP COLUMN IF EXISTS `gms_publish_email`;') await queryFn('ALTER TABLE `user_contacts` DROP COLUMN IF EXISTS `country_code`;') await queryFn('ALTER TABLE `user_contacts` DROP COLUMN IF EXISTS `gms_publish_phone`;') - await queryFn('ALTER TABLE `communities` DROP COLUMN IF EXISTS `gms_api_key`;') + await queryFn('ALTER TABLE `communities` DROP COLUMN IF EXISTS `gms_api_key`;') } diff --git a/database/migrations/0085-add_index_transactions_user_id.ts b/database/migrations/0085-add_index_transactions_user_id.ts new file mode 100644 index 000000000..c4cb02431 --- /dev/null +++ b/database/migrations/0085-add_index_transactions_user_id.ts @@ -0,0 +1,10 @@ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { + await queryFn('CREATE INDEX user_id ON transactions (user_id);') +} + +export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { + await queryFn('DROP INDEX user_id ON transactions;') +} diff --git a/dht-node/src/config/index.ts b/dht-node/src/config/index.ts index f557eee83..5c6910d45 100644 --- a/dht-node/src/config/index.ts +++ b/dht-node/src/config/index.ts @@ -4,7 +4,7 @@ import dotenv from 'dotenv' dotenv.config() const constants = { - DB_VERSION: '0084-introduce_humhub_registration', + DB_VERSION: '0085-add_index_transactions_user_id', LOG4JS_CONFIG: 'log4js-config.json', // default log level on production should be info LOG_LEVEL: process.env.LOG_LEVEL ?? 'info', diff --git a/federation/src/config/index.ts b/federation/src/config/index.ts index 26b727841..b66ed3974 100644 --- a/federation/src/config/index.ts +++ b/federation/src/config/index.ts @@ -10,7 +10,7 @@ Decimal.set({ }) const constants = { - DB_VERSION: '0084-introduce_humhub_registration', + DB_VERSION: '0085-add_index_transactions_user_id', DECAY_START_TIME: new Date('2021-05-13 17:46:31-0000'), // GMT+0 LOG4JS_CONFIG: 'log4js-config.json', // default log level on production should be info From 2e26ca4cd72c2875dc40e45e35c14dc9a9fbb599 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 19 Jun 2024 13:18:00 +0200 Subject: [PATCH 9/9] lint --- backend/src/graphql/resolver/TransactionResolver.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 11888444c..1889e3be0 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -307,7 +307,7 @@ export class TransactionResolver { } } logger.debug(`involvedUserIds=`, involvedUserIds) - logger.debug(`involvedRemoteUsers=`, involvedRemoteUsers) + logger.debug(`involvedRemoteUsers=`, involvedRemoteUsers) // We need to show the name for deleted users for old transactions const involvedDbUsers = await dbUser.find({ @@ -317,7 +317,7 @@ export class TransactionResolver { }) const involvedUsers = involvedDbUsers.map((u) => new User(u)) logger.debug(`involvedUsers=`, involvedUsers) - + const self = new User(user) const transactions: Transaction[] = []