예제 #1
0
 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"));
 }
예제 #2
0
        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"));
        }
예제 #3
0
        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);
        }
예제 #4
0
파일: Program.cs 프로젝트: daniellnog/ATMP
        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();
            }
        }