Challenge Overview
Overview
The client is looking to make a few tweaks to an existing Windows application. The application consists of a monitoring agent that collects data (e.g. performance metrics/statistics data) from Windows based laptop/desktop computers and periodically connects to a backend API which stores the data in HBase. Administrators can use this data to make decisions regarding new laptops, additional memory, software patches and upgrades, etc.
In this challenge, the deliverable will be an updated codebase with the changes detailed below. The changes deal primarily with adding additional configuration options for the application which modify how data is collected and sent to the remote server.
Resources Provided
For this challenge you will be provided the full source code for the Windows application (create in a set of previous challenges) in a zip file.
You will need Visual Studio to compile the application. It compiles successfully in VS2012 (other versions have not been thoroughly tested).
Detailed Requirements
1. Create and wire-in (make functional) additional configuration options In App.config for each collector:
Enabled (true / false): If true, the collector is run during the collection cycle. If false, the specific collector is not run during the collection cycle.
Store Metrics (true / false): If true, metrics for this collector are stored locally on the system (as they are now). If false, no metrics are stored locally for this specific collector.
Send Remote (true / false): If true, metrics for this collector are sent to the remote server. If false, metrics are not sent to the remote server for this specific collector.
Note: If a given collector is not "Enabled", no metrics would be stored locally or sent to the remote server.
2. Create and wire-in (make functional) an additional configuration option in App.config that impacts all collectors that send information on files:
Store Full File Paths (true / false): If true, the full file path is collected when this collector runs. If false, only the filename is collected and not the path.
The intent for this change, is to not send the user's user ID (which is often part of the file path, depending on the file). This is due to privacy concerns.
Note: Please ensure this is implemented everywhere file paths are stored / sent by the collectors. This may involve more than one collector (such as the LargestFileMetricCollector, the Helper, FileSummaryMetricCollector, InstalledSoftwareMetricCollector, ...etc).
3. Create and wire-in (make functional) an additional configuration option in App.config that disables the collection / storage of the user's username:
Store Username (true / false): If true, the username will be collected by collectors such as the EventLogMetricCollector. If false, the username should be set to 'Hidden' during these collections.
The intent for this change, is to not send the user's user ID (which is often part of the file path, depending on the file). This is due to privacy concerns.
Note: Please ensure this is implemented everywhere the user's username is stored / sent by the collectors. This may involve more than one collector and may require some digging on your part..
4. Create and wire-in (make functional) an additional configuration option in App.config to enable HTTPS as the communication method for passing data to the back end:
Currently the application makes unencrypted calls to the backend for passing data. Please add a configuration option to switch between HTTP and HTTPS for this communication.
5. Ensure that the solution / project builds an .MSI install package that incorporates these changes:
The source uses WiX tools to create an installer package (an .MSI executable). It's unclear if any updates will be needed here, but please ensure the MSI which is built from this project uses / incorporates the new changes.
Final Submission Guidelines
Please submit your solution as a .zip file of the full code base.
- Please restrict your changes to only the necessary files, your code will be integrated back into our GIT repository
- Please include documentation (text or word document) detailing your changes and specifics on how you implemented each specific goal.