Monocle by Govind Parmar

Overview

Corporate/educational monitoring solution that takes periodic screenshots, a list of all currently open windows, and a list of visited websites (beta!) to an Amazon Aurora MySQL database periodically which can later be viewed with a Log Viewer.

Requires the MySQL Connector for C 6.1 to build: https://dev.mysql.com/downloads/connector/c/

To install, build the source code (open setup.sln at the root of the repository in Visual Studio 2017) with the configuration "Release | x86", or acquire the binaries directly and run setup.exe on your Windows system.

Usage

Monocle is intended to be used by CTOs, computer lab administrators, school superintendents, and the like, who have an existing Amazon Aurora instance of their own. They can acquire Monocle and configure it during installation to connect to their own MySQL-compatible Aurora Server, where once it is running, it will monitor all workstations in which Monocle's monitoring module has been installed and store its data in the preconfigured Aurora database.

Then, the administrator can view data on his or her own workstation with Monocle's Log Viewer. This includes:

  • Screenshots
  • Window Titles of currently open windows
  • Web traffic (beta!)

FAQ

1. Why must every consumer have their own Aurora MySQL instance?

To protect the privacy of users! If I had a single, centralized instance where every consumer's data was stored, and I was the sole administrator of this data, it would definitely raise privacy concerns. I wouldn't feel comfortable with it!

2. Why did I code my own installer and uninstaller for the application instead of using services such as InstallShield?

A successful installation of Monocle needs to configure file system permissions and registry key permissions, as well as test the connection to the installer's Aurora instance and configure MySQL accounts within the remote database. I figured this would be simpler to just code from scratch rather than clump together with InstallShield!

3. Are there plans to create versions of Monocle that are compatible with non-Windows systems?

It is something I'm looking into. I chose Windows first since statistics indicate that this will cover the most ground for desktop workstations, especially in workplaces and at schools and universities.

What's next for Monocle?

In addition to creating versions compatible with mac OS and Linux, I do plan to change the Windows application to run as a service instead of a regular application in a scheduled task. That is the idiomatic way to do this type of thing, anyway.

I am also planning to add a constraint to Monocle's monitoring module, where if there are no changes between consecutive data captures, a duplicate entry into the database will simply be omitted.

Accomplishments that I'm proud of:

I stress-tested Monocle by leaving the monitoring module running for an entire day with a capture time of once per minute. This included times when I was actively using the computer and when it was sitting idle. Every row was inserted as it should have been, and the log viewer was able to handle processing every inserted row.

Built With

Share this project:

Updates