OpenLorenz - LLNL-Collaboration/uiuc2015 GitHub Wiki

Project Repository

Motivation

As an initial step for understanding the basic web infrastructure that powers Lorenz and complete a simple data visualization pipeline, we'll use deploying OpenLorenz as an initial task that can be done in parallel with Conduit work and security considerations. I (Thomas Anthony Mendoza) will help guide the team members working on this task through this process when help is necessary.

Summary of Main Tasks

  • Set up an Apache web server either on a laptop or other dedicated server space
    • Secure client-server communication with TLS
    • Implement some authentication mechanism (Basic auth with a static password file to start)
  • Configure OpenLorenz
    • The README file on github has most of the information necessary about this operation
  • Write a simple endpoint and portlet to render data
    • Eventually this endpoint will be fed by Conduit
    • Can contain mock JSON data until a direct path to Conduit can be established

Important Components

  • Front End Components
    • js/portlet/supported/ - This folder contains the source code for all of the OpenLorenz portlets. Creating a new portlet will require copying an existing portlet (e.g. news.js) and modifying that portlet to render the desired content.
    • js/objects/Lorenz.js - This file defines all of the global functions that can be accessed from the front end portlets (which includes the OpenLorenz endpoint accessor functions). In order to add a new endpoint accessor function, copy an existing accessor function (e.g. Lorenz.getNews()) and modify it so that it requests data from the correct endpoint.
    • server/lib/perl/Lorenz/DependencyManager.pm - This file contains the source code for OpenLorenz's dependency manager, which is responsible for finding and aggregating the project's dependencies. In order for a portlet to be serviced to the user, it must be listed as a front end dependency in the dependency manager (i.e. its path must be listed in the dependency manager's apps{'mylc'}{'js'} hash).
  • Application Components
    • lora/lora.cgi - This file is the Apache script responsible for listing and managing OpenLorenz's endpoints. A new OpenLorenz endpoint can be added by copying an existing endpoint and updating its path and action values to the path/actions for the new endpoint.
    • server/lib/perl/Lorenz/REST/ - This folder contains the source code for all of OpenLorenz's REST endpoints. Each file within this folder contains a related collection of functions, which are typically all related by the endpoint with which they are associated and differentiated by what action they're associated with for that endpoint (e.g. GET, POST, DELETE). To create a new endpoint, simply copy an existing endpoint and replace all of its handler functions with handlers for the new endpoint.
    • server/lib/perl/Lorenz/REST/Command.pm - This file contains an endpoint which doesn't work in the current release of OpenLorenz. To dispose of this endpoint, delete all of its handling functions and all references to this endpoint in the lora/lora.cgi file.

Further Considerations

  • What are the security weaknesses inherent with this setup?
  • How can we generalize some of this process?
  • How does this setup compare to what actually exists in LC (use of suexec, authentication scheme, etc)? This will be discussed further as access becomes available.