示例#1
0
        public ActionResult Salvar(AmbienteVirtual 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));
                }

                AmbienteVirtual ambiente;

                if (editar)
                {
                    //objeto.UltimaAtualizacao = DateTime.Now;
                    //// anexar objeto ao contexto
                    //db.AmbienteVirtual.Attach(objeto);
                    //// informa que o obejto será modificado
                    //db.Entry(objeto).State = System.Data.Entity.EntityState.Modified;
                    //db.SaveChanges();
                }
                else
                {
                    ambiente = new AmbienteVirtual()
                    {
                        IP        = Request.Form.Get("ip"),
                        Descricao = Request.Form.Get("descricao"),
                    };

                    db.AmbienteVirtual.Add(ambiente);
                    db.SaveChanges();

                    this.FlashSuccess("Ambiente adicionado com sucesso!.");
                }
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null && ex.InnerException.InnerException != null && ex.InnerException.InnerException.Message.ToString().Contains("AK_Ambiente_Descricao"))
                {
                    this.FlashError("Já existe um Ambiente com essa descrição.");
                }
                else
                {
                    this.FlashError(ex.Message);
                }
            }

            return(RedirectToAction("Index"));
        }
示例#2
0
 public ActionResult SalvarEdicao(AmbienteVirtual objeto)
 {
     try
     {
         Salvar(objeto, true);
         this.FlashSuccess("Ambiente editado com sucesso.");
     }
     catch (Exception ex)
     {
         this.FlashError(ex.Message);
     }
     return(RedirectToAction("Index"));
 }
示例#3
0
        public ActionResult Remover(int id)
        {
            var result = new JsonResult()
            {
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            };

            try
            {
                AmbienteVirtual ambiente = db.AmbienteVirtual.SingleOrDefault(a => a.Id == id);

                db.AmbienteVirtual.Remove(ambiente);
                db.SaveChanges();

                result.Data = new { Result = "Ambiente removido com sucesso.", Status = (int)WebExceptionStatus.Success };
            }
            catch (Exception ex)
            {
                result.Data = new { Result = ex.Message, Status = (int)WebExceptionStatus.UnknownError };
            }
            return(result);
        }
