コード例 #1
0
        private void WaitForGlobalReconnectTimeout()
        {
            var sleep = AppConfigurationProvider.Get <ManagerConfiguration>().GlobalReconnectTimeout;

            _logger.Info($"{nameof(WaitForGlobalReconnectTimeout)} Sleep for [ms]: {sleep}");
            Thread.Sleep(sleep);
            _logger.Info($"{nameof(WaitForGlobalReconnectTimeout)} Sleep finished");
        }
コード例 #2
0
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var dbconfig = AppConfigurationProvider.Get <DbConfiguration>();

            optionsBuilder.UseMultiDb(dbconfig.ConnectionStrings[dbconfig.DbProvider]);
            optionsBuilder.EnableSensitiveDataLogging();
            optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
        }
コード例 #3
0
        static void Main()
        {
            IConfigurationProvider configurationProvider = new AppConfigurationProvider();

            var connectionString = configurationProvider.GetValue(ConnectionStringKey, string.Empty);
            var entityPath       = configurationProvider.GetValue(EntityPathKey, string.Empty);
            var consumerGroup    = configurationProvider.GetValue(ConsumerGroupKey, string.Empty);
            var handlers         = configurationProvider.GetValue(HandlersKey, string.Empty).Split(',');

            IEventHubReader reader = new EventHubReader(connectionString, entityPath, consumerGroup);

            SubscribeHandlers(Assembly.GetExecutingAssembly(), reader);
            SubscribeExternalHandlers(reader);
            reader.Read();
        }
コード例 #4
0
 private static IWebHost PrepareHost(string[] args)
 {
     return(new WebHostBuilder()
            .UseKestrel(
                options =>
     {
         var config = AppConfigurationProvider.Get <ManagerConfiguration>();
         options.Listen(IPAddress.Parse(config.LocalIpAddress), config.ListeningPort,
                        listenOptions => { });
         options.Listen(IPAddress.Parse("127.0.0.1"), config.ListeningPort,
                        listenOptions => { });
     })
            .UseConfiguration(new ConfigurationBuilder().AddCommandLine(args).Build())
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup <Startup>()
            .Build());
 }
コード例 #5
0
        /// <summary>
        /// Uses provider specific extension based on DB provider set in DB Config
        /// </summary>
        /// <param name="services">Service collection</param>
        /// <returns>Returns service collection</returns>
        public static IServiceCollection AddEntityFrameworkMultiDb(this IServiceCollection services)
        {
            var dbconfig = AppConfigurationProvider.Get <DbConfiguration>();

            switch (dbconfig.DbProvider)
            {
            case DbProviders.MsSql:
                return(services.AddEntityFrameworkSqlServer());

            case DbProviders.PostgreSql:
                return(services.AddEntityFrameworkNpgsql());

            case DbProviders.Sqlite:
                return(services.AddEntityFrameworkSqlite());

            default:
                throw new InvalidOperationException("Unknown DB provider setup in database configuration.");
            }
        }
コード例 #6
0
        /// <inheritdoc />
        /// <summary>
        /// Runs the async apply reservation task async.
        /// </summary>
        public async Task RunAsyncApplyReservationTaskAsync(CancellationToken cancellationToken)
        {
            _logger.Info("RunAsyncApplyReservationTaskAsync Thread Started.");
            while (!cancellationToken.IsCancellationRequested)
            {
                try
                {
                    var applied = false;
                    if (await RestClient.TryToConnect())
                    {
                        _logger.Info("ApplyAvailableReservations [START]");
                        try
                        {
                            applied = await ApplyAvailableReservations();
                        }
                        catch (Exception e)
                        {
                            _logger.Info("ApplyAvailableReservations: " + e.Message + " [ERROR]");
                        }

                        _logger.Info("ApplyAvailableReservations: " + applied + " [STOP]");

                        Thread.Sleep((await RestClient.GetManagerConfiguration()).ReservationServiceRefreshTime);
                    }
                    else
                    {
                        _logger.Error("ApplyAvailableReservations: Failed connecting to " + RestClient.Endpoint +
                                      " [STOP]");
                        var sleep = AppConfigurationProvider.Get <ManagerConfiguration>().GlobalReconnectTimeout;
                        _logger.Info("ApplyAvailableReservations Sleep for [ms]: " + sleep);
                        Thread.Sleep(sleep);
                        _logger.Info("ApplyAvailableReservations Sleep finished");
                    }
                }
                catch (Exception e)
                {
                    _logger.Error("Exception during RunAsyncApplyReservationTaskAsync.", e);
                }
            }

            _logger.Info($"{nameof(RunAsyncApplyReservationTaskAsync)} STOP.");
        }
