diff options
| author | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2023-03-28 14:49:54 +0300 |
|---|---|---|
| committer | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2023-03-28 14:49:54 +0300 |
| commit | 9846c696692eaa2b06fece6eda2ddc9df9d03d86 (patch) | |
| tree | 6536a64f052bdc7afadbe5abfa539a30576e5523 /javascript/freq.js | |
| parent | d943b74a843b7cfa9e2d393942bd0b3791d56daf (diff) | |
| download | linkeysearch-9846c696692eaa2b06fece6eda2ddc9df9d03d86.tar.gz linkeysearch-9846c696692eaa2b06fece6eda2ddc9df9d03d86.tar.bz2 linkeysearch-9846c696692eaa2b06fece6eda2ddc9df9d03d86.zip | |
linkeysearch:/javascript updated deployed cloud functions
Diffstat (limited to 'javascript/freq.js')
| -rw-r--r-- | javascript/freq.js | 129 |
1 files changed, 54 insertions, 75 deletions
diff --git a/javascript/freq.js b/javascript/freq.js index bf52008..75c862e 100644 --- a/javascript/freq.js +++ b/javascript/freq.js @@ -9,22 +9,19 @@ * #3 Supporting functions * #4 Output functions * #5 Entry-point function main() - * - * Requirements - * npm install dotenv --save - * */ // #1 // REQUIREMENTS //////////////////////////////////////////////////////////////////////////////// + var mysql = require('mysql'); const fs = require('fs'); const os = require('os'); const {Storage} = require('@google-cloud/storage'); // import Google Cloud client library -require('dotenv').config({ path: '../auth/.env' }) + // #2 @@ -35,26 +32,25 @@ require('dotenv').config({ path: '../auth/.env' }) // google-storage parametres // --- -- -- - - - const projectId = 'pythia-251711'; -const keyFilename = '../auth/pythia-251711-047e3d5e6608.json'; +// const keyFilename = '../auth/pythia-251711-047e3d5e6608.json'; // temp file of frequencies (json) -const temp_file = '../results/freq.json'; - +const temp_file = os.tmpdir() + '/freq.json'; // db connection parametres // (keep the one that suits your environment; comment out the other) // ----------------------------------------------------------------------------- -// while on local machine using cloud_sql_proxy -var con = mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_NAME -}); +// while on Google Cloud Functions +var con = mysql.createConnection({ // ** check + socketPath: "/cloudsql/pythia-251711:europe-west4:pythia-db-eu", + user: "pythia_services", + password: process.env.DB_PASSWORD, + database: "pythia_db" +}); // MAIN OUTPUT OF THE SCRIPT // arrays that need to be constructed and filled with data @@ -82,13 +78,9 @@ var freq_ = []; function extract_freq(obj) { obj.forEach( rec => { - var description = rec.product_description; - var fq = rec.FREQuency; - var pid = rec.eys_code; - freq_.push({ - fq: fq, - id: pid + fq: rec.FREQuency, + id: rec.eys_code }); }); } @@ -100,7 +92,7 @@ function extract_freq(obj) { // Save Local // ----------------------------------------------------------------------------- -function save_local(jsonArray, fileName) { +async function save_local(jsonArray, fileName) { let fileStr = JSON.stringify(jsonArray); // convert json to string // write string to file @@ -109,7 +101,8 @@ function save_local(jsonArray, fileName) { console.log("An error occured while writing keywords.json"); return console.log(err); } - console.log("JSON file has been saved."); + console.log("JSON file", fileName, "has been saved."); + }); return true; @@ -120,7 +113,7 @@ function save_local(jsonArray, fileName) { // ----------------------------------------------------------------------------- async function upload_file( bucketName, srcFilePath, trgFilePath ) { // Creates a client - const storage = new Storage({projectId, keyFilename}); + const storage = new Storage(); try { await storage.bucket(bucketName).upload(srcFilePath, { @@ -138,7 +131,6 @@ async function upload_file( bucketName, srcFilePath, trgFilePath ) { } - // #5 // MAIN function (exposed function to run the whole proccess) //////////////////////////////////////////////////////////////////////////////// @@ -146,9 +138,13 @@ async function upload_file( bucketName, srcFilePath, trgFilePath ) { /** main() * - * the entry-point function + * nodejs's exported function + * used as entry-point function (in case of Google Cloud function) */ -var main = () => { + +exports.main = () => { // google cloud function entry point + + console.log('temporary file:', temp_file); // connect; // get records to proccess; @@ -156,60 +152,43 @@ var main = () => { // save dictionary; // end script; // ----------------------------------------------------------------------------- - con.connect(function(err) { - // connect; + + // SQL to get needed data + var sql = "SELECT count(pl.eys_code)*5+SUM(dop.quantity) as FREQuency,\ + pl.product_id as product_id,\ + pb.brand_name,\ + pl.barcode, pl.skl_code, pl.eys_code,\ + IF( pd.description IS NOT NULL , pd.description , pl.product_description ) AS product_description,\ + pl.bpcs_code,\ + pd.image_path\ + FROM product_list as pl\ + LEFT JOIN delivery_orders_products AS dop ON dop.product_id = pl.eys_code\ + LEFT JOIN delivery_orders AS do ON dop.order_id = do.id\ + LEFT JOIN product_list AS replacement ON dop.replacement_for = replacement.eys_code\ + LEFT JOIN product_details AS pd ON pl.eys_code = pd.eys_code\ + LEFT JOIN product_brands pb ON pl.brand_id = pb.id\ + WHERE pl.active = 1 AND pl.sap_code IS NOT NULL AND pl.product_category_sap_4 NOT LIKE '72%'\ + GROUP BY pl.product_id\ + ORDER BY FREQuency DESC\ + LIMIT 50000"; + + console.log('Frequencies SQL:', sql) + + // query sql + con.query(sql, function (err, result) { if (err) throw err; - console.log("Connected!"); - - // SQL to get needed data - var sql = "SELECT count(pl.eys_code)*5+SUM(dop.quantity) as FREQuency,\ - pl.product_id as product_id,\ - pb.brand_name,\ - pl.barcode, pl.skl_code, pl.eys_code,\ - IF( pd.description IS NOT NULL , pd.description , pl.product_description ) AS product_description,\ - pl.bpcs_code,\ - pd.image_path\ - FROM product_list as pl\ - LEFT JOIN delivery_orders_products AS dop ON dop.product_id = pl.eys_code\ - LEFT JOIN delivery_orders AS do ON dop.order_id = do.id\ - LEFT JOIN product_list AS replacement ON dop.replacement_for = replacement.eys_code\ - LEFT JOIN product_details AS pd ON pl.eys_code = pd.eys_code\ - LEFT JOIN product_brands pb ON pl.brand_id = pb.id\ - WHERE pl.active = 1 AND pl.sap_code IS NOT NULL AND pl.product_category_sap_4 NOT LIKE '72%'\ - GROUP BY pl.product_id\ - ORDER BY FREQuency DESC\ - LIMIT 60000"; - - // query sql - con.query(sql, function (err, result) { - if (err) throw err; - console.log('Records from database received!') - - extract_freq(result); // proccess - console.log('Keywords proccesed!') - - save_local(freq_, temp_file); // save frequencies + console.log('Records from database received!') + + extract_freq(result); // proccess + console.log('Keywords proccesed!') + save_local(freq_, temp_file) // save frequencies + .then( () => { upload_file('pythia-files', temp_file, 'uploads/json/freq.json') .then( () => { console.log('Results saved! Exiting...'); - process.exit(1); }); - - // echo memory stats - const used = process.memoryUsage(); - for (let key in used) { - console.log(`${key} ${Math.round(used[key] / 1024 / 1024 * 100) / 100} MB`); - } - - // process.exit(); // exit }); + }); } - -// NOTE: -// if running the script directry you need to call the main function -// if running through google cloud-functions you do NOT need to call main() -// (you need define main() as the entry-point function instead) -// --- -- -- - - - -main();
\ No newline at end of file |
