CGWatcher
version 1.3.4
© 2013 Justin Milone
Milone99k@gmail.com
http://manotechnology.blogspot.com/p/cgwatcher.html



DONATE: 
This software is provided free of charge by the developer. Support its continued development and the development of related projects like CGRemote by sending a small donation to one of the following addresses:

    BTC: 19msnBddmcaHnbTTQgFgzPDuy6PqfBgFJh
    LTC: LM6Un6hZvPzLBggJWiAVG6E6w2GfaHukXY 
    NMC: NJjD4rP5xy2mgSK8gXXsZwFkdknbvtvy3q
    (Click Donate button in About tab for more options)


UPDATE:
See the Changelog at the bottom for more information on what has changed in this update.

*Do not download CGWatcher from any other website! The program keeps appearing on SourceForge at double the size it should be, meaning it likely has malware added. SourceForge has removed some of these but they keep popping up every so often.*


FAQ
Q: Why is my hashrate lower when I use CGWatcher to launch the miner?
A: In 99.9% of cases, this is due to the gpu-threads config setting. The cgminer readme states that the default gpu-threads value is 2, when in reality it uses 1 by default. So to stay consistent with the readme, CGWatcher defaults to 2. So to get the same results as running cgminer outside of CGWatcher, you may need to set gpu-threads to 1 in your config file or arguments.


REPORTING BUGS OR PROBLEMS:
Please submit questions or problems via email to Milone99k@gmail.com, AND include the debug report when submitting a bug. You can create the report by clicking 'Create Debug Report' in the Tests tab. Reporting a problem without providing this information may make it impossible to fix.


ANTIVIRUS FALSE-POSITIVES
CGWatcher trigger a false-positive in your antivirus software (specifically Symantec and Kaspersky). If you are concerned that the software is doing something bad, I encourage you to submit a false-positive report to the developer of your antivirus software. This usually involves filling out a web form and uploading the CGWatcher archive (.zip or .rar file) and submitting it to them. They will check the files and report back whether or not it was a false-positive. They'll also whitelist the specific version you send them, but most likely the false-positive will be back on the next update... in which case I'd encourage you to repeat if you're still concerned. I gave up on submitting false-positive reports because they only correct them for one version, and even the slightest change brings them back (meaning they're probably only whitelisting a hash).


PURPOSE:
CGWatcher is a GUI/monitor for CGMiner and BFGMiner, the bitcoin mining program. It provides a graphical user interface, along with control and monitoring options to help ensure mining runs consistently. CGWatcher continuously watches the miner process and mining statistics to detect problems, and then takes the appropriate action - in some cases whichever action is specified by the user. CGWatcher also provides advanced scheduling, profitability mining (mining most profitable coin), detailed device and pool information, mining profiles, advanced remote management (using CGRemote), statistic reporting, email alerts, automated mining on Windows startup, allows you to modify miner settings while the miner is running instead of requiring a restart, and much more. 

