diff --git a/.gitignore b/.gitignore index e43a04c53..fda4d8551 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ log pids deploy/prod.sh +deploy/env.sh node_modules test/tmp/submissions/*.zip test/tmp/design_submissions/*.zip diff --git a/actions/challenges.js b/actions/challenges.js index 6c9ec79f6..f4c342168 100755 --- a/actions/challenges.js +++ b/actions/challenges.js @@ -345,7 +345,7 @@ function validateInputParameter(helper, caller, challengeType, query, filter, pa var error = helper.checkContains(['asc', 'desc'], sortOrder.toLowerCase(), "sortOrder") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || - helper.checkMaxNumber(pageSize, MAX_INT, 'pageSize') || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, 'pageSize') || helper.checkMaxNumber(pageIndex, MAX_INT, 'pageIndex') || helper.checkContains(helper.VALID_LIST_TYPE, type.toUpperCase(), "type") || checkQueryParameterAndSortColumn(helper, type, query, sortColumn); @@ -502,10 +502,13 @@ function checkQueryParameterAndSortColumnV2(helper, type, queryString, sortColum * @since 1.21 */ function validateInputParameterV2(helper, caller, type, query, filter, pageIndex, pageSize, sortColumn, sortOrder, listType, dbConnectionMap, callback) { + + var allowedPageSize = helper.ListType.ACTIVE ? helper.MAX_INT : helper.MAX_PAGE_SIZE; + var error = helper.checkContains(['asc', 'desc'], sortOrder.toLowerCase(), "sortOrder") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || - helper.checkMaxNumber(pageSize, MAX_INT, 'pageSize') || + helper.checkMaxNumber(pageSize, allowedPageSize, 'pageSize') || helper.checkMaxNumber(pageIndex, MAX_INT, 'pageIndex') || checkQueryParameterAndSortColumnV2(helper, listType, query, sortColumn); @@ -938,7 +941,7 @@ var searchChallenges = function (api, connection, dbConnectionMap, community, ne sortColumn = query.sortcolumn || DEFAULT_SORT_COLUMN; listType = (query.listtype || helper.ListType.OPEN).toUpperCase(); pageIndex = Number(query.pageindex || 1); - pageSize = Number(query.pagesize || 50); + pageSize = Number(query.pagesize || helper.MAX_PAGE_SIZE); copyToFilter.forEach(function (p) { if (query.hasOwnProperty(p.toLowerCase())) { @@ -952,7 +955,7 @@ var searchChallenges = function (api, connection, dbConnectionMap, community, ne }, function (cb) { if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } setFilter(filter, sqlParams); @@ -3686,8 +3689,9 @@ var getChallenges = function (api, connection, listType, isMyChallenges, next) { (!query.sortcolumn && (listType == api.helper.ListType.ACTIVE || listType == api.helper.ListType.UPCOMING) ? "asc" : "desc"); sortColumn = query.sortcolumn || DEFAULT_SORT_COLUMN; pageIndex = Number(query.pageindex || 1); - pageSize = Number(query.pagesize || 150); - + pageSize = Number(query.pagesize || + (listType == api.helper.ListType.ACTIVE ? helper.MAX_INT : helper.MAX_PAGE_SIZE)); + if (isMyChallenges) { index = copyToFilter.indexOf('type'); copyToFilter.splice(index, 1); @@ -3727,7 +3731,7 @@ var getChallenges = function (api, connection, listType, isMyChallenges, next) { }, function (cb) { if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } setFilterV2(filter, sqlParams); diff --git a/actions/dataScienceChallenges.js b/actions/dataScienceChallenges.js index c84590acb..541725056 100644 --- a/actions/dataScienceChallenges.js +++ b/actions/dataScienceChallenges.js @@ -79,7 +79,7 @@ function pastDataScienceChallenges(pageIndex, pageSize, sortingColumnName, sorti submissionEndTo, api, connection, callback) { if (pageIndex === NO_PAGING) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } var sqlParams = {}; @@ -270,7 +270,7 @@ exports.pastDataScienceChallenges = { async.waterfall([ function (cb) { // Parse and validate request parameters pageIndex = Number(connection.params.pageIndex || 1); - pageSize = Number(connection.params.pageSize || 50); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); sortingOrder = connection.params.sortOrder || PAST_CHALLENGES_DEFAULT_SORT_ORDER; sortingColumnName = connection.params.sortColumn || PAST_CHALLENGES_DEFAULT_SORT_COLUMN; @@ -278,7 +278,7 @@ exports.pastDataScienceChallenges = { || helper.checkContains(PAST_CHALLENGES_DATA_COLUMN_NAMES, sortingColumnName.toLowerCase(), "sortColumn") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") - || helper.checkMaxInt(pageSize, 'pageSize'); + || helper.checkMaxNumber(pageSize,helper.MAX_PAGE_SIZE,'pageSize'); if (err) { cb(err); diff --git a/actions/marathonChallenges.js b/actions/marathonChallenges.js index 78fd88f50..9caf28ecd 100644 --- a/actions/marathonChallenges.js +++ b/actions/marathonChallenges.js @@ -137,7 +137,7 @@ exports.searchMarathonChallenges = { sortOrder = (params.sortOrder || "asc").toLowerCase(); sortColumn = (params.sortColumn || "roundId").toLowerCase(); pageIndex = Number(params.pageIndex || 1); - pageSize = Number(params.pageSize || 50); + pageSize = Number(params.pageSize || helper.MAX_PAGE_SIZE); if (!_.isDefined(params.sortOrder) && sortColumn === "roundid") { sortOrder = "desc"; @@ -180,7 +180,7 @@ exports.searchMarathonChallenges = { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(ALLOWABLE_LIST_TYPE, listType, "listType") || @@ -203,7 +203,7 @@ exports.searchMarathonChallenges = { if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } sqlParams = { firstRowIndex: (pageIndex - 1) * pageSize, diff --git a/actions/memDump.js b/actions/memDump.js index 7a78211c5..68983ca4c 100644 --- a/actions/memDump.js +++ b/actions/memDump.js @@ -11,6 +11,8 @@ exports.dumpMemory = { required: [], optional: [] }, + outputExample: {}, + cacheEnabled: false, version: 'v2', run: function (api, connection, next) { if (process.env.ADMIN_API_KEY && connection.params.apiKey === process.env.ADMIN_API_KEY) { diff --git a/actions/memberSearch.js b/actions/memberSearch.js index c17722925..bd2252c05 100755 --- a/actions/memberSearch.js +++ b/actions/memberSearch.js @@ -22,7 +22,7 @@ var searchUsers = function (api, connection, dbConnectionMap, next) { result = {}, sqlParams = {}, pageIndex = Number(connection.params.pageIndex || 1), - pageSize = Number(connection.params.pageSize || 10), + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE), caseSensitive = (connection.params.caseSensitive || "false").toLowerCase(), handle = connection.params.handle; @@ -36,7 +36,7 @@ var searchUsers = function (api, connection, dbConnectionMap, next) { var error = helper.checkPositiveInteger(pageIndex, "pageIndex") || helper.checkMaxNumber(pageIndex, helper.MAX_INT, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || - helper.checkMaxNumber(pageSize, 500, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkStringPopulated(handle, "handle"); if (error) { callback(error); diff --git a/actions/payments.js b/actions/payments.js index 9cb5bc4c3..0eb2d8dfc 100755 --- a/actions/payments.js +++ b/actions/payments.js @@ -73,7 +73,7 @@ var searchPayments = function (api, connection, next) { var error, i, helper = api.helper, pageIndex = Number(connection.params.pageIndex || 1), - pageSize = Number(connection.params.pageSize || 10), + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE), status = connection.params.status, type = connection.params.type, sortColumn = (connection.params.sortColumn || "createDate").toLowerCase(), @@ -98,7 +98,7 @@ var searchPayments = function (api, connection, next) { error = helper.checkPositiveInteger(pageIndex, "pageIndex") || helper.checkMaxInt(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") - || helper.checkMaxInt(pageSize, "pageSize") + || helper.checkMaxNumber(pageSize,helper.MAX_PAGE_SIZE,"pageSize") || helper.checkMember(connection) || helper.checkContains(["asc", "desc"], sortOrder.toLowerCase(), "sortOrder") || helper.checkSortColumn(ALLOWABLE_SORT_COLUMN, sortColumn) diff --git a/actions/reviewOpportunities.js b/actions/reviewOpportunities.js index d42adc3e8..ed89b53ef 100644 --- a/actions/reviewOpportunities.js +++ b/actions/reviewOpportunities.js @@ -346,7 +346,7 @@ var validateInputParameter = function (helper, connection, filter, isStudio, cb) error; params = connection.params; - pageSize = Number(params.pageSize || 10); + pageSize = Number(params.pageSize || helper.MAX_PAGE_SIZE); pageIndex = Number(params.pageIndex || 1); sortOrder = params.sortOrder || 'asc'; sortColumn = params.sortColumn || 'challengeName'; @@ -356,7 +356,7 @@ var validateInputParameter = function (helper, connection, filter, isStudio, cb) error = helper.checkPageIndex(pageIndex, 'pageIndex') || helper.checkPositiveInteger(pageSize, 'pageSize') || - helper.checkMaxInt(pageSize, 'pageSize') || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE,'pageSize') || helper.checkContains(helper.getLowerCaseList(allowedSortColumn), sortColumn.toLowerCase(), 'sortColumn') || helper.checkContains(helper.getLowerCaseList(ALLOWABLE_SORT_ORDER), sortOrder.toLowerCase(), 'sortOrder'); @@ -481,7 +481,7 @@ var getReviewOpportunities = function (api, connection, isStudio, next) { var helper = api.helper, result = {}, sqlParams, dbConnectionMap = connection.dbConnectionMap, pageIndex, pageSize, sortOrder, sortColumn, filter = {}, reviewOpportunities, queryName; - pageSize = Number(connection.params.pageSize || 10); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); pageIndex = Number(connection.params.pageIndex || 1); sortOrder = connection.params.sortOrder || 'asc'; sortColumn = connection.params.sortColumn || 'challengeName'; @@ -494,7 +494,7 @@ var getReviewOpportunities = function (api, connection, isStudio, next) { if (pageIndex === -1) { pageIndex = 1; - pageSize = helper.MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } sqlParams = { diff --git a/actions/rounds.js b/actions/rounds.js index b4e451a32..642435d03 100644 --- a/actions/rounds.js +++ b/actions/rounds.js @@ -216,7 +216,7 @@ var getRounds = function (api, connection, dbConnectionMap, next) { sortOrder = (params.sortOrder || "asc").toLowerCase(); sortColumn = (params.sortColumn || "registrationPhaseStartTime").toLowerCase(); pageIndex = Number(params.pageIndex || 1); - pageSize = Number(params.pageSize || 50); + pageSize = Number(params.pageSize || helper.MAX_PAGE_SIZE); async.waterfall([ function (cb) { @@ -240,7 +240,7 @@ var getRounds = function (api, connection, dbConnectionMap, next) { } } error = error || - helper.checkMaxNumber(pageSize, helper.MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(["asc", "desc"], sortOrder, "sortOrder") || @@ -285,7 +285,7 @@ var getRounds = function (api, connection, dbConnectionMap, next) { }, function (typeIds, cb) { if (pageIndex === -1) { pageIndex = 1; - pageSize = helper.MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } filterCondition = ' r.round_id > 0 '; diff --git a/actions/srmChallenges.js b/actions/srmChallenges.js index 5091eb5cb..41255a2a2 100644 --- a/actions/srmChallenges.js +++ b/actions/srmChallenges.js @@ -217,11 +217,6 @@ var DATE_FORMAT = "YYYY-MM-DD HH:mm"; */ var MAX_INT = 2147483647; -/** - * The default page size - */ -var DEFAULT_PAGE_SIZE = 50; - /** * Default number of leaders to show in SRM details */ @@ -265,7 +260,7 @@ exports.searchSRMChallenges = { sortColumn = "roundid"; } pageIndex = Number(params.pageIndex || 1); - pageSize = Number(params.pageSize || DEFAULT_PAGE_SIZE); + pageSize = Number(params.pageSize || helper.MAX_PAGE_SIZE); listType = (params.listType || 'ACTIVE').toUpperCase(); challengeName = _.has(params, 'challengeName') ? '%' + params.challengeName.toLowerCase() + '%' : '%'; @@ -287,7 +282,7 @@ exports.searchSRMChallenges = { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(["asc", "desc"], sortOrder, "sortOrder") || @@ -301,7 +296,7 @@ exports.searchSRMChallenges = { if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } sqlParams = { firstRowIndex: (pageIndex - 1) * pageSize, @@ -720,7 +715,7 @@ exports.getSRMSchedule = { sortColumn = (params.sortColumn || "registrationStartTime").toLowerCase(); pageIndex = Number(params.pageIndex || 1); - pageSize = Number(params.pageSize || DEFAULT_PAGE_SIZE); + pageSize = Number(params.pageSize || helper.MAX_PAGE_SIZE); if (!_.isDefined(params.sortOrder) && sortColumn === "registrationstarttime") { sortOrder = "desc"; @@ -734,7 +729,7 @@ exports.getSRMSchedule = { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(["asc", "desc"], sortOrder, "sortOrder") || @@ -757,7 +752,7 @@ exports.getSRMSchedule = { if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } SCHEDULE_TIMEZONE = api.config.tcConfig.databaseTimezoneIdentifier; cb(error); @@ -2402,7 +2397,7 @@ function getPracticeProblems(api, connection, next) { myPointsUpperBound, caller = connection.caller, pageIndex = Number(connection.params.pageIndex || 1), - pageSize = Number(connection.params.pageSize || 10), + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE), sortColumn = connection.params.sortColumn || 'problemId', sortOrder = connection.params.sortOrder || helper.consts.ASCENDING, exeQuery = function (query) { @@ -2414,7 +2409,7 @@ function getPracticeProblems(api, connection, next) { function (cb) { var error = helper.checkPageIndex(pageIndex, 'pageIndex') || helper.checkPositiveInteger(pageSize, 'pageSize') || - helper.checkMaxInt(pageSize, 'pageSize') || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, 'pageSize') || helper.checkContains(['asc', 'desc'], sortOrder.toLowerCase(), 'sortOrder') || helper.checkSortColumn(VALID_PRACTICE_PROBLEMS_SORT_COLUMN, sortColumn.toLowerCase()) || helper.checkMember(connection, 'Only logged in user can access to this endpoint.'); diff --git a/actions/tops.js b/actions/tops.js index 993a59326..7cbc35d5d 100644 --- a/actions/tops.js +++ b/actions/tops.js @@ -48,7 +48,7 @@ var getTops = function (api, connection, dbConnectionMap, next) { result = {}, active = false; pageIndex = Number(connection.params.pageIndex || 1); - pageSize = Number(connection.params.pageSize || 50); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); async.waterfall([ function (cb) { @@ -57,7 +57,7 @@ var getTops = function (api, connection, dbConnectionMap, next) { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(Object.keys(helper.softwareChallengeTypes), challengeType, "challengeType"); @@ -68,7 +68,7 @@ var getTops = function (api, connection, dbConnectionMap, next) { active = helper.softwareChallengeTypes[challengeType].active; if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } sqlParams.firstRowIndex = (pageIndex - 1) * pageSize; sqlParams.pageSize = pageSize; @@ -125,7 +125,7 @@ var getTops = function (api, connection, dbConnectionMap, next) { var getStudioTops = function (api, connection, dbConnectionMap, next) { var helper = api.helper, sqlParams = {}, pageIndex, pageSize, error, challengeType = connection.params.challengeType.toLowerCase(), result = {}; pageIndex = Number(connection.params.pageIndex || 1); - pageSize = Number(connection.params.pageSize || 10); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); async.waterfall([ function (cb) { @@ -137,7 +137,7 @@ var getStudioTops = function (api, connection, dbConnectionMap, next) { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, 'pageIndex') || - helper.checkMaxNumber(pageSize, MAX_INT, 'pageSize') || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, 'pageSize') || helper.checkPageIndex(pageIndex, 'pageIndex') || helper.checkPositiveInteger(pageSize, 'pageSize') || helper.checkContains(Object.keys(helper.studioChallengeTypes), challengeType, 'challengeType'); @@ -147,7 +147,7 @@ var getStudioTops = function (api, connection, dbConnectionMap, next) { } if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } sqlParams.firstRowIndex = (pageIndex - 1) * pageSize; sqlParams.pageSize = pageSize; @@ -277,7 +277,7 @@ exports.getMarathonTops = { dbConnectionMap = connection.dbConnectionMap, result = {}; pageIndex = Number(connection.params.pageIndex || 1); - pageSize = Number(connection.params.pageSize || 10); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); async.waterfall([ function (cb) { @@ -287,7 +287,7 @@ exports.getMarathonTops = { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(["competitors", "schools", "countries"], rankType, "rankType"); @@ -297,7 +297,7 @@ exports.getMarathonTops = { } if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } switch (rankType) { case "competitors": @@ -400,7 +400,7 @@ exports.getSRMTops = { return; } pageIndex = Number(connection.params.pageIndex || 1); - pageSize = Number(connection.params.pageSize || 10); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); async.waterfall([ function (cb) { @@ -410,7 +410,7 @@ exports.getSRMTops = { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(["competitors", "schools", "countries"], rankType, "rankType"); @@ -420,7 +420,7 @@ exports.getSRMTops = { } if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; } switch (rankType) { case "competitors": @@ -497,11 +497,6 @@ exports.getSRMTops = { */ var VALID_TRACK_TYPES = ['design', 'develop', 'data']; -/** - * Maximum page size - */ -var MAX_PAGE_SIZE = 1000; - /** * The API for top track members of develop, design and data. */ @@ -523,7 +518,7 @@ exports.getTopTrackMembers = { var helper = api.helper, trackType = connection.params.trackType.toLowerCase(), pageIndex = Number(connection.params.pageIndex || 1), - pageSize = Number(connection.params.pageSize || 50), + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE), dbConnectionMap = connection.dbConnectionMap, result = {}, error, @@ -539,7 +534,7 @@ exports.getTopTrackMembers = { } error = error || helper.checkMaxNumber(pageIndex, MAX_INT, 'pageIndex') || - helper.checkMaxNumber(pageSize, MAX_PAGE_SIZE, 'pageSize') || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, 'pageSize') || helper.checkPageIndex(pageIndex, 'pageIndex') || helper.checkPositiveInteger(pageSize, 'pageSize') || helper.checkContains(VALID_TRACK_TYPES, trackType, 'trackType'); @@ -549,7 +544,7 @@ exports.getTopTrackMembers = { } if (pageIndex === -1) { pageIndex = 1; - pageSize = MAX_PAGE_SIZE; // No paging, show max allowed. + pageSize = helper.MAX_PAGE_SIZE; // No paging, show max allowed. } // Retrieves total number of top members for the given track. api.dataAccess.executeQuery('get_top_members_' + trackType + '_count', sqlParams, dbConnectionMap, cb); diff --git a/actions/user.js b/actions/user.js index 4c4fe7c92..c8f297fe2 100644 --- a/actions/user.js +++ b/actions/user.js @@ -522,7 +522,7 @@ function getUserMarathonMatches(api, connection, next) { }, handle = connection.params.handle, pageIndex = Number(connection.params.pageIndex || 1), - pageSize = Number(connection.params.pageSize || 10); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); sortOrder = (connection.params.sortOrder || "asc").toLowerCase(); sortColumn = connection.params.sortColumn || "id"; @@ -535,7 +535,7 @@ function getUserMarathonMatches(api, connection, next) { } if (pageIndex === -1) { - pageSize = helper.MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; pageIndex = 1; } @@ -549,7 +549,7 @@ function getUserMarathonMatches(api, connection, next) { var error = helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkStringParameter(handle, "handle", 30) || helper.checkPositiveInteger(pageSize, "pageSize") - || helper.checkMaxInt(pageSize, "pageSize") + || helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE,"pageSize") || helper.checkContains(['asc', 'desc'], sortOrder, "sortOrder") || helper.checkSortColumn(VALID_SORT_COLUMN_MARATHON_MATCH, sortColumn.toLowerCase()); cb(error); @@ -645,7 +645,7 @@ function getUserAlgorithmChallenges(api, connection, next) { }, handle = connection.params.handle, pageIndex = Number(connection.params.pageIndex || 1), - pageSize = Number(connection.params.pageSize || 10); + pageSize = Number(connection.params.pageSize || helper.MAX_PAGE_SIZE); // If the sortOrder is set and sortColumn is missing. if (connection.params.sortOrder && !connection.params.sortColumn) { @@ -658,7 +658,7 @@ function getUserAlgorithmChallenges(api, connection, next) { sortColumn = connection.params.sortColumn || "id"; if (pageIndex === -1) { - pageSize = helper.MAX_INT; + pageSize = helper.MAX_PAGE_SIZE; pageIndex = 1; } @@ -672,7 +672,7 @@ function getUserAlgorithmChallenges(api, connection, next) { var error = helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkStringParameter(handle, "handle", 30) || helper.checkPositiveInteger(pageSize, "pageSize") - || helper.checkMaxInt(pageSize, "pageSize") + || helper.checkMaxNumber(pageSize,helper.MAX_PAGE_SIZE, "pageSize") || helper.checkContains(['asc', 'desc'], sortOrder, "sortOrder") || helper.checkSortColumn(VALID_SORT_COLUMN_ALGO_CHALLENGES, sortColumn.toLowerCase()); cb(error); diff --git a/actions/userDesignChallenges.js b/actions/userDesignChallenges.js index 49cc7dec4..c3c07caf2 100644 --- a/actions/userDesignChallenges.js +++ b/actions/userDesignChallenges.js @@ -16,11 +16,6 @@ var _ = require('underscore'); var BadRequestError = require('../errors/BadRequestError'); var NotFoundError = require('../errors/NotFoundError'); -/** - * The default pzge size. - */ -var DEFAULT_PAGE_SIZE = 50; - /** * The constants of project type. */ @@ -92,7 +87,7 @@ var getUserChallenges = function (api, connection, challengeType, next) { sortOrder = (params.sortOrder || "asc").toLowerCase(); sortColumn = (params.sortColumn || "id").toLowerCase(); pageIndex = Number(params.pageIndex || 1); - pageSize = Number(params.pageSize || DEFAULT_PAGE_SIZE); + pageSize = Number(params.pageSize || helper.MAX_PAGE_SIZE); if (!_.isDefined(params.sortOrder) && sortColumn === "id") { sortOrder = "desc"; @@ -109,7 +104,7 @@ var getUserChallenges = function (api, connection, challengeType, next) { } error = error || helper.checkMaxNumber(pageIndex, helper.MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, helper.MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(["asc", "desc"], sortOrder, "sortOrder") || diff --git a/actions/userDevelopChallenges.js b/actions/userDevelopChallenges.js index ea9772ddb..246b993fe 100644 --- a/actions/userDevelopChallenges.js +++ b/actions/userDevelopChallenges.js @@ -15,10 +15,6 @@ var async = require('async'); var _ = require('underscore'); var BadRequestError = require('../errors/BadRequestError'); var NotFoundError = require('../errors/NotFoundError'); -/** - * The default pzge size. - */ -var DEFAULT_PAGE_SIZE = 50; /** * The constants of project type. */ @@ -72,7 +68,7 @@ var getUserChallenges = function (api, connection, challengeType, next) { sortOrder = (params.sortOrder || "asc").toLowerCase(); sortColumn = (params.sortColumn || "id").toLowerCase(); pageIndex = Number(params.pageIndex || 1); - pageSize = Number(params.pageSize || DEFAULT_PAGE_SIZE); + pageSize = Number(params.pageSize || helper.MAX_PAGE_SIZE); if (!_.isDefined(params.sortOrder) && sortColumn === "id") { sortOrder = "desc"; @@ -89,7 +85,7 @@ var getUserChallenges = function (api, connection, challengeType, next) { } error = error || helper.checkMaxNumber(pageIndex, helper.MAX_INT, "pageIndex") || - helper.checkMaxNumber(pageSize, helper.MAX_INT, "pageSize") || + helper.checkMaxNumber(pageSize, helper.MAX_PAGE_SIZE, "pageSize") || helper.checkPageIndex(pageIndex, "pageIndex") || helper.checkPositiveInteger(pageSize, "pageSize") || helper.checkContains(["asc", "desc"], sortOrder, "sortOrder") || diff --git a/config/logger.js b/config/logger.js index 0812c59c3..5d4991f1a 100644 --- a/config/logger.js +++ b/config/logger.js @@ -12,7 +12,7 @@ exports.default = { logger.transports.push(function (api, winston) { return new (winston.transports.Console)({ colorize: true, - level: 'info', + level: 'debug', timestamp: api.utils.sqlDateTime, json: false }); @@ -31,7 +31,7 @@ exports.default = { logger.transports.push(function (api, winston) { return new (winston.transports.File)({ filename: api.config.general.paths.log[0] + '/actionhero-worker.log', - level: 'info', + level: 'debug', colorize: true, timestamp: api.utils.sqlDateTime, json: false diff --git a/initializers/dataAccess.js b/initializers/dataAccess.js index ca5c19d0e..1ce4b2f50 100644 --- a/initializers/dataAccess.js +++ b/initializers/dataAccess.js @@ -178,7 +178,10 @@ exports.dataAccess = function (api, next) { var error, dbServerPrefix = api.config.tcConfig.databaseMapping[databaseName], user, password, hostname, server, port, settings; error = helper.checkDefined(dbServerPrefix, "database server prefix"); + + api.log('Creating a new db connection at dataAccess','debug'); if (error) { + api.log('Error : ' + error, 'error'); throw error; } diff --git a/initializers/helper.js b/initializers/helper.js index 198a9f05d..2acc131d8 100644 --- a/initializers/helper.js +++ b/initializers/helper.js @@ -204,6 +204,11 @@ helper.SUBMISSION_TYPE = { */ helper.MAX_INT = 2147483647; +/** + * Max value for page size + */ +helper.MAX_PAGE_SIZE = 100; + /** * HASH KEY For Password * diff --git a/initializers/transaction.js b/initializers/transaction.js index 105f45d08..f0661c0e0 100644 --- a/initializers/transaction.js +++ b/initializers/transaction.js @@ -8,6 +8,10 @@ /*jslint unparam: true */ +var CONN_TIMEOUT = process.env.CONN_TIMEOUT || 5000; +var DISCONNECT_ON_CONN_TIMEOUT = process.env.DISCONNECT_ON_CONN_TIMEOUT !== "false" ? true : false; +var DISCONN_TIMEOUT = process.env.DISCONN_TIMEOUT || 5000; + var handleConnectionFailure = function (api, connection, actionTemplate, error, next) { api.log("Close all opened connections", "debug"); var connectionClosedCount = 0; @@ -15,7 +19,7 @@ var handleConnectionFailure = function (api, connection, actionTemplate, error, var callback; callback = function (err, result) { connection.dbConnectionMap[databaseName].disconnect(); - api.log("Connection is closed", "debug"); + api.log("Connection is closed for " + databaseName, "debug"); if (err) { connection.error = err; next(connection, false); @@ -57,6 +61,15 @@ exports.transaction = function (api, next) { transactionPreProcessor = function (connection, actionTemplate, next) { if (actionTemplate.transaction === "read" || actionTemplate.transaction === "write") { var dbConnectionMap = {}, dbConnection, callback, connectionOpenedCount = 0; + + var connectTimeout = function() { + api.log("Timed out without obtaining all DB connections", "error"); + if (DISCONNECT_ON_CONN_TIMEOUT) { + handleConnectionFailure(api, connection, actionTemplate, "Open Timeout", next); + } + } + + var clearMe = setTimeout(connectTimeout, CONN_TIMEOUT); actionTemplate.databases.forEach(function (databaseName) { dbConnection = api.dataAccess.createConnection(databaseName); @@ -68,12 +81,14 @@ exports.transaction = function (api, next) { callback = function (err, result) { connection.dbConnectionMap = dbConnectionMap; if (err) { + clearTimeout(clearMe); handleConnectionFailure(api, connection, actionTemplate, err, next); return; } connectionOpenedCount += 1; if (connectionOpenedCount === actionTemplate.databases.length) { + clearTimeout(clearMe); api.log("All connections are opened", "debug"); next(connection, true); } @@ -121,6 +136,14 @@ exports.transaction = function (api, next) { * @param {Function} next - The callback function */ transactionPostProcessor = function (connection, actionTemplate, toRender, next) { + + var disconnectTimeout = function() { + api.error("Timed out without closing all DB connections", "error"); + // I dont want to call next(connection); here because I want to allow the execution to to continue in case connection can be closed after timeout + } + + var clearMe = setTimeout(disconnectTimeout, DISCONN_TIMEOUT); + var connectionClosedCount = 0; if (connection.dbConnectionMap !== null && connection.dbConnectionMap !== undefined && actionTemplate.transaction !== null && actionTemplate.transaction !== undefined) { actionTemplate.databases.forEach(function (databaseName) { @@ -129,6 +152,7 @@ exports.transaction = function (api, next) { connection.dbConnectionMap[databaseName].disconnect(); api.log("Connection is closed", "debug"); if (err) { + clearTimeout(clearMe); connection.error = err; next(connection); return; @@ -136,6 +160,7 @@ exports.transaction = function (api, next) { connectionClosedCount += 1; if (connectionClosedCount === actionTemplate.databases.length) { + clearTimeout(clearMe); api.log("All connections are closed", "debug"); next(connection); } diff --git a/package.json b/package.json index 0bfb2c5da..b9daa5614 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,9 @@ "forums-wrapper": "git://github.com/cloudspokes/forums-wrapper.git#12b57be495c2e10431173522bc9eff60e0575959", "heapdump": "^0.3.6", "highlight.js": ">= 8.3.0", - "informix-wrapper": "git://github.com/cloudspokes/informix-wrapper.git#46d1c91c3a8e164f888e88627b8da712e9ceb855", + "informix-wrapper": "git://github.com/cloudspokes/informix-wrapper.git", "java": "0.3.x", - "jsonwebtoken": "0.4.x", + "jsonwebtoken": "5.0.5", "ldapjs": "0.7.x", "mime": "~1.2.11", "mkdirp": "0.3.x",