コード例 #7
0
        /// <summary>
        /// Uses provider specific extension based on configured provider in dbconfig.json
        /// </summary>
        /// <param name="builder">Context options builder</param>
        /// <param name="connectionString">Connection string</param>
        /// <returns>Returns Context options builder</returns>
        public static DbContextOptionsBuilder UseMultiDb(this DbContextOptionsBuilder builder, string connectionString)
        {
            var dbconfig = AppConfigurationProvider.Get <DbConfiguration>();

            switch (dbconfig.DbProvider)
            {
            case DbProviders.MsSql:
                return(builder.UseSqlServer(connectionString));

            case DbProviders.PostgreSql:
                return(builder.UseNpgsql(connectionString
                                         ));

            case DbProviders.Sqlite:
                return(builder.UseSqlite(connectionString));

            default:
                throw new InvalidOperationException("Unknown DB provider setup in database configuration.");
            }
        }
コード例 #8
0
ファイル: ProjectInstaller.cs プロジェクト: PHANTOMER/Tasker
        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);

            string email    = Context.Parameters["email"] ?? "",
                   userName = Context.Parameters["smtpusername"] ?? "",
                   password = Context.Parameters["smtppassword"] ?? "";

            Debugger.Launch();

            string path = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Tasker.Service.exe.config");
            AppConfigurationProvider config = new AppConfigurationProvider(path);

            config.UpdateSettings(new Dictionary <string, object>
            {
                { "SmtpUsername", userName },
                { "SmtpPassword", password },
                { "EmailFromAddress", email },
            });
        }
コード例 #9
0
        /// <summary>
        /// Retrieves model mapping from DB mapping files for given type
        /// </summary>
        /// <typeparam name="T">DB Model</typeparam>
        /// <param name="builder">Model builder</param>
        /// <returns>Returns model builder</returns>
        public static ModelBuilder GetModelMapping <T>(this ModelBuilder builder) where T : class
        {
            var dbConfiguration = AppConfigurationProvider.Get <DbConfiguration>();
            var mappingFileName = $"{typeof(T).Name}.json";

            var mappingObject =
                JsonConvert.DeserializeObject <ClassDbMapping>(
                    File.ReadAllText(dbConfiguration.DbMappingFilesPath + "/" + mappingFileName));

            builder.HasDefaultSchema(dbConfiguration.DefaultDbSchema);
            builder.Entity <T>().ToTable(mappingObject.TableNames[dbConfiguration.DbProvider]);

            foreach (var propertyMapping in mappingObject.PropertyMappings)
            {
                builder.Entity <T>()
                .Property(propertyMapping.PropertyName)
                .HasColumnName(propertyMapping.Mappings[dbConfiguration.DbProvider]);
            }

            return(builder);
        }
