From 9d59c0c17eb04750923a48c928bf078d32878885 Mon Sep 17 00:00:00 2001 From: "walter.dsouza" Date: Mon, 15 Mar 2021 16:38:23 +0530 Subject: [PATCH] switched to seismic user and resolved lint errors in datastore --- devops/scripts/ibm_jwt_client.py | 4 +- src/cloud/providers/ibm/datastore.ts | 230 ++++++++++++++------------- 2 files changed, 123 insertions(+), 111 deletions(-) diff --git a/devops/scripts/ibm_jwt_client.py b/devops/scripts/ibm_jwt_client.py index 3bc2e051..e7d6f78a 100644 --- a/devops/scripts/ibm_jwt_client.py +++ b/devops/scripts/ibm_jwt_client.py @@ -5,8 +5,8 @@ import json url = os.getenv('KEYCLOAK_URL') client_id = os.getenv('KEYCLOAK_CLIENT_ID') client_secret = os.getenv('KEYCLOAK_CLIENT_SECRET') -user = os.getenv('AUTH_USER_ACCESS') -password = os.getenv('AUTH_USER_ACCESS_PASSWORD') +user = os.getenv('IBM_SEISMIC_AUTH_USER_ACCESS') +password = os.getenv('IBM_SEISMIC_AUTH_USER_ACCESS_PASSWORD') payload = "grant_type=password&client_id="+client_id+"&client_secret="+client_secret+"&username="+user+"&password="+password+"&scope=openid" headers = { diff --git a/src/cloud/providers/ibm/datastore.ts b/src/cloud/providers/ibm/datastore.ts index 20fccaea..d8716177 100644 --- a/src/cloud/providers/ibm/datastore.ts +++ b/src/cloud/providers/ibm/datastore.ts @@ -1,8 +1,8 @@ /* Licensed Materials - Property of IBM */ /* (c) Copyright IBM Corp. 2020. All Rights Reserved.*/ - -import {AbstractJournal, AbstractJournalTransaction, IJournalQueryModel, IJournalTransaction, JournalFactory} from '../../journal'; -import cloudant from '@cloudant/cloudant'; + +import { AbstractJournal, AbstractJournalTransaction, IJournalQueryModel, IJournalTransaction, JournalFactory } from '../../journal'; +import cloudant from '@cloudant/cloudant'; import { Config } from '../../config'; import { Utils } from '../../../shared/utils' import { IbmConfig } from './config'; @@ -13,117 +13,127 @@ let docDb; export class DatastoreDAO extends AbstractJournal { public KEY = Symbol('id'); - public constructor({ projectId, keyFilename }) { + public constructor({ projectId, keyFilename }) { super(); logger.info('In datastore.constructor.'); - const dbUrl = IbmConfig.DOC_DB_URL; + const dbUrl = IbmConfig.DOC_DB_URL; logger.debug(dbUrl); const cloudantOb = cloudant(dbUrl); logger.info('DB object created. cloudantOb-'); logger.debug(cloudantOb); - docDb = cloudantOb.db.use(IbmConfig.DOC_DB_COLLECTION); - } + try { + logger.debug('before connection'); + docDb = cloudantOb.db.use(IbmConfig.DOC_DB_COLLECTION); + logger.debug('after connection'); + } catch (err) { + logger.debug('catch of db connection code'); + logger.debug('db connection error - ', err); + } + } public async get(key: any): Promise<[any | any[]]> { logger.info('In datastore get.'); logger.debug(key); let entityDocument; - ///using the field 'name' to fetch the document. Note: the get() is expecting the field _id - entityDocument = await docDb.get(key.name).then( + /// using the field 'name' to fetch the document. Note: the get() is expecting the field _id + entityDocument = await docDb.get(key.name).then( result => { result[this.KEY] = result[this.KEY.toString()]; delete result[this.KEY.toString()]; logger.info('Deleted field'); logger.debug(result[this.KEY.toString()]); - return [result];} - ).catch((error)=>{ + return [result]; + } + ).catch((error) => { logger.error('Get failed to fetch the document.'); logger.error(error); - return [undefined]; + return [undefined]; }) logger.debug(entityDocument); logger.info('returning from datastore'); - return entityDocument; + return entityDocument; } - - + + public async save(entity: any): Promise { logger.info('In datastore.save.'); logger.debug(entity); - let self = this; + const self = this; logger.info('Fetching document.'); - await docDb.get(entity.key.name, { revs_info: true }, function(err, existingDoc) {///changed from entity.name to entity.key.name - - if (!err) {///update record + + /// changed from entity.name to entity.key.name + await docDb.get(entity.key.name, { revs_info: true }, (err, existingDoc) => { + + if (!err) {/// update record logger.info('Document exists in db.'); - let docTemp = JSON.parse(JSON.stringify(existingDoc)); - ///have to add if condition. before that check the dataset object structure + const docTemp = JSON.parse(JSON.stringify(existingDoc)); + /// have to add if condition. before that check the dataset object structure docTemp.ltag = entity.ltag; - if(entity.data.trusted) + if (entity.data.trusted) docTemp.trusted = entity.data.trusted; - + Object.assign(docTemp, entity.data); logger.debug(docTemp); - docDb.insert(docTemp,entity.key.name); + docDb.insert(docTemp, entity.key.name); logger.info('Document updated.'); } - else///insert record + else/// insert record { logger.info('Document does not exist. This will be a new document'); - let customizedOb = {}; + const customizedOb = {}; customizedOb['id'] = entity.key.name; customizedOb['key'] = entity.key.partitionKey; customizedOb[self.KEY.toString()] = entity.key; - for(var element in entity.data) { - if(!((entity.key.kind == 'datasets' || entity.key.kind == 'seismicmeta') && element == '_id')) - if(!((entity.key.kind == 'datasets' || entity.key.kind == 'seismicmeta') && element == '_rev')) + for (const element in entity.data) { + if (!((entity.key.kind === 'datasets' || entity.key.kind === 'seismicmeta') && element === '_id')) + if (!((entity.key.kind === 'datasets' || entity.key.kind === 'seismicmeta') && element === '_rev')) customizedOb[element] = entity.data[element]; }; logger.debug(customizedOb); - docDb.insert(customizedOb,entity.key.name); + docDb.insert(customizedOb, entity.key.name); logger.info('Document inserted.'); } }); logger.info('Returning from datastore.save.'); - - } - + + } + public async delete(key: any): Promise { logger.info('In datastore.delete.'); const doc = await docDb.get(key.name); - try{ + try { docDb.destroy(doc._id, doc._rev); logger.info('Document deleted.'); } - catch(err) - { + catch (err) { logger.error('Deletion failed. Error - '); logger.error(err); } logger.info('Returning from datastore.delete.'); - } - - public createQuery(namespace: string, kind: string): IJournalQueryModel { + } + + public createQuery(namespace: string, kind: string): IJournalQueryModel { logger.info('In datastore.createQuery. Returning.'); logger.debug(namespace); logger.debug(kind); - return new IbmDocDbQuery(namespace, kind); - } - - public async runQuery(query: IJournalQueryModel): Promise<[any[], {endCursor?: string}]> { + return new IbmDocDbQuery(namespace, kind); + } + + public async runQuery(query: IJournalQueryModel): Promise<[any[], { endCursor?: string }]> { logger.info('In datastore.runQuery.'); const queryObject = (query as IbmDocDbQuery); logger.debug(queryObject); - const mangoQuery = queryObject.prepareStatement(Config.DATASETS_KIND, queryObject.namespace, queryObject.kind);///tablemane datasets?? + /// tablemane datasets?? + const mangoQuery = queryObject.prepareStatement(Config.DATASETS_KIND, queryObject.namespace, queryObject.kind); logger.debug(mangoQuery); let docs; await docDb.find(mangoQuery).then((doc) => { docs = doc.docs; - logger.debug(doc.docs); - }); + logger.debug(doc.docs); + }); logger.info('Find query executed.'); - + const results = docs.map(result => { if (!result) { return result; @@ -136,11 +146,11 @@ export class DatastoreDAO extends AbstractJournal { return result; } } - }); + }); return Promise.resolve([results, {}]); - } - - public createKey(specs: any): object { + } + + public createKey(specs: any): object { logger.info('In datastore.createKey'); logger.debug(specs); const kind = specs.path[0]; @@ -149,7 +159,7 @@ export class DatastoreDAO extends AbstractJournal { if (kind === Config.DATASETS_KIND) { name = Utils.makeID(16); } else if (kind === Config.SEISMICMETA_KIND) { - name = specs.path[1].replace(/\W/g, '-');///replaces path slashes into hyphen + name = specs.path[1].replace(/\W/g, '-');/// replaces path slashes into hyphen } else { name = specs.path[1]; } @@ -158,23 +168,23 @@ export class DatastoreDAO extends AbstractJournal { logger.debug(kind); logger.info('returning from createKey'); return { name, partitionKey, kind }; - } - - public getTransaction(): IJournalTransaction { + } + + public getTransaction(): IJournalTransaction { logger.info('In datastore.getTransaction'); return new IbmDocDbTransactionDAO(this); } - + public getQueryFilterSymbolContains(): string { logger.info('In datastore.getQueryFilterSymbolContains. Not implemented'); - return 'CONTAINS';//not implemented + return 'CONTAINS';// not implemented } } declare type OperationType = 'save' | 'delete'; export class IbmDocDbTransactionOperation { - public constructor (type: OperationType, entityOrKey: any) { + public constructor(type: OperationType, entityOrKey: any) { logger.info('In datastore.IbmDocDbTransactionOperation.constructor.'); logger.debug(type); logger.debug(entityOrKey); @@ -254,7 +264,7 @@ export class IbmDocDbTransactionDAO extends AbstractJournalTransaction { public async commit(): Promise { logger.info('In datastore.IbmDocDbTransactionDAO.commit.'); - for(const operation of this.queuedOperations) { + for (const operation of this.queuedOperations) { if (operation.type === 'save') { await this.owner.save(operation.entityOrKey); } @@ -267,7 +277,7 @@ export class IbmDocDbTransactionDAO extends AbstractJournalTransaction { return Promise.resolve(); } - public getQueryFilterSymbolContains(): string { + public getQueryFilterSymbolContains(): string { logger.info('In datastore.IbmDocDbTransactionDAO.getQueryFilterSymbolContains. Not implemented'); return ''; } @@ -278,29 +288,29 @@ export class IbmDocDbTransactionDAO extends AbstractJournalTransaction { /** - * not sure of HAS_ANCESTOR and CONTAINS in CouchDB. + * not sure of HAS_ANCESTOR and CONTAINS in CouchDB. */ declare type Operator = '=' | '<' | '>' | '<=' | '>=' | 'HAS_ANCESTOR' | 'CONTAINS'; /* declaring enum for operator */ -enum CouchOperators { - Equal = "$eq", - GreaterThan = "$gt", - LesserThan = "$lt", - GreaterThanEqualTo = "$gte", - LesserThanEqualTo = "$lte", - Contains = "$elemMatch", +enum CouchOperators { + Equal = '$eq', + GreaterThan = '$gt', + LesserThan = '$lt', + GreaterThanEqualTo = '$gte', + LesserThanEqualTo = '$lte', + Contains = '$elemMatch', } -enum ConditionalOperators { - Equal = "=", - GreaterThan = ">", - LesserThan = "<", - GreaterThanEqualTo = ">=", - LesserThanEqualTo = "<=", - Contains = "CONTAINS", +enum ConditionalOperators { + Equal = '=', + GreaterThan = '>', + LesserThan = '<', + GreaterThanEqualTo = '>=', + LesserThanEqualTo = '<=', + Contains = 'CONTAINS', } @@ -309,7 +319,7 @@ enum ConditionalOperators { */ export class IbmDocDbQuery implements IJournalQueryModel { - public namespace: string; + public namespace: string; public kind: string; public constructor(namespace: string, kind: string) { @@ -320,7 +330,7 @@ export class IbmDocDbQuery implements IJournalQueryModel { this.kind = kind; } - + filter(property: string, value: {}): IJournalQueryModel; @@ -370,9 +380,9 @@ export class IbmDocDbQuery implements IJournalQueryModel { case ConditionalOperators.Contains: cdbOperator = CouchOperators.Contains break; - } + } - logger.debug('cdbOperator - '+cdbOperator); + logger.debug('cdbOperator - ' + cdbOperator); const filter = new IbmQueryFilter(property, cdbOperator, value); this.filters.push(filter); @@ -398,12 +408,12 @@ export class IbmDocDbQuery implements IJournalQueryModel { return this; } - ///field names added to query. Returned in the response if they exists. + /// field names added to query. Returned in the response if they exists. select(fieldNames: string | string[]): IJournalQueryModel { - ///if you wondering, converts string to an array + /// if you wondering, converts string to an array logger.info('In datastore.IbmDocDbQuery.select.'); logger.debug(fieldNames); - if (typeof fieldNames === 'string') { + if (typeof fieldNames === 'string') { this.projectedFieldNames = [fieldNames]; } else { this.projectedFieldNames = fieldNames; @@ -415,9 +425,9 @@ export class IbmDocDbQuery implements IJournalQueryModel { private projectedFieldNames: string[] = []; private groupByFieldNames: string[] = []; private pagingStart?: string; - private pagingLimit?: number; - - //public prepareSqlStatement(tableName: string): { spec: SqlQuerySpec, options: FeedOptions } { + private pagingLimit?: number; + + // public prepareSqlStatement(tableName: string): { spec: SqlQuerySpec, options: FeedOptions } { public prepareStatement(tableName: string, namespace: string, kind: string): any { logger.info('In datastore.IbmDocDbQuery.prepareStatement.'); logger.debug(tableName); @@ -426,13 +436,13 @@ export class IbmDocDbQuery implements IJournalQueryModel { const builder = new QueryStatementBuilder(tableName, namespace, kind); logger.debug(builder); - for(const filter of this.filters) { + for (const filter of this.filters) { filter.addFilterExpression(builder); } builder.projectedFieldNames = this.projectedFieldNames; builder.pagingLimit = this.pagingLimit; - /*builder.groupByFieldNames = this.groupByFieldNames;*////walter commented as working on basic query + /*builder.groupByFieldNames = this.groupByFieldNames;*//// working on basic query const spec = builder.build(); logger.debug(spec); @@ -468,7 +478,7 @@ class IbmQueryFilter { } class QueryStatementBuilder { - public tableName: string; + public tableName: string; public namespace: string; public kind: string; private filterExpressions: string[] = []; @@ -484,43 +494,45 @@ class QueryStatementBuilder { logger.debug(this.namespace); logger.debug(this.kind); } - + public addFilterExpression(property: string, operator: string, value: {}) { logger.info('In datastore.QueryStatementBuilder.addFilterExpression.'); logger.debug(property); logger.debug(operator); logger.debug(value); - this.filterExpressions.push('{"property": "' + property +'", "operator": "' + operator + '", "value": "' + value + '"}'); + this.filterExpressions.push( + '{"property": "' + property + + '", "operator": "' + operator + + '", "value": "' + value + '"}'); } - //public build(): SqlQuerySpec { - public build(): any { + // public build(): SqlQuerySpec { + public build(): any { logger.info('In datastore.QueryStatementBuilder.build'); - let selectorQuery = {}; - let andWrapper = {}; + const selectorQuery = {}; + const andWrapper = {}; andWrapper['$and'] = []; - let keyQuery = {}; - ///let filter = ''; - let fieldsOption = []; + const keyQuery = {}; + /// let filter = ''; + const fieldsOption = []; - keyQuery['Symbol(id)'] = {partitionKey:{$eq:this.namespace+'-'+this.kind},kind:{$eq:this.kind}}; + keyQuery['Symbol(id)'] = { partitionKey: { $eq: this.namespace + '-' + this.kind }, kind: { $eq: this.kind } }; andWrapper['$and'].push(keyQuery); selectorQuery['selector'] = andWrapper; - for(const filter of this.filterExpressions) { - let filterObject = JSON.parse(filter); - let op = filterObject.operator; + for (const filter of this.filterExpressions) { + const filterObject = JSON.parse(filter); + const op = filterObject.operator; let filterQuery = {}; - if(filterObject.operator === '$elemMatch') - { + if (filterObject.operator === '$elemMatch') { logger.debug('$elemMatch operator'); - filterQuery = {[filterObject.property]: {[filterObject.operator]: {"$eq":filterObject.value}}}; + filterQuery = { [filterObject.property]: { [filterObject.operator]: { '$eq': filterObject.value } } }; } else - filterQuery = {[filterObject.property]: {[filterObject.operator]: filterObject.value}}; + filterQuery = { [filterObject.property]: { [filterObject.operator]: filterObject.value } }; logger.debug('filterQuery - '); logger.debug(filterQuery); andWrapper['$and'].push(filterQuery); @@ -531,16 +543,16 @@ class QueryStatementBuilder { if (this.projectedFieldNames.length) { selectorQuery[IbmConfig.DOC_DB_QUERY_SELECT_FIELDS] = fieldsOption; - for(const field of this.projectedFieldNames) { + for (const field of this.projectedFieldNames) { fieldsOption.push(field); } } - if(this.pagingLimit === undefined) + if (this.pagingLimit === undefined) this.pagingLimit = IbmConfig.DOC_DB_QUERY_RESULT_LIMIT_VALUE; - + selectorQuery[IbmConfig.DOC_DB_QUERY_RESULT_LIMIT] = this.pagingLimit; logger.debug(selectorQuery); - return selectorQuery; + return selectorQuery; } } \ No newline at end of file -- GitLab