示例#4
0
        public static void Play(string id, string idFaseTeste, string idMaquinaVirtual, bool opcaoTelegram, string idAmbienteExecucao, Usuario user, bool PlayTestData = true)
        {
            #region Conecção DbEntities
            DbEntities db = new DbEntities();
            #endregion

            try
            {
                #region Debug
                Log.Info("Entrada no metodo Play().");
                #endregion

                string mensagem = "";

                var testDatas = new List <int>();
                List <ListaTestDatas> listaTestDatas = new List <ListaTestDatas>();
                int   IdDatapool;
                int[] ids = null;

                #region Debug
                //Verifica se o Play é da entidade DataPool ou da TestData
                #endregion

                #region Play Por TestData
                if (PlayTestData)
                {
                    #region Debug
                    Log.Info("Foi identificado o tipo de Play por TestData.");
                    #endregion

                    Char delimiter = ',';
                    ids = id.Split(delimiter).Select(n => Convert.ToInt32(n)).ToArray();
                    int      idTemp   = ids[0];
                    TestData TestData = db.TestData.FirstOrDefault(x => x.Id == idTemp);
                    IdDatapool = db.DataPool.FirstOrDefault(x => x.Id == TestData.IdDataPool).Id;

                    #region Debug
                    Log.Info("Iniciando carregamento de informações dos TestData(s).");
                    #endregion

                    listaTestDatas =
                        (from dp in db.DataPool
                         join td in db.TestData on dp.Id equals td.IdDataPool
                         where ids.Contains(td.Id)
                         select new ListaTestDatas
                    {
                        IdDatapool = dp.Id,
                        IdTestData = td.Id,
                        IdStatus = td.IdStatus
                    }).ToList();

                    if (listaTestDatas.Where(x => x.IdStatus != (int)EnumStatusTestData.Cadastrada).ToList().Count() > 0)
                    {
                        #region Debug
                        Log.Info("Não é possível iniciar a execução de massas com o status diferente de CADASTRADA!");
                        #endregion
                        throw new Exception("Não é possível iniciar a execução de massas com o status diferente de CADASTRADA!");
                    }
                }
                #endregion

                #region Play Por DataPool
                else
                {
                    IdDatapool     = Int32.Parse(id);
                    listaTestDatas =
                        (from dp in db.DataPool
                         join td in db.TestData on dp.Id equals td.IdDataPool
                         where dp.Id == IdDatapool
                         select new ListaTestDatas
                    {
                        IdDatapool = dp.Id,
                        IdTestData = td.Id
                    }).ToList();
                }
                #endregion

                #region Busca TestData Com Parâmetros Obrigatótios
                for (int i = 0; i < listaTestDatas.Count; i++)
                {
                    int idTestDataAtual = listaTestDatas[i].IdTestData;
                    List <ParametrosValores> listaParametrosObrigatorios =
                        (from pv in db.ParametroValor
                         join ps in db.ParametroScript on pv.IdParametroScript equals ps.Id
                         join p in db.Parametro on ps.IdParametro equals p.Id
                         where pv.IdTestData == idTestDataAtual && ps.Obrigatorio == true
                         select new ParametrosValores
                    {
                        IdTestData = IdDatapool,
                        IdDatapool = idTestDataAtual,
                        IdParametro = p.Id,
                        IdParametroValor = pv.Id,
                        Descricao = p.Descricao,
                        Valor = pv.Valor,
                        Obrigatorio = ps.Obrigatorio
                    }).ToList();

                    for (int w = 0; w < listaParametrosObrigatorios.Count; w++)
                    {
                        //Verifico se o Script tem o parametro Ambiente sistema, caso tenha, o valor do parametro é atualizado com o valor que vem da tela do play
                        if (listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Ambiente_Sistema || listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Ambiente)
                        {
                            int idAmbExec     = Int32.Parse(idAmbienteExecucao);
                            int?_idParamValor = listaParametrosObrigatorios[w].IdParametroValor;

                            if (_idParamValor != null)
                            {
                                ParametroValor   pv      = db.ParametroValor.Where(x => x.Id == _idParamValor).FirstOrDefault();
                                AmbienteExecucao ambExec = db.AmbienteExecucao.Where(x => x.Id == idAmbExec).FirstOrDefault();
                                if (ambExec.Id == (int)EnumAmbienteExec.Ti1_Siebel8 || ambExec.Id == (int)EnumAmbienteExec.Ti8_Siebel8)
                                {
                                    string amb = ambExec.Descricao.Substring(ambExec.Descricao.IndexOf("http"), ambExec.Descricao.Length - ambExec.Descricao.IndexOf("http"));

                                    pv.Valor = amb;
                                    listaParametrosObrigatorios[w].Valor = amb;
                                }
                                else
                                {
                                    pv.Valor = ambExec.Descricao;
                                    listaParametrosObrigatorios[w].Valor = ambExec.Descricao;
                                }
                                // anexar objeto ao contexto
                                db.ParametroValor.Attach(pv);
                                //Prepara a entidade para uma Edição
                                db.Entry(pv).State = System.Data.Entity.EntityState.Modified;

                                // informa que o obejto será modificado
                                db.SaveChanges();
                            }
                        }

                        if (listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Dados_De_Entrada ||
                            listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Dados_De_Saida ||
                            listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Fase ||
                            listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Nome_Do_Caso_De_Teste ||
                            listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Numero_Do_Caso_De_Teste ||
                            listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Prj ||
                            listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Resultado_Esperado ||
                            listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Titulo)
                        {
                            int?           _idParamValor = listaParametrosObrigatorios[w].IdParametroValor;
                            ParametroValor pv            = db.ParametroValor.Where(x => x.Id == _idParamValor).FirstOrDefault();


                            if (!pv.Valor.Equals(""))
                            {
                                pv.Valor = "TESTE";
                            }

                            // anexar objeto ao contexto
                            db.ParametroValor.Attach(pv);
                            //Prepara a entidade para uma Edição
                            db.Entry(pv).State = System.Data.Entity.EntityState.Modified;

                            // informa que o obejto será modificado
                            db.SaveChanges();

                            listaParametrosObrigatorios[w].Valor = pv.Valor;
                        }



                        if (listaParametrosObrigatorios[w].IdParametro == (int)EnumParametro.Evidencia_Autor)
                        {
                            int?           _idParamValor = listaParametrosObrigatorios[w].IdParametroValor;
                            ParametroValor pv            = db.ParametroValor.Where(x => x.Id == _idParamValor).FirstOrDefault();
                            pv.Valor = user.Login;

                            // anexar objeto ao contexto
                            db.ParametroValor.Attach(pv);
                            //Prepara a entidade para uma Edição
                            db.Entry(pv).State = System.Data.Entity.EntityState.Modified;

                            // informa que o obejto será modificado
                            db.SaveChanges();

                            listaParametrosObrigatorios[w].Valor = user.Login;
                        }
                        else
                        {
                            if (listaParametrosObrigatorios[w].Valor == "" || listaParametrosObrigatorios[w].Valor == null)
                            {
                                if (!testDatas.Contains(listaTestDatas[i].IdTestData))
                                {
                                    testDatas.Add(listaTestDatas[i].IdTestData);
                                }
                            }
                        }
                    }
                }

                #region Debug
                Log.Info("Ibusca de parametros obrigatorios nao preenchidos concluida.");
                #endregion

                #endregion

                #region Valida Se Possui Parâmetros Obrigatórios Não Preenchidos

                #region Debug
                Log.Info("Iniciando validacao de parametros obrigatorios nao preenchidos.");
                #endregion

                if (testDatas.Count > 0)
                {
                    string combindedString = string.Join(",", testDatas.ToArray());
                    string stringFinal     = "";
                    for (int i = 0; i < combindedString.Length; i++)
                    {
                        if (i % 100 == 0)
                        {
                            if (i == 0)
                            {
                                stringFinal += combindedString[i];
                            }
                            else
                            {
                                stringFinal += combindedString[i] + "<br >";
                            }
                        }
                        else
                        {
                            stringFinal += combindedString[i];
                        }
                    }

                    #region Debug
                    Log.Info("O(s) TestData(s): abaixo possui(em) parâmetro(s) obrigatório(s) - destacados em vermelho - que não foram preenchidos <br>" + stringFinal);
                    #endregion

                    mensagem = "O(s) TestData(s): abaixo possui(em) parâmetro(s) obrigatório(s) - destacados em vermelho - que não foram preenchidos <br>" + stringFinal;
                }
                else
                {
                    bool EnvioTelegram = opcaoTelegram;
                    // Utilizando o Datapool da tela, substituir a query do script e salvar os dados na tabela de execução (Controle_Ambiente)

                    if (PlayTestData)
                    {
                        ReplaceQuery(ids.OfType <int>().ToList(), Int32.Parse(idFaseTeste), Int32.Parse(idMaquinaVirtual), Int32.Parse(idAmbienteExecucao), user, EnvioTelegram); // enviar o Datapool da tela
                    }
                    else
                    {
                        ReplaceQuery(ObtemIdTestData(Int32.Parse(id)), Int32.Parse(idFaseTeste), Int32.Parse(idMaquinaVirtual), Int32.Parse(idAmbienteExecucao), user, EnvioTelegram); // enviar o Datapool da tela
                    }
                    string          pAginaDoJob = null;
                    int             idAmbv      = Int32.Parse(idMaquinaVirtual);
                    AmbienteVirtual ambv        = db.AmbienteVirtual.Where(x => x.Id == idAmbv).FirstOrDefault();

                    if (ambv.IP != null)
                    {
                        mensagem = "Execução iniciada com sucesso para a VDI " + ambv.IP;

                        #region Debug
                        Log.Info("Execução iniciada com sucesso para a VDI " + ambv.IP);
                        #endregion

                        pAginaDoJob = ConfigurationSettings.AppSettings[ambv.IP];
                    }
                    else
                    {
                        #region Debug
                        Log.Info("Não foi possível definir o Job do Jenkins.");
                        #endregion

                        mensagem = "Não foi possível definir o Job do Jenkins.";
                    }

                    #region Debug
                    Log.Info("Chamada do metodo runJobJenkinsRemote().");
                    #endregion

                    runJobJenkinsRemote(pAginaDoJob);

                    #region Debug
                    Log.Info("Metodo de execucao do Jenkins finalizado.");
                    #endregion
                    //log.Info("Execução iniciada.");

                    //Usar esta opção para rodar local
                    //runJobJenkinsLocal(pAginaDoJob, "brucilin.de.gouveia", "brucilin.de.gouveia");
                }
                #endregion
            }
            catch (Exception ex)
            {
                #region Log Error
                Log.Error("Ocorreu o seguinte erro no método Play(). " + ex.Message);
                Log.Error(ex.StackTrace);
                #endregion
            }
        }
