UNPKG

@idiamantino/livepro-utils

Version:

Stuff for LP

930 lines (828 loc) 37.9 kB
"use strict"; // Libraries // const DDB_PROCESS_CLIENTS = "livepro_process_client"; // const DDB_CLIENT_PROCESSES = "livepro_client_processes"; // const DDB_PROCESS_PER_CLIENT = "livepro_process_per_client"; // const DDB_PROCESS_IN_PROGRESS = "livepro_process_in_progress"; const DDB_INDEXER_OBJECTS = "indexer_objects"; const DDB_GLOBALCONFIG = "globalconfig"; const DDB_CLIENTS = "clients"; const DDB_SOLR = "solr"; const DDB_DATABASES = "databases"; const DDB_PROCESS_ENDPOINTS = "processes_endpoints"; const DDB_PROCESS_QUEUE = "processes_queue"; const DDB_PROCESS_SCHEDULE = "processes_schedule"; const AWS = require('aws-sdk'); const Utils = require("../library/utils"); let LpUtils = new Utils(); const { v1: uuidv1 } = require('uuid'); const dynamoattr = require('dynamodb-data-types').AttributeValue; class DynamoDB { constructor(region, apiVersion = '2012-08-10', debug = false) { this.setDebug(debug); this.region = region; LpUtils.printDebug("Dynamodb constructor region:", region); AWS.config.update({region:this.region}); this.ddb = new AWS.DynamoDB({apiVersion: apiVersion}, { region: this.region }); this.ddbClient = new AWS.DynamoDB.DocumentClient({ service: this.ddb }); } setDebug(debug = false) { this.debug = debug; LpUtils.setDebug(debug); } async test(params){ LpUtils.printDebug("Dynamodb function accessible:", params); LpUtils.printDebug("Region:", this.region); // this.setProcessQueueStatus("cdf2c150-c724-11ea-94ea-5d5d37731bbc","testing: " + params); let result = ""; // result = await this.getIndexerObjects("qa416"); // console.log(result); // result = await this.setIndexerObjectStatus("1f706780-e66f-11ea-9ec9-b385466e4e56","processing"); // console.log(result); // result = await this.getClient("test"); // console.log(result); // console.log(this.getProcessQueue("qa415")); // await this.getIndexerObjects("qa416"); return (true); } async getProcessClientById(processId = "", limit = "") { // LpUtils.printDebug("Process ID", processId); let processesList = await this.getProcessClient(processId, "", "", "", limit); if(processesList.length > 0) return processesList[0]; } async getProcessQueueByClientName(clientName = "", limit = "") { let processesList = await this.getProcessClient("", clientName, "", "", limit); return processesList; } async getProcessQueueByProcessName(processName = "", limit = "") { let processesList = await this.getProcessClient("", "", "", processName, limit); return processesList; } async getProcessQueueByStatus(processStatus = "", limit = "") { let processesList = await this.getProcessClient("", "", processStatus, "", limit); return processesList; } async getProcessQueueByClientNameAndProcessInfo(clientName, processStatus, processName, limit = "") { let processesList = await this.getProcessClient("", clientName, "", "", limit); // if(processesList.length > 0) { // processesList.forEach(process => { // if(process.process_status == processStatus && process.process_name == processName) { // LpUtils.printDebug("Process already found for:", process.client_name); // // TODO: update timed out processes and return false // console.log("Process already exists, not adding duplicate"); // existentProcess = process; // } // }); // } // var processLoop = new Promise((resolve, reject) => { // processesList.forEach((process, index, array) => { // LpUtils.printDebug(processStatus + "-" + processName); // if(process.process_status == processStatus && process.process_name == processName) { // LpUtils.printDebug("Process already found for:", process.client_name); // // TODO: update timed out processes and return false // console.log("Process already exists, not adding duplicate"); // existentProcess = process; // if (index === array.length -1) resolve(); // } // }); // }); // existentProcess = processLoop.then(() => { // LpUtils.printDebug("Process existent:", existentProcess); // return existentProcess; // }); // return existentProcess; let existentProcess = false; processesList.forEach((process, index, array) => { if(process.process_status == processStatus && process.process_name == processName) { // existentProcess.push(process); existentProcess = process; } }); LpUtils.printDebug("Process existent:", existentProcess); return existentProcess; } async getProcessClient(processId = "", clientName = "", processStatus = "", processName = "", limit = "") { console.log("List processes from the process table in Dynamodb"); let results = []; let items; let params; // QUERY with process_status if(processStatus !== "") { params = { TableName: DDB_PROCESS_QUEUE, IndexName: 'process_status-index', KeyConditionExpression: "#process_status = :process_status", ExpressionAttributeNames:{ "#process_status": "process_status" }, ExpressionAttributeValues: { ":process_status":{"S" : processStatus} } }; } // Query with process_id if(processId !== "") { params = { TableName: DDB_PROCESS_QUEUE, KeyConditionExpression: "#id = :id", ConsistentRead: true, ExpressionAttributeNames:{ "#id": "id" }, ExpressionAttributeValues: { ":id":{"S" : processId} } }; } // QUERY with clientName if (clientName != "") { params = { TableName: DDB_PROCESS_QUEUE, IndexName: 'client_name-index', KeyConditionExpression: "#client_name = :client_name", ExpressionAttributeNames:{ "#client_name": "client_name" }, ExpressionAttributeValues: { ":client_name":{"S" : clientName} } }; } LpUtils.printDebug("DDB Params:", params); if(limit !== "") params.Limit = limit; do{ let i = 0; items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; i++; if(i >= limit) break; }while(typeof items.LastEvaluatedKey != "undefined"); return(results); } async setProcessQueueStatus(processId, processStatus) { let resultJson; LpUtils.printDebug("Set Process Status", processId + "->" + processStatus); const statusUpdated = await this.ddbUpdateProcessClientProcessStatus(processId, processStatus, DDB_PROCESS_QUEUE); if(statusUpdated) return(true); else return(false); } async setIndexerObjectStatus(processId, processStatus) { let resultJson; LpUtils.printDebug("Set Process Status", processId + "->" + processStatus); const statusUpdated = await this.ddbUpdateIndexerObjectsProcessStatus(processId, processStatus, DDB_INDEXER_OBJECTS); if(statusUpdated) return(true); else return(false); } async updateClientSecrets(clientName, systemSecret = "", processSecret = "") { let client = await this.getClient(clientName); if(client[0] === undefined || client[0] === "") { console.log("Client not found while updating secrets: " + clientName); return(false); } else { client = client[0]; } if(systemSecret !== "") client.system_secret = systemSecret; if(processSecret !== "") client.process_secret = processSecret; // console.log(client); if(client.client_name === undefined) { console.log("Client name is undefined "); return(false); } else { try { return this.ddbAddClient(client.client_uid, client.client_name, client.database_client_name, client.database_server_name, client.solr_client_name, client.solr_server_name, client.client_subdomain, client.report_uid, client.system_secret, client.process_secret, client.client_url); } catch (error) { console.log(error); return(false); } } } async updateClient(clientUid = "", clientName = "", databaseClientName = "",databaseServerName = "",solrClientName = "",solrServerName = "",clientSubdomain = "",reportUid = "",systemSecret = "", processSecret = "", clientUrl = "", dateCreated = "") { let client; if(clientUid !== "") { this.getClient() } else if (clientName !== "") { client = this.getClient(clientName); } else { } } async getClient(clientName = "") { console.log("List clients from Dynamodb:", clientName); let results = []; let items; let params; // QUERY with process_status if(clientName !== "") { params = { TableName: DDB_CLIENTS, KeyConditionExpression: "#client_name = :client_name", IndexName: 'client_name-index', ExpressionAttributeNames:{ "#client_name": "client_name" }, ExpressionAttributeValues: { ":client_name":{"S" : clientName} } }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } else { params = { TableName: DDB_CLIENTS }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.scan(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } return(results); } async getSolr(solrName) { console.log("List solr from Dynamodb:", solrName); let results = []; let items; let params; // QUERY with process_status if(solrName !== "") { params = { TableName: DDB_SOLR, KeyConditionExpression: "#solr_name = :solr_name", IndexName: 'solr_name-index', ExpressionAttributeNames:{ "#solr_name": "solr_name" }, ExpressionAttributeValues: { ":solr_name":{"S" : solrName} } }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } else { LpUtils.printDebug("client_name must be defined"); } return(results); } async getDatabase(databaseName) { console.log("List database from Dynamodb:", databaseName); let results = []; let items; let params; // QUERY with process_status if(databaseName !== "") { params = { TableName: DDB_DATABASES, KeyConditionExpression: "#database_name = :database_name", IndexName: 'database_name-index', ExpressionAttributeNames:{ "#database_name": "database_name" }, ExpressionAttributeValues: { ":database_name":{"S" : databaseName} } }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } else { LpUtils.printDebug("databaseName must be defined"); } return(results); } async getIndexerObjects(clientName = "", processStatus = "", limit = "") { console.log("List Indexer Objects from Dynamodb:", clientName); let results = []; let items; let params; if(clientName !== "") { params = { TableName: DDB_INDEXER_OBJECTS, IndexName: 'client_name-index', KeyConditionExpression: "#client_name = :client_name", ExpressionAttributeNames:{ "#client_name": "client_name" }, ExpressionAttributeValues: { ":client_name":{"S" : clientName} } }; } if(processStatus !== "") { params = { TableName: DDB_INDEXER_OBJECTS, IndexName: 'process_status-index', KeyConditionExpression: "#process_status = :process_status", ExpressionAttributeNames:{ "#process_status": "process_status" }, ExpressionAttributeValues: { ":process_status":{"S" : processStatus} } }; } // LpUtils.printDebug("Dynamodb Params:", params); if(limit !== "") params.Limit = limit; do{ let i = 0; items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; i++; if(i >= limit) break; }while(typeof items.LastEvaluatedKey != "undefined"); return(results); } async getProcessSchedule(clientName = "", processName = "") { console.log("List processes schedule from Dynamodb"); let results = []; let items; let params; if(processName !== "") { params = { TableName: DDB_PROCESS_SCHEDULE, KeyConditionExpression: "#process_name = :process_name", ExpressionAttributeNames:{ "#process_name": "process_name" }, ExpressionAttributeValues: { ":process_name":{"S" : processName} } }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } else if(clientName !== "") { params = { TableName: DDB_PROCESS_SCHEDULE, KeyConditionExpression: "#client_name = :client_name", ExpressionAttributeNames:{ "#client_name": "client_name" }, ExpressionAttributeValues: { ":client_name":{"S" : clientName} } }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } else { params = { TableName: DDB_PROCESS_SCHEDULE }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.scan(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } return(results); } async getProcessEndpoints(processName = "") { console.log("List processes endpoints from Dynamodb:", processName); let results = []; let items; let params; if(processName !== "") { params = { TableName: DDB_PROCESS_ENDPOINTS, KeyConditionExpression: "#process_name = :process_name", ExpressionAttributeNames:{ "#process_name": "process_name" }, ExpressionAttributeValues: { ":process_name":{"S" : processName} } }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } else { params = { TableName: DDB_PROCESS_ENDPOINTS }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.scan(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } return(results); } async getGlobalConfig(globalconfigCode) { console.log("List globalconfig from Dynamodb:", globalconfigCode); let results = []; let items; let params; // QUERY with process_status if(globalconfigCode !== "") { params = { TableName: DDB_GLOBALCONFIG, KeyConditionExpression: "#globalconfig_code = :globalconfig_code", IndexName: 'globalconfig_code-index', ExpressionAttributeNames:{ "#globalconfig_code": "globalconfig_code" }, ExpressionAttributeValues: { ":globalconfig_code":{"S" : globalconfigCode} } }; LpUtils.printDebug("Dynamodb Params:", params); do{ items = await this.ddb.query(params).promise(); items.Items.forEach((item) => results.push(dynamoattr.unwrap(item))); params.ExclusiveStartKey = items.LastEvaluatedKey; }while(typeof items.LastEvaluatedKey != "undefined"); } else { LpUtils.printDebug("globalconfig_code must be defined"); } return(results); } /** * Indexer Objects Table Section */ async ddbUpdateIndexerObjectsProcessStatus(indexerUid, processStatus, tableName) { if(tableName === "") tableName = DDB_INDEXER_OBJECTS; var paramsdb = { TableName: tableName, Key: { "indexer_uid": indexerUid }, UpdateExpression: "set process_status = :process_status", ExpressionAttributeValues: {":process_status": processStatus}, ReturnValues:"UPDATED_NEW" }; const updated = new Promise((res, rej) => { console.log(paramsdb); res(true); this.ddbClient.update(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } async ddbAddIndexerObject(indexerUid, urlSolr, clientName, content, type, processStatus, s3PathContent, dateCreated = "") { let currentTimestamp = Math.floor(Date.now() / 1000); let dateUpdated = currentTimestamp.toString(); if(dateCreated === "") dateCreated = dateUpdated; let paramsdb = { "TableName": DDB_INDEXER_OBJECTS, "Item": { "indexer_uid": { S: indexerUid }, "url_solr": {"S": urlSolr}, "client_name": {"S": clientName}, "content": {"S": JSON.stringify(content)}, "type": {"S": type}, "s3_path_content": {"S": s3PathContent}, "process_status": {"S": processStatus}, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated}, }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; LpUtils.printDebug("Process Client DDB Params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } /** * Process Client Table Section */ async ddbAddProcessClient(uid, clientName, processStatus, processName, dateExecution, dateCreated, dateUpdated, priority, processUrl, checkResponse) { let paramsdb = { "TableName": DDB_PROCESS_QUEUE, "Item": { "id": { S: uid }, "client_name": {"S": clientName}, "process_status": {"S": processStatus}, "process_name": {"S": processName}, "date_execution": {"S": dateExecution}, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated}, "priority": {"N": priority}, "process_url": {"S": processUrl}, "check_response": {"BOOL": checkResponse} }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; LpUtils.printDebug("Process Client DDB Params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } // V2: Update client with only fields for the new environment async ddbUpdateClient(ddbClient) { let paramsdb = { "TableName": DDB_CLIENTS, "Item": {}, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; if(ddbClient['client_name'] === undefined || ddbClient['client_name'] === "") { console.log("Client Name can't be empty"); return false; } if(ddbClient['client_uid'] === undefined || ddbClient['client_uid'] === "") { ddbClient['client_uid'] = LpUtils.randomString(10, true) + "-" + uuidv1(); } let currentTimestamp = Math.floor(Date.now() / 1000); ddbClient["date_updated"] = currentTimestamp.toString(); if(ddbClient["date_created"] === "") ddbClient["date_created"] = ddbClient["date_updated"]; if(ddbClient["client_uid"] !== undefined && ddbClient['client_uid'] !== "") paramsdb.Item.client_uid = {"S": ddbClient['client_uid']}; if(ddbClient["client_name"] !== undefined && ddbClient['client_name'] !== "") paramsdb.Item.client_name = {"S": ddbClient['client_name']}; if(ddbClient["database_username"] !== undefined && ddbClient['database_username'] !== "") paramsdb.Item.database_username = {"S": ddbClient['database_username']}; if(ddbClient["database_password"] !== undefined && ddbClient['database_password'] !== "") paramsdb.Item.database_password = {"S": ddbClient['database_password']}; if(ddbClient["database_name"] !== undefined && ddbClient['database_name'] !== "") paramsdb.Item.database_name = {"S": ddbClient['database_name']}; if(ddbClient["subdomain"] !== undefined && ddbClient['subdomain'] !== "") paramsdb.Item.subdomain = {"S": ddbClient['subdomain']}; if(ddbClient["domain"] !== undefined && ddbClient['domain'] !== "") paramsdb.Item.domain = {"S": ddbClient['domain']}; if(ddbClient["date_created"] !== undefined && ddbClient['date_created'] !== "") paramsdb.Item.date_created = {"S": ddbClient['date_created']}; if(ddbClient["date_updated"] !== undefined && ddbClient['date_updated'] !== "") paramsdb.Item.date_updated = {"S": ddbClient['date_updated']}; LpUtils.printDebug("Client ddb params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } /** * Client Table Section */ async ddbAddClient(clientUid,clientName,databaseClientName = "",databaseServerName = "",solrClientName = "",solrServerName = "",clientSubdomain = "",reportUid = "",systemSecret = "", processSecret = "", clientUrl = "", dateCreated = "") { let currentTimestamp = Math.floor(Date.now() / 1000); let dateUpdated = currentTimestamp.toString(); if(dateCreated === "") dateCreated = dateUpdated; let paramsdb = { "TableName": DDB_CLIENTS, "Item": { "client_uid": { S: clientUid }, "client_name": {"S": clientName}, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated} }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; if(databaseClientName !== "") paramsdb.Item.database_client_name = {"S": databaseClientName}; if(databaseServerName !== "") paramsdb.Item.database_server_name = {"S": databaseServerName}; if(solrClientName !== "") paramsdb.Item.solr_client_name = {"S": solrClientName}; if(solrServerName !== "") paramsdb.Item.solr_server_name = {"S": solrServerName}; if(clientSubdomain !== "") paramsdb.Item.client_subdomain = {"S": clientSubdomain}; if(reportUid !== "") paramsdb.Item.report_uid = {"S": reportUid}; if(systemSecret !== "") paramsdb.Item.system_secret = {"S": systemSecret}; if(processSecret !== "") paramsdb.Item.process_secret = {"S": processSecret}; if(clientUrl !== "") paramsdb.Item.client_url = {"S": clientUrl}; LpUtils.printDebug("Client ddb params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } async ddbUpdateProcessClientProcessStatus(id, processStatus, tableName) { if(tableName === "") tableName = DDB_PROCESS_QUEUE; var paramsdb = { TableName: tableName, Key: { id: id }, UpdateExpression: "set process_status = :process_status", ExpressionAttributeValues: {":process_status": processStatus}, ReturnValues:"UPDATED_NEW" }; const updated = new Promise((res, rej) => { this.ddbClient.update(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } /** * Solr Table Section */ async ddbAddSolr(solrUid,solrName,solrReadHost = "",solrWriteHost = "", dateCreated = "") { let currentTimestamp = Math.floor(Date.now() / 1000); let dateUpdated = currentTimestamp.toString(); if(dateCreated === "") dateCreated = dateUpdated; let paramsdb = { "TableName": DDB_SOLR, "Item": { "solr_uid": { S: solrUid }, "solr_name": {"S": solrName}, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated} }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; if(solrReadHost !== "") paramsdb.Item.solr_read_host = {"S": solrReadHost}; if(solrWriteHost !== "") paramsdb.Item.solr_write_host = {"S": solrWriteHost}; LpUtils.printDebug("Solr ddb params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } /** * Database Table Section */ async ddbAddDatabase(databaseUid ,databaseName ,databaseUsername = "",databasePassword = "",databaseHost = "", databaseEndpoint = "",databaseReplicaEndpoint = "", dateCreated = "") { let currentTimestamp = Math.floor(Date.now() / 1000); let dateUpdated = currentTimestamp.toString(); if(dateCreated === "") dateCreated = dateUpdated; let paramsdb = { "TableName": DDB_DATABASES, "Item": { "database_uid": { S: databaseUid }, "database_name": {"S": databaseName}, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated} }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; if(databaseUsername !== "") paramsdb.Item.database_username = {"S": databaseUsername}; if(databasePassword !== "") paramsdb.Item.database_password = {"S": databasePassword}; if(databaseHost !== "") paramsdb.Item.database_host = {"S": databaseHost}; if(databaseEndpoint !== "") paramsdb.Item.database_endpoint = {"S": databaseEndpoint}; if(databaseReplicaEndpoint !== "") paramsdb.Item.database_replica_endpoint = {"S": databaseReplicaEndpoint}; LpUtils.printDebug("Database ddb params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } /** * Global Config Table Section */ async ddbAddGlobalConfig(globalconfigUid,globalconfigCode,globalconfigContent = "",globalconfigSection = "", dateCreated = "") { let currentTimestamp = Math.floor(Date.now() / 1000); let dateUpdated = currentTimestamp.toString(); if(dateCreated === "") dateCreated = dateUpdated; let paramsdb = { "TableName": DDB_GLOBALCONFIG, "Item": { "globalconfig_uid": { S: globalconfigUid }, "globalconfig_code": {"S": globalconfigCode}, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated} }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; if(globalconfigContent !== "") paramsdb.Item.globalconfig_content = {"S": globalconfigContent}; if(globalconfigSection !== "") paramsdb.Item.globalconfig_section = {"S": globalconfigSection}; LpUtils.printDebug("Global Config ddb params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } /** * Process Schedule Table Section */ async ddbAddProcessSchedule(uid, processName, clientName = "", cronExpression = "", dateCreated = "") { let currentTimestamp = Math.floor(Date.now() / 1000); let dateUpdated = currentTimestamp.toString(); if(dateCreated === "") dateCreated = dateUpdated; let paramsdb = { "TableName": DDB_PROCESS_SCHEDULE, "Item": { "id": { "S": uid }, "process_name": { "S": processName }, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated} }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; if(clientName !== "") paramsdb.Item.client_name = {"S": clientName}; if(cronExpression !== "") paramsdb.Item.cron_expression = {"S": cronExpression}; LpUtils.printDebug("Process Schedule ddb params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } /** * Process Endpoints Table Section */ async ddbAddProcessEndpoints(processName, checkResponse = "", priority = "", processType = "", processUrl = "", expirationMinutes = "", dateCreated = "") { let currentTimestamp = Math.floor(Date.now() / 1000); let dateUpdated = currentTimestamp.toString(); if(dateCreated === "") dateCreated = dateUpdated; let paramsdb = { "TableName": DDB_PROCESS_ENDPOINTS, "Item": { "process_name": { "S": processName }, "date_created": {"S": dateCreated}, "date_updated": {"S": dateUpdated} }, "ConditionExpression": 'attribute_not_exists(partitionKey) AND attribute_not_exists(sortKey)' }; if(checkResponse !== "") paramsdb.Item.check_response = {"BOOL": checkResponse}; if(priority !== "") paramsdb.Item.priority = {"S": priority}; if(processType !== "") paramsdb.Item.process_type = {"S": processType}; if(processUrl !== "") paramsdb.Item.process_url = {"S": processUrl}; if(expirationMinutes !== "") paramsdb.Item.expiration_minutes = {"N": expirationMinutes}; LpUtils.printDebug("Process Endpoints ddb params: ", paramsdb); const updated = new Promise((res, rej) => { this.ddb.putItem(paramsdb, function(err, data) { if (err) { console.log("Error", err); rej(false); } else { res(true); } }); }); return(await updated); } } module.exports = DynamoDB;