diff --git a/backend/database_cleaning.py b/bin/dbcleaner old mode 100644 new mode 100755 similarity index 93% rename from backend/database_cleaning.py rename to bin/dbcleaner index c9a34d2..3c4a6a9 --- a/backend/database_cleaning.py +++ b/bin/dbcleaner @@ -1,15 +1,17 @@ +#!/usr/bin/env python + ''' This program will clean the sqlite database every now and then to keep it from exploding. ''' - import time import sqlite3 -import configparser import random - +from cosmicpi.config import Config as config import logging as log + + log.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=log.INFO) @@ -25,15 +27,12 @@ def _initilize_DB(_sqlite_location): _db_conn.commit() -# settings files -CONFIG_FILE = "../config/CosmicPi.config" + # read configuration # Todo: Put the config parser into a propper class # Todo: Implement proper error catching for configparser (e.g. non existent keys or file) # read configuration -config = configparser.ConfigParser() -config.read(CONFIG_FILE) sqlite_location = config.get("Storage", "sqlite_location") max_event_age = config.getint("Storage", "sqlite_max_event_age") * 60. * 60. # here used in seconds diff --git a/backend/detector_connect.py b/bin/detector old mode 100644 new mode 100755 similarity index 98% rename from backend/detector_connect.py rename to bin/detector index 11ca8a5..ee0a2b6 --- a/backend/detector_connect.py +++ b/bin/detector @@ -1,3 +1,5 @@ +#!/usr/bin/env python + ''' This program manages the connection to an attached detector. @@ -18,7 +20,7 @@ import sqlite3 import copy import datetime from serial import SerialException -import configparser +from cosmicpi.config import Config as config import logging as log log.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=log.INFO) @@ -292,15 +294,10 @@ class CosmicPi_V15(detector, threading.Thread): #det = detector("Test1", "TestVersion1", config_sqlite_location) #det._commit_event_dict(det._example_event_dict) -# settings files -CONFIG_FILE = "../config/CosmicPi.config" - # read configuration # Todo: Put the config parser into a propper class # Todo: Implement proper error catching for configparser (e.g. non existent keys or file) # read configuration -config = configparser.ConfigParser() -config.read(CONFIG_FILE) detector_class = config.get("Detector", "detector_class") sqlite_location = config.get("Storage", "sqlite_location") diff --git a/backend/mqtt_publisher.py b/bin/mqtt old mode 100644 new mode 100755 similarity index 97% rename from backend/mqtt_publisher.py rename to bin/mqtt index d97b7a6..395467f --- a/backend/mqtt_publisher.py +++ b/bin/mqtt @@ -1,3 +1,5 @@ +#!/usr/bin/env python + ''' This program will check the database about every minute to search for a new event. If one is found it will be sent to an mqtt server @@ -13,6 +15,7 @@ import json import subprocess import socket import struct +from cosmicpi.config import Config as config import logging as log log.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=log.INFO) @@ -67,15 +70,11 @@ def send_via_mqtt(broker_address, broker_topic, message): # ToDo: This is unsafe, though there should be no user data here the risk of code injection is low. subprocess.call(execution_string, shell=True) -# settings files -CONFIG_FILE = "../config/CosmicPi.config" # read configuration # Todo: Put the config parser into a propper class # Todo: Implement proper error catching for configparser (e.g. non existent keys or file) # read configuration -config = configparser.ConfigParser() -config.read(CONFIG_FILE) sqlite_location = config.get("Storage", "sqlite_location") broker_address = config.get("MQTT", "broker_address") broker_topic = "{}/{}".format(config.get("MQTT", "broker_topic"), getserial()) diff --git a/bin/rest b/bin/rest new file mode 100755 index 0000000..43f452c --- /dev/null +++ b/bin/rest @@ -0,0 +1,7 @@ +#!/usr/bin/env python + +from cosmicpi.rest.app import create_app + +if __name__ == '__main__': + app = create_app() + app.run(debug=True, host='0.0.0.0') \ No newline at end of file diff --git a/bin/ui b/bin/ui new file mode 100755 index 0000000..357b1da --- /dev/null +++ b/bin/ui @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from flask import send_from_directory +from cosmicpi.rest.app import create_app +import cosmicpi.ui +import os + + +path = os.path.abspath(cosmicpi.ui.__file__) +UI_DIR = os.path.dirname(path) + + +if __name__ == '__main__': + app = create_app() + + @app.route('/dist/') + def serve_page(path): + return send_from_directory(os.path.join(UI_DIR, 'dist'), path) + + @app.route('/') + def server_index(): + return send_from_directory(UI_DIR, 'index.html') + + app.run(debug=True, host='0.0.0.0') diff --git a/rest/__init__.py b/cosmicpi/__init__.py similarity index 100% rename from rest/__init__.py rename to cosmicpi/__init__.py diff --git a/cosmicpi/config.py b/cosmicpi/config.py new file mode 100644 index 0000000..ac4071c --- /dev/null +++ b/cosmicpi/config.py @@ -0,0 +1,14 @@ +import configparser +import os +import cosmicpi.storage + + +Config = configparser.ConfigParser() +Config.read(['install_files/cosmicpi.config', '/etc/cosmicpi.conf']) + + +# Set SQLite database path if not exist in config +if not Config.has_option('Storage', 'sqlite_location'): + storage_path = os.path.abspath(cosmicpi.storage.__file__) + sqlite_path = os.path.join(os.path.dirname(storage_path), 'sqlite_db') + Config.set('Storage', 'sqlite_location', sqlite_path) diff --git a/rest/README.md b/cosmicpi/rest/README.md similarity index 50% rename from rest/README.md rename to cosmicpi/rest/README.md index 8785cd3..c0710fa 100644 --- a/rest/README.md +++ b/cosmicpi/rest/README.md @@ -1,10 +1,9 @@ # CosmicPi REST API ## Development -Make sure that CosmicPi UI service does not run (`sudo systemctl stop CosmicPi-UI`), -navigate to `/rest` and run: +Navigate to `/` and run: ``` -FLASK_DEBUG=1 FLASK_APP=${PWD}/app.py python -m flask run --host=0.0.0.0 +PYTHONPATH=. ./bin/ui ``` ## API diff --git a/storage/place_holder b/cosmicpi/rest/__init__.py similarity index 100% rename from storage/place_holder rename to cosmicpi/rest/__init__.py diff --git a/cosmicpi/rest/app.py b/cosmicpi/rest/app.py new file mode 100644 index 0000000..dc033c1 --- /dev/null +++ b/cosmicpi/rest/app.py @@ -0,0 +1,23 @@ +from flask import Flask, request +from flask_restful import Api +from flask_cors import CORS +from .wifi import Wifi +from .histogram import Histogram +from .series import Series +from .auth import Auth + +def create_app(): + app = Flask(__name__) + api = Api(app) + + CORS(app, resources=r'/api/*') + + api.add_resource(Auth, '/api/auth') + api.add_resource(Wifi, '/api/wifi') + api.add_resource(Histogram, '/api/histogram.png') + api.add_resource(Series, '/api/series') + + return app + +if __name__ == '__main__': + create_app().run(debug=True) diff --git a/rest/auth.py b/cosmicpi/rest/auth.py similarity index 94% rename from rest/auth.py rename to cosmicpi/rest/auth.py index 1ece2f8..4ae8df9 100644 --- a/rest/auth.py +++ b/cosmicpi/rest/auth.py @@ -1,6 +1,6 @@ from flask import request from flask_restful import Resource, abort -from .config import Config +from cosmicpi.config import Config from functools import wraps diff --git a/rest/histogram.py b/cosmicpi/rest/histogram.py similarity index 98% rename from rest/histogram.py rename to cosmicpi/rest/histogram.py index f62a838..1c3f575 100644 --- a/rest/histogram.py +++ b/cosmicpi/rest/histogram.py @@ -6,7 +6,7 @@ import matplotlib.pyplot as plt import matplotlib.dates as mdates import io import sqlite3 -from .config import Config +from cosmicpi.config import Config SQLITE_LOCATION = Config.get("Storage", "sqlite_location") diff --git a/rest/requirements.txt b/cosmicpi/rest/requirements.txt similarity index 100% rename from rest/requirements.txt rename to cosmicpi/rest/requirements.txt diff --git a/rest/series.py b/cosmicpi/rest/series.py similarity index 98% rename from rest/series.py rename to cosmicpi/rest/series.py index 51572a4..7fc3160 100644 --- a/rest/series.py +++ b/cosmicpi/rest/series.py @@ -1,6 +1,6 @@ from flask import request, make_response from flask_restful import Resource -from .config import Config +from cosmicpi.config import Config import sqlite3 import io import csv diff --git a/rest/wifi.py b/cosmicpi/rest/wifi.py similarity index 97% rename from rest/wifi.py rename to cosmicpi/rest/wifi.py index e1437ed..4cacd2a 100644 --- a/rest/wifi.py +++ b/cosmicpi/rest/wifi.py @@ -1,13 +1,19 @@ from flask import request from flask_restful import Resource -from .config import Config +from cosmicpi.config import Config from .auth import requires_auth import subprocess import re import time -import thread -import urllib2 from functools import wraps +try: + import thread +except: + import _thread as thread +try: + import urllib2 +except: + import urllib3 as urllib2 DEFAULT_WIFI_NAME = Config.get("Default WiFi", "name") diff --git a/cosmicpi/storage/__init__.py b/cosmicpi/storage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/storage/sqlite_db b/cosmicpi/storage/sqlite_db similarity index 100% rename from storage/sqlite_db rename to cosmicpi/storage/sqlite_db diff --git a/ui/.gitignore b/cosmicpi/ui/.gitignore similarity index 100% rename from ui/.gitignore rename to cosmicpi/ui/.gitignore diff --git a/ui/README.md b/cosmicpi/ui/README.md similarity index 100% rename from ui/README.md rename to cosmicpi/ui/README.md diff --git a/cosmicpi/ui/__init__.py b/cosmicpi/ui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ui/index.html b/cosmicpi/ui/index.html similarity index 100% rename from ui/index.html rename to cosmicpi/ui/index.html diff --git a/ui/package-lock.json b/cosmicpi/ui/package-lock.json similarity index 99% rename from ui/package-lock.json rename to cosmicpi/ui/package-lock.json index 836c3ad..abab482 100644 --- a/ui/package-lock.json +++ b/cosmicpi/ui/package-lock.json @@ -1423,10 +1423,16 @@ "dev": true, "requires": { "base64-js": "1.2.3", - "ieee754": "1.1.10", + "ieee754": "1.1.11", "isarray": "1.0.0" } }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, "buffer-indexof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", @@ -1998,11 +2004,12 @@ "dev": true }, "concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { + "buffer-from": "1.0.0", "inherits": "2.0.3", "readable-stream": "2.3.5", "typedarray": "0.0.6" @@ -3275,9 +3282,9 @@ "dev": true }, "flush-write-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { "inherits": "2.0.3", @@ -4927,9 +4934,9 @@ } }, "ieee754": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.10.tgz", - "integrity": "sha512-byWFX8OyW/qeVxcY21r6Ncxl0ZYHgnf0cPup2h34eHXrCJbOp7IuqnJ4Q0omfyWl6Z++BTI6bByf31pZt7iRLg==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", "dev": true }, "iferr": { @@ -5476,7 +5483,7 @@ "neo-async": "2.5.0", "node-dir": "0.1.8", "nomnom": "1.8.1", - "recast": "0.14.5", + "recast": "0.14.7", "temp": "0.8.3", "write-file-atomic": "1.3.4" }, @@ -6139,9 +6146,9 @@ }, "dependencies": { "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, "clone-stats": { @@ -6162,7 +6169,7 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.1", + "clone": "2.1.2", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", "cloneable-readable": "1.1.2", @@ -6316,10 +6323,10 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.1", + "concat-stream": "1.6.2", "duplexify": "3.5.4", "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.2", + "flush-write-stream": "1.0.3", "from2": "2.3.0", "parallel-transform": "1.1.0", "pump": "2.0.1", @@ -9249,9 +9256,9 @@ } }, "recast": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.5.tgz", - "integrity": "sha512-GNFQGQrqW1R8w9XhhgYIN8H7ePPp088D+svHlb7DdP5DCqNDqTwH7lt378EouM+L18kCwkmqpAz1unLqpPhHmw==", + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", + "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", "dev": true, "requires": { "ast-types": "0.11.3", @@ -10944,9 +10951,9 @@ "dev": true }, "vue-loader": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-14.2.1.tgz", - "integrity": "sha512-QSsDSWzKYxyC2LHpp9+2oteUg/ObHeP1VkZAiFTtkTR3lBV7mobcfxzHdQl9mBeJEjdCZpjzWiIUCAErE0K1EA==", + "version": "14.2.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-14.2.2.tgz", + "integrity": "sha512-SehrPGsxSssZXQoR7DTAm2oMBiJxV+xTIX5BUxc+qFsNo0iIj01tzAMXWt0PD5hjoNCXdS5Bq1KLRy7WaMdkKg==", "dev": true, "requires": { "consolidate": "0.14.5", @@ -11037,9 +11044,9 @@ } }, "webpack": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.1.1.tgz", - "integrity": "sha512-PwxKH81yLjbPyBSZvPj/Ji9pT99XOGFA0t6zipoOKOMNRZ+09N39J5Uzcx3rYKnsHgKwDnfGkvzac4MF2Taknw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.2.0.tgz", + "integrity": "sha512-O/KmJ2MYoSfsZzq3//RyyYICYTb1gPAuYSIoD4XbxWFqkDrZCkF8BIAwPuFjA8SFqTcsIL3gTS7hiTZaUN2Tjw==", "dev": true, "requires": { "acorn": "5.5.3", @@ -11218,9 +11225,9 @@ } }, "webpack-cli": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.12.tgz", - "integrity": "sha512-kMi6NquWwUhmQok2IFrtAEIbaVvujzYvtDGb5WElkwylbLboDsCgizv8IjSi/Q6SQRJ8Crayl1JCBnIJ3rU4Rg==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.13.tgz", + "integrity": "sha512-0lnOi3yla8FsZVuMsbfnNRB/8DlfuDugKdekC+4ykydZG0+UOidMi5J5LLWN4c0VJ8PqC19yMXXkYyCq78OuqA==", "dev": true, "requires": { "chalk": "2.3.2", diff --git a/ui/package.json b/cosmicpi/ui/package.json similarity index 85% rename from ui/package.json rename to cosmicpi/ui/package.json index 6e7ce57..ae777a4 100644 --- a/ui/package.json +++ b/cosmicpi/ui/package.json @@ -5,7 +5,7 @@ "main": "webpack.config.js", "scripts": { "dev": "webpack-dev-server --open --mode development --disable-host-check --host 0.0.0.0", - "build": "webpack --progress --mode production", + "build": "NODE_ENV=production webpack --mode production", "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ @@ -16,7 +16,6 @@ ], "author": "", "license": "ISC", - "sideEffects": false, "dependencies": { "bootstrap": "^4.0.0", "chart.js": "^2.7.2", @@ -36,10 +35,10 @@ "file-loader": "^1.1.11", "style-loader": "^0.20.3", "url-loader": "^1.0.1", - "vue-loader": "^14.2.1", + "vue-loader": "^14.2.2", "vue-template-compiler": "^2.5.16", - "webpack": "^4.1.1", - "webpack-cli": "^2.0.12", + "webpack": "^4.2.0", + "webpack-cli": "^2.0.13", "webpack-dev-server": "^3.1.1" } } diff --git a/ui/src/App.vue b/cosmicpi/ui/src/App.vue similarity index 100% rename from ui/src/App.vue rename to cosmicpi/ui/src/App.vue diff --git a/ui/src/assets/css/main.css b/cosmicpi/ui/src/assets/css/main.css similarity index 100% rename from ui/src/assets/css/main.css rename to cosmicpi/ui/src/assets/css/main.css diff --git a/ui/src/assets/images/background_mountains.jpg b/cosmicpi/ui/src/assets/images/background_mountains.jpg similarity index 100% rename from ui/src/assets/images/background_mountains.jpg rename to cosmicpi/ui/src/assets/images/background_mountains.jpg diff --git a/ui/src/assets/images/loader.gif b/cosmicpi/ui/src/assets/images/loader.gif similarity index 100% rename from ui/src/assets/images/loader.gif rename to cosmicpi/ui/src/assets/images/loader.gif diff --git a/ui/src/assets/images/logo.png b/cosmicpi/ui/src/assets/images/logo.png similarity index 100% rename from ui/src/assets/images/logo.png rename to cosmicpi/ui/src/assets/images/logo.png diff --git a/ui/src/components/About.vue b/cosmicpi/ui/src/components/About.vue similarity index 100% rename from ui/src/components/About.vue rename to cosmicpi/ui/src/components/About.vue diff --git a/ui/src/components/Login.vue b/cosmicpi/ui/src/components/Login.vue similarity index 100% rename from ui/src/components/Login.vue rename to cosmicpi/ui/src/components/Login.vue diff --git a/ui/src/components/Science.vue b/cosmicpi/ui/src/components/Science.vue similarity index 100% rename from ui/src/components/Science.vue rename to cosmicpi/ui/src/components/Science.vue diff --git a/ui/src/components/dashboard/Dashboard.vue b/cosmicpi/ui/src/components/dashboard/Dashboard.vue similarity index 100% rename from ui/src/components/dashboard/Dashboard.vue rename to cosmicpi/ui/src/components/dashboard/Dashboard.vue diff --git a/ui/src/components/dashboard/Histogram.vue b/cosmicpi/ui/src/components/dashboard/Histogram.vue similarity index 100% rename from ui/src/components/dashboard/Histogram.vue rename to cosmicpi/ui/src/components/dashboard/Histogram.vue diff --git a/ui/src/components/dashboard/Location.vue b/cosmicpi/ui/src/components/dashboard/Location.vue similarity index 100% rename from ui/src/components/dashboard/Location.vue rename to cosmicpi/ui/src/components/dashboard/Location.vue diff --git a/ui/src/components/dashboard/TimeSeries.vue b/cosmicpi/ui/src/components/dashboard/TimeSeries.vue similarity index 100% rename from ui/src/components/dashboard/TimeSeries.vue rename to cosmicpi/ui/src/components/dashboard/TimeSeries.vue diff --git a/ui/src/components/dashboard/Value.vue b/cosmicpi/ui/src/components/dashboard/Value.vue similarity index 100% rename from ui/src/components/dashboard/Value.vue rename to cosmicpi/ui/src/components/dashboard/Value.vue diff --git a/ui/src/components/settings/Settings.vue b/cosmicpi/ui/src/components/settings/Settings.vue similarity index 100% rename from ui/src/components/settings/Settings.vue rename to cosmicpi/ui/src/components/settings/Settings.vue diff --git a/ui/src/components/settings/Wifi.vue b/cosmicpi/ui/src/components/settings/Wifi.vue similarity index 100% rename from ui/src/components/settings/Wifi.vue rename to cosmicpi/ui/src/components/settings/Wifi.vue diff --git a/ui/src/main.js b/cosmicpi/ui/src/main.js similarity index 52% rename from ui/src/main.js rename to cosmicpi/ui/src/main.js index a3dee13..45bba29 100644 --- a/ui/src/main.js +++ b/cosmicpi/ui/src/main.js @@ -1,17 +1,17 @@ -import Vue from 'vue' +import Vue from 'vue'; import VueResource from 'vue-resource'; import { Settings } from 'luxon' import router from './router.js' import store from './store.js'; -import App from './App.vue' -import './assets/css/main.css' -import 'bootstrap/dist/css/bootstrap.css' -import 'font-awesome/css/font-awesome.css' -import 'vue-datetime/dist/vue-datetime.css' +import App from './App.vue'; +import './assets/css/main.css'; +import 'bootstrap/dist/css/bootstrap.css'; +import 'font-awesome/css/font-awesome.css'; +import 'vue-datetime/dist/vue-datetime.css'; Vue.use(VueResource); -Vue.http.options.root = 'http://192.168.1.26:5000/api/'; +Vue.http.options.root = API_URL; Settings.defaultLocale = 'en' diff --git a/ui/src/router.js b/cosmicpi/ui/src/router.js similarity index 100% rename from ui/src/router.js rename to cosmicpi/ui/src/router.js diff --git a/ui/src/store.js b/cosmicpi/ui/src/store.js similarity index 100% rename from ui/src/store.js rename to cosmicpi/ui/src/store.js diff --git a/ui/webpack.config.js b/cosmicpi/ui/webpack.config.js similarity index 80% rename from ui/webpack.config.js rename to cosmicpi/ui/webpack.config.js index 6e50f34..4444dbb 100644 --- a/ui/webpack.config.js +++ b/cosmicpi/ui/webpack.config.js @@ -66,25 +66,15 @@ module.exports = { performance: { hints: false }, - devtool: '#eval-source-map' + devtool: '#eval-source-map', + plugins: [ + new webpack.DefinePlugin({ + 'API_URL': JSON.stringify(process.env.NODE_ENV === 'production' ? + '/api/' : 'http://192.168.1.26:5000/api/'), + }) + ] } if (process.env.NODE_ENV === 'production') { - module.exports.devtool = '#source-map' - module.exports.plugins = (module.exports.plugins || []).concat([ - new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: '"production"' - } - }), - new webpack.optimize.UglifyJsPlugin({ - sourceMap: true, - compress: { - warnings: false - } - }), - new webpack.LoaderOptionsPlugin({ - minimize: true - }) - ]) + module.exports.devtool = '#source-map'; } \ No newline at end of file diff --git a/install_files/CosmicPi-UI.service b/install_files/CosmicPi-UI.service deleted file mode 100644 index ecc2295..0000000 --- a/install_files/CosmicPi-UI.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=Software for the CosmicPi UI - -[Service] -# Flask Env Vars -Environment=FLASK_APP=/home/pi/cosmicpi-rpi_V1.5/frontend/web_ui.py -ExecStart=/usr/bin/python -m flask run --host=0.0.0.0 --port=80 -WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/frontend/ -Restart=on-failure - -[Install] -WantedBy=multi-user.target diff --git a/install_files/CosmicPi-database_cleaner.service b/install_files/cosmicpi-dbcleaner.service similarity index 56% rename from install_files/CosmicPi-database_cleaner.service rename to install_files/cosmicpi-dbcleaner.service index 8a9d29c..6eec38c 100644 --- a/install_files/CosmicPi-database_cleaner.service +++ b/install_files/cosmicpi-dbcleaner.service @@ -2,8 +2,8 @@ Description=Software for cleaning the local database from time to time, to keep it from exploding [Service] -ExecStart=/usr/bin/python /home/pi/cosmicpi-rpi_V1.5/backend/database_cleaning.py -WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/backend/ +ExecStart=PYTHONPATH=/home/pi/cosmicpi-rpi_V1.5/ /home/pi/cosmicpi-rpi_V1.5/bin/dbcleaner +WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/ Restart=on-failure [Install] diff --git a/install_files/CosmicPi-detector.service b/install_files/cosmicpi-detector.service similarity index 51% rename from install_files/CosmicPi-detector.service rename to install_files/cosmicpi-detector.service index 7cb8c64..de2f859 100644 --- a/install_files/CosmicPi-detector.service +++ b/install_files/cosmicpi-detector.service @@ -2,8 +2,8 @@ Description=Software for connecting to the the CosmicPi detector [Service] -ExecStart=/usr/bin/python /home/pi/cosmicpi-rpi_V1.5/backend/detector_connect.py -WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/backend/ +ExecStart=PYTHONPATH=/home/pi/cosmicpi-rpi_V1.5/ /home/pi/cosmicpi-rpi_V1.5/bin/detector +WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/ Restart=on-failure [Install] diff --git a/install_files/CosmicPi-mqtt.service b/install_files/cosmicpi-mqtt.service similarity index 55% rename from install_files/CosmicPi-mqtt.service rename to install_files/cosmicpi-mqtt.service index 7f21530..fe7cf10 100644 --- a/install_files/CosmicPi-mqtt.service +++ b/install_files/cosmicpi-mqtt.service @@ -2,8 +2,8 @@ Description=Software for sending locally stored events from the CosmicPi to an MQTT srver [Service] -ExecStart=/usr/bin/python /home/pi/cosmicpi-rpi_V1.5/backend/mqtt_publisher.py -WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/backend/ +ExecStart=PYTHONPATH=/home/pi/cosmicpi-rpi_V1.5/ /home/pi/cosmicpi-rpi_V1.5/bin/mqtt +WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/ Restart=on-failure [Install] diff --git a/install_files/cosmicpi-ui.service b/install_files/cosmicpi-ui.service new file mode 100644 index 0000000..b02c3f4 --- /dev/null +++ b/install_files/cosmicpi-ui.service @@ -0,0 +1,10 @@ +[Unit] +Description=Software for the CosmicPi UI + +[Service] +ExecStart=PYTHONPATH=/home/pi/cosmicpi-rpi_V1.5/ /home/pi/cosmicpi-rpi_V1.5/bin/ui +WorkingDirectory=/home/pi/cosmicpi-rpi_V1.5/ +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/config/CosmicPi.config b/install_files/cosmicpi.config similarity index 95% rename from config/CosmicPi.config rename to install_files/cosmicpi.config index eb9f035..7cd31a4 100644 --- a/config/CosmicPi.config +++ b/install_files/cosmicpi.config @@ -10,7 +10,6 @@ baud_rate = 19200 enable_raw_output = False [Storage] -sqlite_location = ../storage/sqlite_db # tells the cleanup script how old the oldest event is allowed to be; measured in hours sqlite_max_event_age = 13 diff --git a/rest/app.py b/rest/app.py deleted file mode 100644 index 7972348..0000000 --- a/rest/app.py +++ /dev/null @@ -1,21 +0,0 @@ -from flask import Flask, request -from flask_restful import Api -from flask_cors import CORS -from .wifi import Wifi -from .histogram import Histogram -from .series import Series -from .auth import Auth - - -app = Flask(__name__) -api = Api(app) - -CORS(app, resources=r'/api/*') - -api.add_resource(Auth, '/api/auth') -api.add_resource(Wifi, '/api/wifi') -api.add_resource(Histogram, '/api/histogram.png') -api.add_resource(Series, '/api/series') - -if __name__ == '__main__': - app.run(debug=True) diff --git a/rest/config.py b/rest/config.py deleted file mode 100644 index f81e855..0000000 --- a/rest/config.py +++ /dev/null @@ -1,5 +0,0 @@ -import configparser - - -Config = configparser.ConfigParser() -Config.read('../config/CosmicPi.config')