Skip to content

Commit

Permalink
Merge pull request #68 from shiftcode/#12-add-logger
Browse files Browse the repository at this point in the history
feat(logger): logs for dynamo easy
  • Loading branch information
michaelwittwer authored Nov 20, 2018
2 parents 2e1957f + 0b1f4ba commit c605b58
Show file tree
Hide file tree
Showing 21 changed files with 274 additions and 101 deletions.
107 changes: 55 additions & 52 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,5 @@
"rxjs": "^6.0.0",
"reflect-metadata": "^0.1.12"
},
"dependencies": {
}
"dependencies": {}
}
3 changes: 2 additions & 1 deletion src/config/config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { LogReceiver } from '../logger/log-receiver.type'
import { DateTypes } from './date-types.type'

export interface Config {
dateType: DateTypes
debug: boolean
logReceiver: LogReceiver
}
10 changes: 8 additions & 2 deletions src/config/dynamo-easy-config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
import { Config } from './config'

export class DynamoEasyConfig {
static config: Config = { dateType: 'moment', debug: true }
static config: Config = {
dateType: 'moment',
logReceiver: () => {},
}

static updateConfig(config: Config): void {
static updateConfig(config: Partial<Config>): void {
if (config.logReceiver !== undefined && typeof config.logReceiver !== 'function') {
throw new Error('Config.logReceiver has to be a function')
}
Object.assign(DynamoEasyConfig.config, config)
}

Expand Down
1 change: 1 addition & 0 deletions src/dynamo-easy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ import 'reflect-metadata'
export * from './config'
export * from './decorator'
export * from './dynamo'
export * from './logger'
export * from './mapper'
export * from './model'
2 changes: 1 addition & 1 deletion src/dynamo/dynamo-rx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ export class DynamoRx {
return this.sessionValidityEnsurer().pipe(switchMap(() => from(this.dynamoDb.query(params).promise())))
}

makeRequest(operation: string, params?: { [key: string]: any }): any {
makeRequest(operation: string, params?: { [key: string]: any }): Observable<any> {
return this.sessionValidityEnsurer().pipe(
switchMap(() => from(this.dynamoDb.makeRequest(operation, params).promise()))
)
Expand Down
8 changes: 7 additions & 1 deletion src/dynamo/dynamo-store.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import * as DynamoDB from 'aws-sdk/clients/dynamodb'
import { Observable } from 'rxjs'
import { tap } from 'rxjs/operators'
import { MetadataHelper } from '../decorator/metadata/metadata-helper'
import { createLogger, Logger } from '../logger/logger'
import { ModelConstructor } from '../model/model-constructor'
import { DEFAULT_SESSION_VALIDITY_ENSURER } from './default-session-validity-ensurer.const'
import { DEFAULT_TABLE_NAME_RESOLVER } from './default-table-name-resolver.const'
Expand All @@ -19,6 +21,7 @@ import { SessionValidityEnsurer } from './session-validity-ensurer.type'
import { TableNameResolver } from './table-name-resolver.type'

export class DynamoStore<T> {
private readonly logger: Logger
private readonly dynamoRx: DynamoRx

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

this.tableName = tableName
this.logger.debug('instance created')
}

get dynamoDb(): DynamoDB {
Expand Down Expand Up @@ -86,7 +91,8 @@ export class DynamoStore<T> {
}

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

// Commented because not used at the moment
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { BatchGetItemInput } from 'aws-sdk/clients/dynamodb'
import { isObject } from 'lodash'
import { Observable } from 'rxjs'
import { map } from 'rxjs/operators'
import { map, tap } from 'rxjs/operators'
import { Metadata } from '../../../decorator/metadata/metadata'
import { MetadataHelper } from '../../../decorator/metadata/metadata-helper'
import { createLogger, Logger } from '../../../logger/logger'
import { Mapper } from '../../../mapper/mapper'
import { Attributes } from '../../../mapper/type/attribute.type'
import { ModelConstructor } from '../../../model/model-constructor'
Expand All @@ -12,6 +13,7 @@ import { BatchGetSingleTableResponse } from './batch-get-single-table.response'

// TODO add support for indexes
export class BatchGetSingleTableRequest<T> {
private readonly logger: Logger
readonly dynamoRx: DynamoRx
readonly params: BatchGetItemInput
readonly modelClazz: ModelConstructor<T>
Expand All @@ -20,6 +22,7 @@ export class BatchGetSingleTableRequest<T> {
private _metadata: Metadata<T>

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

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

execFullResponse(): Observable<BatchGetSingleTableResponse<T>> {
this.logger.debug('request', this.params)
return this.dynamoRx.batchGetItems(this.params).pipe(
tap(response => this.logger.debug('response', response)),
map(response => {
let items: T[]
if (response.Responses && Object.keys(response.Responses).length && response.Responses[this.tableName]) {
Expand All @@ -62,12 +67,15 @@ export class BatchGetSingleTableRequest<T> {
UnprocessedKeys: response.UnprocessedKeys,
ConsumedCapacity: response.ConsumedCapacity,
}
})
}),
tap(response => this.logger.debug('mapped items', response.Items))
)
}

exec(): Observable<T[]> {
this.logger.debug('request', this.params)
return this.dynamoRx.batchGetItems(this.params).pipe(
tap(response => this.logger.debug('response', response)),
map(response => {
if (response.Responses && Object.keys(response.Responses).length && response.Responses[this.tableName]) {
return response.Responses![this.tableName].map(attributeMap =>
Expand All @@ -76,7 +84,8 @@ export class BatchGetSingleTableRequest<T> {
} else {
return []
}
})
}),
tap(items => this.logger.debug('mapped items', items))
)
}

Expand Down
Loading

0 comments on commit c605b58

Please sign in to comment.