コード例 #10
0
        private static void ConfigureServices(IServiceCollection services)
        {
            services.AddLogging(builder => builder.AddConsole());

            var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

            Configuration = new ConfigurationBuilder()
                            .SetBasePath(Directory.GetCurrentDirectory())
                            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                            .AddJsonFile($"appsettings.{environment}.json", optional: true, reloadOnChange: true)
                            .AddEnvironmentVariables()
                            .Build();

            var ConfigurationProvider = new AppConfigurationProvider(Configuration, Directory.GetCurrentDirectory());

            //Ioc.Configure(services, ConfigurationProvider);

            DbContextConfiguration.UseSqlDataBase <DataBase>(services, ConfigurationProvider);

            MappingConfig.RegisterMappings();

            services.AddTransient <Functions, Functions>();
            services.AddSingleton(Configuration);
        }
コード例 #11
0
        /// <summary>
        /// Configure the specified app, env and loggerFactory. This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        /// </summary>
        /// <returns>The configure.</returns>
        /// <param name="app">App.</param>
        /// <param name="env">Env.</param>
        /// <param name="loggerFactory">Logger factory.</param>
        /// <param name="applicationLifetime">Handle application lifecycle.</param>
        /// <param name="logger">Logger.</param>
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory,
                              IApplicationLifetime applicationLifetime, IManagerLogger logger)
        {
            var appconfig = AppConfigurationProvider.Get <AppConfiguration>();

            applicationLifetime.ApplicationStopped.Register(OnShutdown);

            loggerFactory.AddConsole((logText, logLevel) =>
            {
                if (Debugger.IsAttached)
                {
                    return(true);
                }

                if (logLevel >= appconfig.DefaultLogLevel)
                {
                    return(true);
                }

                return(false);
            }, appconfig.IncludeScopes);

            loggerFactory.AddFile("Logs/log-{Date}.txt", LogLevel.Trace);

            app.UseExceptionHandler(
                options =>
            {
                options.Run(
                    async context =>
                {
                    context.Response.StatusCode  = (int)HttpStatusCode.InternalServerError;
                    context.Response.ContentType = "text/html";
                    var ex = context.Features.Get <IExceptionHandlerFeature>();
                    if (ex != null)
                    {
                        var err = $"<h1>Error: {ex.Error.Message}</h1>{ex.Error.StackTrace}";
                        await context.Response.WriteAsync(err).ConfigureAwait(false);
                        logger.Error(ex.Error.Message, ex.Error);
                    }
                });
            }
                );

            //app.UseDeveloperExceptionPage();

            app.UseStaticFiles();

            app.UseMvcWithDefaultRoute();

            app.UseCors("AllowAllHeaders");

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger();

            // Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint.
            app.UseSwaggerUI(c =>
            {
                c.RoutePrefix = "doc";
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });
        }
コード例 #12
0
 public VidzyContext()
 {
     Configuration = AppConfigurationProvider.BuildConfigurtions();
 }
コード例 #13
0
        public void SystemEnabledTest()
        {
            IToggleConfiguration provider = new AppConfigurationProvider(InitConfiguration());

            Assert.IsTrue(provider.SystemEnabled);
        }
コード例 #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="T:MobileManager.Startup"/> class.
 /// </summary>
 /// <param name="env">Env.</param>
 public Startup(IHostingEnvironment env)
 {
     AppConfigurationProvider.Register <DbConfiguration>(@"ConfigFiles/dbconfig.json")
     .RegisterNext <ManagerConfiguration>(@"ConfigFiles/managerconfig.json")
     .RegisterNext <AppConfiguration>(@"ConfigFiles/appsettings.json");
 }
コード例 #15
0
        public IActionResult Get()
        {
            LogRequestToDebug();

            return(JsonExtension(AppConfigurationProvider.Get <ManagerConfiguration>()));
        }
コード例 #16
0
 public CountriesDBContext()
 {
     Configuration = AppConfigurationProvider.BuildConfigurtions();
 }
