public JsonResult EditarStatus(string id, string descricao, string tipo, string editar) { try { if (editar.Equals("true")) { if (tipo.Equals("STATUS")) { Status status = new Status() { Descricao = descricao, Id = Int32.Parse(id) }; db.Entry(status).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } else { StatusExecucao statusExecucao = new StatusExecucao() { Descricao = descricao, Id = Int32.Parse(id) }; db.Entry(statusExecucao).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } } else { if (tipo.Equals("STATUS")) { Status status = new Status() { Descricao = descricao }; db.Status.Add(status); db.SaveChanges(); } else { db = new DbEntities(); StatusExecucao statusExecucao = new StatusExecucao() { Descricao = descricao }; db.StatusExecucao.Add(statusExecucao); db.SaveChanges(); } } } catch (Exception ex) { return(Json(ex.Message, JsonRequestBehavior.AllowGet)); } return(Json("Operação realizada com sucesso!", JsonRequestBehavior.AllowGet)); }
static void Main(string[] args) { Log.Info("################################# Iniciando Processo de Pós Build 2 #######################################"); try { //Exclusão do arquivo de query da execução Log.Info("//Exclusão do arquivo de query da execução"); Log.Debug("Diretório da Query: " + ConfigurationSettings.AppSettings["QueryTxtFolder"]); string QueryDir = ConfigurationSettings.AppSettings["QueryTxtFolder"]; foreach (string f in Directory.EnumerateFiles(QueryDir, "*.txt")) { File.Delete(f); } } catch (Exception ex) { Log.Error("Não foi possível apagar os arquivos de query da execução."); Log.Error("Erro: " + ex.Message); } //Console Log Log.Info("Criada a instância do DbEntities."); //Console Log Log.Info("Capturando Ip local da máquina de execução."); Ip = GetIpLocal(); //Console Log Log.Info("Ip local da máquina recuperado com sucesso."); Log.Info("Processo de Pós Build 2 Iniciado na máquina " + Ip + "."); //Recebendo string com diretório completo do arquivo de Report string path = ConfigurationSettings.AppSettings["DirReport"]; string dir = ConfigurationSettings.AppSettings["DirReport"]; Log.Debug("Path arquivo de report:" + path); //Pasta compartilhada da VDI que corresponde a pasta C:\\EvidenceTDM\\ da VDI da aplicação string PathSaveEvidence = ConfigurationSettings.AppSettings["PathSaveEvidence"]; Log.Debug("Path da pasta compartilhada de evidência:" + PathSaveEvidence); int?IdDataPool = null; try { // Console Log Log.Info("Entrada no Try Catch."); // Console Log Log.Info("Iniciando a leitura do arquivo do log report."); //Ler todas as linhas do arquivo e preenche um array lines = File.ReadAllLines(dir); // Console Log Log.Info("O arquivo de report foi acessado com sucesso."); //Criação das listas para realizar as atualizações do pos Build 2 List <string> TestDataReport = new List <string>(); List <string> ExecutionReport = new List <string>(); // Console Log Log.Info("Entrada no report do Tosca."); //Capturando todas os TestData da execução e o diretório de suas respectivas evidências Array.ForEach(lines, element => { // Console Log Log.Debug("[LOG_REPORT_TOSCA] - " + element); if (element.Contains("ID_TEST_DATA")) { TestDataReport.Add(element); } else if (element.Contains("executionFolder")) { ExecutionReport.Add(element); } }); // Console Log Log.Debug("Foram encontrados no report registro de " + TestDataReport.Count() + " execuções."); //Valida que foram retornadas a quantidade correta de path de evidências para cada TestData Log.Info("Validando que foram retornadas a quantidade correta de path de evidências para cada TestData"); if (TestDataReport.Count() > 0) { Log.Info("Foram retornadas a quantidade correta de path de evidências para cada TestData"); // Console Log Log.Info("Iniciando itaracão de execuções."); //Iterando pelos reports do TestData for (int i = 0; i < TestDataReport.Count(); i++) { string @CaminhoEvidence = ConfigurationSettings.AppSettings["CaminhoEvidence"]; Log.Debug("path da evidência:" + @CaminhoEvidence); //Regex para pegar as informações das linhas string delimiter = "[^\"|,]+"; MatchCollection TestDataAttributes = Regex.Matches(TestDataReport[i], delimiter); MatchCollection ExecutionAttributes = Regex.Matches(ExecutionReport[i], delimiter); // Console Log Log.Info("Os dados do log report foram interpretados conforme esperado."); int IdTestData = Int32.Parse(TestDataAttributes[1].Value); string StatusTestData = TestDataAttributes[2].Value.Equals("Passed") ? "DISPONÍVEL" : "ERRO"; string StatusExecucao = TestDataAttributes[2].Value.Equals("Passed") ? "Sucesso" : "Falha"; string Evidencia = ExecutionAttributes[1].Value; DateTime ExecutionDate = DateTime.Now; // Console Log Log.Info("Iniciando carregamento das entidades do banco."); //Carregando entidades do model Execucao Execucao = db.Execucao.Where(x => x.IdTestData == IdTestData).Where(x => x.SituacaoAmbiente == (int)EnumSituacaoAmbiente.EmUso).FirstOrDefault(); Log.DebugObject(Execucao); //Atualizando status da execução para Aguardando processamento do Tosca Execucao.IdStatusExecucao = (int)EnumStatusExecucao.ProcessandoLogTosca; db.Execucao.Attach(Execucao); //Prepara a entidade para uma Edição db.Entry(Execucao).State = System.Data.Entity.EntityState.Modified; // informa que o obejto será modificado db.SaveChanges(); Log.DebugObject(Execucao); //Carregando entidades do model Execucao = db.Execucao.Where(x => x.IdTestData == IdTestData).Where(x => x.SituacaoAmbiente == (int)EnumSituacaoAmbiente.EmUso).FirstOrDefault(); Log.Info("Exibindo execuções após atualização."); Log.DebugObject(Execucao); // Console Log Log.Info("Entidade Execução carregada com sucesso."); TestData TestData = db.TestData.FirstOrDefault(x => x.Id == IdTestData); Log.DebugObject(TestData); // Pegando o número de execuções agendadas if (TestDataGeneratedSolicited == null) { DataPool dt = db.DataPool.Where(x => x.Id == TestData.IdDataPool).FirstOrDefault(); TestDataGeneratedSolicited = db.TestData.Where(x => x.IdDataPool == dt.Id).Where(x => x.IdStatus == (int)EnumStatusTestData.EmGeracao).Where(x => x.Execucao.Script_CondicaoScript_Ambiente.AmbienteVirtual.IP == Ip).ToList(); } // Console Log Log.Info("Entidade TestData carregada com sucesso."); StatusExecucao statusExecucao = db.StatusExecucao.FirstOrDefault(x => x.Descricao == StatusExecucao); // Console Log Log.Info("Entidade StatusExecução carregada com sucesso."); Status statusTestData = db.Status.FirstOrDefault(x => x.Descricao == StatusTestData); // Console Log Log.Info("Entidade Status carregada com sucesso."); Log.Debug("AUT = " + TestData.DataPool.AUT.Descricao); Log.Debug("Demanda = " + TestData.DataPool.Demanda.Descricao); Log.Debug("TipoFaseTeste = " + Execucao.TipoFaseTeste.Descricao); string AUT = TestData.DataPool.AUT.Descricao; string Demanda = TestData.DataPool.Demanda.Descricao; string TipoFaseTeste = Execucao.TipoFaseTeste.Descricao; // Console Log Log.Info("Informações de AUT, Demanda e TipoFaseTeste carregados com sucesso."); //STC-ETS-PRJ00007149_ENT00003722-06_04_2018_10_47 string ZipExtension = ".ZIP"; string FolderEvidenceName = AUT + "-E" + TipoFaseTeste + "-" + Demanda + "-" + String.Format("{0:dd_MM_yyyy_hh_mm_ss}", ExecutionDate); string DirectoryTemp = Evidencia + "\\" + FolderEvidenceName; // Console Log Log.Info("Iniciando carregamento dos arquivos da pasta de evidências de testData."); //Carregando os arquivos da pasta de evidência do teste Data string[] files = System.IO.Directory.GetFiles(Evidencia); // Console Log Log.Info("Arquivos da pasta de TestData carregados com sucesso."); //Criando um diretório temporario para colocar todos os arquivos e zipar Directory.CreateDirectory(DirectoryTemp); //Copiando os arquivos da pasta de evidencia para o diretório temporario Array.ForEach(files, file => { string fileName = System.IO.Path.GetFileName(file); string destFile = System.IO.Path.Combine(DirectoryTemp, fileName); System.IO.File.Copy(file, destFile, true); }); // Console Log Log.Info("Arquivos copiados com sucesso para a pasta temp."); //Zipando a pasta com os arquivos de evidência do TestData ZipFile.CreateFromDirectory(DirectoryTemp, DirectoryTemp + ZipExtension); // Console Log Log.Info("Arquivos zipado com sucesso para a pasta temp."); //Monta o diretório com a data e hora da execução string Now = String.Format("{0:dd_MM_yyyy}", ExecutionDate); // Console Log Log.Info("Entrada para verificação se a pasta do dia já existe."); string folderTdmEvidencesRoot = System.IO.Directory.GetDirectories(PathSaveEvidence, Now).FirstOrDefault(); //Cria o caminho final da evidência string folderTdmEvidences = PathSaveEvidence + "\\" + Now + "\\" + FolderEvidenceName + ZipExtension; //Verifica se já existe pasta de excução do dia //Caso não exista cria uma if (folderTdmEvidencesRoot == null) { Directory.CreateDirectory(PathSaveEvidence + "\\" + Now); } //Copiando a evidência para a pasta de Evidencias do portal System.IO.File.Copy(DirectoryTemp + ZipExtension, folderTdmEvidences, true); // Console Log Log.Info("Copia do Zip realizada com sucesso para a pasta C:\\Evidences\\"); //Atualizando o registro de TestData CaminhoEvidence += "/" + Now + "/" + FolderEvidenceName + ZipExtension; TestData.IdStatus = statusTestData.Id; TestData.CaminhoEvidencia = CaminhoEvidence; //TestData.TerminoExecucao = DateTime.Now; // anexar objeto ao contexto db.TestData.Attach(TestData); //Prepara a entidade para uma Edição db.Entry(TestData).State = System.Data.Entity.EntityState.Modified; // informa que o obejto será modificado db.SaveChanges(); // Console Log Log.Info("Atualização do objeto TestData realizado com sucesso!"); //Atualizando o registro de Execução Execucao.IdStatusExecucao = statusExecucao.Id; Execucao.SituacaoAmbiente = (int)EnumSituacaoAmbiente.Disponivel; Execucao.ToscaOutput = string.Join("", lines); Execucao.TerminoExecucao = DateTime.Now; lines = null; // anexar objeto ao contexto db.Execucao.Attach(Execucao); //Prepara a entidade para uma Edição db.Entry(Execucao).State = System.Data.Entity.EntityState.Modified; // informa que o obejto será modificado db.SaveChanges(); // Console Log Log.Info("Atualização do objeto Execução realizado com sucesso!"); //Preenchendo a lista de TestData para relatório if (TestData.Status.Descricao == "DISPONÍVEL") { TestDataGeneratedSuccessfully.Add(TestData); } else { TestDataGeneratedFailed.Add(TestData); } IdDataPool = IdDataPool == null ? TestData.IdDataPool : IdDataPool; //Sleep para garantir que as evidências não fiquem com Data e hora iguais Thread.Sleep(1000); } // Console Log Log.Info("Verificando se foi encontrado o Id do DataPool da execução."); } else { // Console Log Log.Error("Houve um erro na captura de parâmetros do relatório gerado pelo Tosca. Não foi possível encontrar as pastas de executionFoder para todos os testData."); throw new Exception("Houve um erro na captura de parâmetros do relatório gerado pelo Tosca. Não foi possível encontrar as pastas de executionFoder para todos os testData."); } } catch (Exception ex) { Log.Error("\tMessage: " + ex.Message); Log.Error("\tInnerException: " + ex.InnerException); CarregaDadosExecucao = ( from exec in db.Execucao join sca in db.Script_CondicaoScript_Ambiente on exec.IdScript_CondicaoScript_Ambiente equals sca.Id join ambv in db.AmbienteVirtual on sca.IdAmbienteVirtual equals ambv.Id join td in db.TestData on exec.IdTestData equals td.Id join dtp in db.DataPool on td.IdDataPool equals dtp.Id join dmd in db.Demanda on dtp.IdDemanda equals dmd.Id join scs in db.Script_CondicaoScript on sca.IdScript_CondicaoScript equals scs.Id join scr in db.Script on scs.IdScript equals scr.Id where exec.SituacaoAmbiente == (int)EnumSituacaoAmbiente.EmUso && ambv.IP == Ip && exec.IdStatusExecucao != (int)EnumStatusExecucao.AguardandoProcessamento select new DadosExecucao { IdTestData = exec.IdTestData , IdExecucao = exec.Id , DatapoolName = scr.Descricao , DemandaName = dmd.Descricao }).FirstOrDefault(); //Eviando a Mensagem para o Telegran //SMS.Enviar(message, Canal, TokenBotTelegram); } finally { //Eviando a Mensagem para o Telegran //SMS.Enviar(Message, Canal, TokenBotTelegram); //Liberando as massas que ficaram com o status em Geração if (IdDataPool == null && CarregaDadosExecucao != null) { //IdDataPool = db.TestData.Where(x => x.Id == exec.IdTestData).FirstOrDefault().IdDataPool; //List<TestData> TestDataList = db.TestData.Where(x => x.IdDataPool == IdDataPool).Where(x => x.IdStatus == (int)EnumStatusTestData.EmGeracao).ToList(); List <TestData> TestDataList = db.TestData.Where(x => x.IdExecucao == CarregaDadosExecucao.IdExecucao).ToList(); TestDataList.ForEach(element => { element.IdStatus = (int)EnumStatusTestData.Falha; // anexar objeto ao contexto db.TestData.Attach(element); //Prepara a entidade para uma Edição db.Entry(element).State = System.Data.Entity.EntityState.Modified; // informa que o obejto será modificado db.SaveChanges(); Execucao Execucao = db.Execucao.Where(x => x.Id == element.IdExecucao).FirstOrDefault(); //Liberando o ambiente Execucao.SituacaoAmbiente = (int)EnumSituacaoAmbiente.Disponivel; Execucao.IdStatusExecucao = element.IdStatus == (int)EnumStatusTestData.Falha ? (int)EnumStatusExecucao.Falha : (int)EnumStatusExecucao.Sucesso; Execucao.TerminoExecucao = DateTime.Now; if (lines != null) { Execucao.ToscaOutput = string.Join("", lines); } db.Execucao.Attach(Execucao); //Prepara a entidade para uma Edição db.Entry(Execucao).State = System.Data.Entity.EntityState.Modified; // informa que o obejto será modificado db.SaveChanges(); }); } else { Log.Fatal("Ocorreu um erro durante a execução do processo de Pós BUILD 2 e não foi possível atualizar a base, liberar ambiente, falhar a execução e atualizar o TestData."); } try { string DirReport = ConfigurationSettings.AppSettings["DirReport"]; int counter = 0; string line; // Read the file and display it line by line. System.IO.StreamReader file = new System.IO.StreamReader(DirReport); Log.Info("Iniciando a leitura do relatório do Tosca"); while ((line = file.ReadLine()) != null) { Log.Info(line); //System.Console.WriteLine(line); counter++; } Log.Info("Fim da leitura do relatório do tosca."); file.Close(); //System.Console.WriteLine("There were {0} lines.", counter); // Suspend the screen. //System.Console.ReadLine(); Log.Info("Iniciando método para exclusão do relatório do Tosca."); Log.Info("Excluindo Arquivo: " + DirReport); File.Delete(DirReport); Log.Info("Arquivo deletado com sucesso!"); } catch (Exception e) { Log.Fatal("Ocorreu um erro ao tentar excluir o report do Tosca!"); Log.Fatal("InnerException: " + e.InnerException); Log.Fatal("Message: " + e.Message); } } }
public ActionResult Salvar(Status 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)); } Status status; if (editar) { db.Entry(objeto).State = System.Data.Entity.EntityState.Modified; db.SaveChanges(); } else { string tipo = Request.Form.Get("tipoStatus"); if (tipo.Equals("STATUS")) { status = new Status() { Descricao = Request.Form.Get("descricao"), }; db.Status.Add(status); db.SaveChanges(); } else { StatusExecucao statusExecucao = new StatusExecucao() { Descricao = Request.Form.Get("descricao"), }; db.StatusExecucao.Add(statusExecucao); db.SaveChanges(); } this.FlashSuccess("Status adicionado com sucesso!."); } } catch (Exception ex) { if (ex.InnerException != null && ex.InnerException.InnerException != null && ex.InnerException.InnerException.Message.ToString().Contains("AK_Status_Column")) { this.FlashError("Já existe um Status com essa descrição."); } else { this.FlashError(ex.Message); } } return(RedirectToAction("Index")); }