Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: 'launch db'
run: docker container run -d --network ghactions --name database argovis/testdb:0.50
- name: 'launch redis'
run: docker container run -d --network ghactions --name redis redis:7.0.2
run: docker container run -d --network ghactions --name redis argovis/redis:7.0.15-260721
- name: 'build_api_rc'
run: docker image build -t argovis/api:test .
- name: 'build_test_rig'
Expand Down
9 changes: 7 additions & 2 deletions nodejs-server/helpers/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,13 @@ module.exports.parameter_sanitization = function(dataset,id,startDate,endDate,po
return params
}

module.exports.request_sanitation = function(polygon, center, radius, box, require_region, presRange, verticalRange){
module.exports.request_sanitation = function(polygon, center, radius, box, require_region, presRange, verticalRange, compression, batchmeta){
// given some parameters from a requst, decide whether or not to reject; return false == don't reject, return with message / code if do reject

if(batchmeta && compression === 'minimal'){
return {"code": 400, "message": "Please specify at most one of compression=minimal and batchmeta mode. Minimal compression is for stubs of data documents, batchmeta is for corresponding metadata documents."}
}

if(require_region && !polygon && !(center || radius) && !box){
return {"code": 400, "message": "This route requires a geographic region, either a polygon, box, or center and radius."}
}
Expand Down Expand Up @@ -906,9 +910,10 @@ module.exports.cost = function(url, c, cellprice, metaDiscount, maxbulk, maxbulk
params.endDate = new Date(summaries['metadata'][params['dataset']].endDate)
}
///// cost out request; timeseries limited only by geography since entire time span for each matched lat/long must be pulled off disk in any case.
///// let them get away with stubs and batchmeta
let geospan = module.exports.geoarea(params.polygon,params.box,params.radius) / 13000 // 1 sq degree is about 13k sq km at eq
let dayspan = Math.round(Math.abs((params.endDate - params.startDate) / (24*60*60*1000) )); // n days of request
if((!url.includes('compression=minimal')) && (path[0]=='timeseries' && path.length==2 && geospan > maxbulk_timeseries) || (path[0]!='timeseries' && geospan*dayspan > maxbulk) ){
if((!url.includes('compression=minimal')) && (!url.includes('batchmeta')) && ((path[0]=='timeseries' && path.length==2 && geospan > maxbulk_timeseries) || (path[0]!='timeseries' && geospan*dayspan > maxbulk))){
return {"code": 413, "message": "The temporospatial extent of your request is very large and likely to crash our API. Please request a smaller region or shorter timespan, or both."}
}
if(path[0] == 'timeseries'){
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/ArgoService.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ function collectionSearch(collection, datamodel, metamodel, res,id,startDate,end
reject({"code": 400, "message": "Please combine source queries with at least one of a time range, spatial extent, id or platform search."})
return
}
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ exports.findArgoTrajectory = function(res,id,startDate,endDate,polygon,box,cente
params.batchmeta = batchmeta

// decide y/n whether to service this request
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/CchdoService.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ exports.findCCHDO = function(res,id,startDate,endDate,polygon,box,center,radius,
reject({"code": 400, "message": "Please combine source queries with at least one of a time range, spatial extent, id, CCHDO cruise ID, or WOCE line search."})
return
}
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/DriftersService.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ exports.drifterSearch = function(res,id,startDate,endDate,polygon,box,center,rad
params.batchmeta = batchmeta

// decide y/n whether to service this request
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/EasyoceanService.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ exports.findeasyocean = function(res,id,startDate,endDate,polygon,box,center,rad
params.batchmeta = batchmeta

// decide y/n whether to service this request
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/ExtendedService.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ exports.findExtended = function(res,extendedName,id,startDate,endDate,polygon,bo
params.lookup_meta = false // there's only one AR meta document, just look it up once
params.genericMeta = true // the sole AR meta doc counts as a generic metadata doc.
// decide y/n whether to service this request
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, null, false, null, null)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, null, false, null, null, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/GridService.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ exports.findgrid = function(res,gridName,id,startDate,endDate,polygon,box,center
params.compression = compression
params.batchmeta = batchmeta
// decide y/n whether to service this request
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, presRange, verticalRange, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/TcService.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ exports.findTC = function(res,id,startDate,endDate,polygon,box,center,radius,nam
params.batchmeta = batchmeta

// decide y/n whether to service this request
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
2 changes: 1 addition & 1 deletion nodejs-server/service/TimeseriesService.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ exports.findtimeseries = function(res,timeseriesName,id,startDate,endDate,polygo
params.batchmeta = batchmeta

// decide y/n whether to service this request
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null)
let bailout = helpers.request_sanitation(params.polygon, params.center, params.radius, params.box, false, null, null, params.compression, params.batchmeta)
if(bailout){
reject(bailout)
return
Expand Down
Loading