private async Task StartApplication() { try { // NOTE: Job not yet recieve and process IsAlive requests here await ApplicationContainer.Resolve <IStartupManager>().StartAsync(); #if azurequeuesub _triggerHost = new TriggerHost(new AutofacServiceProvider(ApplicationContainer)); _triggerHostTask = _triggerHost.Start(); #endif await Log.WriteMonitorAsync("", Program.EnvInfo, "Started"); #if (!DEBUG) await AutoRegistrationInMonitoring.RegisterAsync(Configuration, _monitoringServiceUrl, Log); #endif } catch (Exception ex) { await Log.WriteFatalErrorAsync(nameof(Startup), nameof(StartApplication), "", ex); throw; } }
public static void Main(string[] args) { using (var logFactory = LogFactory.Create().AddUnbufferedConsole()) { var builder = new ContainerBuilder(); builder.RegisterInstance(logFactory); builder.AddTriggers(pool => { pool.AddDefaultConnection(new FakeReloadingManager("UseDevelopmentStorage=true")); }); builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); using (var container = builder.Build()) { var host = new TriggerHost(new AutofacServiceProvider(container)); var task = host.Start(); Console.ReadKey(); host.Cancel(); task.Wait(); Console.ReadKey(); } } }
public StartupManager( ILogFactory logFactory, TriggerHost triggerHost) { _log = logFactory.CreateLog(this); _triggerHost = triggerHost; }
public StartupManager( TriggerHost triggerHost, ICqrsEngine cqrsEngine) { _triggerHost = triggerHost; _cqrsEngine = cqrsEngine; }
public void Run() { var containerBuilder = _binder.Bind(_configurationRoot); var ioc = containerBuilder.Build(); var triggerHost = new TriggerHost(new AutofacServiceProvider(ioc)); triggerHost.Start().Wait(); }
static void Main(string[] args) { #if DEBUG Console.WriteLine("Starting... Is DEBUG"); #else Console.WriteLine("Starting... Is RELEASE"); #endif var webHostCancellationTokenSource = new CancellationTokenSource(); IWebHost webHost = null; TriggerHost triggerHost = null; Task webHostTask = null; Task triggerHostTask = null; var end = new ManualResetEvent(false); try { AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); webHostCancellationTokenSource.Cancel(); end.WaitOne(); }; webHost = new WebHostBuilder() .UseKestrel() .UseUrls("http://*:5000") .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .Build(); triggerHost = new TriggerHost(webHost.Services); webHostTask = webHost.RunAsync(webHostCancellationTokenSource.Token); triggerHostTask = triggerHost.Start(); // WhenAny to handle any task termination with exception, // or gracefully termination of webHostTask Task.WhenAny(webHostTask, triggerHostTask).Wait(); } finally { Console.WriteLine("Terminating..."); webHostCancellationTokenSource.Cancel(); triggerHost?.Cancel(); webHostTask?.Wait(); triggerHostTask?.Wait(); end.Set(); } }
public StartupManager( IEnumerable <IStartStop> startables #if azurequeuesub , TriggerHost triggerHost #endif ) { _startables = startables; #if azurequeuesub _triggerHost = triggerHost; #endif }
static void Main(string[] args) { var webHostCancellationTokenSource = new CancellationTokenSource(); IWebHost webHost = null; TriggerHost triggerHost = null; Task webHostTask = null; Task triggerHostTask = null; var end = new ManualResetEvent(false); try { AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); webHostCancellationTokenSource.Cancel(); end.WaitOne(); }; webHost = new WebHostBuilder() .UseKestrel() .UseUrls("http://*:5000") .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .UseApplicationInsights() .Build(); var version = typeof(Program).GetTypeInfo().Assembly.GetCustomAttribute <AssemblyFileVersionAttribute>().Version; Console.WriteLine($"Build Version {version}"); triggerHost = new TriggerHost(webHost.Services); webHostTask = Task.Factory.StartNew(() => webHost.Run()); triggerHostTask = triggerHost.Start(); // WhenAny to handle any task termination with exception, // or gracefully termination of webHostTask Task.WhenAny(webHostTask, triggerHostTask).Wait(); } finally { Console.WriteLine("Terminating..."); webHostCancellationTokenSource.Cancel(); triggerHost?.Cancel(); webHostTask?.Wait(); triggerHostTask?.Wait(); end.Set(); } }
protected override void OnStart(string[] args) { if (_Host == null) { _Host = new WorkerHost(); } _Host.Start(); if (_TriggerHost == null) { _TriggerHost = new TriggerHost(); } _TriggerHost.Start(); }
public ShutdownManager( ILogFactory logFactory, #if azurequeuesub TriggerHost triggerHost, #endif IEnumerable <IStopable> items) { _log = logFactory.CreateLog(this); _items = items; #if azurequeuesub _triggerHost = triggerHost; #endif }
public ShutdownManager( IEnumerable <IStartStop> stoppables, IEnumerable <IStopable> items, #if azurequeuesub TriggerHost triggerHost, #endif ILogFactory logFactory) { _stoppables = stoppables; _items = items; #if azurequeuesub _triggerHost = triggerHost; #endif _log = logFactory.CreateLog(this); }
public static void Main(string[] args) { try { Console.Title = "SolarCoin CashOut job"; #if DEBUG var settings = new AppSettings <CashOutSettings>().LoadFile("appsettings.Debug.json"); #elif RELEASE var settings = new AppSettings <CashOutSettings>().LoadFromWeb(Environment.GetEnvironmentVariable("SlrSettingsUrl")).Result; settings.HotWalletPrivKey = Environment.GetEnvironmentVariable("HotWalletPrivateKey"); #endif ServiceProvider = new AutofacServiceProvider(Bootstrap.ConfigureBuilder(ComponentName, settings).Build()); var rpcClient = ServiceProvider.GetService <IJsonRpcClient>(); Console.WriteLine("Importing private key to the local node - this may take up to several minutes..."); rpcClient.ImportPrivateKey(settings.HotWalletPrivKey).GetAwaiter().GetResult(); Console.WriteLine("The key was imported!"); TriggerHost = new TriggerHost(ServiceProvider); AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); TriggerHost.Cancel(); }; TriggerHost.Start().GetAwaiter().GetResult(); } catch (Exception e) { TriggerHost?.Cancel(); Task.Delay(1000).GetAwaiter().GetResult(); ServiceProvider?.GetService <ILog>()?.WriteErrorAsync(ComponentName, "", "", e).GetAwaiter().GetResult(); e.PrintToConsole(); #if DEBUG Console.ReadKey(); #endif } }
private async Task StartApplication() { try { _triggerHost = new TriggerHost(new AutofacServiceProvider(ApplicationContainer)); _triggerHostTask = _triggerHost.Start(); await Log.WriteMonitorAsync("", Program.EnvInfo, "Started"); } catch (Exception ex) { await Log.WriteFatalErrorAsync(nameof(Startup), nameof(StartApplication), "", ex); throw; } }
private static void Work([CLAP.Description("worker to start, or none to start all")] string worker) { var host = new WorkerHost(); host.Start(worker); var triggerHost = new TriggerHost(); triggerHost.Start(); Console.WriteLine(); Console.WriteLine("PRESS ANY KEY TO STOP"); Console.WriteLine(); Console.ReadKey(true); host.Stop(); triggerHost.Stop(); Console.WriteLine("Goodbye!"); }
private void StartApplication() { try { _triggerHost = new TriggerHost(new AutofacServiceProvider(ApplicationContainer)); _triggerHostTask = _triggerHost.Start(); } catch (Exception ex) { Log?.WriteFatalErrorAsync(nameof(Startup), nameof(StartApplication), "", ex); if (Log == null) { Console.WriteLine(ex); } } }
protected override void Load(ContainerBuilder builder) { Mapper.Initialize(cfg => { cfg.CreateMap <IBcnCredentialsRecord, BcnCredentialsRecordEntity>().IgnoreTableEntityFields(); cfg.CreateMap <IEthereumTransactionRequest, EthereumTransactionReqEntity>().IgnoreTableEntityFields() .ForMember(x => x.SignedTransferVal, config => config.Ignore()) .ForMember(x => x.OperationIdsVal, config => config.Ignore()); }); Mapper.Configuration.AssertConfigurationIsValid(); builder.Register(ctx => { var scope = ctx.Resolve <ILifetimeScope>(); var host = new TriggerHost(new AutofacServiceProvider(scope)); return(host); }).As <TriggerHost>() .SingleInstance(); builder.RegisterType <StartupManager>() .As <IStartupManager>() .SingleInstance(); builder.RegisterType <ShutdownManager>() .As <IShutdownManager>() .SingleInstance(); if (string.IsNullOrWhiteSpace(_jobSettings.Db.BitCoinQueueConnectionString)) { builder.AddTriggers(); } else { builder.AddTriggers(pool => { pool.AddDefaultConnection(_dbSettingsManager.ConnectionString(x => x.BitCoinQueueConnectionString)); }); } BindRabbitMq(builder); BindRepositories(builder); BindServices(builder); BindClients(builder); }
private async Task StartApplication() { try { // NOTE: Job not yet recieve and process IsAlive requests here _triggerHost = new TriggerHost(new AutofacServiceProvider(ApplicationContainer)); _triggerHost.ProvideAssembly(GetType().GetTypeInfo().Assembly); _triggerHostTask = _triggerHost.Start(); await Log.WriteMonitorAsync("", "", "Started"); } catch (Exception ex) { await Log.WriteFatalErrorAsync(nameof(Startup), nameof(StartApplication), "", ex); throw; } }
private async Task StartApplication() { try { var cqrs = ApplicationContainer.Resolve <ICqrsEngine>(); // bootstrap _triggerHost = new TriggerHost(new AutofacServiceProvider(ApplicationContainer)); _triggerHostTask = _triggerHost.Start(); await Log.WriteMonitorAsync("", "", "Started"); } catch (Exception ex) { await Log.WriteFatalErrorAsync(nameof(Startup), nameof(StartApplication), "", ex); throw; } }
private async Task StartApplication() { try { // NOTE: Job not yet recieve and process IsAlive requests here #if !DEBUG await Configuration.RegisterInMonitoringServiceAsync(_monitoringServiceUrl, _healthNotifier); #endif _triggerHost = new TriggerHost(new AutofacServiceProvider(ApplicationContainer)); _triggerHostTask = _triggerHost.Start(); _healthNotifier.Notify("Started", Program.EnvInfo); } catch (Exception ex) { _log.Critical(ex); throw; } }
public void RunJobs() { var triggerHost = new TriggerHost(Services); triggerHost.ProvideAssembly(GetType().GetTypeInfo().Assembly); var end = new ManualResetEvent(false); AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); triggerHost.Cancel(); end.WaitOne(); }; triggerHost.Start().Wait(); end.Set(); }
private async Task StartApplication() { try { // NOTE: Service not yet recieve and process requests here _triggerHost = new TriggerHost(new AutofacServiceProvider(ApplicationContainer)); _triggerHostTask = _triggerHost.Start(); await ApplicationContainer.Resolve <IStartupManager>().StartAsync(); await Log.WriteInfoAsync("", "", "Started"); } catch (Exception ex) { await Log.WriteFatalErrorAsync(nameof(Startup), nameof(StartApplication), "", ex); throw; } }
private void RegisterAzureQueueHandlers(ContainerBuilder builder) { builder.Register(ctx => { var scope = ctx.Resolve <ILifetimeScope>(); var host = new TriggerHost(new AutofacServiceProvider(scope)); return(host); }).As <TriggerHost>() .SingleInstance(); // NOTE: You can implement your own poison queue notifier for azure queue subscription. // See https://github.com/LykkeCity/JobTriggers/blob/master/readme.md // builder.Register<PoisionQueueNotifierImplementation>().As<IPoisionQueueNotifier>(); builder.AddTriggers( pool => { pool.AddDefaultConnection(_settingsManager.Nested(s => s.AzureQueue.ConnectionString)); }); }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseStatusCodePagesWithReExecute("/error/{0}"); app.UseMvc(); //app.UseSwagger(); //app.UseSwaggerUi(); app.UseStaticFiles(); this.TriggerHost = new TriggerHost(ServiceProvider); this.TriggerHost.ProvideAssembly(typeof(MainChainFunctions).GetTypeInfo().Assembly); appLifetime.ApplicationStarted.Register(StartApplication); appLifetime.ApplicationStopping.Register(StopApplication); appLifetime.ApplicationStopped.Register(CleanUp); }
public void Run() { // Load settings var settingsUrl = Configuration["SettingsUrl"]; if (string.IsNullOrWhiteSpace(settingsUrl)) { // Environment variable "SettingsUrl" with URL to settings file (e.g. "https://settings-dev.lykkex.net/xJNaS5XHZg6DfuUccyKfNcSiiIPMzM1E_WithdrawalRequestScheduler") should exist // You can do that at Project's properties -> Debug -> Environment Variables Console.WriteLine($"''SettingsUrl'' environment variable empty or not found"); return; } var httpClient = new HttpClient(); var response = httpClient.GetAsync(settingsUrl).Result; var settingsString = response.Content.ReadAsStringAsync().Result; var settings = Newtonsoft.Json.JsonConvert.DeserializeObject <AppSettings>(settingsString); var containerBuilder = new AzureBinder().Bind(settings.Settings); var ioc = containerBuilder.Build(); var triggerHost = new TriggerHost(new AutofacServiceProvider(ioc)); triggerHost.ProvideAssembly(GetType().GetTypeInfo().Assembly); var end = new ManualResetEvent(false); AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); triggerHost.Cancel(); end.WaitOne(); }; triggerHost.Start().Wait(); end.Set(); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public IServiceProvider ConfigureServices(IServiceCollection services) //public void ConfigureServices(IServiceCollection services) { var settings = GeneralSettingsReader.ReadGeneralSettings <BaseSettings>(Configuration, "OffchainMonitorSettings"); services.AddMvc(o => { o.Filters.Add(new HandleAllExceptionsFilterFactory()); }); services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new Info { Title = "OffchainMonitor_Api", Version = "v1" }); options.DescribeAllEnumsAsStrings(); //Determine base path for the application. var basePath = PlatformServices.Default.Application.ApplicationBasePath; //Set the comments path for the swagger json and ui. var xmlPath = Path.Combine(basePath, "OffchainMonitorApi.xml"); options.IncludeXmlComments(xmlPath); }); var builder = new SqlliteBinder().Bind(settings); builder.Populate(services); builder.RegisterType <TimerTriggerBinding>(); builder.RegisterType <QueueTriggerBinding>(); builder.RegisterType <CommitmentBroadcastCheck>(); var container = builder.Build(); var triggerHost = new TriggerHost(new AutofacServiceProvider(container)); triggerHost.ProvideAssembly(GetType().GetTypeInfo().Assembly); triggerHost.StartAndBlock(); return(new AutofacServiceProvider(container)); }
public static void Main(string[] args) { try { Console.Title = "SolarCoin CashIn Handler job"; #if DEBUG var settings = new AppSettings <CashInHandlerSettings>().LoadFile("appsettings.Debug.json"); #elif RELEASE var settings = new AppSettings <CashInHandlerSettings>().LoadFromWeb(Environment.GetEnvironmentVariable("SlrSettingsUrl")).Result; #endif ServiceProvider = new AutofacServiceProvider(Bootrsrap.ConfigureBuilder(ComponentName, settings).Build()); TriggerHost = new TriggerHost(ServiceProvider); AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); TriggerHost.Cancel(); }; TriggerHost.Start().GetAwaiter().GetResult(); } catch (Exception e) { TriggerHost?.Cancel(); Task.Delay(1000).GetAwaiter().GetResult(); ServiceProvider?.GetService <ILog>()?.WriteErrorAsync(ComponentName, "", "", e).GetAwaiter().GetResult(); e.PrintToConsole(); #if DEBUG Console.ReadKey(); #endif } }
public static void Main(string[] args) { try { #if DEBUG var settings = new AppSettings <AlertsSettings>().LoadFile("appsettings.Debug.json"); #elif RELEASE var settings = new AppSettings <AlertsSettings>().LoadFromEnvironment(); #endif BsonClassMap.RegisterClassMap <TransactionMongoEntity>(); ServiceProvider = new AutofacServiceProvider(Bootstrap.ConfigureBuilder(ComponentName, settings).Build()); TriggerHost = new TriggerHost(ServiceProvider); AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); TriggerHost.Cancel(); }; TriggerHost.Start().GetAwaiter().GetResult(); } catch (Exception e) { TriggerHost?.Cancel(); ServiceProvider?.GetService <ILog>()?.WriteErrorAsync(ComponentName, "", "", e).GetAwaiter().GetResult(); e.PrintToConsole(); #if DEBUG Console.ReadKey(); #endif } }
public static void Main(string[] args) { ContainerBuilder builder = new ContainerBuilder(); ILog log = new LogToConsole(); builder.RegisterInstance(log); builder.AddTriggers(pool => { pool.AddDefaultConnection("UseDevelopmentStorage=true"); }); builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); var container = builder.Build(); var host = new TriggerHost(new AutofacServiceProvider(container)); var task = host.Start(); Console.ReadKey(); host.Cancel(); task.Wait(); Console.ReadKey(); }
public void Run() { var settings = GeneralSettingsReader.ReadGeneralSettings <GeneralSettings>(Configuration.GetConnectionString("Settings")); var containerBuilder = new AzureBinder().Bind(settings.ChronobankJobs); var ioc = containerBuilder.Build(); var triggerHost = new TriggerHost(new AutofacServiceProvider(ioc)); triggerHost.ProvideAssembly(GetType().GetTypeInfo().Assembly); var end = new ManualResetEvent(false); AssemblyLoadContext.Default.Unloading += ctx => { Console.WriteLine("SIGTERM recieved"); triggerHost.Cancel(); end.WaitOne(); }; triggerHost.Start().Wait(); end.Set(); }
private static void Work([CLAP.Description("worker to start, or none to start all")]string worker) { var host = new WorkerHost(); host.Start(worker); var triggerHost = new TriggerHost(); triggerHost.Start(); Console.WriteLine(); Console.WriteLine("PRESS ANY KEY TO STOP"); Console.WriteLine(); Console.ReadKey(true); host.Stop(); triggerHost.Stop(); Console.WriteLine("Goodbye!"); }
// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); }); services.AddSwaggerGen(options => { options.DefaultLykkeConfiguration("v1", "SlackNotifications Job API"); }); var builder = new ContainerBuilder(); var settingsManager = Configuration.LoadSettings <AppSettings>(); Log = CreateLogWithSlack(services, settingsManager); builder.RegisterInstance(Log).As <ILog>().SingleInstance(); var settings = settingsManager.CurrentValue; builder.RegisterInstance(settings.SlackNotificationsJobSettings).SingleInstance(); builder.RegisterType <SlackNotifcationsConsumer>(); if (!string.IsNullOrEmpty(settings.SlackNotificationsJobSettings.ForwardMonitorMessagesQueueConnString)) { builder.RegisterInstance <IMsgForwarder>(new MsgForwarder(AzureQueueExt.Create( settingsManager.ConnectionString(x => x.SlackNotificationsJobSettings.ForwardMonitorMessagesQueueConnString), "slack-notifications-monitor"))).SingleInstance(); } else { builder.RegisterInstance <IMsgForwarder>(new MsgForwarderStub()).SingleInstance(); } builder.RegisterType <NotificationFilter>().As <INotificationFilter>().SingleInstance(); builder .RegisterType <SrvSlackNotifications>() .WithParameter(TypedParameter.From(settings.SlackIntegration)) .WithParameter(TypedParameter.From(settings)) .As <ISlackNotificationSender>(); builder .Register(c => MessagesRepository.Create(settingsManager.Nested(s => s.SlackNotificationsJobSettings.FullMessagesConnString))) .As <IMessagesRepository>(); builder.AddTriggers(pool => { pool.AddDefaultConnection(settingsManager.ConnectionString(x => x.SlackNotificationsJobSettings.SharedStorageConnString)); }); builder.RegisterType <UnmuteHandler>() .As <IStartable>() .AutoActivate() .SingleInstance(); builder.Populate(services); ApplicationContainer = builder.Build(); var serviceProvider = new AutofacServiceProvider(ApplicationContainer); _triggerHost = new TriggerHost(serviceProvider); _triggerHost.ProvideAssembly(typeof(SlackNotifcationsConsumer).Assembly); return(serviceProvider); }