The Problem

Managing a network of remote devices individually is a massive bottleneck. Logging into every Raspberry Pi manually to run updates or check statuses is time-consuming, prone to human error, and makes it nearly impossible to get a “big picture” view of the network’s health in real-time. Additionally, it becomes hard to double check someones work if mistakes happen.

Considerations

– Software maintainability and modularity. I needed something that was easy to adjust and modify and allow for future expansion as the software could be useful outside of single script executions.

– Proposed actions, expected responses, and reporting. I needed to be able to propose a list of command executions, discuss with others what the expected results and outcomes were, and then report back to them when the script completed or if issues arose.

– Ease of access outside of code, as devices could be taken offline or new ones commissioned, I needed a database external to the software that could me maintained and modified by people with no knowledge of how the software itself worked.

 

The Proposed Solution

I built a centralized Python script runner that had a couple jobs.

  1. Access google sheets to gather device information
  2. Connect to remote devices using VPN and SSH
  3. Execute a script module
  4. Select a single target or set of targets
  5. Package up the results of the script module into an HTML format

Each script module was designed for one task, such as checking the python version, or executing a task with expected response. Each was designed as a single device execution and was capable of retrying. This is so that the execute module could perform it’s task and create the needed data for the report with minimal overhead.

 

In Action

When used, this eliminated almost all user error from the process. The reports allowed for me to flag issues and reassure the lead engineers of the state of the network. Additionally, whilst running this script I could essentially be doing two work loads at once as I could perform other tasks whilst I waited for the code to execute.

Pick a resume

The generalist resume covers a broad range of topics but doesn’t detail a particular field or my comprehensive skill set as it may not be relevant to the listing.

The Mechanical resume details my ability to work with CAD software in a variety of settings, as well as covering my skills with tools and in manufacturing.

The Software resume details my work software in embedded, and the automation space.