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")); }
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")); }
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); }
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 } }
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)); } }