public WinService(IJobScheduler jobScheduler) { ServiceStartupLogger.LogMessage("Started WinService.ctor"); InitializeComponent(); this.JobScheduler = jobScheduler; ServiceStartupLogger.LogMessage("Done WinService.ctor"); }
public void DebugStart() { ServiceStartupLogger.LogMessage("Started WinService.DebugStart"); this._stopRequested = false; this.ThreadProc(); ServiceStartupLogger.LogMessage("Done WinService.DebugStart"); }
protected override void OnStart(string[] args) { ServiceStartupLogger.LogMessage("Started WinService.OnStart"); this._stopRequested = false; this.ProcessingThread = new Thread(this.ThreadProc); this.ProcessingThread.Start(); ServiceStartupLogger.LogMessage("Done WinService.OnStart"); }
private void ThreadProc() { ServiceStartupLogger.LogMessage("Started WinService.ThreadProc"); this.JobScheduler.StartJobs(); while (!this._stopRequested) { Thread.Sleep(1000); } this.JobScheduler.StopJobs(); ServiceStartupLogger.LogMessage("Done WinService.ThreadProc"); }
public static IDocumentStore CreateDocumentStore() { try { ServiceStartupLogger.LogMessage("Start RavenHelper.CreateDocumentStore, creating document store"); var documentStore = new DocumentStore { ConnectionStringName = "RavenDB", Conventions = { FindTypeTagName = type => { if (typeof(SettingsBase).IsAssignableFrom(type)) { return("SettingsBases"); } if (typeof(ConnectionSettingBase).IsAssignableFrom(type)) { return("ConnectionSettingBases"); } return(DocumentConvention.DefaultTypeTagName(type)); }, MaxNumberOfRequestsPerSession = AppSettingsHelper.GetIntSetting("RavenMaxNumberOfRequestsPerSession", 30000) } }; ServiceStartupLogger.LogMessage("RavenHelper.CreateDocumentStore, calling Initialize"); documentStore.Initialize(); ServiceStartupLogger.LogMessage("RavenHelper.CreateDocumentStore, creating indexes"); IndexCreation.CreateIndexes(typeof(MMDB.DataService.Data.Jobs.DataServiceJobBase <>).Assembly, documentStore); ServiceStartupLogger.LogMessage("RavenHelper.CreateDocumentStore, diabling all caching"); documentStore.DatabaseCommands.DisableAllCaching(); ServiceStartupLogger.LogMessage("Done RavenHelper.CreateDocumentStore"); return(documentStore); } catch (Exception err) { ServiceStartupLogger.LogMessage("RavenHelper.CreateDocumentStore error: " + err.ToString()); throw; } }
protected override void OnStop() { ServiceStartupLogger.LogMessage("Started WinService.OnStop"); // TODO: Add code here to perform any tear-down necessary to stop your service. this._stopRequested = true; for (int i = 0; i < 600; i++) { if (this.ProcessingThread.IsAlive) { Thread.Sleep(100); } else { break; } } if (this.ProcessingThread.IsAlive) { this.ProcessingThread.Abort(); this.ProcessingThread.Join(); } System.Environment.Exit(0); ServiceStartupLogger.LogMessage("Done WinService.OnStop"); }
public static void SetupAll(ContainerBuilder builder) { try { ServiceStartupLogger.LogMessage("Start AutofacBuilder.SetupAll"); //Do me first var coreAutofacer = new CoreDataServiceAutofacer(); builder.RegisterModule(coreAutofacer); //builder.RegisterModule(new Whitebox.Containers.Autofac.WhiteboxProfilingModule()); var processedTypes = new List <Type> { coreAutofacer.GetType() }; //and then the other drooges var type = typeof(DataServiceAutofacModule); var types = AppDomain.CurrentDomain.GetAssemblies().ToList() .SelectMany(s => s.GetTypes()) .Where(p => type.IsAssignableFrom(p) && p != typeof(CoreDataServiceAutofacer) && !p.IsInterface && !p.IsAbstract); foreach (var t in types) { if (!processedTypes.Contains(t)) { var instance = (DataServiceAutofacModule)Activator.CreateInstance(t); builder.RegisterModule(instance); processedTypes.Add(t); } } string assemblyListString = ConfigurationManager.AppSettings["AutofacAssemblyList"]; if (!string.IsNullOrEmpty(assemblyListString)) { var list = assemblyListString.Split(';'); foreach (string assemblyName in list) { var assembly = Assembly.Load(assemblyName.Replace(".dll", "")); var assemblyTypes = assembly.GetTypes().Where(p => type.IsAssignableFrom(p) && p != typeof(CoreDataServiceAutofacer) && !p.IsInterface && !p.IsAbstract); foreach (var t in assemblyTypes) { if (!processedTypes.Contains(t)) { var instance = (Autofac.Core.IModule)Activator.CreateInstance(t); builder.RegisterModule(instance); processedTypes.Add(t); } } } } ServiceStartupLogger.LogMessage("End AutofacBuilder.SetupAll"); } catch (Exception err) { string x = err.ToString(); ServiceStartupLogger.LogMessage("Error in AutofacBuilder.SetupAll: " + x); throw; } }
protected override void Load(ContainerBuilder builder) { ServiceStartupLogger.LogMessage("Start CoreDataServiceAutofacter.Load"); //builder.RegisterType<RavenServerProvider>().As<raven>(); builder.RegisterType <EventReporter>().As <IEventReporter>(); builder.RegisterType <FtpCommunicator>().As <IFtpCommunicator>(); builder.RegisterType <FtpJobManager>().As <IFtpJobManager>(); builder.RegisterType <LogPurger>().As <ILogPurger>(); builder.RegisterType <RavenManager>().As <IRavenManager>(); builder.RegisterType <CustomControllerManager>().As <ICustomControllerManager>(); builder.RegisterType <DataObjectManager>().As <IDataObjectManager>(); builder.RegisterType <DataServiceViewManager>().As <IDataServiceViewManager>(); builder.RegisterType <SettingsManager>().As <ISettingsManager>(); builder.RegisterType <JobManager>().As <IJobManager>(); builder.RegisterType <JobImporterExporter>().As <IJobImporterExporter>(); builder.RegisterType <JobScheduler>().As <IJobScheduler>(); builder.RegisterType <TypeLoader>().As <ITypeLoader>(); builder.RegisterType <DataServiceLogger>().As <IDataServiceLogger>(); builder.RegisterType <ExceptionReporter>().As <IExceptionReporter>(); builder.RegisterType <ConnectionSettingsManager>().As <IConnectionSettingsManager>(); builder.RegisterType <ScheduleManager>().As <IScheduleManager>(); builder.RegisterType <EmailManager>().As <IEmailManager>(); builder.RegisterType <EmailQueuer>().As <IEmailQueuer>(); builder.RegisterType <HealthChecker>().As <IHealthChecker>(); builder.RegisterType <FtpDownloadJob>().AsSelf(); builder.RegisterType <FtpUploadJob>().AsSelf(); builder.RegisterType <LogPurgeJob>().AsSelf(); builder.RegisterType <GCFlushJob>().AsSelf(); builder.RegisterType <EmailSenderJob>().AsSelf(); builder.RegisterGeneric(typeof(JobWrapper <,>)).AsSelf(); builder.RegisterType <EmailSender>().AsSelf(); builder.RegisterType <RazorEmailEngine>().AsSelf(); builder.Register(ctx => { ServiceStartupLogger.LogMessage("Resolving IDocumentSession"); var store = RavenHelper.CreateDocumentStore(); ServiceStartupLogger.LogMessage("Done Resolving IDocumentSession"); return(store); } ).As <IDocumentStore>().SingleInstance(); builder.Register(ctx => { ServiceStartupLogger.LogMessage("Resolving IDocumentSession, getting IDocumentStore"); var store = ctx.Resolve <IDocumentStore>(); ServiceStartupLogger.LogMessage("Resolving IDocumentSession, got IDocumentStore, calling open session"); var session = ctx.Resolve <IDocumentStore>().OpenSession(); ServiceStartupLogger.LogMessage("Done Resolving IDocumentSession"); return(session); }).As <IDocumentSession>(); builder.RegisterGeneric(typeof(AutofacJobWrapper <>)); builder.RegisterType <StdSchedulerFactory>().As <ISchedulerFactory>(); builder.RegisterType <AutofacJobFactory>().As <IJobFactory>(); builder.Register(ctx => { ServiceStartupLogger.LogMessage("Resolving IScheduler"); var schedulerFactory = ctx.Resolve <ISchedulerFactory>(); var scheduler = schedulerFactory.GetScheduler(); scheduler.JobFactory = ctx.Resolve <IJobFactory>(); ServiceStartupLogger.LogMessage("Done Resolving IScheduler"); return(scheduler); }).As <IScheduler>(); ServiceStartupLogger.LogMessage("End CoreDataServiceAutofacter.Load"); }
/// <summary> /// The main entry point for the application. /// </summary> static void Main(string[] args) { try { Console.WriteLine("Starting MMDB.DataService.WindowsService"); ServiceStartupLogger.LogMessage("Starting MMDB.DataService.WindowsService"); var builder = new ContainerBuilder(); AutofacBuilder.SetupAll(builder); builder.RegisterType <WinService>().AsSelf(); var container = builder.Build(); ServiceStartupLogger.LogMessage("Done building autofac container"); if (args.Length > 0 && args[0].ToLower() == "/debug") { var updater = new ContainerBuilder(); updater.RegisterType <ConsoleDataServiceLogger>().As <IDataServiceLogger>(); updater.Update(container); Console.WriteLine("\t-Starting in debug mode..."); //var service = NinjectBootstrapper.Get<WinService>(); Console.WriteLine("\t-Resolving WinService..."); var service = container.Resolve <WinService>(); Console.WriteLine("\t-service.DebugStart..."); service.DebugStart(); } else if (args.Length > 0 && args[0].ToLower() == "/runjobnow") { int jobID = 0; if (args.Length < 2 || !int.TryParse(args[1], out jobID)) { throw new ArgumentException("/runjobname [jobid] - jobid must be an integer"); } var updater = new ContainerBuilder(); updater.RegisterType <ConsoleDataServiceLogger>().As <IDataServiceLogger>(); updater.Update(container); Dictionary <string, string> overrideParams = new Dictionary <string, string>(); for (int i = 2; i < args.Length; i++) { if (!string.IsNullOrEmpty(args[i])) { int index = args[i].IndexOf(':'); if (index <= 0) { throw new ArgumentException("Override args must be formatted as name:value"); } string name = args[i].Substring(0, index); string value = args[i].Substring(index + 1); if (overrideParams.ContainsKey(name)) { throw new ArgumentException("Override arg " + name + " defined more than once"); } overrideParams.Add(name, value); } } //NinjectBootstrapper.Kernel.Bind<IDataServiceLogger>().To<ConsoleDataServiceLogger>(); //var jobScheduler = NinjectBootstrapper.Kernel.Get<IJobScheduler>(); var jobScheduler = container.Resolve <IJobScheduler>(); jobScheduler.RunJobNow(jobID, overrideParams); System.Environment.Exit(0); } else if (args.Length > 0 && args[0].ToLower() == "/exportjobs") { Console.WriteLine("Exporting jobs"); string exportPath; if (args.Length >= 2) { exportPath = args[1]; } else { exportPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MMDB.DataService.Jobs.json"); } Console.WriteLine("\tExporting to " + exportPath); //var importerExporter = NinjectBootstrapper.Kernel.Get<IJobImporterExporter>(); var importerExporter = container.Resolve <IJobImporterExporter>(); importerExporter.ExportJobsToFile(exportPath); Console.WriteLine("\t-Exporting jobs Done"); return; } else if (args.Length > 0 && args[0].ToLower() == "/importjobs") { Console.WriteLine("Importing jobs"); string importPath; if (args.Length >= 2) { importPath = args[1]; } else { importPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "MMDB.DataService.Jobs.json"); } Console.WriteLine("\t-Importing from: " + importPath); //var importerExporter = NinjectBootstrapper.Kernel.Get<IJobImporterExporter>(); var importerExporter = container.Resolve <IJobImporterExporter>(); importerExporter.ImportJobsFromFile(importPath); Console.WriteLine("\t-Importing jobs done"); } else { Console.WriteLine("\t-Starting in service mode..."); ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { //NinjectBootstrapper.Get<WinService>() container.Resolve <WinService>() }; ServiceBase.Run(ServicesToRun); } } catch (Exception err) { Console.WriteLine("Error: " + err.ToString()); Console.WriteLine("Press any key to continue"); Console.ReadKey(); } }