diff --git a/.gitignore b/.gitignore index a384622..7d8e622 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,6 @@ node_modules/ .vscode/ package-lock.json -__pycache__/ *.pyc *.txt *.log diff --git a/analytics/.gitignore b/analytics/.gitignore new file mode 100644 index 0000000..5721baa --- /dev/null +++ b/analytics/.gitignore @@ -0,0 +1,4 @@ +build/ +dist/ +*.spec +__pycache__/ diff --git a/analytics/Compilation.md b/analytics/Compilation.md new file mode 100644 index 0000000..63431f8 --- /dev/null +++ b/analytics/Compilation.md @@ -0,0 +1,12 @@ +# Compilation + +We use (pyinstaller)[https://www.pyinstaller.org/] to compile analytics unit into binary file supported by *nix systems with all the dependencies. + +```bash +pip install pyinstaller +echo "hiddenimports=['pandas._libs.tslibs.timedeltas', 'scipy._lib.messagestream']" | cat > $PYTHON_SITE_PACKAGES/PyInstaller/hooks/hook-pandas.py +cd $HASTIC_SERVER_PATH/analytics +pyinstaller worker.py +``` + +On Ubuntu 16.04 $PYTHON_SITE_PACKAGES directory located at `~/.local/lib/python3.5/site-packages` diff --git a/server/src/services/analytics.ts b/server/src/services/analytics.ts index d0db1aa..c0f4c09 100644 --- a/server/src/services/analytics.ts +++ b/server/src/services/analytics.ts @@ -9,9 +9,17 @@ import { } from './anomalyType' import { getTarget } from './metrics'; import { getLabeledSegments, insertSegments, removeSegments } from './segments'; -import { split, map, mapSync } from 'event-stream'; +import { split, mapSync } from 'event-stream'; +import * as fs from 'fs'; +import * as path from 'path'; -const learnWorker = spawn('python3', ['worker.py'], { cwd: ANALYTICS_PATH }) +var learnWorker; +if(fs.existsSync(path.join(ANALYTICS_PATH, 'dist/worker/worker'))) { + learnWorker = spawn('dist/worker/worker', [], { cwd: ANALYTICS_PATH }) +} else { + // If compiled analytics script doesn't exist - fallback to regular python + learnWorker = spawn('python3', ['worker.py'], { cwd: ANALYTICS_PATH }) +} learnWorker.stdout.pipe(split()).pipe(mapSync(onMessage)); learnWorker.stderr.on('data', data => console.error(`worker stderr: ${data}`));