public ActionResult Adicionar(int id) { DataPool dataPool = db.DataPool.Find(id); List <ChaveVO> lista = new List <ChaveVO>(); lista.Add(new ChaveVO("Não", 0)); lista.Add(new ChaveVO("Sim", 1)); ViewBag.listStatus = db.Status.ToList(); ViewBag.listaChaveVO = lista; Script_CondicaoScript Script_CondicaoScript = db.Script_CondicaoScript.FirstOrDefault(x => x.Id == dataPool.IdScript_CondicaoScript); ViewBag.listScript = db.Script.Where(s => s.Id == Script_CondicaoScript.IdScript).ToList(); ViewBag.listCondicaoScript = db.CondicaoScript.Where(s => s.Id == Script_CondicaoScript.IdCondicaoScript).ToList(); List <ChaveVO> listaClassificacaoMassa = new List <ChaveVO>(); listaClassificacaoMassa.Add(new ChaveVO("CT", 0)); listaClassificacaoMassa.Add(new ChaveVO("Backup", 1)); ViewBag.ListaClassificacao = listaClassificacaoMassa; return(View(dataPool)); }
public ActionResult Editar(int id) { List <ChaveVO> lista = new List <ChaveVO>(); lista.Add(new ChaveVO("Não", 0)); lista.Add(new ChaveVO("Sim", 1)); ViewBag.listaChaveVO = lista; TestData testData = db.TestData.FirstOrDefault(a => a.Id == id); Script_CondicaoScript Script_CondicaoScript = db.Script_CondicaoScript.FirstOrDefault(x => x.Id == testData.IdScript_CondicaoScript); ViewBag.listScript = db.Script.Where(s => s.Id == Script_CondicaoScript.IdScript).ToList(); ViewBag.listCondicaoScript = db.CondicaoScript.Where(s => s.Id == Script_CondicaoScript.IdCondicaoScript).ToList(); //ViewBag.listScript = db.Script.Where(s => s.IdAUT == testData.DataPool.AUT.Id).ToList(); //carregaCondicaoScript(testData.Script_CondicaoScript.IdScript+""); ViewBag.listStatus = carregaListaStatus(testData.Status.Id); List <ChaveVO> listaClassificacaoMassa = new List <ChaveVO>(); listaClassificacaoMassa.Add(new ChaveVO("CT", 0)); listaClassificacaoMassa.Add(new ChaveVO("Backup", 1)); ViewBag.ListaClassificacao = listaClassificacaoMassa; return(View(testData)); }
private void ReplaceQuery(List <Encadeamento_TestData> EncadeamentoTdList, int idFaseTeste, int idMaquinaVirtual, bool EnvioTelegram) { Entities db = new Entities(); // validar ambiente disponível e setar a flag em uso antes de inserir a query string testdataList = ""; foreach (var Encadeamento_TestData in EncadeamentoTdList) { //recuperando objeto testdata, para ter recuperar o IdScript_CondicaoScript TestData testData = db.TestData.FirstOrDefault(x => x.Id == Encadeamento_TestData.IdTestData); Script_CondicaoScript script_CondicaoScript = db.Script_CondicaoScript.Where(x => x.Id == testData.IdScript_CondicaoScript).FirstOrDefault(); string query = script_CondicaoScript.QueryTosca; String queryTemp = query.Replace("ptdTosca", Encadeamento_TestData.IdTestData.ToString()); Usuario user = GetLoggedUser(); Execucao exec = new Execucao(); Script_CondicaoScript_Ambiente script_CondicaoScript_Ambiente = db.Script_CondicaoScript_Ambiente .Where(x => x.IdScript_CondicaoScript == testData.IdScript_CondicaoScript) .Where(x => x.IdAmbienteVirtual == idMaquinaVirtual) .Where(x => x.IdAmbienteExecucao == Encadeamento_TestData.IdAmbienteExecucao).FirstOrDefault(); exec.IdScript_CondicaoScript_Ambiente = script_CondicaoScript_Ambiente.Id; exec.IdTipoFaseTeste = idFaseTeste; // pegar via campo popup modal play exec.IdStatusExecucao = (int)Enumerators.EnumStatusExecucao.AguardandoProcessamento; exec.Usuario = user.Id.ToString(); exec.IdTestData = Encadeamento_TestData.IdTestData; // pegar o id via tela exec.SituacaoAmbiente = (int)Enumerators.EnumSituacaoAmbiente.EmUso; exec.ToscaInput = queryTemp; exec.EnvioTelegram = false; db.Execucao.Add(exec); Entities db1 = new Entities(); TestData td1 = db1.TestData.Where(x => x.Id == Encadeamento_TestData.IdTestData).FirstOrDefault(); td1.IdStatus = (int)Enumerators.EnumStatusTestData.EmGeracao; td1.GeradoPor = Util.GetUsuarioLogado().Login; db1.TestData.Attach(td1); db1.Entry(td1).State = System.Data.Entity.EntityState.Modified; try { db.SaveChanges(); db1.SaveChanges(); } catch (Exception ex) { this.FlashError(ex.Message); } } }
public static void CriarPlanilhaExecucao(TestData td) { try { using (var excelPackage = new ExcelPackage()) { DbEntities db = new DbEntities(); Log.Info("Entrada do método de criar planilha pra execução."); excelPackage.Workbook.Properties.Author = "AUTOMAÇÃO"; excelPackage.Workbook.Properties.Title = "Planilha de Massa - ATMP"; // Aqui simplesmente adiciono a planilha inicial var sheet = excelPackage.Workbook.Worksheets.Add(@ConfigurationSettings.AppSettings["SheetName"]); sheet.Name = @ConfigurationSettings.AppSettings["SheetName"]; Log.Info("Aba da planilha criada com sucesso."); // Títulos List <ParametroValorVO> Parametros = (from p in db.Parametro join ps in db.ParametroScript on p.Id equals ps.IdParametro join pv in db.ParametroValor on ps.Id equals pv.IdParametroScript where pv.IdTestData == td.Id && ps.IdTipoParametro == (int)EnumTipoParametro.Input select new ParametroValorVO { DescricaoParametro = p.Descricao, Valor = pv.Valor } ).ToList(); Log.Info("Lista de Parametros carregada com sucesso. Foram carregados: " + Parametros.Count + " parametros para esse TestData"); Script_CondicaoScript scs = db.Script_CondicaoScript.Where(x => x.Id == td.IdScript_CondicaoScript).FirstOrDefault(); Log.Info("Script_CondicaoScript carregada"); for (int i = 1; i + 1 <= Parametros.Count; i++) { sheet.Cells[1, i].Value = Parametros[i - 1].DescricaoParametro; sheet.Cells[1, i].Worksheet.Cells["A1:Z1"].Style.Font.Bold = true; sheet.Cells[2, i].Value = Parametros[i - 1].Valor; } Log.Info("Fim da criação dos títulos das colunas"); string path = @ConfigurationSettings.AppSettings["ToscaInputData"]; string nomeTecnicoScript = "\\" + scs.NomeTecnicoScript + ".xls"; path += nomeTecnicoScript; File.WriteAllBytes(path, excelPackage.GetAsByteArray()); Log.Info("Arquivo criado com sucesso no caminho: " + path); } Log.Info("O arquivo Excel foi criado com sucesso."); } catch (Exception ex) { Log.Error("Erro ao criar Planilha de execução. Erro: " + ex.Message); } }
private static void VerificaStatusTosca(Script_CondicaoScript scs, Execucao exec) { Log.Info("Execução:"); Log.DebugObject(exec); Log.Info("Script_CondicaoScript:"); Log.DebugObject(scs); Log.Info("Entrada no método VerificaStatusTosca."); DateTime InicioExecucao = exec.InicioExecucao ?? DateTime.Now; //DateTime TempoEstimadoExecucao = scs.TempoEstimadoExecucao ?? DateTime.Now; DateTime TempoEstimadoExecucao = scs.TempoEstimadoExecucao; int TempoEstimadoExec = Int32.Parse(String.Format("{0:mm}", TempoEstimadoExecucao)); Log.Debug("Data Inicio da execução: " + InicioExecucao); Log.Debug("Tempo Estimado em Minutos: " + TempoEstimadoExec); DateTime TerminoEstimado = InicioExecucao.AddMinutes(TempoEstimadoExec); Log.Debug("Termino Estimado: " + TerminoEstimado); string dir = ConfigurationSettings.AppSettings["DirReport"]; Log.Info("Condição do Loop: while (!File.Exists(dir) || TerminoEstimado >= DateTime.Now)"); Log.Debug("Execução iniciada em " + InicioExecucao); Log.Info("Aguardando o Tosca Terminar a execução..."); while (!File.Exists(dir) && TerminoEstimado >= DateTime.Now) { Thread.Sleep(8000); } Log.Info("Saída do Loop de Execução."); Log.Info("Verifica se o arquivo do Tosca foi criado."); if (!File.Exists(dir)) { Log.Warn("Entrada na condição. Foi verificado que o arquivo de report do Tosca não foi gerado."); Log.Warn("Encerrando execução do Tosca."); // KillTricentisAutomationAgent(); Log.Warn("Aguardando a finalização da execução do Tosca..."); Thread.Sleep(7000); Log.Info("Execução do Tosca finalizada com sucesso."); Log.Info("Criando arquivo de report da execução com erro."); string report; try { foreach (string f in Directory.EnumerateFiles(ConfigurationSettings.AppSettings["Tosca_Evidences"], "*_" + exec.IdTestData + "_*")) { report = "\"executionFolder\",\"" + Path.GetFullPath(f) + "\"" + Environment.NewLine; } } catch (Exception e) { Log.Warn("A pasta da execução não foi gerada pelo Tosca Commander, favor verificar o problema!"); } File.Create(dir).Close(); Log.Info("Arquivo criado com sucesso: " + dir); report = "\"ID_TEST_DATA\",\"" + exec.IdTestData + "\",\"Failed\"" + Environment.NewLine; report += "A Execução foi abortada pois o Tosca não respondeu."; Log.Info("Texto do Relatório: " + report); File.WriteAllText(dir, report); Log.Info("Arquivo criado com sucesso."); } else { Log.Info("O arquivo de report foi gerado pelo ToscaCommamder com sucesso."); } }
static void Main(string[] args) { DbEntities DbEntities = new DbEntities(); try { #region Debug Log.Info("Iniciando processamento do Build 1."); Log.Info("Carregando Query do Tosca"); #endregion DbEntities db = new DbEntities(); #region Debug Log.Info("Carregamento do DbEntities realizado com sucesso!"); #endregion Ip = GetIpLocal(); #if DEBUG Ip = "10.43.6.141"; #endif #region Debug Log.Info("IP recuperado com sucesso."); Log.Debug("Inciando processo do Build 1 na VDI " + Ip + "."); #endregion #region Debug Log.Info("Instanciando objetos de EncadeamentoVOs e ExecucaoVOs..."); #endregion List <EncadeamentoVO> EncadeamentoVOs = new List <EncadeamentoVO>(); List <ExecucaoVO> ExecucaoVOs = new List <ExecucaoVO>(); #region Debug Log.Debug("Objetos Instanciados com sucesso..."); Log.Debug("Iniciando criação dos paramEncad..."); #endregion SqlParameter[] paramEncad = { new SqlParameter("@IpVdi", Ip), }; #region Debug Log.Debug("Objetos Instanciados com sucesso..."); Log.Debug("Preparando para "); #endregion //Executa a PROC que retorna os encadeamentos EncadeamentoVOs = db.Database.SqlQuery <EncadeamentoVO>("EXEC PR_LISTAR_ENCADEAMENTO @IpVdi ", paramEncad).ToList(); Encadeamento Encadeamento = null; bool ExecucaoEncadeada = false; //Percorrendo os encademanentos foreach (EncadeamentoVO EncadeamentoVO in EncadeamentoVOs) { try { //Definindo parâmetros para passar na PROC de execução SqlParameter[] paramExec = { new SqlParameter("@IpVdi", Ip), new SqlParameter("@IdEncadeamento", EncadeamentoVO.IdEncadeamento), }; ExecucaoEncadeada = EncadeamentoVO.IdEncadeamento != null; //Verifica se existe encadeamento if (!ExecucaoEncadeada) { paramExec[1].Value = DBNull.Value; } #region Debug Log.Info("Iniciando o carregamento dos registros da tabela de execuções..."); #endregion //Executa a PROC que retorna as Execuções ExecucaoVOs = db.Database.SqlQuery <ExecucaoVO>("EXEC PR_LISTAR_EXECUCAO @IpVdi, @IdEncadeamento ", paramExec).ToList(); #region Debug Log.Info("Carregamento realizado com sucesso!"); Log.Debug("Foram recuperadas " + ExecucaoVOs.Count + " registros de Execuções."); Log.Info("Entrando na Iteração das execuções!"); Log.Info("Verificando opção de Envio Telegram."); #endregion #region Verifica Envio Telegram //Verifica opção de Envio de Telegram EnvioTelegram = ExecucaoVOs.FirstOrDefault().EnvioTelegram; string opcao; if (EnvioTelegram) { opcao = "Enviar Notificação no Telegram."; } else { opcao = "Não Enviar Notificação no Telegram."; } #endregion #region Debug Log.Info("Para esse bloco de execuções foi escolhida a opção de " + opcao + "!"); #endregion if (ExecucaoEncadeada) { Encadeamento = new Encadeamento(); } foreach (ExecucaoVO item in ExecucaoVOs) { #region Debug Log.Info("######################################## INICIANDO EXECUCAO DO TESTDATA " + item.IdTestData + " ###################################"); Log.Debug("Dados da Execução - ID Execução: " + item.Id); Log.Debug("Dados da Execução - Nome da query do Tosca:" + item.NomeQueryTosca); Log.Debug("Dados da Execução - Ambiente Virtual:" + item.AmbienteVirtual); Log.Debug("Dados da Execução - Envio Telegram:" + item.EnvioTelegram); if (item.Encadeado) { Log.Info("Dados da Execução - O TestData faz parte de uma execução encadeada."); } Log.DebugObject(item); #endregion //verifica se execução foi cancelada int idStatusExecucao = db.Execucao.Find(item.Id).IdStatusExecucao; if (idStatusExecucao == (int)EnumStatusExecucao.Cancelada) { int? Idusuario = db.TestData.Find(item.Id).IdUsuario; Usuario usuario = db.Usuario.Find(Idusuario); Log.Info("A execução de ID: " + item.Id + " foi cancelada pelo usuário '" + usuario.Login + "'"); break; } #region Define início execução Execucao exec = db.Execucao.FirstOrDefault(x => x.Id == item.Id); exec.InicioExecucao = DateTime.Now; db.Execucao.Attach(exec); db.Entry(exec).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); #endregion #region Debug Log.Info("Atualizando TestData com o ID da execução corrente."); #endregion TestData td = db.TestData.FirstOrDefault(x => x.Id == item.IdTestData); #region Debug Log.DebugObject(td); #endregion td.IdExecucao = item.Id; db.TestData.Attach(td); db.Entry(td).State = System.Data.Entity.EntityState.Modified; //db.SaveChanges(); int IdScriptCondicaoScript = td.IdScript_CondicaoScript; //Verifica se existem dados de saída de outras execuções if (ExecucaoEncadeada) { Encadeamento.CarregarParametosEntrada(td.Id, IdScriptCondicaoScript); } #region Debug Log.Info("Id de execução inserido com sucesso na tabela de TestData."); Log.DebugObject(td); #endregion if (IdDataPool == null) { IdDataPool = td.IdDataPool; } if (AmbienteVirtual == "") { AmbienteVirtual = item.AmbienteVirtual; } #region Debug Log.Info("Carregando Query do Tosca..."); Log.Info("Criando Arquivo de Query do Tosca..."); #endregion #region Execução aplicativo TOSCA if (item != null) { CriaArquivoQUERY(item.NomeQueryTosca, item.QueryTosca); #region Debug Log.Info("Query encontrada no banco de dados com sucesso!"); #endregion } else { Log.Info("Query não encontrada no banco de dados"); Console.ReadLine(); } if (td != null) { Log.Info("TestData localizado."); ExcluirPlanilha(td); CriarPlanilhaExecucao(td); } else { Log.Info("TestData não localizado."); Console.ReadLine(); } Execucao ex_tmp = db.Execucao.Where(x => x.Id == item.Id).FirstOrDefault(); TipoFaseTeste tp_fase_teste = db.TipoFaseTeste.Where(x => x.Id == ex_tmp.IdTipoFaseTeste).FirstOrDefault(); Log.Info("Fase de teste selecionada:" + tp_fase_teste.Descricao); string listaExecucaoTosca = item.ListaExecucaoTosca.Replace("AMBIENTE", tp_fase_teste.Descricao); //criação do script tcs que será usado pelo tcshell do tosca Log.Info("Criando Arquivo TCS do Tcshell"); string tcs = ConfigurationSettings.AppSettings["ArquivoTCS"]; tcs = tcs.Replace("@QuebraLinha ", Environment.NewLine); tcs = tcs.Replace("@LimpaLog", "\"Clear Log\""); tcs = tcs.Replace("@ListaExecucaoTosca", "\"" + listaExecucaoTosca + "\"" + " task \"Checkout tree\" "); //tcs = tcs.Replace("@ListaExecucaoTosca", "\"" + item.ListaExecucaoTosca + "\""); //tcs = tcs.Replace("@ListaExecucaoTosca", "\"" + "/Execution/ExecutionLists/DEV/SIEBEL_63/TI/CONTATO_E_CONTA_PF_SEM_ENVIO_CDI" + "\"" + " task \"Checkout tree\" "); tcs = tcs.Replace("@NomeRelatorio", "\"Print Report ... TDMREPORT\""); tcs = tcs.Replace("@DiretorioRelatorio", "\"" + item.DiretorioRelatorio + "\" checkinall"); //tcs = tcs.Replace("@DiretorioRelatorio", "\"" + item.DiretorioRelatorio + "\""); CriaArquivoTCS(tcs, item.CaminhoArquivoTCS); #region Debug Log.Debug("tcs = " + tcs); //Executando o Kill do Agente do Tosca Log.Info("Executando o Kill do Agente do Tosca..."); #endregion KillTricentisAutomationAgent(); List <string> strcmdtext = new List <string>(); strcmdtext.Add(@"tcshell -workspace"); //strcmdtext.Add(@" ""C:\Tosca_Projects\Tosca_Workspaces\Workspace_TRG_Fev\portal_remote\portal_remote.tws"" "); strcmdtext.Add(@ConfigurationSettings.AppSettings["ToscaWorkspace"]); Log.Debug("Workspace escolhido = " + @ConfigurationSettings.AppSettings["ToscaWorkspace"]); strcmdtext.Add(" -login \"credencial_atmp\" \"@utomaoi\""); strcmdtext.Add(" -executionmode"); strcmdtext.Add(@" """ + item.CaminhoArquivoTCS + "\" "); Log.Info("Criando Comando para executar o Tcshell"); var comando = string.Join(string.Empty, strcmdtext.ToArray()); Log.Debug("Comando = " + comando); Process cmd = new Process(); cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.UseShellExecute = false; cmd.StartInfo.RedirectStandardError = true; cmd.Start(); cmd.StandardInput.WriteLine(@"cd\"); //cmd.StandardInput.WriteLine(@"cd C:\Tosca_Projects\Tosca_Workspaces\Workspace_TRG_Fev\portal_remote\remote_exec"); cmd.StandardInput.WriteLine(@"cd " + ConfigurationSettings.AppSettings["RemoteExecReport"]); #region Debug Log.Debug("Dir Remote Execution Report: " + ConfigurationSettings.AppSettings["RemoteExecReport"]); Log.Info("Executando o Tcshell"); #endregion cmd.StandardInput.WriteLine(comando); cmd.StandardInput.Flush(); cmd.StandardInput.Close(); Log.Info("Atualizando status da Execução..."); exec = null; exec = db.Execucao.Where(x => x.Id == item.Id).FirstOrDefault(); //Log.DebugObject(exec); exec.IdStatusExecucao = (int)EnumStatusExecucao.EmProcessamento; db.Execucao.Attach(exec); db.Entry(exec).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); #region Debug Log.Info("Atualizando status da Execução..."); Log.DebugObject(exec); #endregion #region Debug Log.Info("Recuperando ScriptCondicao_Script do TestData atual."); #endregion Script_CondicaoScript scs = db.Script_CondicaoScript.FirstOrDefault(x => x.Id == td.IdScript_CondicaoScript); #region Debug Log.Info("ScriptCondicao_Script do TestData atual recuperado com sucesso."); Log.DebugObject(scs); Log.Info("Aguardando o Tosca Terminar a execução do script."); #endregion VerificaStatusTosca(scs, exec); Log.Info(cmd.StandardOutput.ReadToEnd()); string output = cmd.StandardOutput.ReadToEnd().ToString(); Console.WriteLine("output: " + output); string outputerro = cmd.StandardError.ReadToEnd().ToString(); Console.WriteLine("erro: " + outputerro); #if DEBUG Tosca tosca = new Tosca(); tosca.processa(IdScriptCondicaoScript, td.Id); #endif //Verifica se existem dados de saída do script e os carregam no Dictionary de parametros if (ExecucaoEncadeada) { Encadeamento.CarregarParametrosSaida(td.Id, IdScriptCondicaoScript); } //Chamada do pos build 2 string UrlBuild2 = GetUrlAmbiente(item.AmbienteVirtual); Log.Debug("Iniciando chamada do Pós Build 2 na url: " + UrlBuild2); if (UrlBuild2 != null) { runJobJenkinsRemote(UrlBuild2); } //runJobJenkinsLocal(UrlBuild2, "brucilin.de.gouveia", "brucilin.de.gouveia"); else { throw new Exception("Não foi possível encontrar o ambiente virtual para realizar a chamada do PosBuild2."); } #endregion Execucao execucao = db.Execucao.Where(x => x.Id == item.Id).FirstOrDefault(); #region Debug Log.DebugObject(execucao); #endregion //Aguardando o status da execução atual ser atualizado pelo pós build 2 while (execucao.IdStatusExecucao == (int)EnumStatusExecucao.EmProcessamento || execucao.IdStatusExecucao == (int)EnumStatusExecucao.ProcessandoLogTosca) { Thread.Sleep(4000); #region Debug Log.Info("Aguardando execução do Pós build 2 para atualização da execução de ID " + exec.Id); #endregion db = new DbEntities(); execucao = db.Execucao.Where(x => x.Id == item.Id).FirstOrDefault(); } #region Debug Log.DebugObject(execucao); Log.Info("Execução de Id " + exec.Id + " concluida com sucesso!"); #endregion db = new DbEntities(); TestData TestData = db.TestData.FirstOrDefault(x => x.Id == item.IdTestData); #region Salva Output do TestData no Agendamento if (TestData.Execucao.IdAgendamento != null) { Agendamento ag = db.Agendamento.FirstOrDefault(x => x.Id == TestData.Execucao.IdAgendamento); ag.Output += Log.GetMyLog().ToString(); db.Agendamento.Attach(ag); //Prepara a entidade para uma Edição db.Entry(ag).State = System.Data.Entity.EntityState.Modified; // informa que o obejto será modificado db.SaveChanges(); } #endregion #region Debug Log.DebugObject(TestData); #endregion TestDataGeneratedSolicited.Add(TestData); #region Debug Log.DebugObject(TestDataGeneratedSolicited); #endregion switch (TestData.IdStatus) { case (int)EnumStatusTestData.Falha: TestDataGeneratedFailed.Add(TestData); #region Debug Log.DebugObject(TestDataGeneratedFailed); #endregion //Verifica se a execução faz parte de um encadeamento if (ExecucaoEncadeada) { Encadeamento.InterromperEncadeamento(TestData); } break; case (int)EnumStatusTestData.Disponivel: TestDataGeneratedSuccessfully.Add(TestData); Log.DebugObject(TestDataGeneratedSuccessfully); break; } #region Debug Log.Debug("Processando dados da execução..."); Log.Debug("Dados da Execução - ID Execução: " + item.Id); Log.Debug("Dados da Execução - Nome da query do Tosca:" + item.NomeQueryTosca); Log.Debug("Dados da Execução - Ambiente Virtual:" + item.AmbienteVirtual); Log.Debug("Dados da Execução - Envio Telegram:" + item.EnvioTelegram); Log.Info("######################################## FINALIZANDO EXECUCAO DO TESTDATA " + item.IdTestData + " ##################################"); Log.Info(Environment.NewLine); Log.Info(Environment.NewLine); #endregion } } catch (EncadeamentoException ex) { LiberarExecucoesEmProcessamento(ex, EncadeamentoVO.IdEncadeamento); LiberarExecucoesAguardandoProcessamento(); } } Message = GetExecutionSuccessMessage(IdDataPool, AmbienteVirtual); } catch (Exception ex) { LiberarExecucoesEmProcessamento(ex); } finally { LiberarExecucoesAguardandoProcessamento(); } }
private static void ReplaceQuery(List <int> ids, int idFaseTeste, int idMaquinaVirtual, int idAmbienteExecucao, Usuario user, bool EnvioTelegram) { #region Entities DbEntities db = new DbEntities(); #endregion TestData testData = db.TestData.Find(ids.First()); Script_CondicaoScript script_CondicaoScript = db.Script_CondicaoScript.Where(x => x.Id == testData.IdScript_CondicaoScript).FirstOrDefault(); string query = script_CondicaoScript.QueryTosca; string testdataList = ""; foreach (var item in ids) { #region Replace Query String queryTemp = query.Replace("ptdTosca", item.ToString()); #endregion db = new DbEntities(); #region Edição Entidade Execução //Execucao exec = new Execucao(); Execucao exec = db.Execucao.FirstOrDefault(x => x.IdTestData == item); Script_CondicaoScript_Ambiente script_CondicaoScript_Ambiente = db.Script_CondicaoScript_Ambiente.Where(x => x.IdScript_CondicaoScript == testData.IdScript_CondicaoScript).Where(x => x.IdAmbienteVirtual == idMaquinaVirtual).Where(x => x.IdAmbienteExecucao == idAmbienteExecucao).FirstOrDefault(); exec.IdScript_CondicaoScript_Ambiente = script_CondicaoScript_Ambiente.Id; //exec.IdTipoFaseTeste = idFaseTeste; // pegar via campo popup modal play exec.IdStatusExecucao = (int)EnumStatusExecucao.AguardandoProcessamento; exec.Usuario = user.Id.ToString(); exec.IdTestData = item; // pegar o id via tela exec.SituacaoAmbiente = (int)EnumSituacaoAmbiente.EmUso; exec.ToscaInput = queryTemp; exec.EnvioTelegram = EnvioTelegram; // db.Execucao.Add(exec); db.Execucao.Attach(exec); db.Entry(exec).State = System.Data.Entity.EntityState.Modified; #endregion #region Edição Entidade TestData DbEntities db1 = new DbEntities(); TestData td1 = db1.TestData.Where(x => x.Id == item).FirstOrDefault(); td1.IdStatus = (int)EnumStatusTestData.EmGeracao; td1.GeradoPor = user.Login; db1.TestData.Attach(td1); db1.Entry(td1).State = System.Data.Entity.EntityState.Modified; #endregion try { #region Salvar Entidades db.SaveChanges(); db1.SaveChanges(); #endregion } catch (Exception ex) { #region Log Error Log.Error("Ocorreu o seguinte erro no método Play(). " + ex.Message); Log.Error(ex.StackTrace); #endregion } } }
static void Main(string[] args) { #region Mock Para Simular Execução Agendada #if DEBUG #region Debug Log.Info("Foi iniciado o .BAT de Agendamento no modo de DEBUG..."); #endregion args = new string[1]; args[0] = "idAgendamento:7;idFaseTeste:1;idMaquinaVirtual:1;enviarTelegram:True;idAmbienteExecucao:1;idUsuario:2"; #endif #endregion #region Debug //Verifica se foi passado o ID da Execução Log.Info("Iniciando execucao do Metodo Main."); #endregion if (args.Count() > 0) { #region Debug Log.Info("Validacao da quantidade de argumentos passadas no Main atendida com sucesso."); Log.Info("Foram recebidos " + args.Count() + " argumento(s) no args."); Log.Info("Argumento(s) recebido(s): " + args[0].ToString()); #endregion #region DbEntities #region Debug Log.Info("Iniciando coneccao com o DbEntities..."); #endregion DbEntities db = new DbEntities(); #region Debug Log.Info("DbEntities instanciado com sucesso..."); #endregion #endregion #region Pegando os Parâmetros #region Debug Log.Info("Iniciando tratamento dos parametro(s) recebido(s)..."); #endregion Dictionary <string, string> parameter = new Dictionary <string, string>(); foreach (string param in args[0].Split(';')) { string key = param.Split(':')[0]; string value = param.Split(':')[1]; if (key.Equals("idAgendamento")) { int IdAgendamentp = Int32.Parse(value); List <Agendamento_TestData> agTd = db.Agendamento_TestData.Where(x => x.IdAgendamento == IdAgendamentp).ToList(); key = "idTestData"; value = ""; foreach (Agendamento_TestData ag in agTd) { if (ag.Equals(agTd.Last())) { value += ag.IdTestData; } else { value += ag.IdTestData + ","; } } } #region Debug Log.Info("Key: " + key + ";" + " Value: " + value); #endregion parameter.Add(key, value); } #region Debug Log.Info("Parametros tratados com sucesso!"); Log.Info("Iniciando carregamento do Usuario..."); #endregion int idUsuario = Int32.Parse(parameter["idUsuario"]); Usuario user = db.Usuario.FirstOrDefault(x => x.Id == idUsuario); #region Debug Log.Info("Usuario carregado com sucesso..."); #endregion #endregion #region Validando se o Ambiente Está Disponível para o Agendamento int idTestData = Int32.Parse(parameter["idTestData"].Split(',')[0]); TestData td = db.TestData.FirstOrDefault(x => x.Id == idTestData); #region DebugObject Log.DebugObject(td); #endregion int IdAmbienteVirtual = Int32.Parse(parameter["idMaquinaVirtual"]); Script_CondicaoScript script_CondicaoScript = db.Script_CondicaoScript.FirstOrDefault(x => x.Id == td.DataPool.IdScript_CondicaoScript); #region DebugObject Log.DebugObject(script_CondicaoScript); #endregion #region Query de Ambientes Execucao execucaoParaAmbVirtual = (from exec in db.Execucao join sca in db.Script_CondicaoScript_Ambiente on exec.IdScript_CondicaoScript_Ambiente equals sca.Id join av in db.AmbienteVirtual on sca.IdAmbienteVirtual equals av.Id where exec.SituacaoAmbiente == (int)LaefazWeb.Enumerators.EnumSituacaoAmbiente.EmUso && av.Id == IdAmbienteVirtual select exec).FirstOrDefault(); #region DebugObject Log.DebugObject(execucaoParaAmbVirtual); #endregion #endregion #endregion #region Função Play #region Debug Log.Info("Chamada do método Play()..."); Log.Info(parameter["idTestData"] + "," + parameter["idFaseTeste"] + "," + parameter["idMaquinaVirtual"] + "," + Convert.ToBoolean(parameter["enviarTelegram"]) + "," + parameter["idAmbienteExecucao"] + "," + user); #endregion if (execucaoParaAmbVirtual == null) { #region Debug Log.Info("Ambiente disponivel para execucao do agendamento."); #endregion Play(parameter["idTestData"], parameter["idFaseTeste"], parameter["idMaquinaVirtual"], Convert.ToBoolean(parameter["enviarTelegram"]), parameter["idAmbienteExecucao"], user); //#region Excluir Job Jenkins //RemoveJobJenkins(parameter["idTestData"]); //#endregion } else { AmbienteVirtual av = db.AmbienteVirtual.FirstOrDefault(x => x.Id == IdAmbienteVirtual); #region DebugObject Log.DebugObject(av); #endregion #region Exception Error Log.Error("Não foi possível iniciar a execução pois o ambiente (VDI " + av.IP + ") não está Disponível para Execucao no momento."); Log.Error("Detalhes da Execucao em Andamento..."); Log.Error("Id Execucao: " + execucaoParaAmbVirtual.Id); Log.Error("Usuario: " + execucaoParaAmbVirtual.Usuario); Log.Error("Script: " + execucaoParaAmbVirtual.Script_CondicaoScript_Ambiente.Script_CondicaoScript.NomeTecnicoScript); Log.Error("Inicio Execucão: " + execucaoParaAmbVirtual.InicioExecucao); throw new Exception("Não foi possível iniciar a execução pois o ambiente (VDI " + av.IP + ") não está Disponível para Execucao no momento."); #endregion } #endregion } else { #region Exception Error Log.Error("Foi realizada uma chamada do .BAT de Agendamento, mas não foram passados os parâmetros conforme esperado."); throw new Exception("Foi realizada uma chamada do .BAT de Agendamento, mas não foram passados os parâmetros conforme esperado."); #endregion } }
public static bool ValidaPlanilhaExcelExecucao(string path, DataPool dp) { System.Data.DataTable dt = new System.Data.DataTable(); //Conexão com Excel string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + path + "';Extended Properties='Excel 12.0 xml;HDR=YES;IMEX=1;'"; using (OleDbConnection conExcel = new OleDbConnection(excelConnectionString)) { OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conExcel; conExcel.Open(); System.Data.DataTable table = conExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); cmd.CommandText = "select * from [CONFIG$D6:D11]"; OleDbDataAdapter adp = new OleDbDataAdapter(cmd); adp.Fill(dt); } bool retorno = true; string[] valores = new string[3]; int count = 0; for (int i = 0; i < dt.Rows.Count; i++) { if (!dt.Rows[i].ItemArray[0].ToString().Equals("")) { valores[count] = dt.Rows[i].ItemArray[0].ToString(); count++; } } string sistema = ""; string script = ""; string condicao = ""; for (int i = 0; i < valores.Length; i++) { if (i == 0) { sistema = valores[i]; } if (i == 1) { script = valores[i]; } if (i == 2) { condicao = valores[i]; } } DbEntities db = new DbEntities(); Script_CondicaoScript scs = db.Script_CondicaoScript.Where(x => x.Id == dp.IdScript_CondicaoScript).FirstOrDefault(); Script s = db.Script.Where(x => x.Id == scs.IdScript).FirstOrDefault(); CondicaoScript cs = db.CondicaoScript.Where(x => x.Id == scs.IdCondicaoScript).FirstOrDefault(); if (!dp.AUT.Descricao.Equals(sistema, StringComparison.InvariantCultureIgnoreCase)) { retorno = false; } else { retorno = true; } //if (!dp.Find(x => x.AUT.Equals(sistema, StringComparison.InvariantCultureIgnoreCase)) // retorno = false; if (s != null) { if (!s.Descricao.Equals(script, StringComparison.InvariantCultureIgnoreCase)) { retorno = false; } } if (cs != null) { if (cs.Descricao.Equals(condicao, StringComparison.InvariantCultureIgnoreCase)) { retorno = false; } } else if (!condicao.Equals("") && !condicao.Equals("SELECIONE")) { retorno = false; } return(retorno); }