コード例 #17
0
ファイル: WebHost.cs プロジェクト: fossabot/web-host
        public IWebHost Start()
        {
            container.Install(FromAssembly.This());

            BeforeStart();

            AppConfigurationProvider = container.Resolve <IAppConfigurationProvider>();
            Configuration            = AppConfigurationProvider.Get <WebHostConfiguration>();

            Index   = CreateIndex();
            Storage = CreateStorage();

            container
            .Register(Component.For <IPathResolver>().ImplementedBy <PathResolver>())
            .Register(Component.For <IJsonMergeVisitor>().ImplementedBy <JsonMergeVisitor>())
            .Register(Component.For <IDiagnosticsDumpService>().ImplementedBy <DiagnosticsDumpService>())
            .Register(Component.For <IJsonConverter>().ImplementedBy <DotjemJsonConverter>())
            .Register(Component.For <ILazyComponentLoader>().ImplementedBy <LazyOfTComponentLoader>())
            .Register(Component.For <IWindsorContainer>().Instance(container))
            .Register(Component.For <IWebHost>().Instance(this))
            .Register(Component.For <IStorageIndex>().Instance(Index))
            .Register(Component.For <IStorageContext>().Instance(Storage))
            .Register(Component.For <IWebHostConfiguration>().Instance(Configuration))
            .Register(Component.For <IInitializationTracker>().Instance(Initialization));

            ILogger             perf    = container.Resolve <ILogger>();
            IPerformanceTracker startup = perf.TrackTask("Start");

            DiagnosticsLogger = container.Resolve <IDiagnosticsLogger>();

            perf.TrackAction(BeforeConfigure);
            perf.TrackAction(() => Configure(container.Resolve <IPipeline>()), "Configure Pipeline");
            perf.TrackAction(() => Configure(container), "Configure Container");
            perf.TrackAction(() => Configure(Storage), "Configure Storage");
            perf.TrackAction(() => Configure(Index), "Configure Index");
            perf.TrackAction(() => Configure(new HttpRouterConfigurator(configuration.Routes)), "Configure Routes");
            perf.TrackAction(AfterConfigure);

            ResolveComponents();

            Initialization.SetProgress("Bootstrapping.");
            Task.Factory.StartNew(() =>
            {
                perf.TrackAction(BeforeInitialize);
                Initialization.SetProgress("Initializing storage.");
                perf.TrackAction(() => Initialize(Storage), "Initialize Storage");
                Initialization.SetProgress("Initializing index.");
                perf.TrackAction(() => Initialize(Index), "Initialize Index");

                perf.TrackAction(AfterInitialize);

                storageManager = container.Resolve <IStorageManager>();
                indexManager   = container.Resolve <IStorageIndexManager>();
                Initialization.SetProgress("Loading index.");


                perf.TrackAction(storageManager.Start);
                perf.TrackAction(indexManager.Start);
                perf.TrackAction(AfterStart);

                Initialization.Complete();
                startup.Dispose();
            }).ContinueWith(async result => {
                if (!result.IsFaulted)
                {
                    return;
                }

                IDiagnosticsDumpService dump = Resolve <IDiagnosticsDumpService>();

                Guid ticket = Guid.NewGuid();
                try
                {
                    if (result.Exception != null)
                    {
                        DiagnosticsLogger.LogException(Severity.Fatal, result.Exception, new { ticketId = ticket });
                        dump.Dump(ticket, result.Exception.ToString());
                    }
                    else
                    {
                        DiagnosticsLogger.LogFailure(Severity.Fatal, "Server startup failed. Unknown Error.", new { ticketId = ticket });
                        dump.Dump(ticket, "Server startup failed. Unknown Error.");
                    }

                    Initialization.SetProgress("Server startup failed. Please contact support. ({0})", ticket);
                }
                catch (Exception ex)
                {
                    //TODO: (jmd 2015-10-01) Temporary Dumping of failure we don't know where to put.
                    string dumpMessage =
                        $"{ex}{Environment.NewLine}-----------------------------------{Environment.NewLine}{result.Exception}";
                    Initialization.SetProgress(dumpMessage);
                    dump.Dump(ticket, dumpMessage);
                }

                await Task.Delay(10.Minutes())
                .ContinueWith(t =>
                {
                    //NOTE: (jmd 2019-11-04) This restarts the application.
                    HttpRuntime.UnloadAppDomain();
                });
            });
            return(this);
        }
