From f0fcf1e786099acf166d9a14542840f195961569 Mon Sep 17 00:00:00 2001 From: egenerat Date: Wed, 14 Aug 2019 08:25:23 +0100 Subject: [PATCH] analyzer-ng --- .vscode/launch.json | 6 +++++- app/persistence/db.js | 6 +++--- scripts/analyzer-ng.js | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) create mode 100755 scripts/analyzer-ng.js diff --git a/.vscode/launch.json b/.vscode/launch.json index 2086595..c42edee 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -48,7 +48,11 @@ "type": "node", "request": "launch", "name": "analyzer-ng", - "program": "${workspaceFolder}/scripts/analyzer-ng.js" + "program": "${workspaceFolder}/scripts/analyzer-ng.js", + "args": [ + "--begin", "foo", + "--end", "bar" + ] } ] } \ No newline at end of file diff --git a/app/persistence/db.js b/app/persistence/db.js index 2abf9eb..10b792b 100644 --- a/app/persistence/db.js +++ b/app/persistence/db.js @@ -49,14 +49,14 @@ class Database { }); } - findMostRecent(filter, failIfEmpty) { + findMostRecent(filter, failIfEmpty=true) { return new Promise((resolve, reject) => { this.db.find(filter).sort({ date: -1 }).limit(1).exec( (err, docs) => { if (err) { reject(err); } else { - if (docs === null && failIfEmpty) { - reject(`No document found ${JSON.stringify(filter)}`); + if (failIfEmpty && (docs === null || docs.length === 0) ) { + reject(`No document found for filter ${JSON.stringify(filter)}`); } resolve(docs[0]); } diff --git a/scripts/analyzer-ng.js b/scripts/analyzer-ng.js new file mode 100755 index 0000000..903e4ec --- /dev/null +++ b/scripts/analyzer-ng.js @@ -0,0 +1,40 @@ +#! /usr/bin/env node +"use strict"; + +const analyzerUtils = require("../app/core/analyzer-utils.js"); +const cli = require("cli"); +const { Database } = require("../app/persistence/db.js"); + +const cliArgs = cli.parse({ + criteria: [ "c", "Criteria to be used for filtering/ordering", "string", "pe" ], //--criteria STRING + begin: [ "b", "First date", "date"], + end: [ "e", "End date", "date"], + threshold: [ "t", "Threshold", "int", 0], // --threshold 5, to display only changes higher than 5% +}); + +const checkCliArguments = (cliArgs) => { + let result = true; + if (!cliArgs.begin) { + cli.error("--begin date required"); + result = false; + } + + if (!cliArgs.end) { + cli.error("--end date required"); + result = false; + } + return result; +}; + +let dates = [cliArgs.begin, cliArgs.end]; +let securities = ["My security"]; +const criteria = cliArgs.criteria; + +if (checkCliArguments(cliArgs) ) { + const securitiesDb = new Database("securities.db"); + Promise.all(dates + .map((x) => securitiesDb.findOne( {key: securities[0], valueDate: x} ) )) + .then(res => analyzerUtils.computeChangesEtf(res, criteria)) + .then(res => analyzerUtils.displayResults(res, criteria, cliArgs.threshold)) + .catch(cli.error); +} \ No newline at end of file