public SingleSearchResult GetSongInfo(string searchQuery)
        {
            var result = new SingleSearchResult
            {
                ResultCode = ResultCode.Successful
            };

            try
            {
                logger.LogDebug("GetSongInfo start, use search query: {query}", searchQuery);

                var query = Parser.Parse(searchQuery);
                var songs = LucenePool.SearchSongs(musicConfiguration.IndexPath, query, 10);
                result.SongInfos = songs;

                logger.LogDebug("GetSongInfo ended, use search query: {query}, find {Length} results", searchQuery, songs.Length);
            }
            catch (Exception ex)
            {
                result.ResultCode   = ResultCode.Exception;
                result.ExtraMessage = "Error occur";
                logger.LogError(ex, "GetSongInfo Error Occur");
            }

            return(result);
        }
        public async void GetSingleAccountById(ObjectId id)
        {
            try
            {
                ConsoleLogger.LogInformation(
                    string.Concat("Calculation Test: Get single account by Id: ",
                                  id, " Started."));

                var timer = Stopwatch.StartNew();

                var accountEntry = await MongoDataContext.Repository <Account>().GetOne(id);

                if (!accountEntry.Success)
                {
                    ConsoleLogger.LogWarning(accountEntry.Message);
                    timer.Stop();
                    return;
                }
                var factorEntry =
                    await
                    MongoDataContext.Repository <AccountFactor>()
                    .GetOne(Builders <AccountFactor> .Filter.Eq(f => f.AccountId, accountEntry.Entity.Id));

                if (!factorEntry.Success)
                {
                    ConsoleLogger.LogWarning(factorEntry.Message);
                    timer.Stop();
                    return;
                }

                var output = new SingleSearchResult
                {
                    CompanyName = accountEntry.Entity.CompanyName,
                    Name        = accountEntry.Entity.Name,
                    Factor      = factorEntry.Entity.Factor,
                    Value       = accountEntry.Entity.Value,
                    Total       = accountEntry.Entity.Value * factorEntry.Entity.Factor
                };

                timer.Stop();

                Console.WriteLine(string.Concat(Environment.NewLine, "### GetSingleAccountById >> ", id, " ###"));
                ConsoleTable.From(new[] { output }).Write(Format.Alternative);

                var timespan = timer.Elapsed;
                ConsoleLogger.LogInformation(string.Concat("Calculation Test: Get single account by Id: ",
                                                           id, " Finished. Duration: ",
                                                           string.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds,
                                                                         timespan.Milliseconds / 10)));

                _testCounter++;
                ConsoleLogger.LogWarning(string.Concat("Test(s) left: ", _testCounter, "/", _testCount));
            }
            catch (Exception ex)
            {
                ConsoleLogger.LogCritical(ex.GetAllMessages());
            }
        }