Defense Software Modernization
Modernizing the United States DoD's tactical weapon’s system.
Role
Software Engineer
Location
Austin, Texas
Tools
C / C++, Go, JavaScript, Docker, Prometheus, Grafana, RTI DDS, Git, Linux, Draw.io
Premise
Note: To comply with the company's Non-Disclosure Agreement, only information which is in the public domain or common practice has been given in this report. https://builtin.com/job/software-engineer/936658, https://en.wikipedia.org/wiki/Cooperative_Engagement_Capability This report is in the context of my work for a DoD contracting company with an afinity for creating cyber-first software solutions. As a Software Engineer at this company, I had the pleasure of working on the CEC Next team of two dedicated software engineers.
Challenge
As a full time employee at a US Department of Defense contracting company, I worked on a project with the goal of modernizing the US Department of Defense's Cooperative Engagement Capability (CEC) system. As shown in the figure to the left, CEC is a system crucial to tactical tracking and engagement by collecting, aggregating, and controlling both local and networked data on warships, jets, and sensors. For example, by aggregating entity position data from different sources and vantage points, a strategically placed asset is able to better address an adversary entity. Although a powerful mechanism, the software responsible for CEC data aggregation was programmed in the 1990s and is due for an update.
Solution
To demonstrate modernization capability of the CEC system, myself and a colleague applied containerization techniques to a program representing the current CEC software. This process converted a monolithc C++ program into a set of microservices with telemetry capabilities. To simulate data into the program, we programmed a Golang simulator with the capabilities of recording and outputting ADS-B data over a network. In our application, telemetry is collected by a Golang service and aggregated in a Prometheus database. The image to the right is a general representation of the program's custom UI, taking aggregated telemetry at different endpoints and displaying with Grafana.
Design and Development Choices
Containerized with Docker and orchestrated with Kubernetes, the C++ and Golang microservices communicate over an internal network using the RTI DDS publisher/subscriber messaging service by Real-Time Innovations. Telemetry collected through an external Golang microservice is aggregated by Prometheus and displayed on a Grafana dashboard. Machine processing metrics are collected using Node Exporter, providing CPU and Memory usage. The Grafana dashboard is edited using a JavaScript plugin to produce custom graphics.
Result
This project allowed me to develop my knowledge of containerization, microservices, and pub-sub systems, while giving me the opportunity to contribute my own knowledge of interface customization, C++, Golang, and JavaScript. The outcome of the project brought the company for which I was working future opportunities and a demonstration of modernization capability.