From c49f6ecbc3273d4bda3e34ed5b7ad8570e719f87 Mon Sep 17 00:00:00 2001 From: Molly Smith Date: Thu, 4 Jan 2024 14:37:54 -0700 Subject: [PATCH] Filtering available for timeseries with predefined regions --- .../imports/startup/server/data_query_util.js | 22 +++++++++++++++++++ .../tmpl_get_stations_for_region.sql | 17 ++++++++++++++ meteor_packages/mats-common/package.js | 4 ++++ 3 files changed, 43 insertions(+) create mode 100644 meteor_packages/mats-common/imports/startup/server/matsMiddle/sqlTemplates/tmpl_get_stations_for_region.sql diff --git a/meteor_packages/mats-common/imports/startup/server/data_query_util.js b/meteor_packages/mats-common/imports/startup/server/data_query_util.js index 1816d4017..ca2712cb8 100644 --- a/meteor_packages/mats-common/imports/startup/server/data_query_util.js +++ b/meteor_packages/mats-common/imports/startup/server/data_query_util.js @@ -125,6 +125,27 @@ const simplePoolQueryWrapSynchronous = function (pool, statement) { } }; +// get stations in a predefined region +const getStationsInCouchbaseRegion = function (pool, region) { + if (Meteor.isServer) { + let sitesList = []; + let statement = Assets.getText( + "imports/startup/server/matsMiddle/sqlTemplates/tmpl_get_stations_for_region.sql" + ); + statement = statement.replace(/{{vxREGION}}/g, region); + + const Future = require("fibers/future"); + const dFuture = new Future(); + (async () => { + sitesList = await pool.queryCB(pool.trfmSQLForDbTarget(statement)); + // done waiting - have results + dFuture.return(); + })(); + dFuture.wait(); + return sitesList; + } +}; + // utility for querying the DB via Python const queryDBPython = function (pool, queryArray) { if (Meteor.isServer) { @@ -4023,6 +4044,7 @@ const parseQueryDataContour = function (rows, d, appParams, statisticStr) { export default matsDataQueryUtils = { simplePoolQueryWrapSynchronous, + getStationsInCouchbaseRegion, queryDBPython, queryDBTimeSeries, queryDBSpecialtyCurve, diff --git a/meteor_packages/mats-common/imports/startup/server/matsMiddle/sqlTemplates/tmpl_get_stations_for_region.sql b/meteor_packages/mats-common/imports/startup/server/matsMiddle/sqlTemplates/tmpl_get_stations_for_region.sql new file mode 100644 index 000000000..533d68b00 --- /dev/null +++ b/meteor_packages/mats-common/imports/startup/server/matsMiddle/sqlTemplates/tmpl_get_stations_for_region.sql @@ -0,0 +1,17 @@ +SELECT RAW s.name +FROM {{vxDBTARGET}} s + JOIN {{vxDBTARGET}} bb ON + (s.geo[0].lat BETWEEN bb.geo.bottom_right.lat AND bb.geo.top_left.lat) AND + (CASE WHEN bb.geo.top_left.lon < bb.geo.bottom_right.lon THEN + s.geo[0].lon BETWEEN bb.geo.top_left.lon AND bb.geo.bottom_right.lon ELSE + s.geo[0].lon > bb.geo.top_left.lon OR s.geo[0].lon < bb.geo.bottom_right.lon END) +WHERE bb.type="MD" + AND bb.docType="region" + AND bb.subset='COMMON' + AND bb.version='V01' + AND bb.name="{{vxREGION}}" + AND s.type="MD" + AND s.docType="station" + AND s.subset='METAR' + AND s.version='V01' +ORDER BY s.name \ No newline at end of file diff --git a/meteor_packages/mats-common/package.js b/meteor_packages/mats-common/package.js index b766694a0..90b88eb06 100644 --- a/meteor_packages/mats-common/package.js +++ b/meteor_packages/mats-common/package.js @@ -341,6 +341,10 @@ Package.onUse(function (api) { "imports/startup/server/matsMiddle/sqlTemplates/tmpl_get_N_stations_mfve_IN_obs.sql", "server" ); + api.addAssets( + "imports/startup/server/matsMiddle/sqlTemplates/tmpl_get_stations_for_region.sql", + "server" + ); }); Package.onTest(function (api) {