eSimMon is Web application for managing and visualization data extracts generated through analysis and visualization of simulation results. Data extracts supported by eSimMon include:
- 1D line charts (rendered using plotly)
- 2D plots (rendered using vtk.js)
- 2D mesh plots (rendered using vtk.js)
- images
Data extracts can be generated by the workflow tool EFFIS and the in situ library ParaView Catalyst. A Python library to generate/convert data extracts is also in progress.
This following packages needs to be installed in order to bring up the eSimMon stack:
- docker - install instructions can be found here
- docker-compose - install instructions can be found here
Bringing up the stack will create a series of Docker containers that allow the use of the eSimMon Dashboard, and each container supports a role in that process.
docker-compose.girder.yml
- Data management platform that uses MongoDB to store and retrieve data.docker-compose.ansible.yml
- Ansible playbook to setup the Girder instance. The playbook will create two users (one with admin rights), an assetstore for storage, a collection for the data, a folder within that collection that will be the default location to upload the data to (this can be changed with theGIRDER_FOLDER_ID
discussed in the section below), and the API key that thewatch
container will need.docker-compose.client.yml
- Builds the client application and uses NGINX to make the app available onlocalhost:9090
.docker-compose.watch.yml
- Runs a Python script to watch the simulation assets site (where the data is being hosted) and upload that data to Girder as it comes in.docker-compose.watch-standalone.yml
- Runs the same monitoring code asdocker-compose.watch.yml
, but does not require that theGirder
container be run as well. Used to run the monitoring service outside of the stack.docker-compose.fastapi.yml
- A FastAPI service that uses FFmpeg to create movies of the selected parameter's data, then downloads them to the local machine. This service also handles extracting data from ADIOS BP files.docker-compose.demo.yml
- A static simulation assets site that has been pre-populated with sample data and can be used as a simple way to populate and interact with the dashboard. This is set to be the defaultUPLOAD_SITE_URL
, which is what the ingest script in thewatch
container will watch for new data.
To setup the Girder instance two users are created: esimmonadmin
and esimmon
. The passwords for these users must be set in the .env
file located in eSimMon/devops/docker
under the ADMIN_PASSWORD
and ESIMMON_PASSWORD
keys. Optionally, if a Girder instance has already been built the GIRDER_API_KEY
and GIRDER_FOLDER_ID
can be set in the watch.env
file located in the same directory. If the keys are not set, they will be created automatically when the Girder instance is created. Changing the GIRDER_FOLDER_ID
will change the location that files are uploaded to with the ingest script. The watch.env
file also contains the UPLOAD_SITE_URL
, which should be set to the simulation assets URL.
To create the Girder instance, you will need to have set the ADMIN_PASSWORD
and ESIMMON_PASSWORD
keys mentioned above, then run the following command:
cd <repo>/devops/docker
docker-compose -p esimmon -f docker-compose.girder.yml -f docker-compose.ansible.yml up
If successfull it will return esimmon_ansible_1 exited with code 0
, after which you can use ctrl-c
to bring down the stack. This should only need to be run once for the initial setup. If the Girder database is removed and the setup needs to be re-run, the GIRDER_FOLDER_ID
and GIRDER_API_KEY
keys will need to be reset if they are not being manually set by the user. This can be done by running the following:
git checkout -- <repo>/devops/docker/watch.env
To bring up the stack each time run the following command:
cd <repo>/devops/docker
docker-compose -p esimmon \
-f docker-compose.client.yml \
-f docker-compose.girder.yml \
-f docker-compose.fastapi.yml \
-f docker-compose.watch.yml \
-f docker-compose.demo.yml up
The docker-compose.demo.yml
file is optional and only needs to be included if you would like to use the sample data. The dashboard will then be exposed on localhost:9090
. When you access the dashboard you will see the login prompt, which is where you will enter the esimmon
username and ESIMMON_PASSWORD
set in the .env
file.
Once you have logged in, the dashboard should look like the following:
When the docker-compose.watch.yml
file is included in the docker-compose
command and the UPLOAD_SITE_URL
has been set in the watch.env
file, any existing run data will be ingested and any runs in progress will continue to populate the database as steps are completed. When the initial data has been ingested the watch script will continue to run, but you will know all existing data has been completely uploaded when you see the following:
watch_1 | [date] [time] - adash - INFO - Fetching /shots/index.json
This message will appear once every minute as the script continues to watch for new timesteps that may have been added. If there is an error message or you do not see the Fetching /shots/index.json
message after the console output has slowed down or stopped, you can get help by creating an issue with the console output.
In order to run the watch service outside of the stack, the following environment variables will need to be set inside the watch.env
file:
UPLOAD_SITE_URL
- Should be the URL of the site that the data is being exposed on. This is what the script will monitor for new and existing timesteps.GIRDER_FOLDER_ID
- The ID of the folder that the data should be uploaded to in the Girder database. This ID will need to be updated each time the upload location needs to be changed.GIRDER_API_KEY
- The API key for the Girder instance that the data is being uploaded to. As explained above, this key will automatically be set when the Girder instance is created, but in order to use a different instance.GIRDER_API_URL
- The URL for Girder instance that the data will be uploaded to.
The container can then be brought up with docker-compose:
cd <repo>/devops/docker
docker-compose -p esimmon -f docker-compose.watch-standalone.yml up
If the container starts up successfully you should see the following message at the very beginning, showing that the upload site set in the UPLOAD_SITE_URL
is being watched for updates:
watch_1 | [date] [time] - adash - INFO - Watching: [UPLOAD_SITE_URL]
Once any pre-exisiting data is uploaded you will see messages indicating that the monitoring service is still running. The following message will appear every minute or so:
watch_1 | [date] [time] - adash - INFO - Fetching /shots/index.json
To run the dashboard with EFFIS you will need to take the following steps:
- Set the
UPLOAD_SITE_URL
variable in thewatch.env
file to behttps://projects.olcf.ornl.gov/phy122/{username}/wdmapp-dashboard
- Follow the instructions in the EFFIS Read the Docs for enabling the dashboard
- You can then either:
- Bring up either the whole stack, as explained in the
Bringing up the stack
section above (you will not need thedocker-compose.demo.yml
file) - Or run the monitioring service independently, as explained in the
Running the monitoring service separately
section above.
- Bring up either the whole stack, as explained in the
docker-compose -p esimmon \
-f docker-compose.client.yml \
-f docker-compose.girder.yml \
-f docker-compose.movie.yml \
-f docker-compose.watch.yml \
-f docker-compose.demo.yml down