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); } }
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; }
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(); }
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; } }
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)); } }
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; }
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; } }
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; }
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(); }
private void UpdateProgressBar(IdracJob job) { TaskProgressBar.Value = job.PercentComplete; StatusTextBlock.Text = string.Format("Status {0}%: {1}", job.PercentComplete.ToString(), job.Message); }
public LoadWindow(Server server, IdracJob job) { this.server = server; this.job = job; InitializeComponent(); }