public static void Main(string[] args) { ExceptionLogging.Initialize("17a42e4a67dd2e42d4aa40d8bf2d23ee", Assembly.GetExecutingAssembly().GetName().Name); var options = QueueManagerOptions.ParseCommandLineArgs(args); if (options == null) { return; } MainClass.Logger.Notice("LfMergeQueueManager starting with args: {0}", string.Join(" ", args)); // initialize the SLDR Sldr.Initialize(); var settings = MainClass.Container.Resolve <LfMergeSettings>(); settings.Initialize(); var fileLock = SimpleFileLock.CreateFromFilePath(settings.LockFile); try { if (!fileLock.TryAcquireLock()) { MainClass.Logger.Error("Can't acquire file lock - is another instance running?"); return; } MainClass.Logger.Notice("Lock acquired"); if (!CheckSetup(settings)) { return; } // Cleanup any hang projects new Janitor(settings, MainClass.Logger).CleanupAndRescheduleJobs(); for (var queue = Queue.FirstQueueWithWork; queue != null; queue = queue.NextQueueWithWork) { var clonedQueue = queue.QueuedProjects.ToList(); foreach (var projectCode in clonedQueue) { var projectPath = Path.Combine(settings.LcmDirectorySettings.ProjectsDirectory, projectCode, $"{projectCode}{LcmFileHelper.ksFwDataXmlFileExtension}"); var modelVersion = FwProject.GetModelVersion(projectPath); queue.DequeueProject(projectCode); int retCode = MainClass.StartLfMerge(projectCode, queue.CurrentActionName, modelVersion, true); // TODO: If LfMerge fails, should we re-queue the project, or not? if (retCode != 0) { // queue.EnqueueProject(projectCode); } } } } catch (Exception e) { MainClass.Logger.Error("Unhandled Exception:\n{0}", e); throw; } finally { if (fileLock != null) { fileLock.ReleaseLock(); } if (Sldr.IsInitialized) { Sldr.Cleanup(); } MainClass.Container.Dispose(); } MainClass.Logger.Notice("LfMergeQueueManager finished"); }