public ActionResult SalvarEdicao(TipoFaseTeste objeto) { try { Salvar(objeto, true); this.FlashSuccess("Fase editada com sucesso."); } catch (Exception ex) { this.FlashError(ex.Message); } return(RedirectToAction("Index")); }
public ActionResult Salvar(TipoFaseTeste objeto, bool editar = false) { try { if (!ModelState.IsValid) { var msg = string.Empty; ModelState.Values.SelectMany(v => v.Errors).ForEach(m => msg = string.Concat(m.ErrorMessage.ToString(), @"\n")); if (!msg.IsNullOrWhiteSpace()) { this.FlashWarning(msg); } return(View("Adicionar", objeto)); } TipoFaseTeste tipoFaseTeste; if (editar) { db.Entry(objeto).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } else { tipoFaseTeste = new TipoFaseTeste() { Descricao = Request.Form.Get("descricao"), }; db.TipoFaseTeste.Add(tipoFaseTeste); db.SaveChanges(); this.FlashSuccess("Fase adicionada com sucesso!."); } } catch (Exception ex) { if (ex.InnerException != null && ex.InnerException.InnerException != null && ex.InnerException.InnerException.Message.ToString().Contains("AK_TipoFaseTeste_Descricao")) { this.FlashError("Já existe uma Fase com essa descrição."); } else { this.FlashError(ex.Message); } } return(RedirectToAction("Index")); }
public ActionResult Remover(int id) { var result = new JsonResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet }; try { TipoFaseTeste tipoFaseTeste = db.TipoFaseTeste.SingleOrDefault(a => a.Id == id); db.TipoFaseTeste.Remove(tipoFaseTeste); db.SaveChanges(); result.Data = new { Result = "Fase removida com sucesso.", Status = (int)WebExceptionStatus.Success }; } catch (Exception ex) { result.Data = new { Result = ex.Message, Status = (int)WebExceptionStatus.UnknownError }; } return(result); }
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(); } }