示例#5
0
        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 ActionResult ExecutaEncadeamento(string qtd)
        {
            int    idFaseTeste        = 1;
            int    idMaquinaVirtual   = 1;
            bool   EnvioTelegram      = false;
            int    idAmbienteExecucao = 1;
            string mensagem           = "";

            try
            {
                #region

                List <int>          idsTestData   = new List <int>();
                List <int>          idsTestData2  = new List <int>();
                List <Encadeamento> encadeamentos = new List <Encadeamento>();
                Random rnd = new Random();


                //criar o encadeamento na tabela
                if (qtd.Equals("1"))
                {
                    Encadeamento encadeamento = new Encadeamento {
                        Descricao = "Encadeamento " + rnd.Next(1, 100).ToString()
                    };

                    db.Encadeamento.Add(encadeamento);
                    db.SaveChanges();

                    encadeamentos.Add(encadeamento);
                }
                else
                {
                    for (int i = 0; i < 2; i++)
                    {
                        Encadeamento encadeamento = new Encadeamento {
                            Descricao = "Encadeamento " + rnd.Next(1, 100).ToString()
                        };

                        db.Encadeamento.Add(encadeamento);
                        db.SaveChanges();

                        encadeamentos.Add(encadeamento);
                    }
                }


                if (encadeamentos.Count == 1)
                {
                    string ids = ConfigurationSettings.AppSettings["Encadeamento1"];
                    ids.Split(',').ToList().ForEach(item => { idsTestData.Add(Int32.Parse(item)); });

                    //idsTestData.Add(1);
                    //idsTestData.Add(2);
                    //idsTestData.Add(3);

                    for (int i = 0; i < idsTestData.Count; i++)
                    {
                        Encadeamento_TestData encadeamentoTestData = new Encadeamento_TestData
                        {
                            IdEncadeamento = encadeamentos[0].Id,
                            IdTestData     = idsTestData[i],
                            Ordem          = (i + 1)
                        };

                        db.Encadeamento_TestData.Add(encadeamentoTestData);
                        db.SaveChanges();
                    }

                    ReplaceQuery(idsTestData, idFaseTeste, idMaquinaVirtual, idAmbienteExecucao, EnvioTelegram);
                }
                else
                {
                    string ids = ConfigurationSettings.AppSettings["Encadeamento1"];
                    ids.Split(',').ToList().ForEach(item => { idsTestData.Add(Int32.Parse(item)); });

                    ids = ConfigurationSettings.AppSettings["Encadeamento2"];
                    ids.Split(',').ToList().ForEach(item => { idsTestData2.Add(Int32.Parse(item)); });

                    //idsTestData.Add(1);
                    //idsTestData.Add(2);
                    //idsTestData.Add(3);

                    //idsTestData2.Add(11);
                    //idsTestData2.Add(12);

                    for (int i = 0; i < idsTestData.Count(); i++)
                    {
                        Encadeamento_TestData encadeamentoTestData = new Encadeamento_TestData
                        {
                            IdEncadeamento = encadeamentos[0].Id,
                            IdTestData     = idsTestData[i],
                            Ordem          = (i + 1)
                        };

                        db.Encadeamento_TestData.Add(encadeamentoTestData);
                        db.SaveChanges();
                    }

                    for (int i = 0; i < idsTestData2.Count(); i++)
                    {
                        Encadeamento_TestData encadeamentoTestData = new Encadeamento_TestData
                        {
                            IdEncadeamento = encadeamentos[1].Id,
                            IdTestData     = idsTestData2[i],
                            Ordem          = (i + 1)
                        };

                        db.Encadeamento_TestData.Add(encadeamentoTestData);
                        db.SaveChanges();
                    }

                    ReplaceQuery(idsTestData, idFaseTeste, idMaquinaVirtual, idAmbienteExecucao, EnvioTelegram);
                    ReplaceQuery(idsTestData2, idFaseTeste, idMaquinaVirtual, idAmbienteExecucao, EnvioTelegram);
                }



                #endregion


                string          pAginaDoJob = null;
                int             idAmbv      = idMaquinaVirtual;
                AmbienteVirtual ambv        = db.AmbienteVirtual.Where(x => x.Id == idAmbv).FirstOrDefault();

                if (ambv.IP != null)
                {
                    mensagem    = "Execução iniciada com sucesso!";
                    pAginaDoJob = ConfigurationSettings.AppSettings[ambv.IP];
                }
                else
                {
                    mensagem = "Não foi possível definir o Job do Jenkins.";
                }

                runJobJenkinsRemote(pAginaDoJob);



                return(Json(new { Data = mensagem }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(new { Data = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }
        public ActionResult Play(string Ids, string IdFaseTeste, string IdMaquinaVirtual, string NotificacaoTelegram)
        {
            #region Debug
            log.Info("Entrada no método Play de encadeamento.");
            log.Info("Parâmetros passados no método Play():");
            log.Debug("Ids: " + Ids);
            log.Debug("IdFaseTeste: " + IdFaseTeste);
            log.Debug("IdMaquinaVirtual: " + IdMaquinaVirtual);
            log.Debug("NotificacaoTelegram: " + NotificacaoTelegram);
            #endregion

            try
            {
                Char     delimiter        = ';';
                string   mensagem         = "";
                string[] idEncadeamentos  = Ids.Split(delimiter);
                int      idFaseTeste      = Int32.Parse(IdFaseTeste);
                int      idMaquinaVirtual = Int32.Parse(IdMaquinaVirtual);
                bool     EnvioTelegram    = bool.Parse(NotificacaoTelegram);

                #region Debug
                log.Info("Foram identificados " + idEncadeamentos.Length + " encadeamentos para execução.");
                #endregion

                foreach (string encadeamento in idEncadeamentos)
                {
                    #region Debug
                    log.Info("Preparando para processar a execução do encadeamento de Id " + encadeamento + ".");
                    #endregion

                    int idEncadeamento = Int32.Parse(encadeamento);

                    DbEntities db = new DbEntities();
                    List <Encadeamento_TestData> EncadeamentoTdList = db.Encadeamento_TestData.Where(x => x.IdEncadeamento == idEncadeamento).OrderBy(x => x.Ordem).ToList();
                    //List<int> idsTestData = new List<int>();

                    //EncadeamentoTdList.ForEach(element=> {
                    //    idsTestData.Add(element.IdTestData);
                    //});

                    ReplaceQuery(EncadeamentoTdList, idFaseTeste, idMaquinaVirtual, EnvioTelegram);
                }


                string          pAginaDoJob = null;
                int             idAmbv      = idMaquinaVirtual;
                AmbienteVirtual ambv        = db.AmbienteVirtual.Where(x => x.Id == idAmbv).FirstOrDefault();

                if (ambv.IP != null)
                {
                    mensagem    = "Execução iniciada com sucesso!";
                    pAginaDoJob = ConfigurationSettings.AppSettings[ambv.IP];
                }
                else
                {
                    mensagem = "Não foi possível definir o Job do Jenkins.";
                }

                runJobJenkinsRemote(pAginaDoJob);



                return(Json(new { Data = mensagem }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                return(Json(new { Data = ex.Message }, JsonRequestBehavior.AllowGet));
            }
        }