CGWatcher is the most advanced and full-featured mining interface and monitor available. It eliminates the need to constantly check on your miners by watching them for you. And if you want to be able to check on and manage your miners from anywhere at any time, CGWatcher works with CGRemote (http://minerremote.com) to provide advanced features to manage the miners and even the computers they're running on.


HOW IT WORKS:
CGMiner and BFGMiner have an API allowing other applications to communicate with them for purposes such as this. CGWatcher sends a command to the miner, and the miner returns a reply message. These commands can be simple requests for information (such as asking what the current hashrate is or what devices it is using) along with commands that tell the miner to do something (change pools, disable a device, or restart, etc.) This allows a GUI to be written with a more user-friendly interface without affecting the miner's performance and hashrate. The miner gets to stay lightweight and as fast as possible, and the slightly more resource-intensive GUI program only sends requests when necessary. This communication is not enough to effect on the miner's performance.


REQUIREMENTS:
The .NET Framework 4.0 is required. The latest version of CGMiner or BFGMiner is recommended, although changes to these programs may require updates to CGWatcher, which I will try to do as quickly as possible. These miners must be ran with parameters giving CGWatcher full API privilege for full functionality. This is now done automatically any time the miner is started from CGWatcher, regardless of whether or not it is in the config file or arguments. CGWatcher will only ensure full API access is given to 127.0.0.1. If you want to allow full API access to other IP addresses, you can still use the api-allow option as it is not overwritten (CGWatcher just makes sure 127.0.0.1 is listed in W: group.)



USING CGWATCHER:

SETUP

CGWatcher requires no installation. It is recommended to not use the 'Program Files', 'Program Files (x86)', 'ProgramData', 'Windows', or user desktop folders to store CGWatcher or miners because they may require elevated permissions to be able to save files there (including config files and CGWatcher's settings files).

** If you are using Windows 8, it may be necessary to run CGWatcher as Administrator because not doing so causes permissions issues when CGWatcher attempts to get info on the miner's process. This then causes CGWatcher to not correctly match the process to a profile, which can make it ignore the miner completely.


MULTIPLE INSTANCES

If you'd like to run multiple instances of CGWatcher for running multiple miners on the same computer, you can do so by creating a copy of CGWatcher for each instance. Each copy must have its own folder so they don't overwrite each other's settings. You must also set each copy of CGWatcher to use a unique API port which they'll use when communicating with their miner. To do this, go to the Settings tab and click the Miner sub-tab. Enter a unique port number for each copy (between 1024 and 65535) in the Miner API Port setting. Check the 'Use only this API port' checkbox in each copy to force them to always only use this port, then click Save Settings. This will prevent the copies and their miners from cross-communicating with the other's miner.

Example of running two CGWatcher instances on the same computer to monitor two cgminer instances:

Copy A folder: C:\Miners\CGWatcherA         Copy A port:  4028
Copy B folder: C:\Miners\CGWatcherB         Copy B port:  4029

Once you have each copy setup, you can create a shortcut to each on the desktop and rename the shortcuts to better identify what each copy does (e.g. "CGWatcher GPU", "CGWatcher ASIC").

Alternatively, you can copy CGWatcher.exe and paste it into the CGWatcher folder with a new name (e.g. CGWatcher2.exe) and it should create its own INI file called CGWatcher2.exe.ini. This should allow them to work without interfering with each other.


NOTIFICATIONS

Notifications are messages CGWatcher presents to the user. Notifications are queued, meaning if you close one the next will be displayed and so on. Their default duration is 5 seconds, but this may be longer depending on importance. Clicking anywhere on a notification will close it.

Unlike certain message boxes, notifications do not have any effect on the monitor and will not prevent it from continuing to run. The program will continue to work as normal even when a notification is displayed, and no input is required on your part to close notifications (they will close automatically after their duration expires), but you can click on them to close them if they get in the way.

There are six types of notifications:

    - Good - [green] means something good has happened (e.g. a block found, or a GPU being re-enabled after it had been disabled due to overheating.)

    - Neutral - [yellow] a problem occurred but CGWatcher was able to take action to resolve it (e.g. restarting a miner because criteria for a monitoring check was met.)
    
    - Bad - [red] a problem has occurred and CGWatcher was unable to resolve (e.g. failing to restart a miner when it attempted to.)

    - Schedule - [blue] are displayed when Scheduled Actions are triggered. Information on these actions are also added to the log.

    - Remote - [purple] are displayed when a command to change something has been sent by CGRemote.

    - Miscellaneous - [teal] are everything else.

You can disable notifications by checking the 'Hide Notifications' option in the Settings tab, and then clicking 'Save Settings'. This is not recommended, though you could still see this information in the log.



PROFILES

Mining profiles that allow you to easily switch between crypto-currencies. Upon starting CGWatcher for the first time, a default profile will be created for you. If a miner is running when you start it for the first time, it will set that miner to the default profile. If a miner is not running, it will check for a miner (cgminer.exe or bfgminer.exe) in the same directory or subdirectories (miner,cgminer,bfgminer). If it cannot find a miner, you will need to edit the profile and set the miner you want to use for the profile. You can do this as well as add, edit, or delete profiles by clicking 'Manage Profiles...' in the Settings tab.

(Note: CGWatcher will only automatically create a profile for a running miner if no profiles exist. Once at least a one profile exists, any miners detected that were not started by CGWatcher will result in a prompt asking if you'd like to create a profile for that miner.)

*Notice: Starting with version 1.1.5.0, how CGWatcher checks for running miners that it did not start has changed. Instead of just looking for miner processes, it will now require miners that have API enabled and ignore any that do not. It will start by looking to see if the running miner belongs to any of its profiles, and if so it will check that profile's configuration to find which API port to use to communicate with it. If the running miner does not belong to a profile, it will use the API port set in the Settings tab to communicate with the miner. If communication fails (API is not enabled or is using a different port), the miner will be ignored.

To add, edit, or create profiles, use the 'Manage Profiles...' button on the Settings tab to open the Profile Manager. Although the Settings tab displays the active profile's settings, you cannot edit them here. 

For each profile, you can specify the following:

    - Profile name (required) - a unique name (e.g. "Bitcoin", "Litecoin")

    - Miner Path (required) - path to the miner's .exe (or .bat/.cmd file used to launch the miner). Each profile can have its own miner, they can all use the same one, or a mix of both.

    - Config File (optional) - a config file to use with the miner (does not have to be in the same directory as the miner). If the config file path contains spaces, CGWatcher will automatically put quotes around it to prevent an error in the miner. You can specify the complete file path, or just the filename for config files in the same directory as the miner and CGWatcher will convert it to the complete path for you. If you've named config files in Config File Editor (see below), they will appear in a drop-down list in the Config File textbox allowing you to select a config file by name it it will be automatically converted to its file path.

    You can also include web addresses (URLs) to config settings. It can be a file like http://web.host.com/myname/myconfig.conf or a direct link to just the config data like Pastebin's raw text URLs like http://pastebin.com/raw.php?i=CEz1Vgvn. Assuming you've entered a valid URL and clicked Save to save the profile, CGWatcher will download the URL to its own folder and link it to the URL so that if you use the URL in other profiles, only one local file is updated. The file is updated from the URL any time you save a profile using it, or when the miner is started or restarted to ensure it has the most up-to-date settings.

    An example using the basic config file I've uploaded to Pastebin, who's RAW URL is http://pastebin.com/raw.php?i=CEz1Vgvn. In Profile Manager, I would enter http://pastebin.com/raw.php?i=CEz1Vgvn in the Config File path. Upon saving, CGWatcher would download the file to its own folder, or a "webconfig" subfolder, and save it as "rawiCEz1Vgvn.conf". This is the file it will actually use when starting the miner. But before it starts the miner, it will update this file by re-downloading to get the latest version. I can also update this file to the latest version that is online by either saving the profile again, or opening the Config File Editor for this URL and clicking the Refresh button in the bottom next to the URL textbox.

    You can still use "include" config files in web config files, since the include path is relative to the miner path (not the parent config file.) However including a web config file URL is not supported.

    - Miner Arguments (optional) - arguments used when launching the miner. Note: if you set a .bat or .cmd file as the Miner Path, any arguments in the .bat or .cmd file will be saved to the .bat or .cmd file. Changing the profile arguments in CGWatcher will not affect other lines in the .bat or .cmd file, so if you're setting GPU_MAX_ALLOC_PERCENT or GPU_USE_SYNC_OBJECTS in your batch/command file before launching the miner, these lines will remain unaffected. Essentially this means that whether your miner path is an .exe, .bat, or .cmd file, you can edit arguments in the Profile Manager.

    When using CGWatcher, arguments always override config files... meaning if the same option is specified in both, the setting in arguments is used. This is the opposite of how cgminer handles them. I did this to allow for shared config files while letting arguments be used to customize the config at each miner. This can now also be done using variables.

    - Coin (optional) - If the profile is used to mine one type of crypto-coin, you can select the coin here. Assigning a coin to the profile allows the profile to be considered when determining the most profitable profile to mine with. If you do not assign a coin to the profile, the profile is ignored when determining profitability. It is therefore recommended that you create a profile for each type of coin you mine, and then use Scheduled Actions to switch profiles.

    - Advanced... - Opens advanced profile options. Currently these are:

        - CPU Affinity and Priority: set which CPU cores the miner process should use, and the CPU priority it is given.

        - Include Config File: this is to simplify the "include" option available by cgminer. You can use "include" : "C:\configpath\config.conf" to include an additional config file.

If you've set a config file in the Miner Arguments using --config, CGWatcher will automatically extract it from the arguments and set it as the Config File. So if you see the --config option disappear from the Miner Arguments textbox, it is because it is now specified in the Config File textbox... and if it is in the Config File textbox, it will be used when launching the miner. 

There are two profiles you should be aware of in CGWatcher - the active profile and the current mining profile. The active profile is the one you want to use for mining and you can change this any time in the Settings tab by selecting a profile from the drop-down list and clicking 'Save Settings'. However, if the miner was running while you switched to a new profile, you will need to restart the miner for it to use the new profile. CGWatcher will prompt you to restart the miner when this happens, but if you choose not you will not be actually using the new active profile until you restart the miner. The Status tab, as well as the bottom right corner of the window when the miner is running, display the current mining profile - the profile the miner is currently using. The Settings tab will show you the active profile. This active profile is what is saved and loaded the next time CGWatcher opens.

- The only time you need to worry about the current mining profile is if you change profiles while a miner is running and choose not to restart the miner when CGWatcher asks you. -

Example of active profile vs. current mining profile: You are mining with a profile called "Bitcoin". While the miner is still running, you go to the Settings tab and change the active profile to "Litecoin" and click 'Save Settings'. You will be asked if you want to restart the miner so it will switch to the "Litecoin" profile now, and declining means the miner will keep running under the "Bitcoin" profile until the next time it is restarted or stopped and started.


INTERFACE

To keep the interface as small as possible, features are separated into tabs. Tabs can be navigated using function keys F1 to F11. Upon starting for the first time, you should go to the Settings tab and click 'Manage Profiles...' to setup your mining profiles. The Settings tab also allows for changing the miner's API IP address and port, but this will start out set default to the miner's defaults and should not need changed for most people. The API port is only used if the api-port option is not set in the miner's config file or arguments (when starting/restarting miner using CGWatcher, api-port in arguments overrides api-port in config file). If you are running multiple instances of CGWatcher to monitor multiple miners, you should set a unique port in each CGWatcher and miner to avoid cross-communication. For multiple instances, you can also check the 'Force this API port' to override any specified api-port option when the miner is launched from that CGWatcher instance. This will ensure that each of your CGWatcher instances are using unique API ports with their respective miners.

Below is a list of the tabs and information on the features each tab contains:


    STATUS

        The Status tab provides general information such as hash rate (current and average), accepted and rejected shares, etc. Moving the mouse over a text box will provide you with more information about the data being shown in it. This tab also features a line graph showing the current hash rate and device temperatures (if reported) for the last ten times information was polled from the miner.

        At any time, you can refresh the information in CGWatcher by clicking the Refresh button. If monitoring is enabled (recommended), this will be done automatically at the interval you specify. However, if you wish to update it instantly without changing the interval, you can use this button at any time. Clicking the Refresh button will update information but it will not perform any checks regarding the miner's status or perform any miner restarts.

        The Status tab also includes a large Pause/Un-Pause button. If a miner is currently running, the button will be labeled "Pause Mining". Clicking it will shutdown the miner. Once the miner is not running, the button turns into a "Start Mining" button. Clicking it will launch the miner using the active profile and begin mining. The idea behind this button is to have a very easy way to "pause" mining if you wish to do something on the computer (like watch a video, for example) where you will need more performance from your GPU than you can get while mining, since mining usually maxes out your GPU. Depending on your GPU(s) and intensity settings, you may not need to pause the miner to do something like watch a video, but the option is there nonetheless.

        There is one statistic on the Status tab that you can customize. This means you can select from a list of existing statistics to display, or you can create your own custom statistic by creating a mathematical expression using any of the other available statistics. You can edit this statistic by clicking the Edit link next to the textbox in the Status tab (lower right corner).


        Q: What is the difference between "Pause Mining" and "Stop" buttons?

        A: As far as the miner is concerned... nothing. But CGWatcher assumes that if you pause mining, that you want things to carry on as they were prior to pausing once the miner is started again. This means scheduled actions that persist through miner restarts will be re-applied after pause/start, where stop/start they won't. 


        On the bottom of the window underneath all of the tabs, you will see a status display on the left (which only appears when CGWatcher is doing something.) 
        On the right is a miner status display that shows whether an accessible miner is running or not, and if CGWatcher is monitoring it. If the miner was started outside of CGWatcher and CGWatcher does not have API access to it, it will show that no miner is running. If the miner was started using CGWatcher and API access is disabled for some reason, it will show that the miner is running (but no miner data will be available.)


    MONITOR

        The Monitor tab provides options for monitoring CGMiner and watching for problems and correcting them. Changes to the settings on this tab are applied instantly and do not need to be "Saved."


        "Monitor Settings"

        "Enable monitoring, get miner status every: <seconds>" - This turns on the monitoring feature which will request mining information from the miner at the interval you set. This option must be turned on in order to enable the other monitoring and recovery options below it, because with it disabled it will not continuously watch the miner. The default value of 10 seconds means every 10 seconds CGWatcher will request data from the miner, update the display, and perform the checks that you've enabled. When this option is turned on, you will see "[Monitoring]" added to the text in the CGWatcher title bar.

        Each time the monitor refreshes, it will check to see if the miner is running and if it is responding. If the miner being monitored stops responding for 3 consecutive checks, it will kill the process and restart it. You can change the number of consecutive checks required by changing the NotRespondingRestartChecks setting in the [Monitor] section of the INI file.

        The Windows Error Reporting UI creates a small window that comes up when a program stops responding, listing different options like 'Close the program', 'Check for a solution and restart', etc. In order to prevent this from preventing CGWatcher from killing a non-responding miner, the WER UI is disabled when CGWatcher starts, and its setting is restored when CGWatcher closes. This means that the UI will not be displayed for other programs that stop responding while CGWatcher is running, so if you wish to prevent CGWatcher from doing this you can set AllowDisableWERUI=False in the [Monitor] section of the INI file.


        "Restart if total hashrate falls below: <hashrate> <Kh/s;Mh/s;Gh/s> - On occasion I have seen the hashrate fall to virtually nothing for some unknown reason. To correct this, you can enable this option and set it to a low value such as 10% of your current hashrate. For example, if your current hashrate is 500 Mh/s, you may want to set this at 50 Mh/s (or below). A number this low will avoid restarting due to small fluctuations in hashrates that can occur. If the total hashrate is below this cutoff for 3 consecutive checks, the miner will be restarted.
        (Note: You can change the number of consecutive checks by editing the HashRateCounter value in CGWatcher.exe.ini)


        "Restart miner every: (hours of continuous mining): <hours>" - As a sort of last resort, you can specify a number of hours of continuous mining before the miner is restarted. For example, the default value of 24 means the miner will be restarted after it runs for 24 continuous hours (without stopping). Whenever the miner is stopped or restarted, this timer resets. As an example, if you set this to 2 hours and a temporary problem disrupted mining, it should ensure that at most you will have 2 hours of downtime.


        "Restart [miner/computer] if [accepted/total] shares stop increasing for: <minutes>" - If your accepted share count stops increasing for an unusually long amount of time, this likely indicates a problem with your pool or network. For solo mining, you may find checking the total share count (accepted, rejected, and stale) more helpful. Setting this to 10, for example, means that if your accepted share count doesn't increase for 10 minutes, the miner or computer gets restarted.


        "Restart [miner/computer] when sick or dead devices are detected" - More often than not, the miner will detect sick or dead GPUs but is unable to restart them and continue mining. When CGWatcher detects these sick or dead GPUs, it restarts the miner. (Note: This option no longer attempts to restart the sick or dead GPU only, as that often fails. Instead it now completely restarts the miner or the computer depending on your selection.) If you find that restarting the miner fails to resolve the problem, you can also select to restart the computer when this happens. If conditions to restart the computer are met, you will be shown a 30-second countdown window from which you can cancel the restart. By default, when a restart is performed CGWatcher will not force close other programs, meaning is another program prompts you to save something before closing, it may prevent or postpone the restart. If you wish for CGWatcher to force close other programs when it performs a restart, you can set the ForceCloseProgramsOnRestart=True under the [Monitor] section in the INI file.

        Starting in version 1.2.8, the "sick or dead" option now also applies to FPGA and ASIC devices. If you don't wish to have the miner restarted when these devices become sick or dead, you can disable this in CGWatcher.exe.ini. Find the [Monitor] section and the setting RestartOnSickDeadUSBDevices=True. Change this to RestartOnSickDeadUSBDevices=False and restart CGWatcher.


        "Restart miner if full API access becomes read-only or if API access is lost completely" - If CGWatcher had API access to the currently running miner process but then lost it, it indicates a problem with the miner and it will restart it by killing the process and restarting. Likewise, if CGWatcher had full API access and this became read-only or lost completely, it also performs the kill and restart. If it has read-only access and never had full access, it will not restart the miner. Nor will it restart any miner that it never had API access to.


        "Ensure miner stays running unless paused or stopped in CGWatcher" - means what it says. If you enable this option and you or some unknown force closes the miner outside of CGWatcher, CGWatcher will start it up again. And it will continue to do this until you enable this option. Stopping the miner by using the Pause Mining or Stop buttons will prevent the miner from being restarted. If starting the miner fails 3 consecutive times, CGWatcher will give up and notify you of a problem.

        "Restart miner if mining device count is below (all devices):" - set the minimum number of devices that must be mining when the miner start grace period (default 3 min) ends. If this number of devices is not met, the miner is restarted. This does not apply to miners that were running before CGWatcher.


        "Overheat Protection"

        "Enable overheat protection for GPUs not protected by the miner" - enable or disable CGWatcher's overheat protection features. See OVERHEAT PROTECTION below.


        OVERHEAT PROTECTION

        If the miner is able to detect a GPU's temperatures, it provides overheat protection as long as the auto-gpu option is enabled. If you use both the auto-fan and auto-gpu options, the miner provides additional protection by controlling the GPU's clock and fan speeds to keep it running in the temp-target range. However, the miner is unable to detect information for all GPUs, specifically Nvidia GPUs, because it only uses the AMD ADL library to get this information. So if the miner is not able to get the GPU's temperature but CGWatcher is, CGWatcher will try to provide basic overheat protection also using the temp-target, temp-overheat, and temp-cutoff settings. If the temperature passes the temp-overheat setting, CGWatcher will lower its intensity by one in an attempt to get temperatures back to the temp-target range. It will continue to do this as long as the temperature is too high. If the temperature returns to below the temp-target, CGWatcher will gradually increase its intensity back to the original setting unless the temperature passes the temp-overheat again, in which case it lowers the intensity by one again. If the temperature passes the temp-cutoff, CGWatcher will disable the GPU. Once its temperatures return back to less than or equal to the temp-target, it will re-enable the GPU.

        For AMD GPUs that the miner is providing overheat protection for (if auto-gpu is enabled), CGWatcher takes a hands-off approach other than when the miner disables them for exceeding temp-cutoff. Although the miner tries to re-enable them once they return to target temperatures, this does not seem to happen successfully so CGWatcher will restart the GPU once it has returned to temp-target or below. (This feature - CGWatcher restarting GPUs that cgminer had disabled once they cool down - no longer requires Overheat Protection to be enabled. This is now done regardless of this setting.)

        So CGWatcher classifies overheat protection into three types:

        Miner managed - The miner is capable of getting the GPU's temperature and the auto-gpu option is enabled. This means the only time CGWatcher will act is if the miner disables the GPU for overheating, CGWatcher will make sure it gets restarted successfully once it has cooled down to the target range.

        CGWatcher managed - If the auto-gpu option is disabled, or if the miner is not capable of getting a GPU's temperature and CGWatcher is, it provides complete overheat protection for the GPU. This includes adjusting intensity and disabling GPUs that exceed temp-cutoff and re-enabling them once they return to the target range.

        No protection - If neither the miner or CGWatcher can get a valid temperature for the GPU, it has no overheat protection. This also applies to GPUs that do report a valid temperature if auto-gpu is disabled and CGWatcher's overheat protection is disabled.

        CGWatcher's overheat protection is enabled by default, but you can disable it in the Monitor tab. Keep in mind that temp-target, temp-overheat, and temp-cutoff all have default values of 75, 85, and 95 respectively. This means that even if you don't explicitly set these options, they are still set to their default values. Also, CGWatcher only provides overheat protection for GPUs that report a temperature between 1 and 150. Anything outside this range is considered invalid and unreliable. (Yes, I realize 150 is high but I wanted to cap it conservatively. Usually invalid temperatures are way off, e.g. 500c or -500c.) CGWatcher will only check GPUs that have an "ALIVE" status, as any other status means the GPU is not mining.

        Q: Why does my intensity end up switching back and forth between two values after being lowered by overheat protection?

        A: These two values are right on the edge of the temp-overheat temperature. The lower value drops temperatures below temp-overheat, the higher value makes temperatures rise above temp-overheat. So often you end up with the intensity going back and forth between these two. This isn't necessarily a bad thing, and may be preferable to a more constant intensity. If 10 drops temps below temp-overheat, and 11 brings temps above temp-overheat, you'll eventually average an 10.5 intensity. If it were to try to stick with one, you may end up at 10. So by changing back and forth often, you're squeezing a little extra hashrate out of the GPU while the temps permit, then dropping it down a notch when they don't.


        "Other Settings"

        "Failure Handling"

        These settings allow you to choose how you want CGWatcher to handle occasions where the miner doesn't start correctly. This limit does not apply when you start the miner by clicking on the "Start" or "Start Mining" button. Because you've clicked on the button, CGWatcher knows you're there and able to diagnose and fix whatever problem is causing the miner to not start, so it only tries to start the miner once in these circumstances.

        "Kill miner and try again if mining hasn't started within <seconds>" - sets a timeout in which the miner must start by or else CGWatcher kills that miner and tries again. The default value is 60 seconds, meaning CGWatcher will wait up to 60 seconds for the miner to start. If it does not start and initialize its API within 60 seconds, CGWatcher will kill the process and try again by re-launching the miner. If you're using a batch file, CGWatcher may wait up to an additional 30 seconds as it allows extra time for the batch file to launch the miner executable.

        "Maximum attempts to start miner before taking action" is how many times in a row CGWatcher will try starting the miner. Why would it do this? Because occasionally there are hiccups that cause the miner to not start correctly, while waiting a few seconds and trying again can result in a successful start. This option allows you to control how aggressive CGWatcher is at making sure the miner starts.

        "Action to take if failed start attempts reach limit" tells CGWatcher what to do if the limit set above has been reached, meaning CGWatcher tried to start the miner that many times in a row, and each time it failed. 

        Actions:

            - Give up - stops trying to start the miner until either you interact with it, the monitor steps in, a scheduled action occurs, or a request to start the miner is received from CGRemote.

            - Keep trying - will try to start the miner up to 99 times. Once it reaches 99 it will give up.

            - Switch to last working profile - activates the last known working profile (in which the miner started properly) and then tries to start the miner using that profile.


        "Maximum attempts to perform a scheduled action" is how many times each scheduled action should be attempted if it fails the first time. This gets more complicated when you consider that some scheduled actions may perform several steps, some of which may fail and some may succeed. For example, switching profiles 1) activates the profile, and 2) may restart or start the miner (depending on settings and conditions). It may activate the profile alright, but then fail to restart the miner. In these cases, if the scheduled action has a stop time set, it usually categorizes it as a success so that the stop time will still be honored. If it deemed the entire action a failure, the stop time would not be triggered. This is also the case where the action is set to change something to a value it already is. For example, if an action is created to change intensity to 13 on idle, even if the GPU's intensity is already 13 it will show as successful rather than showing that it failed because the intensity is already at 13.

        The scheduler has turned out to be one of the more complex features of CGWatcher. It improves with each update, but there may be things that need to be changed or corrected. If you find it is not working as expected, please let me know. I try to take into account that different users may expect different things, and when these differences are far enough apart I try to create a setting the user can change. It is an important feature that many users rely on so letting me know about problems with the way you're using it is the only way these things can be worked out.

        "Restart computer if unable to kill previous failed miner processes" When CGWatcher is unable to close or kill a miner process, this often indicates a more serious problem is imminent. In these cases, even Windows Task Manager is unable to end the process(es). Although CGWatcher could ignore the unresponding process and launch a new one, this can have unexpected results on mining performance and eventually this often leads to a BSOD (crash) a short time later.
        The only way to resolve this problem is to restart the computer.
        If you don't enable this option and CGWatcher is unable to close or kill the previous miner process, it will attempt to ignore it and start a new
        process.
        Any time CGWatcher restarts the computer, it makes sure it is set to run at startup and set to launch the miner at startup to ensure continuous mining. If these options are not enabled, it will enable them temporarily to ensure mining resumes after restart. It will then restore these settings the next time it is started.


        "Continuous Mining"

        "Ensure mining resumes after CGWatcher restarts the computer" - if CGWatcher performs a computer restart due to a monitor-triggered event or scheduled action, and you have not enabled the "Run when Windows starts" and "Run miner when started" options in the Settings tab, mining will not resume automatically after the computer is restarted. To prevent this from occurring, you can enable this option which will temporarily enable both of these settings until the computer restart is complete. Once CGWatcher is launched again after the restart, it will revert these settings back to their original values.



    DEVICES

        This tab shows mining device information, and is broken down into more tabs - one for each type of device. Currently it only supports GPUs. If you would like to help in adding support for other types of devices, please run the Device Test on that device's tab and email me the results. 

        At the top of the GPU tab is the number of GPUs found and a drop-down box for selecting a GPU. Once you select one, you can see information specific to that GPU (hashrate, clock, temperature, etc.) Some of these text boxes are read-only (gray text) and some are editable (black text) if the miner is running, meaning you can change values and click 'Apply Changes' to change those settings on the GPU even while mining. This makes it easier to test and adjust different settings without having to edit the config file and restart the miner, or use the miner's command-driven interface.
        Towards the bottom is a large text box containing more information for the selected GPU. Underneath is the selected GPU's status (ACTIVE, DISABLED, etc.) and buttons to enable/disable or restart the GPU. (Note that enable/disable and restart are just in terms of mining and will not affect other programs.)

        If you have a low monitor interval you may not have time to change settings in between refreshes. If you are just changing one setting, you may have enough time to change it and click Apply Changes because CGWatcher will not update a textbox that you are changing. If you find that you need more time, you can click the 'Freeze' button next to the GPU list to stop updates on all editable fields. This will allow you to edit the settings uninterrupted, click 'Apply Changes', then click the same 'Un-freeze' button to resume updates in these fields. Even while frozen, all other fields will continue to update as usual.

        Changing GPU settings to values outside of their operating ranges can cause system crashes and possibly damage components! Please make sure you know what you are doing before you change these. These settings can all be changed in the miner arguments and config file as well, but neither program is responsible should you push your hardware outside of its operating range and break something.

        GPU data will refresh every at the same rate as the monitor interval, regardless of whether or not the miner is running.

        The GPU tab also displays the overheat protection status for each GPU. See OVERHEAT PROTECTION section above for more information.

        FPGA and ASIC devices - I do not have these devices yet so I added support based on data sent by users. I think it is working fairly well, with the only complaint so far that ASICs are appearing as FPGAs. This is not a CGWatcher issue, it is being reported this way from the miner. In fact, BFGMiner seems to treat all devices as FPGAs and has no ASIC-specific data. To correct this, you can open a device detail (click the device's button in the list) and click the 'Edit this Device' link in the bottom, left corner. This will allow you to reassign the device to FPGA or ASIC and change the code and name of the device. This data remains as original behind the scenes to ensure proper communication with the miner. It is simply making the device "look" like it is being reported correctly from the miner.

        You can also create new codes and names for future devices that may not yet be correctly identified by the miner or CGWatcher.


    POOLS

        This tab is similar to the devices tab, except that it shows pool information. You can select a pool from the drop-down list at the top to see information specific to that pool. You can enable/disable a pool, change the pool's priority (which will adjust other pools' priorities accordingly), and switch to a specific pool (which will enable the pool (if it is disabled) and set its priority to 0). The large text box shows more information specific to the selected pool.

        If the miner is running, the pool information is retrieved both from the miner and from the miner's config file or arguments. If the miner is not running, pool information is retrieved from the active profile's config file or arguments.

        Clicking the 'Manage Pools' button will open the current mining profile's config file in Config File Editor. You can change any config settings, including adding, editing, or removing pools. Once changes to the config file are saved, the miner will need to be restarted to load the updated configuration.


    REPORT

        This tab's purpose is for all of the data I couldn't fit anywhere else. It shows information regarding CGWatcher and its monitor (if enabled), the current miner, and the active profile. At the bottom is debug information that may be helpful when troubleshooting problems or bugs. If you are having a problem with CGWatcher, submitting the text in this tab along with a description of what is happening should be enough to troubleshoot in most cases.

        Similar to the GPU tab, you can freeze the report by clicking the 'Freeze Report' button. This prevents any updates to the report data so you can read it without interruption. When you want to resume updates, click the same 'Un-freeze Report' button.


    REMOTE

        The Remote tab is for future configuration and use with CGRemote, which will allow you to monitor and control your miners remotely. In order to enable remote access by CGRemote, you have to enable the CGRemote server (Enable CGRemote Access checkbox).

        Most of the information displayed is just to assist you in setting up the miner in CGRemote. For example, showing your local and public IP address because one of these will be required when setting up the miner in CGRemote. When setting up the miner, you do not have to use the miner's computer name as the miner name. It is just provided as a suggestion.

        The two options you do need to set in the Remote tab are:

            - Port: the local port used when listing for CGRemote. You will need to enter this port when setting up the miner in CGRemote. Additionally, port-forwarding may be necessary if accessing the miner from outside of its local network. More information on doing this will be provided with CGRemote.

            - PassKey: the password you create and set in CGWatcher and CGRemote to authorize CGRemote to make changes to the miner. If the passkey's in the two programs do not match, CGRemote will be unable to connect to the miner. You set the PassKey by clicking the 'Remote Settings...' button.

       REMOTE SETTINGS

       - Default Miner Path: when creating a global profile in CGRemote that will be pushed out to all of your miners, it is unlikely that all miners will have the same folder and file structure. Therefore the master profile does not have a miner path set. Instead this profile will use the Default Miner as specified in this option. It is preloaded with the most used miner (according to the rig's profiles) or the first profile's miner if a most used cannot be determined. If the first profile uses a batch file, it will keep looking in an attempt to find a miner executable. Although batch/command files can be used here, it is recommended to point to the miner executable so arguments in the batch file do not interfere.

       Note: When using CGRemote, you can also edit each rig's profiles individually, which does allow you to set the miner path because you can navigate the rig's filesystem to select the miner. If you do this, this miner will be used instead of the default miner.

       - PassKey: cgminer and bfgminer allow you to secure remote access by specifying which IP addresses can access their API. Because I wanted CGRemote to work from anywhere without having to constantly add or change the allowed IP addresses every time you wanted to access your miner from a new IP address (for example, taking a laptop with CGRemote to a friend's house and therefore using their IP address), I chose to go with a password, or key, or passkey, to authenticate CGRemote. You create the passkey, and set it in CGWatcher and CGRemote. If a request is made to CGWatcher without the correct passkey, the request is denied. 

       Note: Except for the initial communication between CGWatcher and CGRemote, all messages are compressed and encrypted using the passkey to provide additional security.

       If you are using CGRemote to access the miner directly (non-Windows miners, for example), you will have to set the allowed IP addresses as usual and the passkey would not be used. Data going directly from CGRemote to the miner is not compressed or encrypted.

       UPnP Port Mapping

       In order to access a miner over the Internet, most users will need to forward the necessary port(s) in their router to tell it which computer to pass incoming connections to. Most routers allow you to setup port-forwarding (sometimes called Virtual Servers) in their configuration pages (e.g. 192.168.1.1). For example, if I want to use CGRemote to connect to CGWatcher running on local IP 192.168.1.10 from over the Internet, I would set CGWatcher's Remote Port (e.g. 5121) and then set CGRemote to connect to the router's public IP address and the same port (5121). The problem is that routers often include firewalls to block unsolicited connections from over the Internet, which is what CGRemote will be sending. So by forwarding port 5121 to 192.168.1.10 in our router, we're telling it that when a connection comes in on port 5121, forward that connection to the computer at 192.168.1.10 instead of blocking it.

       UPnP port maps are essentially the same thing as forwarded ports, only they can be setup by applications automatically instead of the user needing to do it manually in their router configuration pages. With CGWatcher, you can click the 'Map Port (UPnP)' button to have CGWatcher attempt to automatically forward the specified port in your router. If you want to see all of the UPnP port maps on your router created by all applications, click the 'Show Maps' button. If you want to clear all CGWatcher port maps on your router, click the 'Clear Maps' button.

       If CGWatcher fails to create a UPnP port map, you will need to forward the port manually in order to access that miner from over the Internet. You can find more information on port forwarding at http://portforward.com.



    SCHEDULE

        (The monitor has to be enabled for any scheduling option to work.)

        "Scheduled Actions" - starting with version 1.2, you can create scheduled actions that are triggered at a specific time and day, or every so many hours. These actions are displayed in the Settings tab, and each has an 'Enabled' checkbox and Edit and Delete button to modify or remove them. Each type of action is displayed in a different colored font.

        For each action listed, you can check or un-check the checkbox to enable/disable it. Clicking Delete will obviously remove it, and clicking Edit will open the Scheduled Action window to change its settings.

        Scheduled Action window:

        You can think of the Scheduled Action window as building a sentence describing what you want CGWatcher to do. Changing one option may filter other options available or change them completely. The actions are:

        - Start mining: starts the miner when triggered if it is not already running.

        - Stop mining: stops the miner when triggered if the miner is running.

        - Restart mining: restarts the miner if it is running. If it is not running, the action is ignored.

        - Change intensity: changes intensity the specified GPU to the specified value.

        - Change all intensities: changes intensity of all enabled and alive GPUs to the specified value.

        - Enable device: enables the specified device.

        - Disable device: disables the specified device.

        - Restart device: restarts the specified GPU.

        - Switch profile: switches (activates) the specified profile. If the miner is running and using a different profile, the miner is restarted using the new active profile. If the miner is not running, the active profile is switched but the miner is not started. To start it, you can create a 'Start mining' action after.

        - Restart computer: restarts the computer when triggered. To ensure mining resumes after restart, ensure CGWatcher is set to start with Windows and to launch the miner when started. Also keep in mind that a Windows login screen will require user input before mining resumes.

        - Run program: runs the specified program with (optional) specified arguments. An example where this may be useful is setting TeamViewer to run when TeamViewer closes (caused by TeamViewer crashing). This should help allow you to re-connect instead of waiting until you can get physical access to the miner.

        - Send API commands to miner: you can enter miner API commands directly (see miner's API-Readme) to be sent to the miner when the scheduled action is triggered. You can enter multiple commands, each separated by a space. All commands will be ran in the order you've entered them, regardless of the outcome (if one fails, the following commands are still sent).

        - Send e-mail. Enter an email address and you will receive an email when the scheduled action is triggered. This is designed more for use with scheduled actions triggered by events (see below), but can be set to run at any frequency. Depending on mail volume of all users, there may be a maximum limit per computer per day. This will initially start at 25 and may change depending on usage. If you reach the limit, the email will instead be displayed as a notification in CGWatcher and added to the log.

        * E-mail addresses used are not stored or shared. They are only stored on your computer in CGWatcher.exe.ini (where scheduled actions are recorded).


        "Persist through miner restarts if condition still exists"

        Some actions have a "persist through restarts" option that when checked will be reapplied if CGWatcher restarts the miner after it has already been triggered. This applies in the following cases:

        - Pause Mining button is clicked, then the miner is started again
        - miner is restarted by Monitor (sick/dead GPU, low hashrate, etc.)
        - miner is restarted by another scheduled action (restart, switch profiles, etc.)
        - miner is restarted by CGRemote

        These actions are not re-applied in the following cases:

        - Stop button is clicked
        - Restart button is clicked
        - the action reaches its stop time
        - the action is disabled
        - the action is deleted
        - the miner is restarted when user prompted after changing something (changing profile, save settings, etc.)

        
        "Event-triggered actions"

        These are actions triggered by an event rather than a time or time interval. The list of available events will continue to grow, and feel free to suggest events that you'd find helpful. To create an event-triggered scheduled action, instead of selecting a day or time in the drop-down list, select "{when event occurs...}".

        The 'Send Email' action may be ignored for events initiated by the user directly. For example, if you create a scheduled action to send you an email when the miner restarts... and then you click the 'Restart' button in CGWatcher, you will not get an email. In these cases it will only send an email if the restart was initiated by the scheduler or monitor. The intelligence of this feature will get better over time, so bear with me. You may initiate an event and get an email shortly after, but these situations will be corrected in the the next couple updates.



        "Stop times"

        Certain actions can also have stop times, including changing intensity, enabled/disabling devices, switching profiles, and running a program. When the stop time is reached, CGWatcher will return whatever was changed back to its previous condition. If its a device, it will go back to its previous intensity or enabled state. If the active profile was switched, CGWatcher will go back to the previous profile that was in use before the action was triggered. If a program was started, the program will be closed (only the instance that was started will be closed.)


        Switching profiles in scheduled actions is self-explanatory with the exception of the options enclosed in braces { }, which signify a conditional profile. By selecting these options, the profile that is switched to depends on the conditions at the time the action is triggered. For coin and profitability related options, it will use the data from http://coinchoose.com to determine which profile is currently the most profitable, highest reward, lowest network hashrate, etc. Any profiles that do not have coins assigned are ignored for coin-related options. If the current miner or active profile is the best for the specified condition, it tries to stick with the current profile rather than restarting the miner to use a different profile mining with the same conditional value.

        For each of these conditional profile options, you can select 1st, 2nd, 3rd, etc. up to the number of profiles you have assigned coins to. Choosing [2nd] [{most profitable}] will switch to your second most profitable profile.

        PROFILES THAT HAVE NOT BEEN ASSIGNED COINS WILL NOT BE CONSIDERED WHEN USING COIN-RELATED CONDITIONS!

        While profitability data is updated at regular intervals in the background, if a 'switch profile to most profitable' action is triggered and the data has not been updated in the past 15 minutes the monitor will attempt to update the data before running the action to ensure it correctly chooses the current most profitable.

        Each action has a set frequency at which to run. You can set it to run at a specific time on the selected days, set it to run every so many hours, set it to run on a specific date and time, set it to run when the computer is idle or not idle, or set it to run when a program starts or stops. When using the run every X hours option, each action keeps track of the last time it was ran and is ran again after X hours. So creating a Restart miner action to run every 8 hours means this action will occur every 8 hours, and has no dependency on other actions. The last time the action is ran is saved and remembered even if CGWatcher closes in between running. 

        You can set multiple actions to run at the same time as well, and they will be ran one after the other. However, if they are set at the exact same time (including seconds) there is no way to know which will run first. If you want to ensure one runs before the other, make sure there is at least a one-second difference.

        For actions set to run at intervals (e.g. every 8 hours), modifying or enabling the action resets its timer.

        You can essentially create as many scheduled actions as you wish. They are listed in the order they will be ran. Moving your mouse over an action in the Schedule tab will display when it will next run in the tooltip.

        *Note - while monitor options have a startup grace period for the miner where they won't perform a restart if the miner had just started, because of the time-sensitive nature of scheduled actions they do not use this grace period and will act when they are set to, regardless of when the miner started. If this causes any unanticipated problems I can change this, or at least make an option to enable it.



        "Set intensity of all GPUs to <intensity> if computer idle for <minutes> minute(s)" - After the computer is idle for <minutes>, any GPUs being used by the miner will have their intensities set to the specified <intensity> value. This will not affect GPUs that meet one of the following conditions:

        - The GPU's intensity is already equal to or higher than <intensity> value. This is because you would only be raising intensity when idle, not lowering it.
        - The GPU's intensity is currently lowered by overheat protection.
        - The GPU is currently disabled by overheat protection.
        - The GPU is disabled.
        - The GPU's status is not "ALIVE"
        - The GPU's current hashrate is 0 (meaning it is not hashing and my have been disabled by the miner)

        Once the computer is no longer idle, the GPU intensities will return to their original values unless they meet one of the conditions above. Keep in mind that being returned to their original values will not occur until the first monitor check after the computer is no longer idle. This means if you have your Monitor interval set to 30 seconds, it may take up to 30 seconds after you come back to the computer for the intensities to return to their original values.

        Note: The "Minutes before idle" value sets the default number of minutes of inactivity needed for CGWatcher to consider the computer idle. You may see log entries reporting that the computer "is idle" or "is no longer idle" even if you have the "Set intensity of all GPUs to X" option disabled. This is normal behavior and does not imply something is happening. It is just an indication of when CGWatcher considers the computer idle for troubleshooting purposes.

        "Donation Mining" - Support development for CGWatcher and related projects like CGRemote by donating a small portion of your mining time to the developer. This is completely optional, but please consider it as donations from < 1% of users (averaging $0.01/user) so far is discouraging, especially given all of the positive feedback. The about $150 I've received as of version 1.1.8 does not justify the past 18 weeks of work, and unfortunately I expect similar results from CGRemote. To be completely honest, this is making me question whether it is worth the effort to release. This option makes donating even easier than it already was, and is my last attempt at finding a reason to continue work these projects. I'm not looking to pay the bills with this... but the program is likely to have helped you earn more and while positive feedback and feature requests pour in, donations do not.

        I will explain how this works in detail to help users feel confident that no changes are made to the miner without the user's consent. Unless you've disabled notifications, one is displayed any time the pool changes, regardless of why it changed. This information is also recorded to CGWatcher's log, and miner.log in the CGWatcher directory. If you have concerns, I encourage you to use the miner's log option to verify that CGWatcher's logs are accurate. Additionally, you can always see the current pool URL and username at the top of the miner's UI. Donation mining is available for both SHA256 and Scrypt, and will load a pool depending on what hash method you're currently using. There are also backup pools it may try if the first fails. This is all done quickly as the miner will not switch to a dead pool, so this will not affect mining time.

        By default, this option will be disabled so I ask that you at least consider it. If you don't want to do it on a schedule, you can use the Start/Stop button to manually control donation mining. When donation mining is active, the time started and duration are displayed on the Schedule tab. When it has completed, it will display the next date and time that donation mining will occur. If you have scheduled donation mining enabled and you run donation mining manually by clicking the Start button, the next scheduled donation mining start time will be recalculated based on the manual start time, allowing you to easily set which time of the day you want it to run. Similarly, if you have donation mining set to run an hour and you start it manually using the Start button, it will still stop donation mining after an hour.

        Donation mining will not modify config files or arguments. When it occurs, it adds the donation pool (sha256 or scrypt, based on the current profile) to the miner via API and switches the miner to this pool. You will see a notification when this happens, and it will be recorded to the log and miner.log. When donation mining is stopped, it switches back to the previous pool and removes the donation pool via API. If the miner is restarted by CGWatcher's Monitor during donation mining, donation mining will resume after the restart but it will not reset the timer, meaning it will resume where it left off and not mine for longer than you've set it to.

        Donation mining will not occur during the first three minutes of CGWatcher starting, nor the first three minutes of the miner starting (unless a restart occurred during donation mining). This is to help prevent it from interfering if you are tweaking or testing the miner. Additionally, if starting donation mining should fail, it waits one hour before trying again. If stopping donation mining fails, it waits five minutes before trying again. There are several ways it tries to stop donation mining, including switching pools, disabling the donation pool, and ultimately removing it. The only reason it should ever fail to stop donation mining is if all other pools are dead, meaning it can't switch to any of them. My intentions are not to have it continue donation mining beyond when you've specified, and I put a lot of effort into making sure this does not happen.

        Keep in mind that mining strategies like round-robin set to switch pools before the donation mining time ends may also cause the donation mining to end prematurely. If you disable the donation mining option while it is running, it will stop after the set number of hours. If you want to stop it before that, you can use the Stop button in the Schedule tab or go to the Pools tab and switch to a different pool. The donation pool will be removed after stopping or switching pools. And of course, if you stop or restart the miner using the Start/Stop/Restart/Pause buttons, donation mining will be stopped and will not resume upon restart until the next scheduled date.

        I did a lot of testing with donation mining to ensure it does not make any changes without your consent. If you experience a problem, please disable donation mining in the Schedule tab and report the issue.


    SETTINGS

        This tab is for CGWatcher settings. It is divided up into sub-tabs to fit more options into a smaller space.

        *Remember to click 'Save Settings' to save any changes to the fields on this tab, including switching profiles. You can see the current active profile displayed in the middle of the tab. Selecting a different profile in the drop-down list will display its settings, but not make it the active profile until you click the 'Save Settings' button. 

        If you change a setting without saving and want to go back to the last saved settings, click the 'Cancel' button. The settings include:


        [Miner Control]

        'Start', 'Stop', 'Restart' buttons - Start, stop, and restart the miner. Note that if you are using the scheduled mining option in the Monitor tab, using these buttons during a scheduled mining time will cancel the 'Stop mining after <hours>' option if you've enabled it. If you would like to stay on the scheduled mining, use the Pause Mining/Start Mining button on the Status tab.


        [Profiles tab]

        Here you can set the active profile you want to use. If the miner is running while you change profiles, you will need to restart it for it to use the new profile. The profile's settings are displayed below, but are read-only. If you want to change profile settings, click the 'Manage Profiles...' button. Next to the Miner and Config File paths, you will see buttons that either open the corresponding file's directory, open the config file in Config File Editor, or open the file in Notepad.

        - "Profitablity" button opens the Coin Profitability window.


        [Display tab]

        - "Display share count totals as" - Depending on your pool and hashrate, the difficulty of the shares you mine may vary. As an example, if you have a high hashrate the pool may provide you with a diff4 share, which is equivalent to 4 diff1 shares. This is because faster mining devices (specifically ASICs) can mine diff1 shares so quickly that they would request work so often it would overload the pool server. Instead, the pool may send a diff4 (or diff<N>) which gives the device more work to do before requesting new work, reducing the load on the pool server and network usage.

        By default, CGWatcher displays share counts regardless of their difficulty, so a diff4 share is counted as 1 just as a diff1 share is.

        Hardware errors are equivalent to diff1 shares, so if you are mining higher difficulty shares your hardware errors may be disproportional to your accepted, rejected, and stale counts.

        You can change CGWatcher to instead show share counts in their diff1 equivalents, which will then give you a more proportional hardware errors number because all counts will be based on diff1 shares. These numbers may not be perfectly accurate all of the time, as stated in the cgminer readme. But if you would prefer to see how many diff1 shares you've mined instead of how many 'shares' you've mined, you can set this option to 'Diff1'.

        Regardless of which option you use, the percentages next to each share count and hardware errors should be correct and take into consideration that hardware errors are equivalent to diff1 shares.

        - "Hide Notifications" - When checked, you will not be shown notifications when CGWatcher's monitor does something regarding the miner.


        [Data tab]

        In this tab you can set CGWatcher to output the selected values to a file at a regular interval. The values are delimited using the character you specify (default is pipe "|"). Do not set the delimiter to a comma if your culture settings use a comma as the decimal separator. You can set the interval at which to output this data in increments of the Monitor interval. For example, if you have the Monitor interval set to 10 seconds, you can set the data output interval to 10-second increments, with the minimum being 10 seconds.

        You can then use the output data to create reports or charts in other software like Microsoft Excel by using the "Text-to-columns" wizard to split the data into columns based on the delimiter.


        [Miner tab]

        - "Miner window mode" - For those who don't like seeing the miner, you can select to have it ran hidden or minimized. Minimized will still show its icon in the taskbar, which you can click on to restore the miner's window. Hidden will cause the miner to not appear on the screen or in the taskbar. The only way you can tell it is working is by checking CGWatcher. You will need to use the buttons in CGWatcher to start/stop/restart the miner. Alternatively, you could kill the cgminer.exe or bfgminer.exe process in Task Manager.

        - "Miner API Address" - This is the miner's API IP address CGWatcher will use when communicating with the miner. The default value is 127.0.0.1, which idenfities the same computer CGWatcher is running on. This value should not be changed because CGWatcher was designed to run on the same computer as the miner process, and monitors the process as well as the data coming back from the miner's API. To monitor miners on another computer(s), see CGRemote at http://www.minerremote.com.

        - "Miner API Port" - This is the miner's API port CGWatcher will use when communicating with the miner. The default value is 4028.

        - "Use only this API port - override config settings (multiple instances)" - If an api-port is specified in the miner's config file or arguments, this option will override it using the port you've set above when starting the miner. If this is enabled, CGWatcher will also try to ignore any miners not using this port, which is designed to help manage multiple instances of CGWatcher used to monitor multiple miners at the same time. (Note: Currently running multiple instances of CGWatcher should be done from different folders to avoid one instance overwriting INI settings of another. This will be fixed in the future.)

        - "Kill miner process during restart instead of sending 'quit' command" - Typically when CGWatcher stops the miner (including during restarts), it does so by sending the 'quit' command. This causes the miner to reset settings that it had modified like GPU clocks, fan, and voltage. This is different from closing the miner by clicking the "X" in the upper-right corner of its window, which kills the process before it has a chance to shutdown. During restarts, you typically don't want the miner to perform the shutdown process because it will be setting those values again when the new process is started, so killing the process instead of shutting it down improves stability by not causing everything to be returned to original values just to have them all modified again a moment later. For GPU mining, it is recommended to leave this option enabled.

        - "Always kill miner process instead of sending 'quit' command" - If enabled, CGWatcher will never use the 'quit' command to stop the miner. Instead, it will kill the process, meaning any modifications the miner had made to things like GPU clock, fan, or voltage never get returned to their original values.

        - "Attempt to switch profile without restarting miner when possible" - For increased stability by reducing the number of miner restarts, this option causes CGWatcher to attempt to switch profiles without restarting the miner. There are several things to consider when attempting this:

            - The profile being switched to must have a coin assigned to it. This allows CGWatcher to verify that the algorithm of the new profile matches the algorithm of the current miner process. You cannot switch algorithms without restarting the miner.

            - Not all settings may be set via API, meaning if the new profile has different config settings than the current profile, not all changes may be made. CGWatcher will attempt to set any GPU-related settings that it can via API, as well as a few config settings (expiry, queue, scantime). If any of these API changes fail, a warning will be displayed and details of the failure will be logged. If the config settings of the current profile and new profile are similar or only vary by GPU settings, this should work without any problems.

            - If any problems occur while trying to switch profiles without restarting the miner, CGWatcher will fall back to its normal way of switching profiles and restart the miner using the new profile.


        [Storage tab]

        Allows you to specify file locations for different files CGWatcher creates and uses.


        [CGWatcher tab]

        - "Start CGWatcher when Windows starts" adds a startup entry for CGWatcher. This means it will launch automatically when Windows starts. This is useful in the case of system restarts to ensure mining resumes automatically (after a system crash, for example). However, if your computer requires you to login to Windows, you would obviously have to login first before mining could be resumed after a system crash and automatic restart.

        - "Start CGWatcher minimized" starts CGWatcher minimized. If the "Minimize to system tray" option is also enabled, CGWatcher will start minimized to the system tray.

        - "Minimize CGWatcher to the system tray" - minimizes CGWatcher to the system tray. This means it will not appear in the taskbar. Instead, its icon will be in the system tray above (or near) the clock. Double-click the CGWatcher icon to restore its window.

        - "Launch miner automatically when CGWatcher starts, after <seconds)" - will launch the active profile's miner and start mining when you run open CGWatcher (if the miner is not already running). For continuous mining after a system crash in the above example, you would also want to enable this feature.

        By default CGWatcher waits 10 seconds before launching the miner upon starting. You can change this by changing the number of seconds in the textbox next to this setting.

        The idea is, in case of a system crash (BSOD, "Blue screen of death"), the computer is automatically restarted. The order to resume mining would be:

            Computer restarts -> [Windows login?] -> Launch CGWatcher automatically -> Launch CGMiner automatically = mining resumed

        - "Don't prompt on exit" - By default, CGWatcher will ask you if you're sure you want to exit if: the miner is running, monitoring is enabled, and the reason for exit is the user is closing the window. Enable this option to prevent any prompts upon exiting.


        [Updates tab]

        - "Automatically check for updates at startup and then once per day" - When checked, CGWatcher will check for an update when it starts, and then check for an update every 24 hours. If an update is found, it will display a notice for 30 seconds or until you click on it, and a link to the download page will be displayed in the About tab. This option and the resulting notice if a new version is found will not affect monitoring.

        - "Automatically update CGWatcher when new version is available" - When a new version is found during an update check, CGWatcher will launch its update utility (update.exe) which will download the necessary update files. It will then close CGWatcher, replace the old files with the new files, and then re-launch CGWatcher. It only closes CGWatcher if it has successfully downloaded the update files, and will relaunch even if a problem occurs in replacing files in an attempt to keep CGWatcher running even if not all files were updated successfully.
	
	- "Include beta builds when checking for and auto-updating CGWatcher" - Often minor updates do not trigger the update notification or auto-update inside CGWatcher. This is because these are minor fixes or changes that may not affect most users. If you wish to be notified or auto-update to the latest version, regardless of how small the changes, you should enable this option.

	- The 'Check for Update' button will check for program updates and if available, will provide a download link. If you have the 'Auto-update' option enabled in the Settings tab, this button will also initiate the auto-update process if a new version is available.


        - 'Other Tools...' button opens a popup menu containing other tools or features, including:

            - 'Config File Editor' opens a blank/default config file in Config File Editor. You will also see smaller Config File Editor buttons next to textboxes that contain config file paths, allowing you to quickly open those files in the editor.

            - 'Coin Profitability' displays profitability and other data on the various crypto-coins.

            - 'GPU Map' opens the GPU map form. I'll try to explain why you would need to use this:

            The miner has its own gpu-map option because it has to match up GPU information from OpenCL (which is used for mining) and ADL (used to get and set GPU settings like clock, temp, voltage, etc.) These libraries do not provide information to accurately map GPUs to each other 100% of the time, so the miner provides you with a way to manually map a GPU's hashrate (OpenCL) to its name, clock speed, temperature, etc (ADL).

            CGWatcher also gathers GPU data using OpenCL, ADL (AMD), and NVAPI (Nvidia). This means that the problem is reintroduced when it comes to CGWatcher displaying the correct mining data for the GPUs it has detected. It attempts to map accurately using the miner's gpu-reorder and gpu-map options, but it may not always do this accurately. Once you manually map CGWatcher's GPUs to the miner's GPUs, the mappings will be saved and used whenever you start CGWatcher. See more information on the GPU map window below.

            - 'Profile Manager' opens the Profile Manager window.

            - 'Manage Variables' Allows for custom variables to be placed in config files, arguments, or batch files. CGWatcher will then convert these variables to their values before starting or restarting the miner. Variable names can be anything and are not case-sensitive.

            There are a few built-in variables:
                    %COMPUTER%  - Your computer name
                    %USER%      - Your Windows username
                    %HOST%      - Your computer hostname

            You can also specify as many custom variables as you'd like. When creating variables, do not include the percent symbols (%) as they will be included automatically. Enter variables one per line in this format:

            name=value

            As an example, you could create variables for worker names:

            worker1=MyPoolWorkerName.1
            worker2=MyOtherPoolWorkerName.1

            Anywhere you place %worker1% inside of a config file, arguments, or batch files, CGWatcher will replace %worker1% with MyPoolWorkerName.1 before starting or restarting the miner using the config file, arguments, or batch file.

            Variables are particularly useful for creating an online config file and specifying its URL for a profile in multiple CGWatchers running on multiple computers. You can use variables inside of this config file, then set the variable values on each computer. This allows you to customize each config file with values specific to its hardware or configuration.

            'Coin Manager' allows you to add, edit, and delete coins and exchanges shown in the Coin Profitability window. To add a coin, scroll to the bottom of the list and enter the new coin's information on the last (blank) row. When you are finished, click Save to apply your changes, or Close to exit Coin Manager without saving changes. More information on Coin Manager is below.


    LOG

        This displays the CGWatcher log for the current session (since CGWatcher was started).  
        - 'Clear Log Text' - clears only the textbox without deleting any log entries.
        - 'Clear Entire Log' - completely deletes all data from the log file.
        - 'Open in Notepad' - if you need to view older log events, this button opens the cgwatcher.log file located in the same directory as CGWatcher. This will display the entire log history, either from the last time you cleared it or the first time you ran CGWatcher.
        - 'Show Debug Log Entries' - the log typically keeps you updated on what CGWatcher is doing or has done. There are also debug log entries that provide error and troubleshooting information. Checking this box shows those entries as well.



    TESTS

        This tab allows you to send commands to CGMiner and see what kind of reply messages it sends back. This can be useful for requesting information that I haven't yet implemented into the program. The reply messages are comma-delimited, but checking the "Convert comma-separated results into line-separated results" will do what it says, making the results easier to read. Un-checking it reverts back to the comma-delimited message.

        In the 'Debug Reports & Utilities' you'll find a 'Create Debug Report' button (use when reporting bugs) and a drop-down list of various reports and utilities.

        The 'Create Debug Report' collects a lot of information helpful in troubleshooting problems. If you are reporting a bug, please provide the information from this report and send via email to Milone99k@gmail.com.
        
        Currently the drop-down list of actions to perform are:

        - Show GPUs reported by ADL/NVAPI - Reports GPU data provided by ADL (AMD) and NVAPI (Nvidia)
        - Show GPUs reported by OpenCL - Reports GPU data provided by OpenCL
        - Show FPGAs reported by miner - Displays FPGA devices provided by miner
        - Show ASICs reported by miner - Displays ASIC devices provided by miner
        - Show last miner start configuration - Shows the exact configuration (arguments and config file settings) used the last time CGWatcher started the miner
        - Show checked miner processes - Displays miner processes checked by CGWatcher (for multiple instances troubleshooting)
        - Show installed .NET framework updates - Reports all installed .NET framework updates
        - Remove all CGWatcher Windows startup entries - Clears all CGWatcher autorun (Windows startup) entries
        - Decrease text size (beta) - Decreases font size in the main window by 1
        - Increase text size (beta) - Increases font size in the main window by 1
        - Reset window size and position - Restores default values for the main window size and location


        If you wish to send multiple commands in one click, enter the commands in the Diagnostic text box (separate them by commas). Then click Run. The reply messages for all of the commands will be displayed in the large Result message text box.



    ABOUT

        Displays information about CGWatcher. The link will direct you to the official CGWatcher page. The 'Check for Update' button has been moved to the Settings tab (in the Update sub-tab).


SOURCE

    The project will be open-sourced on GitHub in the future, but I don't have an ETA. I also still have to learn how to use GitHub. The repositories for CGWatcher and CGRemote will be located at:

    Future CGWatcher Repository: https://github.com/justinmilone/CGWatcher
    Future CGRemote Repository: https://github.com/justinmilone/CGRemote


UPDATES
    
    You can set CGWatcher to check for and auto-update CGWatcher when a major update occurs (Settings tab -> Updates sub-tab.) You can also perform this check manually from inside the program in the About tab. When these updates occur, the first three numbers in the version number may change (e.g. 1.3.4).

    Minor revisions to CGWatcher (the fourth number in the version number, e.g. 1.3.4.1) may be released without triggering an update notice from CGWatcher. This is because the changes are not critical enough to require everyone to update. You can always find the latest version - including the latest revision - by visiting http://www.cgwatcher.com.



CONFIG FILE EDITOR

    The Config File Editor attempts to make editing your miner's configuration easier. To start, it displays the config file in a grid allowing you to see all available settings and a description of each. Settings that can only be enabled or disabled will have a true or false option. Settings that allow numbers only (not including lists of numbers) will only allow numbers. The 'Validate' button attempts to check your settings for errors that may prevent the miner from starting or working correctly.

    * The Config File Editor is in beta and is not yet perfect. It has undergone quite a bit of testing but with so many possible configurations, it will take some user testing to get bugs worked out.

    * Settings set to default values are not written to the config file when saving. They are also not converted to arguments, because they are set to default values and don't need to be explicitly set as arguments.

    * To add, edit, or remove pools, locate Pools in the config file grid. (There may be a Pools category heading as well in Category view mode), but you want the Pools that says '(Collection)' in the cell next to it. Click on the word '(Collection)' and a small '...' button will appear in the cell. Click on this '...' button to open the pool window.

    When editing pools, you can create names for them as well so they are more easily identifiable when editing them later on. Pool names are saved inside the config file, but will not cause a problem with the miner. To change pool priorities, use the up and down arrows in the pools window to move pools up and down the list. The top of the list is the first priority, the bottom of the list is last priority.

    Because new config options may be added to cgminer or bfgminer at any time, the Config File Editor handles options that it does not yet fully support by placing them in a "Misc Options" collection. This allows it to provide basic support for these options, although it does no validation against the values.

    'Name #' - You can name your config files so when you're using them in profiles they will be easier to access. Enter a name for the config file in the Name textbox. Then when managing your profiles, you can select a Named config file from the Config File textbox drop-down instead of needing to browse your computer for it. After clicking out of the Config File textbox, it will be converted to the config file path automatically.

    'Validate before saving' - By default, the Config File Editor will try to validate most option values before saving to make sure they are valid and in the correct format. In rare cases depending on the operating system's culture settings, the Config File Editor could tell you a value is invalid when it may be. In these cases, you can disable validation by un-checking this box if you are sure the values you've entered are correct.

    'Ensure API is enabled upon saving' - If enabled, the API access needed by CGWatcher will always be enabled when saving the config file, regardless if these settings were enabled in the grid. It will not affect other groups/IP address in the api-allow setting, it only makes sure api-listen is enabled and that 127.0.0.1 is included in the W: group of api-allow.

    The Config File Editor Menu

    - File -> New : Create a new config file.
    - File -> Open : Open an existing config file.
    - File -> Save (As) : Save the current config file.
    - File -> Close : Close the Config File Editor.
    - Tools -> Import Settings -> From Config File... : select an existing config file to import settings from. The current settings will be overwritten, but will not be permanent until you save the config file.
    -Tools -> Import Settings -> From Named Config File -> <select> : if you've set names for config files using the Name textbox in Config File Editor, these config files can be loaded quickly by just this name, both in Config File Editor and in the Mining Profiles window. This is the same as the previous menu item, but quicker and easier.
    - Tools -> Import Settings -> From Arguments : enter or paste miner arguments to have them converted to a config file. If you have a config file open, you will be asked if you want to overwrite only the settings listed in the arguments, or if you want to create a new config file using only the settings listed in the arguments.
    - Tools -> Export Settings -> To Arguments : converts the current config file to miner arguments.
    - Tools -> Open this Config File in Notepad : opens config file in Notepad. There is also a button next to the config file's Path to open in Notepad.
    - Tools -> Validate this Config File : checks the config file for errors in the settings' formats or values.


COIN PROFITABILITY

     Displays profitability data on all coins listed on the coin data provider you've selected: http://coinchoose.com or http://coinwarz.com. Profitability is based on the value of coins in bitcoin, or how many bitcoins the coin is worth. If using CoinChoose as the data provider, you can also set it to base profitability on Litecoin. The current best price is displayed, along with the exchange currently offering the best price. You can click on the exchange to open it in your browser.

     All columns in the Coin Profitability window can be sorted by clicking on the column header cell. Click once to sort ascending, and again to sort descending. The coins that you are mining (coins that you have assigned to profiles) are bolded in black text in the table. Coins that you have not assigned to a profile are dark gray text. You can filter the coins to only show coins you are mining by checking the 'Show only mined coins' checkbox at the bottom of the window.

     Along with profitability, the network hashrate is also displayed (CoinChoose only).

     The coin data is updated at regular intervals, regardless of whether the Coin Profitability window is opened or not. The default update interval is 15 (minutes), but can be changed by editing the CoinRefreshInterval value in the [CGWatcher] section of the INI file. The minimum refresh rate is 5 minutes to limit the requests made to the website. The maximum is 1380 (23 hours) to ensure the data is updated at least daily. Any value set outside of these limits will be changed to be within them.

     Coin names, symbols, and algorithms are stored in the INI file after updating so basic data is available even if CGWatcher is unable to connect to the data provider upon starting. If there is no profitability data available, the profitability-based scheduled actions will be not work and will be ignored until the data is updated. This action will also be ignored if the profitability data has not been updated in the past 24 hours, which is why the maximum refresh interval is 23 hours.

     * Coin profitability data is also updated right before any profitability-based scheduled actions occur to ensure it is making a decision on which profile to switch to based on current information.

     When it comes to displaying the exchange and a link to its website, there are several exchanges initially loaded when CGWatcher starts for the first time. However, as exchanges come and go, CGWatcher may not know about all of them. You can add exchanges manually in the Exchanges tab of Coin Manager.

     This data provided by http://coinchoose.com comes at no cost to the user. It is a very useful tool so please visit the site and support its developer by donating to his address listed at the bottom of his website.


COIN MANAGER
    
    Add, edit, and remove coins and exchanges that are used in profitability mining and displayed in the Profitability window. 

    COINS

    In the Coins table, you can add, edit, and remove coins manually. You can also adjust coin profitability values on an individual basis by setting the Adjustment. This field uses the following format:

    <operator><value>

    The adjustment is performed on profitability, adjusted profitability, and average profitability fields.

    Examples:

    +100 - adds 100 to the coin's profitability values
    -40 - subtracts 40 from the coin's profitability values
    *0.25 - multiplies the coin's profitability values by 0.25
    /1.3 - divides the coin's profitability values by 1.3


    CUSTOM FIELD

    Custom Field - This adds a custom field to each coin, where the value is based on an expression you create. This allows you to use your own formula for profitability mining, using the other fields (price, difficulty, network hashrate, etc.) and common mathematical operators and functions. When the custom field is enabled, it will appear in the Coin Profitability window and you can create scheduled actions that switch profiles based on the highest or lowest custom field value. If at any time you disable this feature, scheduled actions that are based on the custom field may have unexpected results.


    EXCHANGES

    Allows you to add, edit, and remove exchanges listed in the Coin Profitability window.


    SETTINGS

    In the Settings tab, coin and profitability-related settings are listed. You can select to use CoinChoose or CoinWarz as your coin data source (CoinWarz requires API key). If you select CoinWarz, a few fields will no longer be available: Profitability (adjusted), Network Hashrate, and Network Hashrate (24h average). If you have scheduled actions set to switch profiles based on one of these fields, they will be disabled when you change your coin data provider to CoinWarz. Re-enabling them while still using CoinWarz as data provider will cause unexpected results because all values for these fields will be zero.

    If you switch coin data providers and have the "Remove coins not listed on the selcted data provider..." option enabled, all coins not linked to a profile or not marked with "do not delete" flag will be removed in order to remove coins that may be listed on the old data provider but not on the new one. This is recommended to prevent data from multiple providers causing unexpected results because they may not use the same formulas for determining profitability.

    There is no guarantee that Exchange names and codes will be the same between data providers, so exchanges may need to be manually updated when switching providers.

    Settings:

    "Automatically update coin profitability data every <minutes>" - This is now optional with the addition of CoinWarz, which requires that you buy an API key with a limited number of calls. If you're profitability mining (switching profiles based on profitability data), it is not a requirement to update coin data at regular intervals as it will be updated before CGWatcher selects a profile if necessary. The only benefit to having this data update automatically is if you're viewing the Coin Profitability window.

    "Coin update threshold for profitability mining <minutes>" - When you've set CGWatcher to switch profiles based on profitability, CGWatcher will first look at the last time coin data was updated. If it was updated within this number of minutes, it will use the current data. If the number of minutes since it was updated exceeds this setting, CGWatcher will first update the coin data and then decide which profile to switch to.

    "Base coin profitability on <bitcoin/litecoin>" - Select the base coin on which profitability is based. Currently this option is only available for CoinChoose.

    "Remove coins not listed on the selected data provider if they are not used in any profiles and not set with 'never remove' tag" - Well that pretty much explains that. When updating coin data, if CGWatcher has coins that were not updated, it will remove them unless they are linked to a profile or you've set them to not be removed (in Coins tab).

    "Show notification when new coins are reported by the data provider" - When a coin is found during a data update that was not already in CGWatcher, a notification is displayed. If a coin drops off of the data provider temporarily and then returns, this may also trigger a notification.

    "Switch back to CoinChoose automatically if CoinWarz update fails" - If you select CoinWarz as the data provider and an update fails for any reason, CGWatcher will switch back to CoinChoose as the data provider. To go back to using CoinWarz, you must select CoinWarz again in Coin Manager.

    "Use formatting when displaying coin data for better readability" - In the Coin Profitability window, certain fields will be formatted for better readability. It is recommended to leave this enabled unless you experience problems with the way data is displayed in the Coin Profitability window.


    * The CoinWarz API is only accessible with an API key, which must be purchased from http://coinwarz.com. When you purchase you will be given an amount of API calls, which when run out you can no longer get data from CoinWarz. A setting to switch back to CoinChoose should this happen can also be found in this tab.

    Changes are not saved until the Save button is clicked. The Reload button will reload the coins and you will lose changes that have not been saved.


GPU MAP EDITOR
    
    The GPU Map window lists all of the miner's GPUs on the left. It lists the name (or die codename) or the GPU and its current hashrate to help identify which GPU is which in a multi-GPU system. Unfortunately, the identifying information available from OpenCL means it is difficult to guarantee an accurate match to ADL or NVAPI GPUs, so on the right is a drop-down list for each miner's GPU that lists all of the GPUs CGWatcher was able to detect. You will see that this information is easier to identify a GPU, and is what links the OpenCL data like hashrate to a GPU's name, clock speed, fan speed, temperature, etc. While I tried to plan for weird and unusual system configurations, there may need to be additional work done to allow proper mapping.

    If you find that the new method of GPU detection breaks CGWatcher although it had worked in previous versions, you can set UseBackupHardwareMode=True in the [CGWatcher] setting of the INI file. This will attempt to return to the former method of GPU detection (getting data only from the miner.)

    I recommend backing up the CGWatcher folder any time you update to a newer version in case the new version breaks something. Because the section and setting names in the INI file occasionally change, backing up the .exe alone may result in you losing some of your previously saved settings.


COMMAND LINE ARGUMENTS
    
    Starting with version 1.2, there are a few command line arguments you can use when launching CGWatcher:

    -m          starts CGWatcher minimized.
    -s          launches the miner when CGWatcher starts (after default 10 second delay).
    -p [NAME]   activates the NAME profile upon starting.
    -v [port]   sets override miner API port to force miners to use (in cases of multiple instances.)






CHANGELOG:

version 1.3.4 (12/23/2013)
    - Data output option in Settings -> Data tab to output stats to a file at a specified interval for creating reports in other software.
    - api-network config setting changed to boolean data type (had been set as a string data type)
    - Resizable main window and increase/decrease text sizes (drop-down list in Tests tab, considered beta) to accommodate Windows text sizes larger than 100%. Changes do not persist until feedback is collected.
    - Miner startup threshold (seconds) setting created/added to UI 
    - Kill miner process during restart (instead of sending quit command) option added to improve stability
    - Option to always kill miner process instead of quit command for GPUs that bluescreen during miner shutdown (270, 290 series)
    - Coin profitability data improvements to reduce api calls
    - Coin data can now be sent from CGRemote, allowing all miners running CGWatcher to be updated with one API call.
    - GPU-related numeric config settings changed to strings to accommodate variables.
    - Create individual coin profitability adjustments in Coin Manager
    - New (optional) feature to switch profiles without restarting the miner in possible.
    - CGWatcher can show which coin you're mining on some multi-coin pools (additional pools support coming soon - min 5 minute updates)
    - Fixed email not working if active profile did not have a coin assigned to it.
    - Accepted/Rejected/Stale share count last change time reset if pool changes.
    - Fixed api-allow not putting W: in front of localhost IP if it did not have it and other addresses were present.
    - Fixed scheduled action failure threshold not being honored when actions were not successful.
    - Coin symbol max length increased from 3 to 5 to allow new coins using 4-character symbols.
    - Fixed start miner attempts and thresholds not working correctly in some scenarios.
    - Fixed issue with coin profitability data formatting, and added an option to disable formatting in Coin Manager.


version 1.3.3 (11/17/2013)
    - CoinWarz added as optional coin data provider (API key required, see http://coinwarz.com/v1/api for more info)
    - Do not show CGRemote ads if user is using CGRemote.
    - Drop-down list of coins in Coin Manager -> Custom Field -> Test sorted.
    - Coin algorithm added to custom field value expression variables. Returns 1 for sha256, 2 for scrypt.
    - On Status tab, Efficiency replaced with custom stat. You can leave it at Efficiency, select a different statistic, or create your own statistic.
    - Fixed "when highest/lowest custom field value changes" event description not displaying correctly in scheduled actions list.
    - Added "Device elapsed" to GPU and USB devices as added in miner API 1.32.
    - Unrecognized remote commands will be tested by being sent to miner (if running) rather than just reporting that the command is unrecognized. This will allow new miner API commands to be used manually without necessarily requiring a CGWatcher update.
    - Fixed "Manage Pools" button opening temporary config file instead of actual profile config file.
    - Fixed causing "Switch Profile" in CGRemote to not start miner using new profile.
    - Add "log" and "report" commands for CGRemote to get log and report data.
    - Add "New Block average (seconds)" and "Found Block average (seconds)" values for custom profitability formula field and custom value expression.
    - Add "Utility" and "Work Utility" values for custom profitability formula field.
    - Current and average hashrates added to window title bar.
    - Fixed icarus-timing option incorrectly mirroring usb option in Config File Editor.
    - Tests tab reorganized, additional debug reports and utilities moved to drop-down list.
    - 'Clear all Windows autorun entries' in Tests tab (drop-down) will remove all CGWatcher entries from Windows startup as a way to get a clean slate. It also disables the "Run when Windows starts" setting, which can be re-enabled afterward.
    - Chart on Status tab now shows mining devices only, including FPGA/ASIC devices that report temperature.
    - Setting created to ensure CGWatcher & miner are relaunched automatically after CGWatcher-initiated computer restart.
    - "Restart CGWatcher" scheduled action created, which may help in situations where CGWatcher stops responding or crashes after running for X consecutive days on low memory computers. This has only been reported once, and I often check for memory leaks, but this is a simple alternative (temporary) solution.
    - "Restart CGWatcher" command added for CGRemote.
    - Miner auto-launch delay setting added to UI (Monitor -> Other -> Continuous Mining)
    - Displayed hashrate formatting improved for consistency.
    - CGRemote command to have CGWatcher automatically check and update itself added.
    - Other minor fixes and improvements.


version 1.3.2 (10/3/2013)
    - Desktop folder added to protected directories list to notify user that CGWatcher, miner, and config files should not be stored there.
    - Advanced Profile options to set CPU affinity and priority for miner process. Additional options to come in future versions.
    - Profile matching relaxed during miner launch to reduce risk of miner being ignored (rare).
    - Fixed ads only reloading after restarting CGWatcher.
    - Button added to Tests tab to list all installed .NET updates for troubleshooting purposes.
    - Option to restart computer if CGWatcher is unable to close or kill miner processes. Although rare, this indicates a more serious problem (Task Manager is also unable to kill the processes) and usually leads to a BSOD (crash). The only way to resolve this is to restart the computer.
    - Pools truncated from miner's API response (~Pool 35+) will get info from config to avoid chinese-looking characters being shown for url/username/password. No stats are available for these pools though because the data is cutoff from the miner's response, which has a fixed maximum length.
    - Fixed pools set in arguments being added twice to temp config file before miner starts.
    - Added scheduled action to send specified API command(s) to miner.
    - Settings tab added to Coin Manager, 'Remove coins no longer on CoinChoose' option moved to Settings tab of Coin Manager.
    - Coin profitability data refresh interval setting now in Settings tab of Coin Manager.
    - Setting created to base coin profitability on bitcoin or litecoin, located in Settings tab of Coin Manager.
    - New coin notification option moved to Settings tab of Coin Manager.
    - Scheduled action frequency added - 'When event occurs...' allowing you to select from a list of events that will trigger the action being run. Events currently consist of miner events, profile events, and coin profitability events. More events will be added in future updates.
    - Create your own profitability formula in a custom coin field that can be used when creating scheduled actions that switch profile based on profitability. Instead of using an existing field (profitability, difficulty, etc) you can create your own mathematical expression using all existing fields and mathematical functions.
    - Fixed CGWatcher not trying to start the miner indefinitely when the 'Keep trying indefinitely' failure option was selected. (It will try up to 2147843647 times.)
    - Miner process not added to checked process list until it has been running for 60+ seconds to prevent incorrectly ignoring it.
    - Added 'Send email' scheduled action. You can specify an email address for each action, the last used will be filled in automatically. Emails are currently limited to 25 per computer per day, but this may increase or decrease over time depending on usage. Counter is reset at midnight EST/EDT (U.S. Eastern). Emails will be coming from @cgwatcher.com, and you will need to ensure you can access http://minerremote.com for email to work correctly.
    - More scheduled action events will be added, with additional options like 'when hashrate drops below/%', 'when miner restart fails X consecutive times, etc. I figured I'd add them in groups instead of trying to do it all at once.
    - If CGWatcher is set to try starting the miner indefinitely (and it keeps failing), it will wait one second per 10 attempts in between attempts over 10, up to 60 seconds. So after 600 attempts it will wait one minute between each attempt.
    - CGWatcher restarting GPUs that cgminer has disabled due to overheat no longer requires CGWatcher's overheat protection to be enabled. It will do this for all GPUs since the miner usually fails at re-enabling them.
    - Before restarting computer, CGWatcher will temporarily set itself to start with Windows and launch miner at startup if these options are not enabled. It will reset the options back to their original settings the next time CGWatcher is started.
    - Restart computer prompt changed to always use CGWatcher's prompt only, which provides a cancel option, rather than the Windows notification that the computer is restarting. This was already how scheduled computer restarts were handled, but is now done for all computer restarts.
    - Profitability-based scheduled actions (switch profile based on profitability) will update coin data before selecting a profile unless it had been updated within the past minute instead of within the past 5 minutes.
    - Added average time per share to Monitor tab to help in setting appropriate number of minutes without share increase for this monitoring option.
    - Added "% of Avg" to Hashrate Cutoff monitoring option, which will restart the miner if the current hashrate drops below the specified percentage of the current average hashrate. This is in addition to being able to set actual hashrate values.
    - Elapsed mining time added to Stats tab.
    - In Pools tab, pool drop-down will default to current pool and revert to current pool if user has not selected a different pool to view within the last 5 minutes.
    - Added support for pool quota option in CGMiner 3.4.3+
    - Added config file and argument options up through CGMiner 3.5.0 and BFGMiner 3.2.1.



version 1.3.1 (9/9/2013)
    - add bitburner code/name to default mining devices.
    - improved automatic API enabling to fix issues with api-allow option being modified incorrectly and locking out other API monitoring applications.
    - thread sync locking on remote socket collection handling.
    - fix default profiles and variables file paths being saved to CGWatcher.exe.ini which caused profiles and variables to not save correctly if the CGWatcher folder was moved or copied to another location because the paths would still point to the original location. These are now left blank unless you change them manually to non-default paths.
    - CGRemote file explorer commands expanded to allow full directory navigation, file copy, file info, and existing commands improved.
    - CGRemote commands to add, modify, and delete profiles improved.
    - Ads may be displayed occasionally (30 seconds per hour, can be closed by clicking X) on CGWatcher's main window with the exception of donation miners.
    - Update and version data backup sites added to (hopefully) get around the main site being blocked in certain countries.
    - Pool elapsed time now recorded per pool, available in the Pools tab and Report tab. Also includes a percentage to see which pools were used and how much.
    - Remote options window created to provide additional options for CGRemote in the future, and allow for setting a default miner path (which defaults to your most-used miner executable) to use with global profiles.
    - Several other improvements (I lost track at some point).


version 1.3.0 (8/25/2013)
    - FIXED: CGWatcher closing unexpectedly without any error messages during hardware refresh. I believe I found the cause, please let me know if I haven't.
    - FIXED: Ignore profile switching if profile being switched to is already active.
    - CHANGED: Max wait time for miner to start doubled (30 seconds for exe, 60 seconds for batch files). This is the maximum wait time for API to initialize. If it initializes sooner or the miner window closes, it stops waiting.
    - ADDED: Coin Manager allows you to add, edit, and remove coins and exchanges.
    - ADDED: Scrollbars to tabs if necessary (if Windows text size is set to > 100%). It will still look ugly, but at least you can get to all controls.
    - ADDED: Notifications when new coins appear on coinchoose, showing name, algorithm, and profitability info. This can be disabled by changing NotifyOnNewCoins=True to NotifyOnNewCoins=False in CGWatcher.exe.ini. (default is enabled).
    - FIXED: Incorrect profile being shown for miner after prompted to create new profile (again).
    - FIXED: Some minor issues fixed that may have caused API access failure in certain (rare) circumstances, particularly when starting CGWatcher while a miner was already running.
    - ADDED: Additional logging when changing intensity on idle so the result is logged regardless of what happens, even if skipped. Remember that the intensity on idle is only changed if the idle intensity is higher than the current intensity, or either of the values are "D".
    - CHANGED: Failed scheduled actions no longer disabled, but marked as Failed when their consecutive failures meet the limit set in Monitor tab. They will not be triggered when Failed=True. Failed flag is reset when the miner is successfully started/restarted or the action is modified or enabled.
    - ADDED: Events created in preparation of creating scheduling options based on miner events.
    - ADDED: Notification displayed and log entry recorded when new coins are found on CoinChoose.
    - FIXED: pools using -userpass/-O option being applied to config file correctly.


version 1.2.9 (8/23/2013)
    - ADDED: settings for customizing how CGWatcher handles miner start failures.
    - ADDED: setting for how many times a scheduled action should be tried if it fails the first time.
    - ADDED: "start miner if not already running" option for certain scheduled actions.
    - FIXED: spaces in config file path bug
    - FIXED: variables not being replaced in arguments in some sitatuions.
    - FIXED: scheduler logic part II. This may require additional work, but it's getting there.
    - ADDED: Prompt for pool if no pool has been specified rather than trying to wait for user to enter in miner prompt.
    - ADDED: coins to profile drop-down list in Settings tab.
    - CHANGED: GPU status getting updated sooner after miner restart to ensure scheduled actions that modify a GPU's settings are not skipped because the GPU is thought to be inactive.
    - ADDED: several more commands added for CGRemote.
    - CHANGED: When data is requested from CGRemote while CGWatcher is in the middle of starting, restarting, or stopping the miner, a busy response is returned until the action is completed to avoid unnecessary messages.
    - FIXED: hashrates showing XXX.9999 or XXX.0001 rounded to nearest whole number. This is caused by using single variables to store hashrates, which promote speed and therefore may slightly lose precision. This still may occur for some numbers, but less often. It is only a visual quirk and does not negatively affect mining.
    - FIXED: Several other improvements or fixes were made that I forgot to write down. There are some new items on the to-do list as well, it's just a matter of getting to them.


version 1.2.8 (8/20/2013)
    - FIXED: Scheduler almost completely re-written to ensure new options peacefully coexist with old options.
    - CHANGED: Scheduled actions will not persist through restart if they have a stop time that will occur within before the next estimated monitor check time.
    - CHANGED: Scheduled action notifications are standardized for all options, and now followed by a result notification (green or red depending on success or failure).
    - CHANGED: Scheduled actions set to persist through restarts will still persist if Pause Mining button is clicked by user. Stop button and Restart button cancels persistance.
    - CHANGED: All monitor checks will not be performed during the first 30 seconds of mining or after CGWatcher starting to ensure the miner is able to start properly. Any actions that fall within this time frame will be performed immediately following this grace period.
    - CHANGED: CGremote notifications changed from gray to purple to make more visible.
    - CHANGED: Variables moved from CGWatcher.exe.ini to variables.ini, whose file path can be changed in CGWatcher.exe.ini [Settings] VariablesDataFile=<path>
    - FIXED: Variables not working correctly if you included the surrounding %...% in their names when creating them.
    - FIXED: Bug causing variables not to be applied correctly to web config files.
    - FIXED: Bug causing config file load error if pool names contained brackets.
    - FIXED: Pool passwords not displayed when pool specified in arguments (no config file). This did not affect mining.
    - ADDED: -v <port> command line argument allows setting miner API override port (miner will only use this port). This applies only while CGWatcher is running with this command used at launch or until user saves settings (it is not saved to INI file by using command alone).
    - FIXED: Scheduled actions set to run on specific date not being triggered correctly.
    - FIXED: Scheduled actions set to run on specific date that also have a stop time set are not deleted until after stopped.
    - FIXED: Start mining and restart mining routines re-written to use temporary config files and batch files to ensure originals are not altered in case they are being shared by multiple miners.
    - FIXED: Batch files given twice as long startup time since they can take a little longer to get going depending on other commands.
    - CHANGED: "Restart miner when sick or dead GPUs detected" monitor option will now apply to FPGA and ASIC devices by default. Previously this was disabled by default to get some feedback without causing any problems.
    - FIXED: "Hashrate cutoff" monitor option bugging you if you left the sha256 or scrypt hashrate at zero.
    - ADDED: (Updater v1.2) MD5 Hash Check in Auto-Update utility to ensure auto-update files have not been modified.
    - ADDED: If 2> log argument is found and miner not using batch/command file, a temporary one is created and used to launch the miner to fix .NET's problem with this argument.
    - CHANGED: Minutes of inactivity before computer is considered idle on Schedule tab applies to all settings (included scheduled actions) so changed interface to make this clearer.
    - CHANGED: Scheduled actions "program starts" and "program stops" changed to "program is running" and "program is not running" to make it clearer that these may be applied as long as the specified program is running/not running if action is set to persist through restarts.
    - CHANGED: Scheduled action frequencies "is idle" and "is not idle" wording changed to better indicate these actions will be applied any time these conditions are true.
    - FIXED: Scheduled actions resorted after each check in which actions are triggered to ensure they are always performed in chronological order.
    - ADDED: Scheduled action "run program" that will launch a specified program (with optional specified arguments). This action can have a stop time, and like other actions can be triggered when a program stops running. (e.g. "run TeamViewer" when "TeamViewer" stops running). If a stop time is set, it will only close the instance it created and no other instances.
    - CHANGED: Scheduled actions that are set to run when the computer is idle, not idle or when a program is running or not running are no longer persistable through restarts. These actions are applied any time the condition is true, including after restarts.
    - FIXED: Notification that GPU was restarted after being disabled from overheat when it had actually been re-enabled by scheduler.
    - CHANGED: Restart miner/computer when sick or dead GPU is detected now also includes FPGA and ASIC devices by default. Previously this had to be enabled manually in the ini file.




version 1.2.7 (8/17/2013)

    (some of these changes were made in 1.2.6.1)
    - FIXED: When prompted to create new profile if miner found not matching one, new profile created successfully but miner assigned to wrong profile.
    - TEST: Added ability to restart miner if sick or dead FPGA or ASIC is detected. Not sure if these devices are reported as sick or dead and if so, if restarting the miner is the best option (compared to restarting device). Can be enabled by changing [Monitor] RestartOnSickDeadUSBDevice=False to True.
    - TEST: For 40+ devices, check that no devices have been truncated from devs command resulting in them not being reported. For these devices a separate command is sent to get data for each device. Some data is still unavailable for these last devices, specifically data that is truncated in the stats command.
    - FIXED: thread-concurrency in arguments not being applied correctly to config file if it was a comma-separated list of values.
    - ADDED: recent additions to config related to ASIC and FPGA devices now available in Config File Editor.
    - ADDED: Certain scheduled actions can have stop times.
    - FIXED: Scheduled action logs reporting actions were persisted through a restart when they weren't.
    - FIXED: Notification showing miner command failed even when it succeeded.
    - FIXED: Scheduled Action form showing wrong profile when editing scheduled action that switches to a specific profile (not profitability-related)
    - ADDED: CGRemote capabilities extended to include modifying schedule and settings.
    - ADDED: Option to set stop time for applicable scheduled actions. At stop time the action will restore item to its previous state.
    - TEST: a bug was reported that when a scheduled action to stop mining occurred and the 'Ensure miner stays running' option is enabled, the miner would be restarted. I didn't find anything obvious that would cause this but rewrote some of the code involved, blew in it, and hit it a few times like an old Nintendo cartridge. In subsequent tests the issue seemed to be resolved.
    - FIXED: Other minor bug fixes and improvements.


version 1.2.6 (8/12/2013)
    - Fixed everything, then added some new bugs.
    - Significant improvements when communicating with CGRemote.
    - CGWatcher considers stop mining request from CGRemote as user initiated so if the "Ensure miner is running" option is enabled, it will not restart the miner.
    - CGWatcher considers stop mining scheduled actions as user initiated so if the "Ensure miner is running" option is enabled, it will not restart the miner.
    - Note added to acknowledge local IP address may be incorrect if more than one network adapter is present. I did change the method for getting the local IP to hopefully work better.
    - Convert decimal place to period any time a decimal value is sent to CGRemote (not often as most data comes this way right from the miner and is passed on to CGRemote)
    - Change Intensity When Idle option fixed so that if the miner is restarted while the computer is still idle (via CGRemote), the intensities will be changed again after the miner has been running for at least 30 seconds.
    - New "Persist through miner restart" option available for certain scheduled actions like changing intensity or enabling/disabling a device and certain frequencies like on idle/off idle so if, for example, you create a scheduled action to raise intensity when the computer becomes idle, this intensity will be carried over if the miner is restarted by the Monitor, Scheduler, or CGRemote. This does not apply to user-initiated restarts like a user clicking the restart button.
    - Miner can now be controlled using the following key combinations (to hopefully make it easier to stop the miner if intensity is set too high and mouse won't move):
        - Shift+M  start the miner
        - Shift+T  stop the miner
        - Shift+R  restart the miner (no confirmation prompt)
        - Shift+P  pause/resume miner

    - For 'Change Intensities on Idle' option and 'Change Intensity/ies' scheduled actions, you can now specify two values separated by a backslash for SHA256/Scrypt. CGWatcher will use the value for the current algorithm.
    - 'Restart miner if hashrate falls below' monitor option now has values for SHA256 and Scrypt, so the option doesn't have to be changed when switching algorithms.
    - Fixed GPU reported as inactive if disabled by the miner for overheating and then the miner was restarted.
    - Reduced need for modifying config files before miner start when using batch files to only when necessary to enable API or change api-port.
    - Fixed autorun when Windows starts not being saved if auto-start miner was disabled.
    - Preset and custom variables can be used inside batch/command files, arguments, and config files. (e.g. %USER% replaced with username)
    - Increased potential value for difficulty since alt-coins may produce bizarre values
    - Added new block and found block minute averages on Status tab
    - Option to hide FPGA and ASIC devices if being reported incorrectly by the miner after device is unplugged and plugged back in. Open the device detail, click Hide in bottom left corner.
    - Improved support for batch and command files, including additional time when waiting for start. Improved parsing also.
    - Other improvements and fixes. Does anyone read these things? At a certain point I stopped writing down changes.


version 1.2.5 (8/2/2013)
    - Auto-update utility (update.exe) fixed so it will download files to correct folder and not get stuck in a continuous cycle due to saving files to parent folder of CGWatcher folder.
    - Fixed Profile Manager showing file not found when trying to open config file from web url in Notepad.
    - Fixed bugs in processing responses to CGRemote.
    - Other minor improvements, fixes, and additions related to CGRemote communication.


version 1.2.4 (7/24/2013)
    - Made changes to CGRemote interaction in preparation for CGRemote beta. 1.2.4 will be the minimum version required for CGRemote.
    - Fixed CGWatcher launching miner twice when started if auto-launch miner option and 'Ensure miner is running' option were both enabled.
    - Fixed pools not displaying correctly if miner not running and no config file is used. Additional fix applied to this regarding batch files.
    - Fixed more stuff.


version 1.2.3 (7/19/2013)
    - Fixed enable/disable GPU that may have changed incorrect GPU in certain cases
    - Fixed difficulty overflows caused by ridiculous amount of decimal places in difficulty values
    - Added {highest reward}, {lowest difficulty}, {lowest network hashrate}, and {lowest network hashrate (average)} to scheduled action profile options.
    - When creating scheduled actions that switch to conditional profiles (e.g. most profitable), you can now select 1st, 2nd, 3rd, etc. to switch to 1st most profitable, 2nd most profitable, etc.
    - Added edit device option to correct devices being reported incorrectly by miner (e.g. ASIC reported as FPGA). Click Edit this Device link in bottom left corner of device detail to edit the device's properties.
    - Added average temperature to GPU data textbox in GPU tab. Currently this is a test for accuracy and will later be used to diagnose GPU issues where temperature drops suddenly because of problems with the miner.
    - Changed cgwatcher to force close programs on restart (after giving 30-second countdown with cancel button).
    - Improved program initialization speed (starts quicker).
    - Improved performance of interface updates when the miner's status has changed.
    - Coins no longer listed on coinchoose are now deleted *IF* they are not assigned to a profile in order to keep the coin list relatively clean as altcoins come and go.
    - Scheduled action last run times are saved so if CGWatcher is closed and re-opened, they will not be reset and will attempt to run N hours after the last run time. If last run time + N hours is in the past, time will be added in increments of N hours until the next run time is in the future (or now).
    - GPUs, FPGAs, and ASICs not enabled with status of ALIVE now have current hashrate set to 0 to give an accurate hashrate, even though a number may still be reported by the miner. Please let me know if this has unintended consequences.
    - Scheduled actions are not performed during a miner restart. If a restart is taking place at the time a scheduled action is triggered, it will be performed after the restart is completed.
    - Option to restart computer if accepted or total share counts do not change for N minutes added.
    - Allow for URLs when setting profile config files. More information in Profiles section above.
    - Rearranged schedule options to allow for more options and also create room for future options.

version 1.2.2 (7/14/2013)
    - Fixed a bug preventing profiles from saving correctly. The bug was introduced in 1.2.1 as a result of changing how profiles work in order to allow sorting, while still keeping backwards compatibility so it would not mess up existing profiles from previous versions.

version 1.2.1 (7/11/2013)
    - Profiles can now be sorted, either automatic (alphabetically) or custom sort.
    - Fixed 'Start with Windows' bug where startup entries were being created twice in certain cases. If this occurred, simply running version 1.2.1 (or newer) will cleanup entries and correct the problem.
    - Coins you are mining are now bolded in the Coin Profitability window, with the ability to filter coins to only ones you mine also.
    - Improvements to Coin Profitability window and data refreshes, including Refresh button improvement.
    - CGRemote code improvements. Removed 'coming soon' message and enabled CGRemote option in preparation for beta.
    - Miner detection relaxed to allow for monitoring of miners even if process filename is not retrieved do to access denied errors (reported in Windows 8). There may need to be additional adjustments though for these circumstances because I'm not sure what other process info is unobtainable. The best resolution of Windows 8 issues is to run CGWatcher as Administrator.
    - Schedule and process info added to debug report for help with troubleshooting.
    - Miner Start button in Tests tab shows conditions at the moment miner was started (similar to debug report) for help with troubleshooting.
    - Processes button in Tests tab now provides more information on why a miner process may have been ignored for help with troubleshooting.

version 1.2.0.0 (7/5/2013)
    - Created Scheduled Actions option to replace and improve upon existing scheduling option.
    - Improved socket code in preparation for CGRemote beta.
    - Added Schedule and CGRemote notification types (blue and gray respectively).
    - Added coin option to profiles, allowing user to assign to profiles which coin they are mining to allow for determining profitability.
    - Added coin profitability window showing data from http://coinchoose.com (see above).
    - Fixed overheat protection only re-enabling or raising intensity on overheated GPU when its temp returns to under temp-target. Now this occurs once temp is under temp-overheat.
    - Fixed issue with overheat protection not properly raising intensity in certain cases
    - GPUs disabled by overheat (by CGWatcher or the miner) will now show OVERHEAT (disabled) as a status. Clicking Enable button in GPU tab will restart the GPU to re-enable it (although if the temp is still above temp-cutoff, it will be disabled again if overheat protection is enabled.
    - Overheat protection info has been made clearer in the GPU tab.
    - Added support for new ASIC API options in cgminer 3.3.1 (API 1.26), and asc|N option in ASIC device test to improve future support.
    - Added debug logging to help resolve permission issues with Windows 8 related to accessing process info.
    - Notification added on startup if you are running CGWatcher from within Program Files, Program Files (x86), ProgramData, or Windows folder without running as Administrator as this could cause permission issues when writing to files.
    - Removed prompt on Stop button unless without full API access.
    - Command arguments (-m start minimized, -s start miner on launch, -p NAME activate profile on launch). If profile NAME has spaces in it, surround the name with quotation marks.
    - Fixed auto-start with Windows issue that may have prevented successful creation of HKCU startup entry if HKLM entry failed due to invalid permissions.
    - Disabling auto-start will check both HKCU and HKLM and remove from both if necessary to ensure it is not ran at startup.
    - Additional information regarding new features added to the Report tab.


version 1.1.9.0 (6/25/2013)
    - Rewrote 'start miner' function and any code dealing with batch or command files to resolve issues reported by some users. All reported problems should now be fixed.
    - Support for "include" option added to Config File Editor. The option can be edited under Misc. Options. CGWatcher will now be aware of the additional config file, although some additional support may need to be added in the future.
    - Pools set in arguments are set to first priority when arguments are applied to config files. This is to remain consistent with argument options overriding config file options when using CGWatcher. Pools set in the config file won't be removed, they'll just follow pools set in arguments in terms of priority.
    - Commented lines (starting with REM) in batch and command files are now ignored.
    - Added info to debug report.
    - All options in the config file are now saved when saving the config file, even if they are set to their default values.
    - Fixed error handling when recording events to log (I had forgotten to un-comment code after testing).
    - Donation mining option added to Schedule tab. See above for more info.
    - Misc. fixes and improvements.


version 1.1.8.0 (6/19/2013)
    - Added support for unsupported options in Config File Editor. Options that Config File Editor does not fully support are now placed into a "Misc Options" collection so they can still be edited in the Config File Editor. You can also add or remove options from this collection. No validation is done on the values of these options. Because CGWatcher is written for CGMiner, options added in BFGMiner may be placed in this collection. Also, any options added in the future by either program will appear here if they are in your config file.
    - Support for pool-priority option in config file added (for BFGMiner).
    - Fixed bug when changing pool priority in Pools tab when there are more than 10 pools.
    - Fixed bug that may cause incorrect values to be used when applying arguments to a config file before the miner is started. This only occurred when you set the same options in the config file and in arguments.
    - Fixed bug in json character escaping.
    - Notifications displayed when CGWatcher takes an action (for most actions). Clicking on a notification will close it, but if there are other notifications in the queue they will be displayed next. Default notification duration is 5 seconds, but some notifications may be displayed longer depending on importance. Notifications are also always available in the log.
    - 'Hide Notifications' option added to Settings tab to hide notifications.
    - Other minor improvements to config file saving, fixing common mistakes.
    - Misc bug fixes.


version 1.1.7.0 (6/15/2013)
    - If CGWatcher has to modify a config file, batch file, or command file before starting the miner, it saves the original file to memory and once the miner is started (even if it fails to start), the original version is saved. This has been the case for the past few versions of CGWatcher, but because of the way it saved config files, it may have reorganized settings when restoring the original file. This has been changed to restore the file to the exact way it was before, and should that fail it will use the previous method of saving as a backup. If both fail to save, which is unlikely, it will be reported in the log.
    - Because CGWatcher may modify a config file, batch file, or command file before starting the miner, it will now save the modified file to debug_config.txt or debug_batcmd.txt (in CGWatcher directory) so you can see exactly what modifications it made. These are copies of the files used to start the miner. Because it restores the files to their original versions right after the miner starts, these copies can be used for troubleshooting should a problem arise because they show the exact settings used to start the miner.
    (Reasons CGWatcher may modify these files before launching the miner: override config settings with argument settings, enable API, override API port if specified in the Settings tab, etc.)
    - Situations in which CGWatcher has to modify a config file or .cmd/.bat file before starting the miner have been reduced as much as possible so these files are only modified if absolutely necessary.
    - Check Mining Profitability link has been changed to http://www.coinchoose.com.
    - UI notice that arguments override config file settings in Profile Manager.
    - UI notice that you must click 'Save Settings' to switch to a different profile.
    - UI notification when you find a block.
    - Fixed Profile Manager prompting to save changes sometimes when changes had not been made.
    - Fixed Update Download link in About tab.
    - Donation button added to About tab providing donation addresses.
    - Additional validation of intensities improved (still based on hash method).
    - Computer Idle Seconds, Last Check Date/Time added to Report tab.
    - Fixed bug that may incorrectly identify GPUs when changing GPU settings while mining if the system also had additional GPUs that were not mining.
    - Fixed allowing FPGA or ASIC devices where Enabled=N to be included in total hashrate if a hashrate is being reported for them.
    - Schedule option added to increase intensity of all GPUs to a specified value whenever the system is idle for X minutes. (As with other options, Monitor must be enabled. See option description above.)


version 1.1.6.0 (6/15/2013)
    - ASIC/FPGA devices are shown. Clicking on a device's ID button will open device details. Note: Some ASICs may currently appear as FPGAs. This is due to the miner reporting them that way, which may be due to their configuration. This should improve with newer miner versions. Also, I don't currently have FPGA or ASIC, so support was based on test results I received which in most cases were all one type of device and did not include GPUs... so there may be issues that need to be worked out in some cases. In other words... this is beta ASIC and FPGA support.
    - Included hardware errors share percentages on status tab (these will not be included in the Total Shares monitor option)
    - Corrected overheat protection type to only apply miner protection if auto-gpu is used, as the miner does not use temp-cutoff without it.
    - GPUs must have temperatures (1 - 150) to be considered valid. Although this is a very conservative range, it will prevent constant restarts if temperatures are invalid (> 150) and assumes anything beyond that is invalid.
    - Tabs can be navigated using function keys (F1-F11)
    - Fixed potential problem created by BFGMiner returning Name=OCL instead of Name=GPU for GPUs in API commands.
    - Support for 64-bit miners added. 
    - OpenCLNet.dll rebuilt so the original file will not work with 1.1.6 and beyond.
    - Additional check that active profile's miner path is valid before attempting to start miner to make it clearer for new users that this needs to be set prior to starting the miner (unless CGWatcher finds the miner on its own on first run.)
    - Fixed BFGMiner version not being reported.
    - Fixed CGWatcher improperly reporting that it was providing overheat protection if overheat protection was disabled in the INI file. 
    - Enabling/Disabling overheat protection can now be done in the Monitor tab.
    - Added strategy to pool info
    - device option available in Config File Editor again since it has been fixed in cgminer 3.2.1. The option's description explains that < 3.2.1 only allow for one GPU, so arguments must be used for more than one. The device option now applies to all devices, not just GPUs, as per cgminer 3.2.1 changelog.
    - Validate before saving option added to Config File Editor (enabled by default) can be disabled if your culture settings cause problems with validating settings before saving.


version 1.1.5.1 (6/10/2013)
    -Fixed issue with GPU mapping when more than one OpenCL platform exists and GPUs are not on platform (index) 0.
    -Added support for FPGA and ASIC devices, but not currently displayed because I am hoping to get more device test results. If you use these devices, please run the test on the FPGA or ASIC tab and email me the results. You can check if these devices are detected correctly by clicking the 'Show FPGA' or 'Show ASIC' buttons on the Tests tab.
    -Fixed open miner path directory in Profile Manager
    -Cancel button will give option of canceling wait for miner start (at bottom next to status)
    -Arguments will now take priority over config file (if same option is specified in both.) Pools set in arguments will be appended to pools set in a config file.
    -Fixed .cmd/.bat files causing miner to be killed on restart. Instead a quit is performed if full API access, or kill if not. This ensures any other commands in the .bat/.cmd file are reloaded during restart.
    -Added check processes for cgminer-nogpu.exe.
    -If miner disables GPU for exceeding temp-cutoff, cgwatcher will restart it once it returns below temp-target because the miner is usually unable to re-enable it successfully.
    -Profiles without a pool specified can not be saved. At least one pool must be specified in a config file or arguments. Otherwise this would cause the miner to prompt for this info on each restart.
    -Fixed bug with saving arguments to bat/cmd file that may have removed other lines in certain conditions.
    -Miner processes that are detected but fail to communicate with CGWatcher are now saved so it doesn't keep trying to communicate with them (if it has not found a process to monitor.) Hopefully this will not cause issues with detection, but miners started from within CGWatcher should not be affected.
    -Hardware information will refresh at same interval as monitor (instead of 5 seconds as in 1.1.5.0), but will continue to refresh even if miner is not running (when possible).


version 1.1.5.0 (5/30/2013)
    - CGWatcher now gets GPU information (clock, temp, etc.) on its own for most AMD and Nvidia cards. If the miner is capable of getting GPU information as well (as it does for most AMD cards), the miner's information is used to ensure both programs are using same information.
    - GPU Map form to map GPUs detected by CGWatcher to miner GPUs in cases where automatic mapping is not correct.
    - Backup/fallback hardware detection mode added for problems with new method.
    - Overheat protection added for any GPUs that CGWatcher is capable of getting temperature for if the miner is unable to get temperature for.
    - Overheat protection status displayed for each GPU.
    - Full API access will always be enabled when starting a miner from CGWatcher.
    - Hashrate bug that caused hashrates to not be displayed occasionally fixed.
    - If miner path is a .bat or .cmd file, a miner restart will actually stop then start the miner to make sure any other commands are also ran.
    - Multiple instances of CGWatcher now allowed but currently require being ran from different folders. This will be changed in future versions to allow multiple instances from the same folder.
    - Support for multiple miner instances if each miner is using a unique API port (as specified in the miner's configuration or using default CGWatcher port.)
    - Miners already running when CGWatcher is started that do not have API access are ignored.
    - Force API port option added.
    - API calls to miner reduced.
    - Monitor checks that miner has not stopped responding. Restarts miner if not responding for 3 consecutive checks. Value can be changed in INI (NotRespondingRestartChecks)
    - WER UI disabled on CGWatcher start and restored on exit to prevent hang ups on miners that stopped responding, feature can be disabled in INI (AllowDisableWERUI)
    - GPU activity changed to progressbar.
    - GPU fan % changed to slider based on calculated fan min and max (if possible.) If min and max value cannot be determined, slider is disabled but rpm can still be edited for supported GPUs.
    - Small GUI enhancements to make certain data more visible.
    - Splash screen added to indicate instance has started and is loading since loading time is now longer.
    - Chart now updates regardless of whether or not miner is running.
    - Restart miner when sick or dead GPUs are detected changed to allow computer restart also.
    - Restart option gives 30-second countdown providing opportunity to cancel.
    - Restart option has force close option in INI file (ForceCloseProgramsOnRestart)
    - Schedule tab created, schedule options moved to it to allow future enhancements and additional room for options on the Monitor tab.
    - Device tests moved to their respective tabs.
    - Bug fixed preventing miner using .bat or .cmd files with 2>log.txt from launching.
    - Bug fixed when modifying arguments for miner using .bat or .cmd file (arguments changed in Profile Manager are saved to .bat or .cmd file automatically.)
    - Open directory buttons removed from Settings tab to prevent confusion. Changing miner or config file path must be done in the Profile Manager.
    - Device option removed from Config File Editor because specifically enabling multiple devices using the config file is not supported in cgminer. Instead do this in arguments using -d <device>.
    - Miner.log created to record miner events. Right now is limited to some process info, hardware errors, pool change, pool and GPU status changes, new blocks, found blocks, etc.
    - Log entries kept in memory reduced. Ultimately they will not be stored in memory but it was a quick way to show/hide debug entries. In the future a separate debug log may be used instead.
    - Misc. bug fixes and improvements.


version 1.1.4.1 (5/14/2013)
    - added option to choose checking for accepted share count or total share count (accepted, rejected, and stale) changes.
    - fixed bug that prevented the correct hashrate cutoff types from being saved (Kh/s,Mh/s,Gh/s)
    - fixed bug that caused messagebox when 'Ensure miner stays running' option is enabled after switching profiles.


version 1.1.4.0 (5/12/2013)
    - Config File Editor added.
    - Mining profiles added.
    - Improved monitor and restarting ability.
    - Notify user of (3) consecutive failed miner starts.
    - Scheduled Mining bug fix.
    - Hashrate/temperature chart displays temps for up to 8 GPUs.
    - Restart if API access becomes read-only or is lost option.
    - Check total share count option now only checks accepted share count.
    - Some data added/removed from Status tab to keep up with mining changes. Discarded work now only shown on Report tab.
    - Created tabs for other devices, Device Tests on Tests tab to allow help in implementing support for these devices.
    - Fixed bug with window position saving on multiple monitors that caused CGWatcher to open in wrong monitor.
    - Introduces several smaller features and improvements, maybe some new bugs.


version 1.1.3
    - Scrypt mining detected automatically and hashrates are corrected accordingly.
    - Culture problems fixed where using a decimal instead of a comma produced incorrect hashrates.
    - Miner is restarted when sick or dead GPUs are detected, as restarting the GPU often fails.
    - Increased API buffer size to prevent chinese characters from appearing when miner returned a lot of data.
    - Ability to switch miners (CGMiner to BFGMiner or vice versa) handled in case that should ever happen.
    - Share percentages displayed and include stale and discarded in total to give more accurate percentages.
    - Check for Update button in the About tab added.
    - Restart when hashrate below X now fixed to require the hashrate to be below the value for three consecutive CGWatcher refreshes. This number can be changed by changing the HashRateCounter value in CGWatcher.exe.ini. You can also now select whether this value is in Kh/s, Mh/s, or Gh/s.
    - Miner restarts are improved. If CGWatcher lost full API access or the miner closes unexpectedly on the "restart" command, it is correctly handled by CGWatcher.
    - Miner is given a startup grace period where it will not be restarted during in order to give it time to start mining. The default is 180 seconds. This can be changed by changing RestartGracePeriod value in CGWatcher.exe.ini.
    - CGWatcher remembers window position including multi-monitor setups and monitor changes. 


version 1.1.2
    - Form size increased to make room for more options.
    - Simple scheduling option added.
    - Minimize to system tray option added.
    - Select CGMiner window mode (normal, minimized, hidden) option added.
    - Editable options now marked in black text, read-only in gray text (in most cases).
    - Closing CGWatcher while CGMiner is running will prompt the user to confirm closing.
    - Added support for BFGMiner.




THINGS TO DO:
    - Feature suggestions can be sent to Milone99k@gmail.com. Requests from donators get priority.



KNOWN ISSUES:
    - Hosting your miner and/or config files on Google Drive may cause CGWatcher to not detect the miner, though the relaxed requirements of detection may help with this. I will be setting up Google Drive in order to look more into this issue. The same might be true of Dropbox, although it has not been specifically reported.
    - Windows 8 permission issues prevent CGWatcher from detecting miner properly in some cases. Running CGWatcher as Administrator resolves this problem. I am working on setting up a Windows 8 miner to troubleshoot.
    - Automatic GPU mapping may not be accurate, although it was on all systems I tested on. GPU temperature data may not be available for all devices, but you should be notified in the GPU tab if this is the case and overheat protection cannot be provided.


LIBRARIES

    http://openhardwaremonitor.org/license - Collect GPU data for AMD and Nvidia GPUs and Intel CPUs.

    http://openclnet.codeplex.com/license - .NET OpenCL library to detect OpenCL devices the same way the miner does in order to better match GPUs.

    http://json.codeplex.com/license - used to read/write Json for the miner's config file.

    http://www.codeproject.com/Articles/5304/Read-Write-XML-files-Config-files-INI-files-or-the - a library that I use for writing and reading INI, XML, and config files. (no license stated)

    http://ncalc.codeplex.com/license - used to parse coin custom field expression in order to create your own profitability formula.