Exemplo n.º 1
0
 public WinService(IJobScheduler jobScheduler)
 {
     ServiceStartupLogger.LogMessage("Started WinService.ctor");
     InitializeComponent();
     this.JobScheduler = jobScheduler;
     ServiceStartupLogger.LogMessage("Done WinService.ctor");
 }
Exemplo n.º 2
0
 public void DebugStart()
 {
     ServiceStartupLogger.LogMessage("Started WinService.DebugStart");
     this._stopRequested = false;
     this.ThreadProc();
     ServiceStartupLogger.LogMessage("Done WinService.DebugStart");
 }
Exemplo n.º 3
0
 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");
 }
Exemplo n.º 4
0
 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");
 }
Exemplo n.º 5
0
 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;
     }
 }
Exemplo n.º 6
0
 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");
 }
Exemplo n.º 7
0
        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");
        }
Exemplo n.º 9
0
        /// <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();
            }
        }