/// <summary> /// Ejecuta el proyecto /// </summary> private async Task ExecuteProjectAsync(BlockLogModel block, string project, string context, CancellationToken cancellationToken) { JobProjectManager manager = new JobProjectManager(Logger); // Añade los procesadores manager.AddProcessor(new LibJobProcessor.Cloud.JobCloudManager(Logger)); manager.AddProcessor(new LibJobProcessor.Database.JobDatabaseManager(Logger)); manager.AddProcessor(new LibJobProcessor.FilesShell.JobFileShellManager(Logger)); manager.AddProcessor(new LibJobProcessor.Rest.JobRestManager(Logger)); // Ejecuta el proyecto await manager.ProcessAsync(project, context, cancellationToken); // Asigna los errores if (manager.Errors.Count == 0) { block.Info("La ejecución del proyecto ha terminado correctamente"); } else { string errorTotal = "Error en la ejecución del proyecto"; // Añade los errores foreach (string error in manager.Errors) { if (!string.IsNullOrWhiteSpace(error)) { errorTotal += Environment.NewLine + error.Trim(); } } // Lanza el mensaje de error block.Error(errorTotal); } }
/// <summary> /// Crea el manager de los procesos /// </summary> private static JobProjectManager CreateManager() { JobProjectManager manager = new JobProjectManager(Logger); // Añade los procesadores manager.AddProcessor(new Libraries.LibJobProcessor.Cloud.JobCloudManager(Logger)); manager.AddProcessor(new Libraries.LibJobProcessor.Database.JobDatabaseManager(Logger)); manager.AddProcessor(new Libraries.LibJobProcessor.Powershell.JobPowershellManager(Logger)); manager.AddProcessor(new Libraries.LibJobProcessor.FilesShell.JobFileShellManager(Logger)); // Devuelve el manager de proyecto return(manager); }
/// <summary> /// Procesa un archivo de contexto con los archivos del directorio general /// </summary> private static async Task <bool> ProcessAsync(Dictionary <ArgumentType, string> parameters, System.Threading.CancellationToken cancellationToken) { string contextFileName = parameters[ArgumentType.Context].TrimIgnoreNull(); string projectFileName = parameters[ArgumentType.Project].TrimIgnoreNull(); bool processed = false; // Ejecuta el proyecto using (BlockLogModel block = Logger.Default.CreateBlock(LogModel.LogType.Info, $"Process '{projectFileName}'")) { if (string.IsNullOrWhiteSpace(projectFileName) || !System.IO.File.Exists(projectFileName)) { block.Error($"Can't find the project file '{projectFileName}'"); } else if (string.IsNullOrWhiteSpace(contextFileName) || !System.IO.File.Exists(contextFileName)) { block.Error($"Can't find the context file '{contextFileName}'"); } else { JobProjectManager manager = CreateManager(); // Ejecuta el proceso try { if (!await manager.ProcessAsync(projectFileName, contextFileName, cancellationToken)) { string error = string.Empty; // Añade los errores foreach (string innerError in manager.Errors) { error = error.AddWithSeparator(innerError, Environment.NewLine); } // Muestra el error block.Error(error.TrimIgnoreNull()); // Indica si se ha procesado correctamente if (manager.Errors.Count == 0) { processed = true; } } } catch (Exception exception) { block.Error($"Error when execute file '{projectFileName}' with context '{contextFileName}'", exception); } // Log block.Info($"End process '{projectFileName}' with context '{contextFileName}'"); } } // Devuelve el valor que indica si se ha procesado return(processed); }