コード例 #18
0
        /// <summary>
        /// Configures the services.
        /// </summary>
        /// <param name="services">Services.</param>
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            using (var deviceDbContext = new GeneralDbContext())
            {
                deviceDbContext.Database.EnsureCreated();
            }

            services.AddMvc()
            .AddJsonOptions(
                options => options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                ).AddJsonOptions(options =>
            {
                options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
            });

            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                Formatting            = Formatting.Indented,
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore
            };

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "MobileManager API", Version = "v1"
                });

                //Set the comments path for the swagger json and ui.
                var basePath = AppContext.BaseDirectory;
                var xmlPath  = Path.Combine(basePath, "MobileManager.xml");
                c.IncludeXmlComments(xmlPath);
            });

            services.AddReact();
            services.AddMvc();

            services.AddEntityFrameworkMultiDb()
            .AddDbContext <GeneralDbContext>();

            services.AddCors(options =>
            {
                options.AddPolicy("AllowAllHeaders",
                                  builder =>
                {
                    builder.AllowAnyOrigin()
                    .AllowAnyHeader()
                    .AllowAnyMethod();
                });
            });

            services.AddTransient <IRepository <Device>, DeviceRepository>()
            .AddTransient <IRepository <Reservation>, ReservationQueueRepository>()
            .AddTransient <IRepository <ReservationApplied>, ReservationAppliedRepository>()
            .AddTransient <IRepository <AppiumProcess>, AppiumRepository>()
            .AddTransient <IRepository <LogMessage>, LoggerRepository>();

            //services.AddSingleton<IManagerConfiguration, ManagerConfiguration>();
            services.AddSingleton <IRestClient, RestClient>()
            .AddSingleton <IAppiumService, AppiumService>()
            .AddSingleton <IAdbController, AdbController>()
            .AddSingleton <IHttpContextAccessor, HttpContextAccessor>()
            .AddSingleton(typeof(IManagerConfiguration), AppConfigurationProvider.Get <ManagerConfiguration>())
            .AddSingleton <IManagerLogger, ManagerLogger>()
            .AddSingleton <IDeviceUtils, DeviceUtils>()
            .AddSingleton <IScreenshotService, ScreenshotService>()
            .AddSingleton <IExternalProcesses, ExternalProcesses>();


            services.AddMvcCore().AddApiExplorer();

            // Run hosted services
            var configuration = AppConfigurationProvider.Get <ManagerConfiguration>();

            if (configuration.AndroidServiceEnabled)
            {
                services.AddHostedService <AndroidDeviceService>();
            }

            if (configuration.IosServiceEnabled)
            {
                services.AddHostedService <IosDeviceService>();
            }

            services.AddHostedService <ReservationService>();
        }
コード例 #19
0
 public PlutoDbContext()
 {
     Configuration = AppConfigurationProvider.BuildConfigurtions();
 }
コード例 #20
0
        public void DefaultValueTest()
        {
            IToggleConfiguration provider = new AppConfigurationProvider(InitConfiguration());

            Assert.IsFalse(provider.DefaultValue);
        }
