======Dashboard====== Visible at [[http://dashboard.scel-hawaii.org|http://dashboard.scel-hawaii.org]] the dashboard provides a means for anyone to access and view the data we are collecting. A module of the [[weatherbox::unified_software_team::start |Unified Software Team]]. **Dashboard Repository**: * [[https://github.com/scel-hawaii/dashboard]] ---- ===== Current Status ===== * Deployed at [[http://dashboard.scel-hawaii.org|http://dashboard.scel-hawaii.org]] * Developed with Python [[https://www.djangoproject.com/|Django Web Framework]] and [[https://semantic-ui.com/|Semantic UI]] Front-End Framework * Connected to [[weatherbox::Database::start |Database Module]] * Currently using [[https://plot.ly/|Plotly]] for Python to generate plots ---- ===== Future Improvements ===== * Better handling of data * Faster load times * Generating plots on client using JavaScript * Display data across generations on a single plot * Allow for comparison of data between boxes * Current plotting function allows for generating plots with data from multiple boxes * Collaborate with [[Forecasting::start |Forecasting team]] * Apply their algorithms to display weather "predictions" * Implement real-time updating plots * Improve quality of viewing on mobile devices ---- ===== Goals (Spring 2017) ===== * Provide human readable data for the other lab members and general public * Effectively and accurately display gathered data for each weatherbox generation ---- ===== Block Diagram ===== {{ :weatherbox:dashboard:dashboardblockspr2017pdr.png |}} ---- ===== Dashboard Testing/Development ===== ==== Working on Dashboard Development WITHOUT Database Connection ==== - Install Python - Install pip - Clone git repository at http://github.com/scel-hawaii/dashboard - pip install plotly - pip install numpy - pip install django - Verify dashboard is working by running the following command on master branch: python manage.py runserver - On web browser go to 127.0.0.1:8000 to view the dashboard - If you don't see it or get an error, something went wrong * **You can also use a virtualenvironment for the Python packages if you wish** ==== Working on Dashboard Development WITH Database Connection ==== - Launch a virtual machine of your choice (I chose Ubuntu on VirtualBox) - Follow the instructions for 'Working on Dashboard Development WITHOUT Database Connection' on your virtual machine - Outside of the dashboard project directory, clone the git repository at http://github.com/scel-hawaii/control_tower - Run control_tower/sample_data/setup_sample_tables.sh to setup database and tables with sample weatherbox data - Switch to psql branch of dashboard (in Dashboard project enter command git checkout psql) - Run dashboard with following command: python manage.py runserver - Should generate graphs with database data instead of csv ---- ===== Dashboard Deployment ===== ====Deploying the Dashboard on Server==== **Follow the following steps to for deploying the dashboard on a server** - Install and Configure VirtualEnv and VirtualEnvWrapper - sudo apt-get install python-pip (skip this if pip already installed) - sudo pip install virtualenv virtualenvwrapper - echo "export WORKON_HOME=~/Env" >> ~/.bashrc - echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc - source ~/.bashrc - Setup Dashboard Django Project - sudo apt-get install git (skip this if git already installed) - cd ~ - mkvirtualenv dashboard - git clone http://github.com/scel-hawaii/dashboard (provide credentials to access private dashboard repo) - cd Dashboard/Dashboard - pip install django psycopg2 plotly numpy - python manage.py collectstatic - test django app working properly with: python manage.py runserver 127.0.0.1:8080 - exit virtualenv with: deactivate - Setup uWSGI Application Server - sudo apt-get install python-dev - sudo pip install uwsgi - quickly test uWSGI with: uwsgi --http :8080 --home /home/**user**/Env/dashboard --chdir /home/**user**/dashboard/dashboard -w dashboard.wsgi (in the currently deployed dashboard, **user** is replaced with **control_tower**) - sudo mkdir -p /etc/uwsgi/sites - cd /etc/uwsgi/sites - create file called dashboard.ini with your favorite editor (ex: vim) and insert the following contents: [uwsgi] project = dashboard base = /home/**user** chdir = %(base)/%(project)/%(project) home = %(base)/Env/%(project) module = %(project).wsgi:application master = true processes = 5 socket = %(base)/%(project)/%(project)/%(project).sock chmod-socket = 666 vacuum = true - create file at /etc/systemd/system/uwsgi.service with editor (ex: vi /etc/systemd/system/uwsgi.service) and insert the following contents: [Unit] Description=uWSGI Emperor service After=syslog.target [Service] ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.targetr.target - sudo systemctl daemon-reload - Configure Nginx - create file at /etc/nginx/sites-available/dashboard with your favorite editor (ex: vi /etc/nginx/sites-available/dashboard) and insert the following contents:server { listen 80; server_name dashboard.scel-hawaii.org www.dashboard.scel-hawaii.org; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/**user**/dashboard/dashboard; } location / { include uwsgi_params; uwsgi_pass unix:/home/**user**/dashboard/dashboard/dashboard.sock; } } - sudo ln -s /etc/nginx/sites-available/dashboard /etc/nginx/sites-enabled - Check syntax with: sudo service nginx configtest (if errors exist, fix before proceeding) - sudo service nginx restart - sudo systemctl start uwsgi - To start uWSGI on reboot: sudo systemctl enable uwsgi * Resources used: * [[https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-uwsgi-and-nginx-on-ubuntu-14-04|How To Serve Django Applications with uWSGI and Nginx on Ubuntu]] * [[https://serverfault.com/questions/775965/wiring-uwsgi-to-work-with-django-and-nginx-on-ubuntu-16-04|Wiring uWSGI to work with Django and nginx on Ubuntu 16.04]] ---- ===== Problems/Resolutions ===== * Noticeable load time of plots causing entire page to hang * Utilize separate process to handle plot generation * Load the plots with HTTP Request to specific url ----