public NpcSystem(TimelineHandler handler) { _log.Trace($"Handling NpcSystem call: {handler}"); foreach (var timelineEvent in handler.TimeLineEvents) { if (string.IsNullOrEmpty(timelineEvent.Command)) { continue; } Timeline timeline; switch (timelineEvent.Command.ToLower()) { case "start": timeline = TimelineBuilder.GetLocalTimeline(); timeline.Status = Timeline.TimelineStatus.Run; TimelineBuilder.SetLocalTimeline(timeline); break; case "stop": timeline = TimelineBuilder.GetLocalTimeline(); timeline.Status = Timeline.TimelineStatus.Stop; StartupTasks.CleanupProcesses(); TimelineBuilder.SetLocalTimeline(timeline); break; } } }
private static void Run(string[] args) { // ignore all certs ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; // parse program flags if (!CommandLineFlagManager.Parse(args)) { return; } AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; _log.Trace($"Initiating {ApplicationDetails.Name} startup - Local: {DateTime.Now.TimeOfDay} UTC: {DateTime.UtcNow.TimeOfDay}"); //load configuration try { Program.Configuration = ClientConfigurationLoader.Config; } catch (Exception e) { var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var o = $"Exec path: {path} - configuration 404: {ApplicationDetails.ConfigurationFiles.Application} - exiting. Exception: {e}"; _log.Fatal(o); Console.WriteLine(o, Color.Red); Console.ReadLine(); return; } //linux clients do not catch stray processes or check for job duplication StartupTasks.SetStartup(); _listenerManager = new ListenerManager(); //check id _log.Trace(Comms.CheckId.Id); //connect to command server for updates and sending logs Comms.Updates.Run(); //linux clients do not perform local survey if (Configuration.HealthIsEnabled) { var h = new Health.Check(); h.Run(); } if (Configuration.HandlersIsEnabled) { var o = new Orchestrator(); o.Run(); } new ManualResetEvent(false).WaitOne(); }
private void OnChanged(object source, FileSystemEventArgs e) { try { _log.Trace($"FileWatcher event raised: {e.FullPath} {e.Name} {e.ChangeType}"); // filewatcher throws two events, we only need 1 DateTime lastWriteTime = File.GetLastWriteTime(e.FullPath); if (lastWriteTime != _lastRead) { _lastRead = lastWriteTime; _log.Trace("FileWatcher Processing: " + e.FullPath + " " + e.ChangeType); _log.Trace($"Reloading {MethodBase.GetCurrentMethod().DeclaringType}"); _log.Trace("terminate existing tasks and rerun orchestrator"); try { Shutdown(); } catch (Exception exception) { _log.Info(exception); } try { StartupTasks.CleanupProcesses(); } catch (Exception exception) { _log.Info(exception); } Thread.Sleep(7500); try { Run(); } catch (Exception exception) { _log.Info(exception); } } } catch (Exception exc) { _log.Info(exc); } }
private void OnChanged(object source, FileSystemEventArgs e) { // filewatcher throws two events, we only need 1 DateTime lastWriteTime = File.GetLastWriteTime(e.FullPath); if (lastWriteTime > _lastRead.AddSeconds(1)) { _lastRead = lastWriteTime; _log.Trace("File: " + e.FullPath + " " + e.ChangeType); _log.Trace($"Reloading {System.Reflection.MethodBase.GetCurrentMethod().DeclaringType}"); // now terminate existing tasks and rerun this.Shutdown(); StartupTasks.CleanupProcesses(); this.RunEx(); } }
internal async Task OnExecuteStartupTasks(ExecuteWhen when) { var ordered = StartupTasks .Where(t => t.ExecuteWhen == when) .OrderBy(t => t.ExecutionOrder) .ToArray(); if (ordered.Length == 0) { Log.Warn($"No startup tasks were found to execute during {when}."); } foreach (var task in ordered) { Log.Info($"Executing startup task {task.GetType().Name}."); await task.ExecuteAsync(null); } }
protected void Application_Start() { LogHelper.OutputTo(s => Debug.Write(s)); StartupTasks.RunFromAssemblyOf <ConfigTask_1_Container>(); FluentValidationModelValidatorProvider.Configure(); }
private static void Run(string[] args) { if (args.ToList().Contains("--version")) { Console.WriteLine(ApplicationDetails.Version); return; } #if DEBUG IsDebug = true; #endif if (args.ToList().Contains("--debug")) { Program.IsDebug = true; Console.WriteLine($"GHOSTS running in debug mode. Installed path: {ApplicationDetails.InstalledPath}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Application} == {File.Exists(ApplicationDetails.ConfigurationFiles.Application)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Dictionary} == {File.Exists(ApplicationDetails.ConfigurationFiles.Dictionary)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailContent} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailContent)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailReply} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailReply)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailsDomain} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailsDomain)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailsOutside} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailsOutside)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Health} == {File.Exists(ApplicationDetails.ConfigurationFiles.Health)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Timeline} == {File.Exists(ApplicationDetails.ConfigurationFiles.Timeline)}"); Console.WriteLine($"{ApplicationDetails.InstanceFiles.Id} == {File.Exists(ApplicationDetails.InstanceFiles.Id)}"); Console.WriteLine($"{ApplicationDetails.InstanceFiles.FilesCreated} == {File.Exists(ApplicationDetails.InstanceFiles.FilesCreated)}"); Console.WriteLine($"{ApplicationDetails.InstanceFiles.SurveyResults} == {File.Exists(ApplicationDetails.InstanceFiles.SurveyResults)}"); Console.WriteLine($"{ApplicationDetails.LogFiles.ClientUpdates} == {File.Exists(ApplicationDetails.LogFiles.ClientUpdates)}"); } else { Console.WriteLine($"GHOSTS running in production mode. Installed path: {ApplicationDetails.InstalledPath}"); } AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); _log.Trace($"Initiating Ghosts startup - Local time: {DateTime.Now.TimeOfDay} UTC: {DateTime.UtcNow.TimeOfDay}"); //load configuration try { Program.Configuration = ClientConfigurationLoader.Config; } catch (Exception e) { var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var o = $"Exec path: {path} - configuration 404: {ApplicationDetails.ConfigurationFiles.Application} - exiting. Exception: {e}"; _log.Fatal(o); Console.WriteLine(o); Console.ReadLine(); return; } //catch any stray processes running and avoid duplication of jobs running //StartupTasks.CleanupProcesses(); //make sure ghosts starts when machine starts StartupTasks.SetStartup(); ListenerManager.Run(); //check id _log.Trace(Comms.CheckId.Id); ////connect to command server for updates and sending logs Comms.Updates.Run(); //TODO? should these clients do a local survey? //if (Configuration.Survey.IsEnabled) //{ // try // { // Survey.SurveyManager.Run(); // } // catch (Exception exc) // { // _log.Error(exc); // } //} if (Configuration.HealthIsEnabled) { try { var h = new Health.Check(); h.Run(); } catch (Exception exc) { _log.Error(exc); } } if (Configuration.HandlersIsEnabled) { try { var o = new Orchestrator(); o.Run(); } catch (Exception exc) { _log.Error(exc); } } new ManualResetEvent(false).WaitOne(); }
//hook for shutdown tasks private static void CurrentDomain_ProcessExit(object sender, EventArgs e) { _log.Debug($"Initiating Ghosts shutdown - Local time: {DateTime.Now.TimeOfDay} UTC: {DateTime.UtcNow.TimeOfDay}"); StartupTasks.CleanupProcesses(); }
private static void Run(string[] args) { // ignore all certs ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; // parse program flags if (!CommandLineFlagManager.Parse(args)) { return; } //attach handler for shutdown tasks AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; _log.Trace($"Initiating Ghosts startup - Local time: {DateTime.Now.TimeOfDay} UTC: {DateTime.UtcNow.TimeOfDay}"); //load configuration try { Configuration = ClientConfigurationLoader.Config; } catch (Exception e) { var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var o = $"Exec path: {path} - configuration 404: {ApplicationDetails.ConfigurationFiles.Application} - exiting. Exception: {e}"; _log.Fatal(o); Console.WriteLine(o); Console.ReadLine(); return; } StartupTasks.CheckConfigs(); Thread.Sleep(500); //show window if debugging or if --debug flag passed in var handle = GetConsoleWindow(); if (!IsDebug) { ShowWindow(handle, SwHide); //add hook to manage processes running in order to never tip a machine over StartupTasks.CleanupProcesses(); } //add ghosts to startup StartupTasks.SetStartup(); //add listener on a port or ephemeral file watch to handle ad hoc commands ListenerManager.Run(); //do we have client id? or is this first run? _log.Trace(Comms.CheckId.Id); //connect to command server for 1) client id 2) get updates and 3) sending logs/surveys Comms.Updates.Run(); //local survey gathers information such as drives, accounts, logs, etc. if (Configuration.Survey.IsEnabled) { try { Survey.SurveyManager.Run(); } catch (Exception exc) { _log.Error(exc); } } if (Configuration.HealthIsEnabled) { try { var h = new Health.Check(); h.Run(); } catch (Exception exc) { _log.Error(exc); } } //timeline processing if (Configuration.HandlersIsEnabled) { try { var o = new Orchestrator(); o.Run(); } catch (Exception exc) { _log.Error(exc); } } //ghosts singleton new ManualResetEvent(false).WaitOne(); }
private static void Run(string[] args) { //handle flags if (args.ToList().Contains("--version")) { //handle version flag and return ghosts and referenced assemblies information Console.WriteLine($"{ApplicationDetails.Name}:{ApplicationDetails.Version}"); foreach (var assemblyName in Assembly.GetExecutingAssembly().GetReferencedAssemblies()) { Console.WriteLine($"{assemblyName.Name}: {assemblyName.Version}"); } return; } #if DEBUG Program.IsDebug = true; #endif if (args.ToList().Contains("--debug") || Program.IsDebug) { Program.IsDebug = true; Console.WriteLine($"GHOSTS ({ApplicationDetails.Name}:{ApplicationDetails.Version}) running in debug mode. Installed path: {ApplicationDetails.InstalledPath}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Application} == {File.Exists(ApplicationDetails.ConfigurationFiles.Application)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Dictionary} == {File.Exists(ApplicationDetails.ConfigurationFiles.Dictionary)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailContent} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailContent)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailReply} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailReply)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailsDomain} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailsDomain)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.EmailsOutside} == {File.Exists(ApplicationDetails.ConfigurationFiles.EmailsOutside)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Health} == {File.Exists(ApplicationDetails.ConfigurationFiles.Health)}"); Console.WriteLine($"{ApplicationDetails.ConfigurationFiles.Timeline} == {File.Exists(ApplicationDetails.ConfigurationFiles.Timeline)}"); Console.WriteLine($"{ApplicationDetails.InstanceFiles.Id} == {File.Exists(ApplicationDetails.InstanceFiles.Id)}"); Console.WriteLine($"{ApplicationDetails.InstanceFiles.FilesCreated} == {File.Exists(ApplicationDetails.InstanceFiles.FilesCreated)}"); Console.WriteLine($"{ApplicationDetails.InstanceFiles.SurveyResults} == {File.Exists(ApplicationDetails.InstanceFiles.SurveyResults)}"); Console.WriteLine($"{ApplicationDetails.LogFiles.ClientUpdates} == {File.Exists(ApplicationDetails.LogFiles.ClientUpdates)}"); } else { Console.WriteLine($"GHOSTS ({ApplicationDetails.Name}:{ApplicationDetails.Version}) running in production mode. Installed path: {ApplicationDetails.InstalledPath}"); } // ignore all certs ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; //attach handler for shutdown tasks AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); _log.Trace($"Initiating Ghosts startup - Local time: {DateTime.Now.TimeOfDay} UTC: {DateTime.UtcNow.TimeOfDay}"); //load configuration try { Program.Configuration = ClientConfigurationLoader.Config; } catch (Exception e) { var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var o = $"Exec path: {path} - configuration 404: {ApplicationDetails.ConfigurationFiles.Application} - exiting. Exception: {e}"; _log.Fatal(o); Console.WriteLine(o); Console.ReadLine(); return; } StartupTasks.CheckConfigs(); Thread.Sleep(500); //show window if debugging or if --debug flag passed in var handle = GetConsoleWindow(); if (!Program.IsDebug) { ShowWindow(handle, SwHide); //add hook to manage processes running in order to never tip a machine over StartupTasks.CleanupProcesses(); } //add ghosts to startup StartupTasks.SetStartup(); //add listener on a port or ephemeral file watch to handle ad hoc commands ListenerManager.Run(); //do we have client id? or is this first run? _log.Trace(Comms.CheckId.Id); //connect to command server for 1) client id 2) get updates and 3) sending logs/surveys Comms.Updates.Run(); //local survey gathers information such as drives, accounts, logs, etc. if (Configuration.Survey.IsEnabled) { try { Survey.SurveyManager.Run(); } catch (Exception exc) { _log.Error(exc); } } if (Configuration.HealthIsEnabled) { try { var h = new Health.Check(); h.Run(); } catch (Exception exc) { _log.Error(exc); } } //timeline processing if (Configuration.HandlersIsEnabled) { try { var o = new Orchestrator(); o.Run(); } catch (Exception exc) { _log.Error(exc); } } //ghosts singleton new ManualResetEvent(false).WaitOne(); }
/// <summary> /// <see cref="FeatureStartupTask" /> that is executed when the <see cref="Feature" /> is started. /// </summary> /// <typeparam name="T">A <see cref="FeatureStartupTask" />.</typeparam> protected void RegisterStartupTask <T>() where T : FeatureStartupTask { StartupTasks.Add(typeof(T)); }
private static void Run(string[] args) { // ignore all certs ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; // parse program flags if (!CommandLineFlagManager.Parse(args)) { return; } AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; _log.Trace($"Initiating Ghosts startup - Local time: {DateTime.Now.TimeOfDay} UTC: {DateTime.UtcNow.TimeOfDay}"); //load configuration try { Program.Configuration = ClientConfigurationLoader.Config; } catch (Exception e) { var path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var o = $"Exec path: {path} - configuration 404: {ApplicationDetails.ConfigurationFiles.Application} - exiting. Exception: {e}"; _log.Fatal(o); Console.WriteLine(o, Color.Red); Console.ReadLine(); return; } //catch any stray processes running and avoid duplication of jobs running //StartupTasks.CleanupProcesses(); //make sure ghosts starts when machine starts StartupTasks.SetStartup(); ListenerManager.Run(); //check id _log.Trace(Comms.CheckId.Id); ////connect to command server for updates and sending logs Comms.Updates.Run(); //TODO? should these clients do a local survey? //if (Configuration.Survey.IsEnabled) //{ // try // { // Survey.SurveyManager.Run(); // } // catch (Exception exc) // { // _log.Error(exc); // } //} if (Configuration.HealthIsEnabled) { try { var h = new Health.Check(); h.Run(); } catch (Exception exc) { _log.Error(exc); } } if (Configuration.HandlersIsEnabled) { try { var o = new Orchestrator(); o.Run(); } catch (Exception exc) { _log.Error(exc); } } new ManualResetEvent(false).WaitOne(); }