Example #1
0
        private static async Task CheckInternal()
        {
            var config = SvzConfig.GetConfig();

            Console.Write("Checking REDIS... ");
            using (var redisConn = ConnectionMultiplexer.Connect(config.Redis))
            {
                var db   = redisConn.GetDatabase();
                var guid = Guid.NewGuid().ToString("N");
                var isOk = await db.StringSetAsync($"healthcheck-{guid}", "ok", TimeSpan.FromSeconds(15));

                if (!isOk)
                {
                    throw new Exception("Redis failed!");
                }
            }

            Console.Write("OK!" + Environment.NewLine);

            Console.Write("Checking Postgres... ");
            using (var conn = new NpgsqlConnection(config.Postgres.ConnectionString))
            {
                var psqlTestVal = await conn.QuerySingleAsync <int>("SELECT 1");

                if (psqlTestVal != 1)
                {
                    throw new Exception("Postgres failed!");
                }
            }

            Console.Write("OK!" + Environment.NewLine);

            Console.Write("Checking ElasticSearch... ");
            var esConnection = new ConnectionSettings(new Uri(config.ElasticSearch.Url));
            var esClient     = new ElasticClient(esConnection);
            var idxList      = await esClient.GetIndexAsync("*");

            if (!idxList.IsValid)
            {
                throw new Exception("ElasticSearch failed!");
            }

            Console.Write("OK!" + Environment.NewLine);
        }
Example #2
0
        private static async Task SetupInternal()
        {
            var config = SvzConfig.GetConfig();

            using (var conn = new NpgsqlConnection(config.Postgres.ConnectionString))
            {
                var dbExists =
                    (await conn.QueryAsync <int>(
                         $"SELECT 1 from pg_database WHERE datname = '{config.Postgres.Database}'")).ToList();
                if (dbExists.Any())
                {
                    Ms("Dropping existing Svz database... ");
                    await conn.ExecuteScalarAsync($"DROP DATABASE \"{config.Postgres.Database}\"");

                    Ok();
                }

                Ms("Creating new Svz database... ");
                await conn.ExecuteScalarAsync($"CREATE DATABASE \"{config.Postgres.Database}\"");

                Ok();
            }

            Ms("Running migrations... ");
            var optBuild = new DbContextOptionsBuilder <BookDbContext>();

            optBuild.UseNpgsql($"{config.Postgres.ConnectionString};Database={config.Postgres.Database};");
            using (var ctx = new BookDbContext(optBuild.Options))
            {
                await ctx.Database.MigrateAsync();

                Ok();

                Ms("Import books from json... ");
                await ImportBooks("./books.json", ctx);

                Ok();
            }

            var esConnection = new ConnectionSettings(new Uri(config.ElasticSearch.Url));
            var esClient     = new ElasticClient(esConnection);

            var idxResp = await esClient.GetIndexAsync(config.ElasticSearch.Index);

            foreach (var item in idxResp.Indices)
            {
                Ms($"Dropping ES Index: {item.Key}... ");
                var resp = await esClient.DeleteIndexAsync(item.Key);

                if (!resp.IsValid)
                {
                    throw new Exception("Error deleting ES index: " + resp.ServerError.Error);
                }
                Ok();
            }

            Ms("Creating ES index... ");
            var respCreate = await esClient.CreateIndexAsync(config.ElasticSearch.Index);

            if (!respCreate.IsValid)
            {
                throw new Exception("Error creating ES index: " + respCreate.ServerError.Error);
            }
            Ok();

            Ms("Indexing data... ");
            Mapper.Initialize(cfg => { cfg.CreateMap <Book, BookSearchView>(); });

            var bsearch = new List <BookSearchView>();

            using (var ctx = new BookDbContext(optBuild.Options))
            {
                var blist = ctx.Books.ToList();
                bsearch = Mapper.Map <List <Book>, List <BookSearchView> >(blist);
            }

            var bulkDesc = new BulkDescriptor();

            bulkDesc.CreateMany(bsearch, (x, y) => x.Id(y.BookId)).Index(config.ElasticSearch.Index);
            var respBulk = await esClient.BulkAsync(bulkDesc);

            if (!respBulk.IsValid)
            {
                throw new Exception("Error indexing ES data: " + respBulk.ServerError);
            }
            Ok();
        }