diff options
| author | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2024-04-12 18:31:00 +0300 |
|---|---|---|
| committer | Geo Halkiadakis <gchalkiadakis@sklavenitis.co.gr> | 2024-04-12 18:31:00 +0300 |
| commit | b122279ece06a9381e805c6087f130b41616fe3d (patch) | |
| tree | 2ec0a8fc3c570417d972b18a7a7b878758ce3a6f | |
| parent | 762d85c95690f510bec4dd8c37c05454ae1be4fc (diff) | |
| download | oseine-b122279ece06a9381e805c6087f130b41616fe3d.tar.gz oseine-b122279ece06a9381e805c6087f130b41616fe3d.tar.bz2 oseine-b122279ece06a9381e805c6087f130b41616fe3d.zip | |
added utils folder; added several suplamentary modules
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | README.md | 4 | ||||
| -rw-r--r-- | app.js | 5 | ||||
| -rw-r--r-- | benchmark/find.js | 27 | ||||
| -rw-r--r-- | benchmark/match-str.js | 22 | ||||
| -rw-r--r-- | package-lock.json | 12 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | paths.js | 47 | ||||
| -rw-r--r-- | pieces/prepare-streams.js | 5 | ||||
| -rw-r--r-- | pieces/retro-search.js (renamed from pieces/search.js) | 5 | ||||
| -rw-r--r-- | pieces/suggest.js | 4 | ||||
| -rw-r--r-- | utils/kb-util.js (renamed from pieces/kb-util.js) | 8 | ||||
| -rw-r--r-- | utils/match-util.js (renamed from pieces/match-util.js) | 0 | ||||
| -rw-r--r-- | utils/mem-usage.js | 20 | ||||
| -rw-r--r-- | utils/url-util.js | 23 |
15 files changed, 143 insertions, 41 deletions
@@ -1,2 +1,3 @@ node_modules/ data/* +.env @@ -19,3 +19,7 @@ run npm start +prepare source for production: + +* remove ``/bench`` routes from ``paths.js`` +* remove ``/bench`` folder @@ -2,6 +2,8 @@ const Koa = require('koa'); const { koaBody } = require('koa-body'); +require('dotenv').config(); + const app = new Koa(); // middleware @@ -13,4 +15,5 @@ let paths = require('./paths.js'); // use the routes app.use(paths.routes()); -app.listen(3000); +// app.listen(3000); +app.listen(process.env.APP_PORT); diff --git a/benchmark/find.js b/benchmark/find.js index cc95a44..2d18657 100644 --- a/benchmark/find.js +++ b/benchmark/find.js @@ -1,5 +1,11 @@ +/** + * benchmark: find a product in product list + * using: for vs forEach vs find + */ + +const microtime = require('microtime'); + const products = require('../data/products.json'); -var microtime = require('microtime'); var selected = []; @@ -12,25 +18,32 @@ products.forEach( pr => { function compare() { + let n = 4; + var f0 = microtime.nowDouble(); - for(i=0 ; i < 4 ; i++) byFor(); + for(i=0 ; i < n ; i++) byFor(); var f1 = microtime.nowDouble(); // var e0 = microtime.nowDouble(); - for(i=0 ; i < 4 ; i++) byEach(); + for(i=0 ; i < n ; i++) byEach(); var e1 = microtime.nowDouble(); // var b0 = microtime.nowDouble(); - for(i=0 ; i < 4 ; i++) byFind(); + for(i=0 ; i < n ; i++) byFind(); var b1 = microtime.nowDouble(); return { + n: n, + for: f1-f0, - ifor: byFor(), + items_for: byFor(), + each: e1-e0, - ieach: byEach(), + items_each: byEach(), + find: b1-b0, - ifind: byFind(), + items_find: byFind(), + sel: selected, } } diff --git a/benchmark/match-str.js b/benchmark/match-str.js index 7760b4e..fa802c1 100644 --- a/benchmark/match-str.js +++ b/benchmark/match-str.js @@ -1,17 +1,23 @@ -const products = require('../data/products.json'); -const match = require('../pieces/match-util.js'); var microtime = require('microtime'); +const match = require('../utils/match-util.js'); +const memory_usage = require('../utils/mem-usage.js'); + +const products = require('../data/products.json'); -query = 'solokata'; +// memory_usage.report(); -function run() { +// test runner +function run(query) { var f0 = microtime.nowDouble(); - // for(let i = 0 ; i < 100 ; i++) - let result = matchQuery(query); + let result; + // for(let i = 0 ; i < 20 ; i++) + result = matchQuery(query); var f1 = microtime.nowDouble(); + memory_usage.report(); + return { t: f1-f0, q: query, @@ -19,7 +25,7 @@ function run() { } } - +// sumple search implementation function matchQuery(q) { var result = []; @@ -43,4 +49,4 @@ function matchQuery(q) { } -module.exports = { run }
\ No newline at end of file +module.exports = { run } diff --git a/package-lock.json b/package-lock.json index 7b611b6..dea6a07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "dotenv": "^16.4.5", "koa": "^2.15.2", "koa-body": "^6.0.1", "koa-router": "^12.0.1", @@ -447,6 +448,17 @@ "wrappy": "1" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", diff --git a/package.json b/package.json index 2b131cb..2ffe852 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "author": "Geo-Xalkiadakis@Sklavenitis-SA", "license": "ISC", "dependencies": { + "dotenv": "^16.4.5", "koa": "^2.15.2", "koa-body": "^6.0.1", "koa-router": "^12.0.1", @@ -1,16 +1,24 @@ +/** + * defines routes + * exports router + */ + const Router = require('koa-router'); +const urler = require('./utils/url-util'); -const kb = require('./pieces/kb-util.js'); const data = require('./pieces/prepare-streams'); -const products = require('./data/products.json'); + const bench = require('./benchmark/find.js'); -const macthStr = require('./benchmark/match-str.js'); +const matchStr = require('./benchmark/match-str.js'); + // Prefix all routes with: /items const router = new Router({ // prefix: '/items' }); + + /* simple route example let items = [ @@ -50,7 +58,6 @@ const router = new Router({ // Routes - router.get('/', (ctx, next) => { ctx.body = { success: true, @@ -68,6 +75,7 @@ router.get('/search', (ctx, next) => { router.get('/search/:title', (ctx, next) => { // console.log(ctx); + const kb = require('./utils/kb-util.js'); let words = kb.keyboardize(kb.clean(ctx.params.title)).split(' '); ctx.body = { params: ctx.params, @@ -93,8 +101,7 @@ router.get('/search/:title', (ctx, next) => { router.get('/test', (ctx, next) => { // easy test route // test anything ... - let result = { success: true, data: [1, 2, 3] }; - ctx.body = result; + ctx.body = { params: urler.struct(ctx.request, ctx.url), ctx: ctx } next(); }); @@ -111,24 +118,30 @@ router.get('/test/do-data', (ctx, next) => { // easy test route next(); }); -router.get('/test/json', (ctx, next) => { // easy test route - // test anything ... - ctx.body = { t: + new Date(), p: products }; - next(); -}); +// benchmark routes; +// shall be removed from production +//////////////////////////////////////////////////////////////////////////////// + +/// router.get('/test/json', (ctx, next) => { // easy test route +/// // test anything ... +/// ctx.body = { t: + new Date(), p: products }; +/// next(); +/// }); -router.get('/bench/fe', (ctx, next) => { // easy test route +router.get('/bench/find', (ctx, next) => { // easy test route // test anything ... - // ctx.body = bench.compare(); ctx.body = bench.compare(); next(); }); -router.get('/bench/match', (ctx, next) => { // easy test route - // test anything ... +router.get('/bench/match/:title', (ctx, next) => { // easy test route + // test anything ... [ query = 'solokata' ] // ctx.body = bench.compare(); - ctx.body = macthStr.run(); + ctx.body = matchStr.run(ctx.params.title); next(); }); -module.exports = router;
\ No newline at end of file + +// export routes + +module.exports = router; diff --git a/pieces/prepare-streams.js b/pieces/prepare-streams.js index 4fa0a7e..ee7ba8e 100644 --- a/pieces/prepare-streams.js +++ b/pieces/prepare-streams.js @@ -1,8 +1,9 @@ const fs = require('fs'); -const kb = require('./kb-util.js'); - var request = require('request'); +const kb = require('../utils/kb-util.js'); + + // const https = require("https"); diff --git a/pieces/search.js b/pieces/retro-search.js index 0c05708..ba4d937 100644 --- a/pieces/search.js +++ b/pieces/retro-search.js @@ -1,5 +1,6 @@ -const kb = require('./kb-util.js'); -const match = require('./match-util.js'); +const kb = require('../utils/kb-util.js'); +const match = require('../utils/match-util.js'); + const products = require('../data/products.json'); /** VARIABLES diff --git a/pieces/suggest.js b/pieces/suggest.js index a420edd..c0a6e04 100644 --- a/pieces/suggest.js +++ b/pieces/suggest.js @@ -1,5 +1,5 @@ -const kb = require('./kb-util.js'); -const match = require('./match-util.js'); +const kb = require('../utils/kb-util.js'); +const match = require('../utils/match-util.js'); var _allowFuzzy = true; // enable|disable fuzzy search var n = 2; // Ngram base diff --git a/pieces/kb-util.js b/utils/kb-util.js index 5441861..aac88f9 100644 --- a/pieces/kb-util.js +++ b/utils/kb-util.js @@ -1,3 +1,9 @@ +/** + * fast string manipulation utilities + * for bi-lingual (EL/EN) words/phrases + * based on the keyboard layout + */ + // suplamentary arrays (mostly for cache) // --- -- -- - - - @@ -75,8 +81,6 @@ const clean = (txt) => { // --- -- -- - - - module.exports = { - map, - accented_vowels, keyboardize, keyb_array, sanitizeGR, diff --git a/pieces/match-util.js b/utils/match-util.js index a13fddb..a13fddb 100644 --- a/pieces/match-util.js +++ b/utils/match-util.js diff --git a/utils/mem-usage.js b/utils/mem-usage.js new file mode 100644 index 0000000..766a93e --- /dev/null +++ b/utils/mem-usage.js @@ -0,0 +1,20 @@ +/** + * memory usage report utility + */ + +const formatMemoryUsage = (data) => `${Math.round(data / 1024 / 1024 * 100) / 100} MB`; + +function report() { + let memoryData = process.memoryUsage(); + + let memoryUsage = { + rss: `${formatMemoryUsage(memoryData.rss)} -> Resident Set Size - total memory allocated for the process execution`, + heapTotal: `${formatMemoryUsage(memoryData.heapTotal)} -> total size of the allocated heap`, + heapUsed: `${formatMemoryUsage(memoryData.heapUsed)} -> actual memory used during the execution`, + external: `${formatMemoryUsage(memoryData.external)} -> V8 external memory`, + }; + + console.log(memoryUsage); +} + +module.exports = { report } diff --git a/utils/url-util.js b/utils/url-util.js new file mode 100644 index 0000000..e86ad9b --- /dev/null +++ b/utils/url-util.js @@ -0,0 +1,23 @@ +/** + * url utility + */ + +const querystring = require('querystring'); + +function struct(req, url) { + let url_parts = url.split('?'); + let query = (url_parts.length > 1) + ? querystring.decode(url_parts[1]) + : {}; + return { + method: req.method, + host: req.host, + path: url_parts[0], + query: query + } +} + +/** + * exports + */ +module.exports = { struct }
\ No newline at end of file |
