The video team at Sandia National Laboratory has long sought the ability to determine if rooms are being utilized efficiently. Sandia is home to over 450 video-enabled rooms across over 50 buildings and five sites. Users regularly complain of large rooms booked for one or two individuals.
The goal of Project Flatwood is to address the issue of room underutilization by providing historical analysis of people count against booked meetings. In addition to this, we're also able to utilize various xAPI commands to snapshot site-wide analytics at Sandia National Laboratory.
What it does
Project Flatwood utilizes a combination of pull (via JSXAPI) and push (via macros on the endpoints) to consume data. The site-wide analytics are designed to be a snapshot in time and as such are not stored. Room utilization needs to be trended over a period of time so all meetings and people count events are stored in MongoDB for long term analysis.
In unison these features empower Sandia National Laboratory to make informed decisions on video units, usage, and future expansion as they grow their video footprint site-wide.
How I built it
Project Flatwood is built primarily on the MERN (MongoDB, Express, ReactJS, and NodeJS) stack.
Challenges I ran into
One of the bigger issues I faced was retrieval of data on event change. Initially, I was hoping to standardize on only utilizing JSXAPI and making no changes to the endpoints themselves. While the 'pull' model works well for grabbing data in time it doesn't work so well for looking at changes. By running 'push' code from the video endpoints, we're able to detect a change as opposed to constantly be polling within the web application itself.
Another issue I ran into was while trying to integrate the OBTP test functionality directly into the app. I spent an extensive amount of time trying to build a middleware proxy to circumvent client-side CORS issues. Unfortunately, I wasn't able to get this to work and had to settle for building pseudo meetings via Ansible script.
Accomplishments that I'm proud of
This was the first time I've ever used any component of the MERN stack. I'm proud of the fact I was able to solve the business use case for Sandia while simultaneously learning four new technologies (plus some libraries).
What I learned
Although the project didn't follow the architecture I had originally envisioned I was able to achieve my overall goal. I learned it's worthwhile to make some concessions in design to ensure the product is delivered on time.
What's next for Project Flatwood
As a next step, I'd like overlay additional information on the meeting graphs to pinpoint the individual users that booked the underutilized meeting. I'd also like to integrate the One-Button-To-Push test functionality directly into the application.