Esempio n. 1
0
        /// <summary>
        /// Create the correct service host according to the running environment.
        /// </summary>
        /// <returns>
        /// The created service host.
        /// </returns>
        private static IHost CreateHost()
        {
            IHost host = null;

            if (IsHosted())
            {
                host = new HostedServiceHost();
            }
            else if (ShouldRunAsDaemonOrService())
            {
                if (IsWindows())
                {
                    host = new WindowsServiceHost();
                }

                if (IsUnixOrMacOsx())
                {
                    host = new DaemonHost();
                }
            }
            else
            {
                host = new ConsoleHost();
            }

            return(host);
        }
Esempio n. 2
0
        private async Task <DaemonHostViewModel> GetDaemons(DaemonHost daemonHost)
        {
            try
            {
                var api = _restApiProvider.Get <IDaemonApi>(daemonHost.Url);

                var daemons = await api.GetDaemons(daemonHost.SubscribedDaemons.ToArray());

                // we pass this url to the Lightbringer.Service.
                // when one of its daemons changes, it will notify us by calling this url.
                var url = $"{Request.Scheme}://{Request.Host}{Request.PathBase}/api/notify/changed?id={daemonHost.Id}&type={NotifyParameter.DaemonType}&daemon={NotifyParameter.DaemonName}&state={NotifyParameter.State}";
                await api.Notify(url);

                var daemonVms = daemons
                                .Select(d => _daemonDtoConverter.ToDaemonVm(d, daemonHost))
                                .ToArray();

                return(new DaemonHostViewModel {
                    DaemonHost = daemonHost, Daemons = daemonVms
                });
            }
            catch (Exception ex)
            {
                return(new DaemonHostViewModel {
                    DaemonHost = daemonHost, Error = ex.Message
                });
            }
        }
        public LauncherModel(bool forceDaemon = false)
        {
            Daemon       = new DaemonHost(this, forceDaemon);
            AsyncManager = new AsyncManager(Run);

            Pipe.ServerPush += Pipe_ServerPush;

            Daemon.Start();
            Start();
        }
Esempio n. 4
0
        public DaemonVm ToDaemonVm(DaemonDto dto, DaemonHost daemonHost)
        {
            var isChecked = daemonHost.SubscribedDaemons?.Contains(dto.DaemonName) ?? false;

            return(new DaemonVm(
                       daemonHost.Id, daemonHost.Name,
                       dto.DaemonType, dto.DaemonName, dto.DisplayName, dto.Description, dto.State,
                       isChecked
                       ));
        }
        public LauncherModel()
        {
            Daemon       = new DaemonHost(this);
            AsyncManager = new AsyncManager(Run);

            Pipe.ServerPush += Pipe_ServerPush;

            Daemon.Start();
            Start();
        }
Esempio n. 6
0
        private async Task <IEnumerable <DaemonVm> > GetDaemonDtos(DaemonHost daemonHost, string filter)
        {
            var url = daemonHost.Url;

            var daemonApi = _restApiProvider.Get <IDaemonApi>(url);

            var daemons = (await daemonApi.FindDaemons(filter))
                          .Select(d => _daemonDtoConverter.ToDaemonVm(d, daemonHost));

            return(daemons);
        }
Esempio n. 7
0
        internal static void RunApplication(string[] args, CancellationToken ct = default(CancellationToken))
        {
            using (IHost daemonHost = DaemonHost.CreateBuilder(args).Build())
                using (IWebHost webHost = Program.CreateWebHostBuilder(args).Build())
                {
                    var webLifetime = (IApplicationLifetime)webHost.Services.GetService(typeof(IApplicationLifetime));
                    webLifetime.ApplicationStopping.Register(() => daemonHost.StopAsync(TimeSpan.FromSeconds(5)).GetAwaiter().GetResult());

                    daemonHost.Start();
                    webHost.RunAsync(ct.CanBeCanceled ? ct : new CancellationToken()).GetAwaiter().GetResult();
                }
        }
Esempio n. 8
0
        public async Task <IActionResult> AddDaemonHostUrl(AddDaemonHostViewModel viewModel)
        {
            try
            {
                var url = viewModel.DaemonHostUrl;

                if (string.IsNullOrEmpty(url))
                {
                    return(RedirectToAction(nameof(Index)));
                }

                if (!url.Contains(':') && !url.Contains('/'))
                {
                    url = _configuration.WebApiUrlTemplate.Replace("{hostName}", url);
                }

                var uri = new Uri(url); // try to parse url, if not valid, just fail.
                url = uri.ToString();

                var daemonHost = _store().Find(url);
                if (daemonHost == null)
                {
                    var isAliveApi = _restApiProvider.Get <IIsAliveApi>(url);

                    await isAliveApi.Get();

                    daemonHost = new DaemonHost
                    {
                        Name = viewModel.DaemonHostUrl,
                        Url  = url
                    };

                    _store().Upsert(daemonHost);
                }

                return(RedirectToAction(nameof(ListDaemons), new { hostId = daemonHost.Id }));
            }
            catch (Exception ex)
            {
                viewModel.Error = ex.Message;
                return(View(nameof(Index), viewModel));
            }
        }