Skip to content

Commit c605b58

Browse files
Merge pull request #68 from shiftcode/#12-add-logger
feat(logger): logs for dynamo easy
2 parents 2e1957f + 0b1f4ba commit c605b58

21 files changed

+274
-101
lines changed

package-lock.json

Lines changed: 55 additions & 52 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,5 @@
123123
"rxjs": "^6.0.0",
124124
"reflect-metadata": "^0.1.12"
125125
},
126-
"dependencies": {
127-
}
126+
"dependencies": {}
128127
}

src/config/config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import { LogReceiver } from '../logger/log-receiver.type'
12
import { DateTypes } from './date-types.type'
23

34
export interface Config {
45
dateType: DateTypes
5-
debug: boolean
6+
logReceiver: LogReceiver
67
}

src/config/dynamo-easy-config.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { Config } from './config'
22

33
export class DynamoEasyConfig {
4-
static config: Config = { dateType: 'moment', debug: true }
4+
static config: Config = {
5+
dateType: 'moment',
6+
logReceiver: () => {},
7+
}
58

6-
static updateConfig(config: Config): void {
9+
static updateConfig(config: Partial<Config>): void {
10+
if (config.logReceiver !== undefined && typeof config.logReceiver !== 'function') {
11+
throw new Error('Config.logReceiver has to be a function')
12+
}
713
Object.assign(DynamoEasyConfig.config, config)
814
}
915

src/dynamo-easy.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ import 'reflect-metadata'
1111
export * from './config'
1212
export * from './decorator'
1313
export * from './dynamo'
14+
export * from './logger'
1415
export * from './mapper'
1516
export * from './model'

src/dynamo/dynamo-rx.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export class DynamoRx {
6262
return this.sessionValidityEnsurer().pipe(switchMap(() => from(this.dynamoDb.query(params).promise())))
6363
}
6464

65-
makeRequest(operation: string, params?: { [key: string]: any }): any {
65+
makeRequest(operation: string, params?: { [key: string]: any }): Observable<any> {
6666
return this.sessionValidityEnsurer().pipe(
6767
switchMap(() => from(this.dynamoDb.makeRequest(operation, params).promise()))
6868
)

src/dynamo/dynamo-store.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as DynamoDB from 'aws-sdk/clients/dynamodb'
22
import { Observable } from 'rxjs'
3+
import { tap } from 'rxjs/operators'
34
import { MetadataHelper } from '../decorator/metadata/metadata-helper'
5+
import { createLogger, Logger } from '../logger/logger'
46
import { ModelConstructor } from '../model/model-constructor'
57
import { DEFAULT_SESSION_VALIDITY_ENSURER } from './default-session-validity-ensurer.const'
68
import { DEFAULT_TABLE_NAME_RESOLVER } from './default-table-name-resolver.const'
@@ -19,6 +21,7 @@ import { SessionValidityEnsurer } from './session-validity-ensurer.type'
1921
import { TableNameResolver } from './table-name-resolver.type'
2022

2123
export class DynamoStore<T> {
24+
private readonly logger: Logger
2225
private readonly dynamoRx: DynamoRx
2326

2427
readonly tableName: string
@@ -28,6 +31,7 @@ export class DynamoStore<T> {
2831
tableNameResolver: TableNameResolver = DEFAULT_TABLE_NAME_RESOLVER,
2932
sessionValidityEnsurer: SessionValidityEnsurer = DEFAULT_SESSION_VALIDITY_ENSURER
3033
) {
34+
this.logger = createLogger('dynamo.DynamoStore', modelClazz)
3135
this.dynamoRx = new DynamoRx(sessionValidityEnsurer)
3236
const tableName = tableNameResolver(MetadataHelper.get(this.modelClazz).modelOptions.tableName)
3337
if (!REGEX_TABLE_NAME.test(tableName)) {
@@ -37,6 +41,7 @@ export class DynamoStore<T> {
3741
}
3842

3943
this.tableName = tableName
44+
this.logger.debug('instance created')
4045
}
4146

4247
get dynamoDb(): DynamoDB {
@@ -86,7 +91,8 @@ export class DynamoStore<T> {
8691
}
8792

8893
makeRequest<Z>(operation: DynamoApiOperations, params?: { [key: string]: any }): Observable<Z> {
89-
return this.dynamoRx.makeRequest(operation, params)
94+
this.logger.debug('request', params)
95+
return this.dynamoRx.makeRequest(operation, params).pipe(tap(response => this.logger.debug('response', response)))
9096
}
9197

9298
// Commented because not used at the moment

src/dynamo/request/batchgetsingletable/batch-get-single-table.request.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { BatchGetItemInput } from 'aws-sdk/clients/dynamodb'
22
import { isObject } from 'lodash'
33
import { Observable } from 'rxjs'
4-
import { map } from 'rxjs/operators'
4+
import { map, tap } from 'rxjs/operators'
55
import { Metadata } from '../../../decorator/metadata/metadata'
66
import { MetadataHelper } from '../../../decorator/metadata/metadata-helper'
7+
import { createLogger, Logger } from '../../../logger/logger'
78
import { Mapper } from '../../../mapper/mapper'
89
import { Attributes } from '../../../mapper/type/attribute.type'
910
import { ModelConstructor } from '../../../model/model-constructor'
@@ -12,6 +13,7 @@ import { BatchGetSingleTableResponse } from './batch-get-single-table.response'
1213

1314
// TODO add support for indexes
1415
export class BatchGetSingleTableRequest<T> {
16+
private readonly logger: Logger
1517
readonly dynamoRx: DynamoRx
1618
readonly params: BatchGetItemInput
1719
readonly modelClazz: ModelConstructor<T>
@@ -20,6 +22,7 @@ export class BatchGetSingleTableRequest<T> {
2022
private _metadata: Metadata<T>
2123

2224
constructor(dynamoRx: DynamoRx, modelClazz: ModelConstructor<T>, tableName: string, keys: any[]) {
25+
this.logger = createLogger('dynamo.request.BatchGetSingleTableRequest', modelClazz)
2326
this.dynamoRx = dynamoRx
2427

2528
if (modelClazz === null || modelClazz === undefined) {
@@ -45,7 +48,9 @@ export class BatchGetSingleTableRequest<T> {
4548
}
4649

4750
execFullResponse(): Observable<BatchGetSingleTableResponse<T>> {
51+
this.logger.debug('request', this.params)
4852
return this.dynamoRx.batchGetItems(this.params).pipe(
53+
tap(response => this.logger.debug('response', response)),
4954
map(response => {
5055
let items: T[]
5156
if (response.Responses && Object.keys(response.Responses).length && response.Responses[this.tableName]) {
@@ -62,12 +67,15 @@ export class BatchGetSingleTableRequest<T> {
6267
UnprocessedKeys: response.UnprocessedKeys,
6368
ConsumedCapacity: response.ConsumedCapacity,
6469
}
65-
})
70+
}),
71+
tap(response => this.logger.debug('mapped items', response.Items))
6672
)
6773
}
6874

6975
exec(): Observable<T[]> {
76+
this.logger.debug('request', this.params)
7077
return this.dynamoRx.batchGetItems(this.params).pipe(
78+
tap(response => this.logger.debug('response', response)),
7179
map(response => {
7280
if (response.Responses && Object.keys(response.Responses).length && response.Responses[this.tableName]) {
7381
return response.Responses![this.tableName].map(attributeMap =>
@@ -76,7 +84,8 @@ export class BatchGetSingleTableRequest<T> {
7684
} else {
7785
return []
7886
}
79-
})
87+
}),
88+
tap(items => this.logger.debug('mapped items', items))
8089
)
8190
}
8291

0 commit comments

Comments
 (0)