コード例 #21
0
        private async Task LoadConnectedAndroidDevicesAsync(CancellationToken cancellationToken)
        {
            _logger.Info($"{nameof(LoadConnectedAndroidDevicesAsync)} Thread started.");
            try
            {
                while (!cancellationToken.IsCancellationRequested)
                {
                    _logger.Debug($"Running {nameof(LoadConnectedAndroidDevicesAsync)}.");

                    if (await _restClient.TryToConnect())
                    {
                        var deviceIdAndStatus = GetAndroidDevicesFromAdbDevicesOutput();

                        await _deviceUtils.CheckAllDevicesInDevicePoolAreOnline(deviceIdAndStatus.Keys.ToList(),
                                                                                DeviceType.Android, _restClient);

                        foreach (var deviceId in deviceIdAndStatus.Keys)
                        {
                            var deviceAlreadyInPool = await IsDeviceAlreadyInDevicePoolAsync(deviceId);

                            if (!deviceAlreadyInPool)
                            {
                                var state = deviceIdAndStatus[deviceId];
                                if (state != "device")
                                {
                                    _logger.Error(
                                        $"{nameof(LoadConnectedAndroidDevicesAsync)}: Device with id: [{deviceId}] is in incorrect state: [{state}]. Expected state is [device]");
                                    continue;
                                }
                            }
                            else
                            {
                                continue;
                            }

                            _logger.Debug(
                                $"{nameof(LoadConnectedAndroidDevicesAsync)}: read device [{deviceId}] properties.");
                            var deviceName = GetDeviceName(deviceId);

                            if (string.IsNullOrWhiteSpace(deviceName))
                            {
                                _logger.Error(
                                    $"{nameof(LoadConnectedAndroidDevicesAsync)}: Failed to get deviceName to device with id: '" +
                                    deviceId + "'");
                                continue;
                            }

                            _logger.Debug(
                                $"{nameof(LoadConnectedAndroidDevicesAsync)}: new android device factory [{deviceId}] name [{deviceName.Trim('\n', '\r')}].");
                            var device = new DeviceFactory().NewDevice(deviceId, deviceName.Trim('\n', '\r'), true,
                                                                       DeviceType.Android, DeviceStatus.Online);

                            var deviceProperties = GetDevicePropertiesById(deviceId);

                            var properties = new List <DeviceProperties>();
                            foreach (var prop in deviceProperties)
                            {
                                properties.Add(new DeviceProperties(prop.Key, prop.Value));
                            }

                            device.Properties = properties;

                            await TryAddNewDeviceToDevicePoolAsync(device);

                            _logger.Debug(
                                $"{nameof(LoadConnectedAndroidDevicesAsync)}: TryAddNewDeviceToDevicePoolAsync [{JsonConvert.SerializeObject(device)}].");
                            await TryAddNewDeviceToDevicePoolAsync(device);
                        }

                        var sleepTime = (await _restClient.GetManagerConfiguration()).AndroidDeviceServiceRefreshTime;
                        _logger.Debug($"{nameof(LoadConnectedAndroidDevicesAsync)}: sleep for [{sleepTime}].");
                        Thread.Sleep(sleepTime);
                    }
                    else
                    {
                        _logger.Error($"{nameof(LoadConnectedAndroidDevicesAsync)}: Failed connecting to " +
                                      _restClient.Endpoint +
                                      " [STOP]");
                        var sleep = AppConfigurationProvider.Get <ManagerConfiguration>().GlobalReconnectTimeout;
                        _logger.Info($"{nameof(LoadConnectedAndroidDevicesAsync)}: Sleep for [ms]: {sleep}");
                        Thread.Sleep(sleep);
                        _logger.Info($"{nameof(LoadConnectedAndroidDevicesAsync)}: Sleep finished");
                    }
                }

                _logger.Info($"{nameof(LoadConnectedAndroidDevicesAsync)} STOP.");
            }
            catch (Exception e)
            {
                _logger.Error($"Stopping {nameof(LoadConnectedAndroidDevicesAsync)}.", e);
            }

            if (cancellationToken.IsCancellationRequested)
            {
                var result = _externalProcesses.RunProcessAndReadOutput("adb", "kill-server");
                _logger.Debug(
                    $"{nameof(LoadConnectedAndroidDevicesAsync)}: Stop ADB server to release ports - output:{result}");
            }
        }