Keck Keyword User Interface¶
Introduction¶
This repository runs a web page that provides a user interface for each of the Keck Instruments. Each page is to communicate the diagnoses of the health of the instrument.
Repository Structure¶
> KeckKeywordsInterface
- app.py (initiates the app)
- index.py (runs the app)
- keywords.py (contains Keywords class to read keywords)
- apps
- deimos_ui_dark.py (deimos dark theme structure and callback functions)
- deimos_ui.py (deimos light theme structure and callback functions)
- esi_ui_dark.py (esi dark theme structure and callback functions)
- esi_ui.py (esi light theme structure and callback functions)
- hires_ui_dark.py (hires dark theme structure and callback functions)
- hires_ui.py (hires light theme structure and callback functions)
- kcwi_ui_dark.py (kcwi dark theme structure and callback functions)
- kcwi_ui.py (kcwi light theme structure and callback functions)
- lris_ui_dark.py (lris dark theme structure and callback functions)
- lris_ui.py (lris light theme structure and callback functions)
- main_page.py (MAIN PAGE layout)
- mosfire_ui_dark.py (mosfire dark theme structure and callback functions)
- mosfire_ui.py (mosfire light theme structure and callback functions)
- nirc2_ui_dark.py (nirc2 dark theme structure and callback functions)
- nirc2_ui.py (nirc2 light theme structure and callback functions)
- nires_ui_dark.py (nires dark theme structure and callback functions)
- nires_ui.py (nires light theme structure and callback functions)
- nirspec_ui_dark.py (nirspec dark theme structure and callback functions)
- nirspec_ui.py (nirspec light theme structure and callback functions)
- osiris_ui_dark.py (osiris dark theme structure and callback functions)
- osiris_ui.py (osiris light theme structure and callback functions)
- assets
- deimos.css (deimos pages style and structure settings)
- esi.css (esi pages style and structure settings)
- hires.css (hires pages style and structure settings)
- kcwi.css (kcwi pages style and structure settings)
- lris.css (lris pages style and structure settings)
- main-page.css (main page style and structure settings)
- mosfire.css (mosfire pages style and structure settings)
- nirc2.css (nirc2 pages style and structure settings)
- nires.css (nires pages style and structure settings)
- nirspec.css (nirspec pages style and structure settings)
- osiris.css (osiris pages style and structure settings)
- style.css (all pages basic style and structure settings)
Currently, instruments KCWI, NIRSPEC, ESI, and DEIMOS have fully functional pages once up and running.
NIRC2 and OSIRIS have pages up, but the keywords for these instruments are not up on vm-history-1, but once the global server is up then these instruments can be activated (look and read notes in apps/main_page.py
).
As for, HIRES, LRIS, MOSFIRE, and NIRES information is needed to build the page (apps/kcwi_ui.py
is the best base to work from)
They’re limited differences between the ‘light’ and ‘dark’ theme script in the apps
folder. In each script, there are these two dictionaries:
theme = {
'dark': False,
'detail': '#007439',
'primary': '#00EA64',
'secondary': '#6E6E6E'
} # overall theme of page, either 'dark' = False or 'dark' = True
class_theme = {'dark' : ''} # the class theme, either '' or '-dark'
Make ‘dark’ = True in theme
and ‘dark’ = ‘-dark’ in class_theme
to turn a page to have a dark theme.
When editing, be aware:
- The pages will update every 30 seconds
- Tabs should be disabled until fully loaded
- The app runs on a multithreaded system, so make sure to use semaphore/mutex locks
From Docker¶
Runs from docker container
- Install
- Run Options
- Troubleshooting
Install¶
This should import the container
docker pull terry071896/keck_keyword_interface
This is also the command used to install new updates.
Run Options¶
Option 1- Basic Run:¶
docker run --publish 8050:8050 terry071896/keck_keyword_interface
This should run the container.
You should see (or similar to)
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.1:8050/ (Press CTRL+C to quit)
open a browser and go to the link specified (for me that is
localhost:8050/
).
Option 2- Start/Stop Run:¶
docker run --publish 8050:8050 --detach terry071896/keck_keyword_interface
This will run the container in the background without any read out.
In order to stop the container from running,
docker stop terry071896/keck_keyword_interface
and to start
docker start terry071896/keck_keyword_interface
If you are starting and stopping the container many times, it could be ideal to rename the process. (If there are more updates to be installed, this is not recommended as you will have to remove the name)
docker run --publish 8050:8050 --detach --name keckUI terry071896/keck_keyword_interface
So then you can start stop using that name,
docker start keckUI
docker stop keckUI
Troubleshooting¶
If you are getting the error docker: Command not found.
, then go to
the website https://www.docker.com/products/docker-desktop and follow
the instructions to download docker.
If docker pull [...]
or docker run [...]
are not found, check
for spelling errors (it’s there).
If the container appears to be running, but nothing is showing up on the
localhost. Make sure that you are running from port 8050:8050
.
If the app is not updating properly, then see the GitHub Troubleshooting section at the bottom of this page.
If you renamed the docker container (such as “keckUI” above) and you are trying to update, then
docker container rm --force keckUI
docker run [...]
If none of these are the issue that you are experiencing, then
git clone https://github.com/KeckObservatory/KeckKeywordInterface/
cd .../KeckKeywordInterface
docker build -t terry071896/keck_keyword_interface .
docker run [...]
From GitHub¶
Runs from python3
- Install/Run
- Troubleshooting
Install/Run¶
git clone https://github.com/KeckObservatory/KeckKeywordInterface/
cd .../KeckKeywordInterface
sudo pip install -r requirements.txt
This should import all the code and python packages necessary.
Then, to run the app
python index.py
You should then see
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.1:8050/ (Press CTRL+C to quit)
open a browser and go to the link specified (for me that is
http://0.0.0.1:8050/
). If there is a problem, then you are running
python2, so python3 index.py
should work.
Troubleshooting¶
If the app is not updating or updating properly: - First, give it a few seconds as the program could be changing modes or reading in a large amount of data. - Second, either try refreshing the page or kill/rerun the program.
If you are getting the error
Error in getting data from the server
over and over, then there is a problem with the script “simple_server.py”, which should be running from “kroot”.
Given that it is not running, then it can be ran from the home directory “vm-history-1”.
Once logged in, then
cd KeckKeywords/keyword_server/
kpython3 simple_server.py