csharp/NaverCloudPlatform/SqlServerDbaTool/NaverCloudPlatform-SqlServerDbaTool-ffd4834/HaTool/HaTool/Server/UcSetServerDisk.cs

UcSetServerDisk.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using HaTool.Config;
using HaTool.Global;
using CsLib;
using Newtonsoft.Json;
using HaTool.Model.NCloud;
using LogClient;
using Newtonsoft.Json.Linq;
using HaTool.Model;
using System.Text.RegularExpressions;

namespace HaTool.Server
{
    public partial clast UcSetServerDisk : UserControl
    {
        private static readonly Lazy lazy =
            new Lazy(() => new UcSetServerDisk(), LazyThreadSafetyMode.ExecutionAndPublication);

        public static UcSetServerDisk Instance { get { return lazy.Value; } }

        LogClient.Config logClientConfig = LogClient.Config.Instance;
        DataManager dataManager = DataManager.Instance;
        FileDb fileDb = FileDb.Instance;

        List serverInstances = new List();

        DataGridViewCheckBoxColumn ColumnServerCheckBox;
        DataGridViewTextBoxColumn  ColumnServerName;
        DataGridViewTextBoxColumn  ColumnServerZoneNo;
        DataGridViewTextBoxColumn  ColumnServerInstanceNo;
        DataGridViewTextBoxColumn  ColumnServerPublicIp;
        DataGridViewTextBoxColumn  ColumnServerPrivateIp;
        DataGridViewTextBoxColumn  ColumnServerStatus;
        DataGridViewTextBoxColumn  ColumnServerOperation;

        DataGridViewCheckBoxColumn ColumnStorageCheckBox;
        DataGridViewTextBoxColumn  ColumnStorageInstanceNo;
        DataGridViewTextBoxColumn  ColumnStorageServerName;
        DataGridViewTextBoxColumn  ColumnStorageName;
        DataGridViewTextBoxColumn  ColumnStorageSize;
        DataGridViewTextBoxColumn  ColumnStorageDetailType;
        DataGridViewTextBoxColumn  ColumnStorageDescription;
        DataGridViewTextBoxColumn  ColumnStorageInstanceStatus;
        DataGridViewTextBoxColumn  ColumnStorageInstanceOperation;

        //FormPreview formPreview = FormPreview.Instance;

        public string Sp_configure { get; set; }

        public string PsTemplate { get; set; }
        public string psTemplateChanged { get; set; }

        private void InitDgv()
        {
            ColumnServerCheckBox      = new DataGridViewCheckBoxColumn();
            ColumnServerName          = new DataGridViewTextBoxColumn();
            ColumnServerZoneNo        = new DataGridViewTextBoxColumn();
            ColumnServerInstanceNo    = new DataGridViewTextBoxColumn();
            ColumnServerPublicIp      = new DataGridViewTextBoxColumn();
            ColumnServerPrivateIp     = new DataGridViewTextBoxColumn();
            ColumnServerStatus        = new DataGridViewTextBoxColumn();
            ColumnServerOperation     = new DataGridViewTextBoxColumn();

            ColumnStorageCheckBox             = new DataGridViewCheckBoxColumn();
            ColumnStorageInstanceNo           = new DataGridViewTextBoxColumn();
            ColumnStorageServerName           = new DataGridViewTextBoxColumn();
            ColumnStorageName                 = new DataGridViewTextBoxColumn();
            ColumnStorageSize                 = new DataGridViewTextBoxColumn();
            ColumnStorageDetailType           = new DataGridViewTextBoxColumn();
            ColumnStorageDescription          = new DataGridViewTextBoxColumn();
            ColumnStorageInstanceStatus       = new DataGridViewTextBoxColumn();
            ColumnStorageInstanceOperation    = new DataGridViewTextBoxColumn();
            
            ColumnServerCheckBox.HeaderText   = "CheckBox";
            ColumnServerName.HeaderText       = "Name";
            ColumnServerZoneNo.HeaderText     = "ZoneNo";
            ColumnServerInstanceNo.HeaderText = "InstanceNo";
            ColumnServerPublicIp.HeaderText   = "PublicIp";
            ColumnServerPrivateIp.HeaderText  = "PrivateIp";
            ColumnServerStatus.HeaderText     = "Status";
            ColumnServerOperation.HeaderText  = "Operation";
            
            ColumnServerCheckBox.Name = "CheckBox";
            ColumnServerName.Name = "Name";
            ColumnServerZoneNo.Name = "ZoneNo";
            ColumnServerInstanceNo.Name = "InstanceNo";
            ColumnServerPublicIp.Name = "PublicIp";
            ColumnServerPrivateIp.Name = "PrivateIp";
            ColumnServerStatus.Name = "Status";
            ColumnServerOperation.Name = "Operation";
                                 
            ColumnStorageCheckBox.HeaderText = "CheckBox";
            ColumnStorageInstanceNo.HeaderText = "InstanceNo";
            ColumnStorageServerName.HeaderText = "ServerName";
            ColumnStorageName.HeaderText = "Name";
            ColumnStorageSize.HeaderText = "Size";
            ColumnStorageDetailType.HeaderText = "Type";
            ColumnStorageDescription.HeaderText = "Desc";
            ColumnStorageInstanceStatus.HeaderText = "Status";
            ColumnStorageInstanceOperation.HeaderText = "Operation";
            
            ColumnStorageCheckBox.Name = "CheckBox";
            ColumnStorageInstanceNo.Name = "InstanceNo";
            ColumnStorageServerName.Name = "ServerName";
            ColumnStorageName.Name = "Name";
            ColumnStorageSize.Name = "Size";
            ColumnStorageDetailType.Name = "Type";
            ColumnStorageDescription.Name = "Desc";
            ColumnStorageInstanceStatus.Name = "Status";
            ColumnStorageInstanceOperation.Name = "Operation";
            

            dgvServerList.Columns.AddRange(new DataGridViewColumn[]
            {
                ColumnServerCheckBox   ,
                ColumnServerName       ,
                ColumnServerZoneNo     , 
                ColumnServerInstanceNo ,
                ColumnServerPublicIp   ,
                ColumnServerPrivateIp  ,
                ColumnServerStatus     ,
                ColumnServerOperation  
            });

            dgvStorageList.Columns.AddRange(new DataGridViewColumn[]
            {
                ColumnStorageCheckBox              ,      
                ColumnStorageInstanceNo            ,
                ColumnStorageName                  ,
                ColumnStorageSize                  ,
                ColumnStorageDetailType            ,
                ColumnStorageServerName            ,
                ColumnStorageDescription           , 
                ColumnStorageInstanceStatus        ,
                ColumnStorageInstanceOperation
            });



            dgvServerList.AllowUserToAddRows = false;
            dgvServerList.RowHeadersVisible = false;
            dgvServerList.BackgroundColor = Color.White;
            dgvServerList.AutoResizeColumns();
            dgvServerList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dgvServerList.Columns["Operation"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvServerList.AllowUserToResizeRows = false;

            dgvStorageList.AllowUserToAddRows = false;
            dgvStorageList.RowHeadersVisible = false;
            dgvStorageList.BackgroundColor = Color.White;
            dgvStorageList.AutoResizeColumns();
            dgvStorageList.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            dgvStorageList.Columns["Operation"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dgvStorageList.AllowUserToResizeRows = false;

            ControlHelpers.dgvDesign(dgvServerList);
            ControlHelpers.dgvDesign(dgvStorageList);
            dgvStorageList.CellContentClick += new DataGridViewCellEventHandler(ControlHelpers.dgvSingleCheckBox);
            dgvStorageList.CellContentClick += new DataGridViewCellEventHandler(ControlHelpers.dgvLineColorChange);
            dgvServerList.CellContentClick +=  new DataGridViewCellEventHandler(ControlHelpers.dgvSingleCheckBox);
            dgvServerList.CellContentClick +=  new DataGridViewCellEventHandler(ControlHelpers.dgvLineColorChange);
        }
        
        public UcSetServerDisk()
        {
            InitializeComponent();
            //formPreview.ScriptModifyEvent += PreviewClose;
            InitDgv();
        }

    
        private async Task GetBlockStorageInstanceList(string storageInstanceNo)
        {
            try
            {

                if (storageInstanceNo == null || storageInstanceNo.Length < 1)
                    throw new Exception("select one server");

                string endpoint = dataManager.GetValue(DataManager.Category.ApiGateway, DataManager.Key.Endpoint);
                string action = @"/server/v2/getBlockStorageInstanceList";
                List parameters = new List();
                parameters.Add(new KeyValuePair("responseFormatType", "json"));
                parameters.Add(new KeyValuePair("serverInstanceNo", storageInstanceNo));

                SoaCall soaCall = new SoaCall();
                var task = soaCall.WebApiCall(endpoint, RequestType.POST, action, parameters, LogClient.Config.Instance.GetValue(Category.Api, Key.AccessKey), LogClient.Config.Instance.GetValue(Category.Api, Key.SecretKey));
                string response = await task;

                JsonSerializerSettings options = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

                if (response.Contains("responseError"))
                {
                    hasError hasError = JsonConvert.DeserializeObject(response, options);
                    throw new Exception(hasError.responseError.returnMessage);
                }
                else
                {
                    getBlockStorageInstanceList getBlockStorageInstanceList = JsonConvert.DeserializeObject(response, options);
                    if (getBlockStorageInstanceList.getBlockStorageInstanceListResponse.returnCode.Equals("0"))
                    {
                        dgvStorageList.InvokeIfRequired( s =>
                        {
                            s.Rows.Clear(); 
                            foreach (var a in getBlockStorageInstanceList.getBlockStorageInstanceListResponse.blockStorageInstanceList)
                            {
                                int n = s.Rows.Add();
                                s.Rows[n].Cells["CheckBox"].Value = false;
                                s.Rows[n].Cells["InstanceNo"].Value = a.blockStorageInstanceNo;
                                s.Rows[n].Cells["ServerName"].Value = a.serverName;
                                s.Rows[n].Cells["Name"].Value = a.blockStorageName;
                                s.Rows[n].Cells["Size"].Value = a.blockStorageSize;
                                s.Rows[n].Cells["Type"].Value = a.diskDetailType.code;
                                s.Rows[n].Cells["Desc"].Value = a.blockStorageInstanceDescription;
                                s.Rows[n].Cells["Status"].Value = a.blockStorageInstanceStatus.code;
                                s.Rows[n].Cells["Operation"].Value = a.blockStorageInstanceOperation.code;
                            }
                        });
                            
                        if (getBlockStorageInstanceList.getBlockStorageInstanceListResponse.totalRows == 0)
                        {
                            MessageBox.Show("storage not founds");
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        private async Task ServerListLoad()
        {
            //StatusChange("Requested");
            try
            {
                ControlHelpers.ButtonStatusChange(buttonServerListReload, "Requested");
                await fileDb.ReadTable(FileDb.TableName.TBL_SERVER);

                List instanceNoList = new List();

                foreach (var a in fileDb.TBL_SERVER.Data)
                {
                    if (a.Value.serverInstanceNo != "NULL")
                        instanceNoList.Add(a.Value.serverInstanceNo);
                }

                List serverInstances = await ServerOperation.GetServerInstanceList(instanceNoList);

                await fileDb.ReadTable(FileDb.TableName.TBL_SERVER);
                dgvServerList.InvokeIfRequired(async s =>
                {
                    try
                    {
                        List deleteServerNameList = new List();

                        s.Rows.Clear();
                        foreach (var a in fileDb.TBL_SERVER.Data)
                        {

                            var serverInstance = serverInstances.Find(x => x.serverName == a.Key.serverName);

                            if (serverInstance != null)
                            {
                                int n = s.Rows.Add();
                                s.Rows[n].Cells["CheckBox"].Value = false;
                                s.Rows[n].Cells["Name"].Value = a.Key.serverName;
                                s.Rows[n].Cells["ZoneNo"].Value = a.Value.zoneNo + "(" + serverInstance.zone.zoneCode + ")";
                                s.Rows[n].Cells["InstanceNo"].Value = a.Value.serverInstanceNo;
                                s.Rows[n].Cells["PublicIp"].Value = a.Value.serverPublicIp;
                                s.Rows[n].Cells["PrivateIp"].Value = a.Value.serverPrivateIp;
                                s.Rows[n].Cells["Status"].Value = serverInstance.serverInstanceStatus.code;
                                s.Rows[n].Cells["Operation"].Value = serverInstance.serverInstanceOperation.code;
                            }
                            else
                            {
                                deleteServerNameList.Add(a.Key.serverName);
                            }
                        }

                        foreach (var a in deleteServerNameList)
                        {
                            var p = new List();
                            p.Add(new KeyValuePair("serverName", a));
                            await fileDb.DeleteTable(FileDb.TableName.TBL_SERVER, p);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                });
            }
            catch (Exception)
            {
                throw; 
            }
            finally
            {
                ControlHelpers.ButtonStatusChange(buttonServerListReload, "Reload");
            }
        }

        private async Task GetServerInstanceList(List instanceNoList)
        {
            try
            {
                string endpoint = dataManager.GetValue(DataManager.Category.ApiGateway, DataManager.Key.Endpoint);
                string action = @"/server/v2/getServerInstanceList";
                List parameters = new List();
                parameters.Add(new KeyValuePair("responseFormatType", "json"));

                int i = 0; 
                foreach (var instanceNo in instanceNoList)
                {
                    i++;
                    string serverInstanceNoListKey = "serverInstanceNoList."+i;
                    string serverInstanceNoListValue = instanceNo;
                    parameters.Add(new KeyValuePair(serverInstanceNoListKey, serverInstanceNoListValue));
                }
                
                SoaCall soaCall = new SoaCall();
                var task = soaCall.WebApiCall(endpoint, RequestType.POST, action, parameters, LogClient.Config.Instance.GetValue(Category.Api, Key.AccessKey), LogClient.Config.Instance.GetValue(Category.Api, Key.SecretKey));
                string response = await task;

                JsonSerializerSettings options = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

                if (response.Contains("responseError"))
                {
                    hasError hasError = JsonConvert.DeserializeObject(response, options);
                    throw new Exception(hasError.responseError.returnMessage);
                }
                else
                {
                    getServerInstanceList getServerInstanceList = JsonConvert.DeserializeObject(response, options);
                    if (getServerInstanceList.getServerInstanceListResponse.returnCode.Equals("0"))
                    {
                        serverInstances.Clear();
                        foreach (var a in getServerInstanceList.getServerInstanceListResponse.serverInstanceList)
                        {
                            var item = new serverInstance
                            {
                                serverInstanceNo = a.serverInstanceNo,
                                serverName = a.serverName,
                                publicIp = a.publicIp,
                                privateIp = a.privateIp,
                                serverInstanceStatus = a.serverInstanceStatus,
                                serverInstanceOperation = a.serverInstanceOperation
                            };
                            serverInstances.Add(item);
                        }
                        if (getServerInstanceList.getServerInstanceListResponse.totalRows == 0)
                        {
                            MessageBox.Show("server not founds");
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }



        private async void LoadData(object sender, EventArgs e)
        {
            try
            {
                dataManager.LoadUserData();
                LoadTextData();
                List tasks = new List();
                tasks.Add(ServerListLoad());
                await Task.WhenAll(tasks);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            
 
        }

        private void LoadTextData()
        {
            try
            {
                textBoxStorageName.Text = dataManager.GetValue(DataManager.Category.SetDisk, DataManager.Key.Name).Trim();
                textBoxStorageSize.Text = dataManager.GetValue(DataManager.Category.SetDisk, DataManager.Key.Size).Trim();
                comboBoxType.Text = dataManager.GetValue(DataManager.Category.SetDisk, DataManager.Key.Type).Trim();
            }
            catch (Exception)
            {
                throw; 
            }
        }


        private async Task Execute(string psCmd, string serverIp, int timeoutSec)
        {
            StringBuilder resultMessageBackup = new StringBuilder();
            WcfResponse wcfResponse = new WcfResponse();
            try
            {

                var task = dataManager.Execute
                ("ExecuterPs"
                , "out-string"
                , psCmd
                , CsLib.RequestType.POST
                , $"https://{serverIp}:9090"
                , @"/LazyServer/LazyCommand/PostCmd"
                , LogClient.Config.Instance.GetValue(LogClient.Category.Api, LogClient.Key.AccessKey)
                , LogClient.Config.Instance.GetValue(LogClient.Category.Api, LogClient.Key.SecretKey)
                , timeoutSec
                );
                string response = await task;
                wcfResponse = JsonConvert.DeserializeObject(response);
            }
            catch (Exception)
            {
                throw; 
            }
            return wcfResponse;
        }

        private async void buttonServerListReload_Click(object sender, EventArgs e)
        {
            try
            {
                await ServerListLoad();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }


        private async void buttonGetBlockStorageInfo_Click(object sender, EventArgs e)
        {
            try
            {
                await GetBlockStorageInfoLoad(); 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private async Task GetBlockStorageInfoLoad()
        {
            try
            {
                ControlHelpers.ButtonStatusChange(buttonGetBlockStorageInfo, "Requested");
                int checkBoxCount = 0;

                foreach (DataGridViewRow item in dgvServerList.Rows)
                {
                    if (bool.Parse(item.Cells["CheckBox"].Value.ToString()))
                    {
                        checkBoxCount++;
                    }
                }
                if (checkBoxCount != 1)
                    throw new Exception("select one server");

                foreach (DataGridViewRow item in dgvServerList.Rows)
                {
                    if (bool.Parse(item.Cells["CheckBox"].Value.ToString()))
                    {
                        string obj = item.Cells["InstanceNo"].Value.ToString();
                        if (obj == null && obj.Length == 0)
                        {
                            throw new Exception("serverInstanceNo is null");
                        }
                        else
                        {
                            await GetBlockStorageInstanceList(item.Cells["InstanceNo"].Value.ToString());
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw; 
            }
            finally
            {
                ControlHelpers.ButtonStatusChange(buttonGetBlockStorageInfo, "Get BlockStorage Info");
            }

        }

        private async void buttonStorageDelete_Click(object sender, EventArgs e)
        {
            try
            {
                int checkBoxCount = 0;

                foreach (DataGridViewRow item in dgvStorageList.Rows)
                {
                    if (bool.Parse(item.Cells["CheckBox"].Value.ToString()))
                    {
                        checkBoxCount++;
                    }
                }
                if (checkBoxCount != 1)
                    throw new Exception("select one Storage");

                DialogResult result = MessageBox.Show("Do you really want to run?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (result != DialogResult.Yes)
                    return;

                ControlHelpers.ButtonStatusChange(buttonBlockStorageDelete, "Requested");

                foreach (DataGridViewRow item in dgvStorageList.Rows)
                {
                    if (bool.Parse(item.Cells["CheckBox"].Value.ToString()))
                    {
                        string obj = item.Cells["InstanceNo"].Value.ToString();
                        if (obj == null && obj.Length == 0)
                        {
                            throw new Exception("serverInstanceNo is null");
                        }
                        else
                        {
                            await DeleteBlockStorageInstances(item.Cells["InstanceNo"].Value.ToString());
                        }
                    }
                }
                var taskDelay = Task.Delay(1000);
                await taskDelay;
                await GetBlockStorageInfoLoad();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                ControlHelpers.ButtonStatusChange(buttonBlockStorageDelete, "Delete");
            }
        }

        private async Task DeleteBlockStorageInstances(string storageInstanceNo)
        {
            try
            {
                string endpoint = dataManager.GetValue(DataManager.Category.ApiGateway, DataManager.Key.Endpoint);
                string action = @"/server/v2/deleteBlockStorageInstances";
                List parameters = new List();
                parameters.Add(new KeyValuePair("responseFormatType", "json"));
                parameters.Add(new KeyValuePair("blockStorageInstanceNoList.1", storageInstanceNo));

                SoaCall soaCall = new SoaCall();
                var task = soaCall.WebApiCall(endpoint, RequestType.POST, action, parameters, LogClient.Config.Instance.GetValue(Category.Api, Key.AccessKey), LogClient.Config.Instance.GetValue(Category.Api, Key.SecretKey));
                string response = await task;

                JsonSerializerSettings options = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

                if (response.Contains("responseError"))
                {
                    hasError hasError = JsonConvert.DeserializeObject(response, options);
                    throw new Exception(hasError.responseError.returnMessage);
                }
                else
                {
                    deleteBlockStorageInstances deleteBlockStorageInstances = JsonConvert.DeserializeObject(response, options);
                    if (deleteBlockStorageInstances.deleteBlockStorageInstancesResponse.returnCode.Equals("0"))
                    {
                        if (deleteBlockStorageInstances.deleteBlockStorageInstancesResponse.totalRows == 0)
                        {
                            MessageBox.Show("storage not founds");
                        }
                        else
                        {

                            MessageBox.Show("deleted");
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

        private async void buttonStorageCreate_Click(object sender, EventArgs e)
        {
            try
            {
                int checkBoxCount = 0;
                string serverInstanceNo = string.Empty;

                foreach (DataGridViewRow item in dgvServerList.Rows)
                {
                    if (bool.Parse(item.Cells["CheckBox"].Value.ToString()))
                    {
                        checkBoxCount++;
                        serverInstanceNo = item.Cells["InstanceNo"].Value.ToString();
                    }
                }
                if (checkBoxCount != 1)
                    throw new Exception("select one server");

                DialogResult result = MessageBox.Show("Do you really want to run?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result != DialogResult.Yes)
                    return;

                ControlHelpers.ButtonStatusChange(buttonStorageCreate, "Requested");

                await GetBlockStorageInfoLoad();

                string endpoint = dataManager.GetValue(DataManager.Category.ApiGateway, DataManager.Key.Endpoint);
                string action = @"/server/v2/createBlockStorageInstance";
                List parameters = new List();
                parameters.Add(new KeyValuePair("responseFormatType", "json"));
                parameters.Add(new KeyValuePair("blockStorageName", textBoxStorageName.Text));
                parameters.Add(new KeyValuePair("blockStorageSize", textBoxStorageSize.Text));
                parameters.Add(new KeyValuePair("blockStorageDescription", textBoxDescription.Text));
                parameters.Add(new KeyValuePair("serverInstanceNo", serverInstanceNo));
                parameters.Add(new KeyValuePair("diskDetailTypeCode", comboBoxType.Text));
                
                SoaCall soaCall = new SoaCall();
                var task = soaCall.WebApiCall(endpoint, RequestType.POST, action, parameters, LogClient.Config.Instance.GetValue(Category.Api, Key.AccessKey), LogClient.Config.Instance.GetValue(Category.Api, Key.SecretKey));
                string response = await task;

                JsonSerializerSettings options = new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore,
                    MissingMemberHandling = MissingMemberHandling.Ignore
                };

                if (response.Contains("responseError"))
                {
                    hasError hasError = JsonConvert.DeserializeObject(response, options);
                    throw new Exception(hasError.responseError.returnMessage);
                }
                else
                {
                    createBlockStorageInstance createBlockStorageInstance = JsonConvert.DeserializeObject(response, options);
                    if (createBlockStorageInstance.createBlockStorageInstanceResponse.returnCode.Equals("0"))
                    {
                        if (createBlockStorageInstance.createBlockStorageInstanceResponse.totalRows == 0)
                        {
                            MessageBox.Show("server not founds");
                        }
                        else
                        {
                            MessageBox.Show("Successfully requested storage creation. Press Reload button and mount when Status and Operation status are ATTAC NULL.");
                        }
                    }
                }
                await GetBlockStorageInfoLoad();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                ControlHelpers.ButtonStatusChange(buttonStorageCreate, "Create");
            }
        }

        private async void buttonMountStorage_Click(object sender, EventArgs e)
        {
            try
            {
                int checkBoxCount = 0;
                string publicIp = string.Empty;

                foreach (DataGridViewRow item in dgvServerList.Rows)
                {
                    if (bool.Parse(item.Cells["CheckBox"].Value.ToString()))
                    {
                        checkBoxCount++;
                        publicIp = item.Cells["PublicIp"].Value.ToString();
                    }

                }
                if (checkBoxCount != 1)
                    throw new Exception("select one server");

                DialogResult result = MessageBox.Show("Do you really want to run?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result != DialogResult.Yes)
                    return;

                ControlHelpers.ButtonStatusChange(buttonMountStorage, "Requested");

                await GetBlockStorageInfoLoad();

                foreach (DataGridViewRow item in dgvStorageList.Rows)
                {
                    if (!item.Cells["Status"].Value.ToString().Equals("ATTAC"))
                        throw new Exception("check status and operation");
                    if (!item.Cells["Operation"].Value.ToString().Equals("NULL"))
                        throw new Exception("check status and operation");
                }

                var task = Execute(
                    dataManager.GetValue(DataManager.Category.SetDisk, DataManager.Key.PsParsationFormat)
                    , publicIp
                    , 30);

                WcfResponse wcfResponse = await task;
                if (wcfResponse.IsSuccess)
                    MessageBox.Show("disk mount completed");
                else
                    throw new Exception(wcfResponse.ErrorMessage);

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                ControlHelpers.ButtonStatusChange(buttonMountStorage, "Mount");
            }
        }

        private async void buttonServerGetDiskInfo_Click(object sender, EventArgs e)
        {
            try
            {
                int checkBoxCount = 0;
                string publicIp = string.Empty;

                foreach (DataGridViewRow item in dgvServerList.Rows)
                {
                    if (bool.Parse(item.Cells["CheckBox"].Value.ToString()))
                    {
                        checkBoxCount++;
                        publicIp = item.Cells["PublicIp"].Value.ToString();
                    }
                }
                if (checkBoxCount != 1)
                    throw new Exception("select one server");

                ControlHelpers.ButtonStatusChange(buttonServerGetDiskInfo, "Requested");

                var task = Execute(@"gdr -PSProvider 'FileSystem'"
                    , publicIp
                    , 30);

                WcfResponse wcfResponse = await task;
                if (wcfResponse.IsSuccess)
                    MessageBox.Show(wcfResponse.ResultMessage);
                else
                    throw new Exception(wcfResponse.ErrorMessage);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                ControlHelpers.ButtonStatusChange(buttonServerGetDiskInfo, "Server Get-Disk Info");
            }
        }

        private async void buttonStorageReload_Click(object sender, EventArgs e)
        {
            try
            {
                ControlHelpers.ButtonStatusChange(buttonStorageReload, "Requested");
                await GetBlockStorageInfoLoad();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                ControlHelpers.ButtonStatusChange(buttonStorageReload, "Reload");
            }
        }
    }
}