예제 #1
0
        public async void CreateRaidAsync(List <PhysicalDisk> disks, Enclousure enclousure, string level, string name, long capacity, long optimal)
        {
            try
            {
                var      idrac = new StorageController(server);
                IdracJob job   = await idrac.CreateVirtualDiskAsync(disks, enclousure, level, capacity, optimal, name);

                var load = new LoadWindow(server, job)
                {
                    Title = server.Host
                };
                load.Closed += (object sender, EventArgs e) =>
                {
                    var window = (LoadWindow)sender;
                    job = window.Job;
                    if (job.JobState.Contains("Completed"))
                    {
                        MessageBox.Show("Raid criado com sucesso !", "Sucesso", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                };
                load.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Falha ao criar o Job {0}", ex.Message), "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
예제 #2
0
        private async Task ImportScpAsync(string path, string target, string shutdown)
        {
            foreach (Server server in ServersListBox.Items)
            {
                if (!await NetworkHelper.CheckConnectionAsync(server.Host))
                {
                    OutputTextBox.AppendText(string.Format("Servidor {0} inacessivel, verifique a conexão e tente novamente.\n", server.Host));
                    continue;
                }
                try
                {
                    OutputTextBox.AppendText(string.Format("Importando configurações para {0}...\n", server.Host));
                    ScpController idrac = new ScpController(server);
                    IdracJob      job   = await idrac.ImportScpFileAsync(path, target, shutdown, "On");

                    OutputTextBox.AppendText(string.Format("Job {0} criado para servidor {1}\n", job.Id, server));
                    var chassisIdrac = new ChassisController(server);
                    var chassis      = await chassisIdrac.GetChassisAsync();

                    currentJobs.TryAdd(job.Id, new ServerJob()
                    {
                        Job = job, SerialNumber = chassis.SKU, Server = server
                    });
                }
                catch (Exception ex)
                {
                    OutputTextBox.AppendText(string.Format("Falha ao importar arquivo para {0} {1}\n", server.Host, ex.Message));
                }
            }
            ImportButton.IsEnabled = true;
        }
예제 #3
0
        private async Task DeleteVdAsync(VirtualDisk volume)
        {
            try
            {
                var      idrac = new StorageController(server);
                IdracJob job   = await idrac.DeleteVirtualDiskAsync(volume);

                var load = new LoadWindow(server, job)
                {
                    Title = server.Host
                };
                load.Closed += (object sender, EventArgs e) =>
                {
                    var window = (LoadWindow)sender;
                    job = window.Job;
                    if (job.JobState.Contains("Completed"))
                    {
                        MessageBox.Show("Volume excluido com sucesso !", "Sucesso", MessageBoxButton.OK, MessageBoxImage.Information);
                    }
                };
                load.Show();
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Falha ao criar o Job {0}", ex.Message), "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            UpdateForm();
        }
예제 #4
0
        private async Task ExportScpFileAsync(Server server, string target, string exportUse)
        {
            if (!await NetworkHelper.CheckConnectionAsync(server.Host))
            {
                MessageBox.Show("Servidor inacessivel", "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            try
            {
                ScpController idrac = new ScpController(server);
                ExportButton.IsEnabled = false;
                OutputTextBox.AppendText(string.Format("Exportando configurações de {0}...\n", server.Host));
                IdracJob job = await idrac.ExportScpFileAsync(target, exportUse);

                var load = new LoadWindow(server, job)
                {
                    Title = server.Host
                };
                load.Closed += async(object sender, EventArgs e) =>
                {
                    var window = (LoadWindow)sender;
                    job = window.Job;
                    if (job.JobState.Contains("Completed"))
                    {
                        await SaveFileAsync(server, job);
                    }
                };
                load.Show();
            }
            catch (Exception ex)
            {
                OutputTextBox.AppendText(string.Format("Falha ao exportar arquivo: {0}\n", ex.Message));
                ExportButton.IsEnabled = true;
            }
        }
예제 #5
0
 private async Task CollectAsync(Server server, string type)
 {
     try
     {
         OutputTextBox.AppendText(string.Format("Coletando Logs de {0}...\n", server.Host));
         string             collectCommand = string.Format("racadm techsupreport collect -t {0}", type);
         IdracSshController idrac          = new IdracSshController(server);
         string             result         = idrac.RunCommand(collectCommand);
         string             jobLine        = result.Split('\n').FirstOrDefault();
         string             jobId          = jobLine.Split('=')[1].Trim();
         IdracJob           job            = await new JobController(server).GetJobAsync(jobId);
         var load = new LoadWindow(server, job)
         {
             Title = server.Host
         };
         load.Closed += (object sender, EventArgs e) =>
         {
             var window = (LoadWindow)sender;
             job = window.Job;
             if (job.JobState.Contains("Completed"))
             {
                 ExportTsr(server);
             }
         };
         load.Show();
     }
     catch (Exception ex)
     {
         OutputTextBox.AppendText(string.Format("Falha ao coletar TSR de {0}, {1}\n", server.Host, ex.Message));
     }
 }
예제 #6
0
        private async Task UpdateFirmwareAsync(string repository, string catalog, string reboot)
        {
            foreach (Server server in ServersListBox.Items)
            {
                if (!await NetworkHelper.CheckConnectionAsync(server.Host))
                {
                    OutputTextBox.AppendText(string.Format("Servidor {0} ínacessivel.\n", server));
                    continue;
                }
                try
                {
                    OutputTextBox.AppendText(string.Format("Atualizando firmwares de {0}...\n", server));
                    string jobId    = "";
                    var    idrac    = new IdracSshController(server);
                    string command  = string.Format(@"racadm update -f {0} -e {1} -a {2} -t FTP", catalog, repository, reboot);
                    string response = idrac.RunCommand(command);
                    foreach (var item in response.Split(' '))
                    {
                        if (item.Contains("JID"))
                        {
                            jobId = item.Split('"').FirstOrDefault();
                            break;
                        }
                    }
                    if (String.IsNullOrEmpty(jobId)) // Caso Haja problema na criação do Job ele retorna ""
                    {
                        continue;
                    }

                    var      idracJob     = new JobController(server);
                    var      idracChassis = new ChassisController(server);
                    IdracJob job          = await idracJob.GetJobAsync(jobId);

                    Chassis chassis = await idracChassis.GetChassisAsync();

                    currentJobs.TryAdd(job.Id, new ServerJob()
                    {
                        Server = server, Job = job, SerialNumber = chassis.SKU
                    });
                    OutputTextBox.AppendText(string.Format("Criado {0} para atualizaçao do servidor {1}\n", jobId, server));
                }
                catch (Exception ex)
                {
                    OutputTextBox.AppendText(string.Format("Falha ao atualizar {0} {1}\n", server, ex.Message));
                }
            }
            UpdateButton.IsEnabled = true;
        }
예제 #7
0
        private async Task SaveFileAsync(Server server, IdracJob job)
        {
            try
            {
                var    idrac = new ScpController(server);
                string file  = await idrac.GetScpFileDataAsync(job.Id);

                string currentTime     = DateTime.Now.ToString().Replace(":", "").Replace("/", "").Replace(" ", "");
                string downloadsFolder = KnownFolders.Downloads.Path;
                string path            = System.IO.Path.Combine(downloadsFolder, "SCP_" + currentTime + ".xml");
                File.WriteAllText(path, file);
                OutputTextBox.AppendText(string.Format("Arquivo exportado com sucesso, salvo em {0}\n", path));
            }
            catch (Exception ex)
            {
                OutputTextBox.AppendText(string.Format("Falha ao salvar arquivo {0}\n", ex.Message));
            }
            finally
            {
                ExportButton.IsEnabled = true;
            }
        }
예제 #8
0
        private async Task UpdateFirmwareAsync(string path, string option)
        {
            foreach (Server server in ServersListBox.Items)
            {
                if (!await NetworkHelper.CheckConnectionAsync(server.Host))
                {
                    OutputTextBox.AppendText(string.Format("O servidor {0} não está acessivel, verifique a conexão e tente novamente\n", server.Host));
                    continue;
                }
                try
                {
                    UpdateController idrac = new UpdateController(server);

                    if (!await idrac.CheckRedfishSupportAsync(UpdateController.FirmwareInventory))
                    {
                        OutputTextBox.AppendText(string.Format("A versão da Idrac do {0} servidor não possui suporte a função de update de firmware\n", server.Host));
                        continue;
                    }
                    OutputTextBox.AppendText(string.Format("Iniciando upload do firmware para {0}...\n", server.Host));
                    ChassisController chassisIdrac = new ChassisController(server);
                    IdracJob          job          = await idrac.UpdateFirmwareAsync(path, option);

                    Chassis chassis = await chassisIdrac.GetChassisAsync();

                    currentJobs.TryAdd(job.Id, new ServerJob()
                    {
                        Job = job, Server = server, SerialNumber = chassis.SKU
                    });
                    OutputTextBox.AppendText(string.Format("Upload concluido, criado Job {0} para update\n", job.Id));
                }
                catch (Exception ex)
                {
                    OutputTextBox.AppendText(string.Format("Erro ao atualizar {0} {1}\n", server.Host, ex.Message));
                }
            }
            UpdateButton.IsEnabled = true;
        }
예제 #9
0
        private async void LoopJobAsync()
        {
            var idrac = new JobController(server);
            var time  = DateTime.Now;

            while (true)
            {
                try
                {
                    job = await idrac.GetJobAsync(job.Id);

                    UpdateProgressBar(job);

                    if (job.JobState.Contains("Completed"))
                    {
                        break;
                    }

                    else if (job.JobState.Contains("Failed"))
                    {
                        throw new Exception(string.Format("Falha ao executar o Job: {0}", job.Message));
                    }

                    else if (DateTime.Now >= time.AddMinutes(JobController.JobTimeout))
                    {
                        throw new TimeoutException("Excedido tempo limite do Job");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Erro", MessageBoxButton.OK, MessageBoxImage.Error);
                    Close();
                }
            }
            Close();
        }
예제 #10
0
 private void UpdateProgressBar(IdracJob job)
 {
     TaskProgressBar.Value = job.PercentComplete;
     StatusTextBlock.Text  = string.Format("Status {0}%: {1}", job.PercentComplete.ToString(), job.Message);
 }
예제 #11
0
 public LoadWindow(Server server, IdracJob job)
 {
     this.server = server;
     this.job    = job;
     InitializeComponent();
 }