Unify was built to become a platform to bridge multiple, manual processes into a single point of access to manage those processes in an automated fashion. That said, this project is broken into multiple sections. This section documents the general design of the overall solution.
Front End Application
The front end of Unify was a Windows WPF application that utilized the Telerik WPF controls. The overall feel of the desktop application was designed to mimic other Microsoft Offices with a contextually aware ribbon and an Outlook-style navigation on the left. I used ClickOnce for distributing any updates to the desktop application, and the installed client would check for updates upon launch.
Report templates were stored in the Front End Application. This allowed the user to batch export reports per customer to a location on their computer. They would select the reports they would want to export, select a folder on their computer, and the application would export the requested reports to PDFs. These reports were previously built manually using Excel spreadsheets with connections to various datastores.
Back End Service
I created a WCF Service that contained all of the business logic of Unify. This included executing certain actions (specifically for the accessory applications specified below) and any CRUD operations. I designed and built out a SQL Server database to store any structured data. Unstructured data such as reports and firewall backups were stored on the file system of the server with a direct link stored in the database for quick reference. The WCF service was presented to the client using IIS. Updated were performed by a simple Deploy to a network path that was mapped through IIS.
While the business logic was stored in the WCF Service, I created several Windows Command Line Applications that could be used to execute those tasks. These were used in conjunction with the Windows Task Scheduler to execute any operations required on a regular basis.
Authentication was tied into Active Directory via the WCF service. Usernames & passwords were hashed and sent to the WCF service using HTTPS where they were validated against Active Directory. The front end also checked the currently logged on Windows user and if it were a member of the domain, it would authenticate automatically.
The first problem that Unify solved was to further streamline the Backup Tracking process described in SharePoint Backup Tracker. Additional functionality was included to further streamline the process of quarterly customer reporting.
One improvement gained by implementing a custom application was a significant performance gain. The responsiveness of a native application exceeded accessing SharePoint through a web app. This allowed the technicians to complete their backup review in under 15 minutes under most circumstances.
A second improvement that was made was deeper integration into our ticketing system, ConnectWise. I was able to directly access a list of customers to reference within Unify, and this was used to automatically create tickets based on the reported status of a backup. Upon creating a ticket using ConnectWise’s XML API, the API would respond with the generated ticket number. That was stored along with the backup for reporting purposes. Further integration as it pertains to the firewall backups is detailed below.
Firewall Backup Automation
The second problem was the automation of firewall backups. In order to preserve the configuration of our managed customers’ Fortinet firewalls, technicians were required to manually offload monthly backups. This process took between 4-5 hours to perform on a monthly basis.
Using the Renci.SSH library, logic was built into the Unify Service to send commands to the firewalls of our clients and issue commands. The firewalls had a command built in to send a configuration backup to an FTP server. We setup a dedicated FTP server for these backups and used these commands to execute weekly backups of these firewalls. The success or failures of the backup process, along with a direct link to the backup for quick access, was stored in the database. This was used for quarterly reporting between the client executives and the customer.
Considering the access URL and credentials were stored in the CMDB of ConnectWise, and the onboarding process had a task to add this information, it was decided that this would be the best source of truth for creating the firewall backups. We used the ConnectWise API to pull this data in at the start of the routine. This allowed integration of the firewall backups procedure into the existing business processes, reducing the possibility of error or oversight.
The final component that was completed for Unify was the process of automatically storing warranty information on all endpoints covered under contract. As part of the onboarding process, a Remote Monitoring & Management (RMM) tool was deployed to endpoints. This allowed for remote support and management, but also gathered data regarding the system, notably the system serial number.
I utilized these values stored in the MySQL database of the RMM server, in conjunction with a third party warranty lookup service, to parse the warranty info of all 1000+ managed endpoints into Unify for reporting and tracking. A custom report was created to allow client executives to export reports for the quarterly review and plan with the customer to ensure their hardware was under warranty and compliance.