private static void UpdateRowWithConfigurationData(DataGridViewRow row, ServerConfigurationData configurationData)
 {
     row.Cells["ColServerName"].Value    = configurationData.ServerName;
     row.Cells["ColUserName"].Value      = configurationData.UserName;
     row.Cells["ColPassword"].Value      = configurationData.Password;
     row.Cells["ColCPUThreshold"].Value  = configurationData.CPUThreshold;
     row.Cells["ColRAMThreshold"].Value  = configurationData.RAMThreshold;
     row.Cells["ColDiskThreshold"].Value = configurationData.DiskThreshold;
 }
        private DataGridViewRow AddNewServerMornitor(ServerConfigurationData newConfigurationData)
        {
            dgResult.Rows.Add();
            DataGridViewRow newRow = dgResult.Rows[dgResult.Rows.Count - 1];

            UpdateRowWithConfigurationData(newRow, newConfigurationData);
            GetServerUsageAsync(newConfigurationData);

            _configurations.Add(newConfigurationData);

            btnSave.Enabled = true;

            return(newRow);
        }
        private void GetServerUsageAsyncForMail(object param)
        {
            if (param == null || !(param is ServerConfigurationData))
            {
                //Report Error
                this.BeginInvoke(new Action(() =>
                {
                    MessageBox.Show("Invalid argument: param", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }));
                iServer++;
                if (iServer == cntServer)
                {
                    if (emailBody != string.Empty)
                    {
                        SendEmail();
                    }
                    iServer = 0;
                }
                return;
            }

            ServerConfigurationData configuration = param as ServerConfigurationData;

            try
            {
                ServerLoadData result = ServerLoadHelper.GetServerUsage(configuration.ServerName, configuration.UserName, configuration.Password);

                iServer++;
                //Complete
                this.BeginInvoke(new Action <ServerLoadData>(OnGetServerUsageAsyncCompletedForMail), result);
            }
            catch (Exception ex)
            {
                iServer++;
                if (iServer == cntServer)
                {
                    if (emailBody != string.Empty)
                    {
                        SendEmail();
                    }
                    iServer = 0;
                }
                //Report Error
                this.BeginInvoke(new Action <string, Exception>(ReportErrorForEmail), configuration.ServerName, ex);
            }
        }
        private void UpdateServerMornitor(DataGridViewRow currentRow, ServerConfigurationData updatedConfigurationData)
        {
            string  originalServerName    = currentRow.Cells["ColServerName"].Value.ToString();
            string  originalUserName      = currentRow.Cells["ColUserName"].Value.ToString();
            string  originalPassword      = currentRow.Cells["ColPassword"].Value.ToString();
            decimal originalCPUThreshold  = Convert.ToDecimal(currentRow.Cells["ColCPUThreshold"].Value);
            decimal originalRAMThreshold  = Convert.ToDecimal(currentRow.Cells["ColRAMThreshold"].Value);
            decimal originalDiskThreshold = Convert.ToDecimal(currentRow.Cells["ColDiskThreshold"].Value);

            bool isChanged = !originalServerName.Equals(updatedConfigurationData.ServerName, StringComparison.CurrentCultureIgnoreCase) ||
                             !originalUserName.Equals(updatedConfigurationData.UserName, StringComparison.CurrentCultureIgnoreCase) ||
                             !originalPassword.Equals(updatedConfigurationData.Password, StringComparison.CurrentCultureIgnoreCase) ||
                             originalCPUThreshold != updatedConfigurationData.CPUThreshold ||
                             originalRAMThreshold != updatedConfigurationData.RAMThreshold ||
                             originalDiskThreshold != updatedConfigurationData.DiskThreshold;

            if (isChanged)
            {
                UpdateRowWithConfigurationData(currentRow, updatedConfigurationData);
            }

            GetServerUsageAsync(updatedConfigurationData);

            int originalConfigurationDataIndex = _configurations.FindIndex(c =>
                                                                           c.ServerName.Equals(originalServerName, StringComparison.CurrentCultureIgnoreCase));

            if (originalConfigurationDataIndex >= 0)
            {
                _configurations.RemoveAt(originalConfigurationDataIndex);
                _configurations.Insert(originalConfigurationDataIndex, updatedConfigurationData);
            }
            else
            {
                _configurations.Add(updatedConfigurationData);
            }

            if (isChanged)
            {
                btnSave.Enabled = true;
            }
        }
        private void GetServerUsageAsync(object param)
        {
            if (param == null || !(param is ServerConfigurationData))
            {
                iMonitorServer++;
                //Report Error
                this.BeginInvoke(new Action(() =>
                {
                    if (iMonitorServer == cntMonitorServer)
                    {
                        btnRefresh.Enabled = true;
                        iMonitorServer     = 0;
                    }
                    MessageBox.Show("Invalid argument: param", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }));
                return;
            }

            ServerConfigurationData configuration = param as ServerConfigurationData;

            //Report Progress
            this.BeginInvoke(new Action <string, decimal>(ReportProgress), configuration.ServerName, new Decimal(0));

            try
            {
                ServerLoadData result = ServerLoadHelper.GetServerUsage(configuration.ServerName, configuration.UserName, configuration.Password);

                iMonitorServer++;
                //Complete
                this.BeginInvoke(new Action <ServerLoadData>(OnGetServerUsageAsyncCompleted), result);
            }
            catch (Exception ex)
            {
                iMonitorServer++;
                //Report Error
                this.BeginInvoke(new Action <string, Exception>(ReportError), configuration.ServerName, ex);
            }
        }
 private void GetServerUsageAsyncForMail(ServerConfigurationData configurationData)
 {
     ThreadPool.QueueUserWorkItem(new WaitCallback(GetServerUsageAsyncForMail), configurationData);
 }