public EventLogOnElasticSearch(ConnectionSettings elasticSettings, int portion)
        {
            _indexSeparationPeriod = IndexSeparationPeriod.None;
            _portion = portion;

            if (elasticSettings == null)
            {
                IConfiguration Configuration = new ConfigurationBuilder()
                                               .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                                               .Build();
                IConfigurationSection elasticSearchSection = Configuration.GetSection("ElasticSearch");
                Uri    nodeAddress     = elasticSearchSection.GetValue <Uri>("Node");
                string indexName       = elasticSearchSection.GetValue <string>("IndexName");
                string indexSeparation = elasticSearchSection.GetValue <string>("IndexSeparationPeriod");
                int    maximumRetries  = elasticSearchSection.GetValue <int>("MaximumRetries");
                int    maxRetryTimeout = elasticSearchSection.GetValue <int>("MaxRetryTimeout");

                elasticSettings = new ConnectionSettings(nodeAddress)
                                  .DefaultIndex(indexName)
                                  .MaximumRetries(maximumRetries)
                                  .MaxRetryTimeout(TimeSpan.FromSeconds(maxRetryTimeout));
                SetIndexSeparationPeriod(indexSeparation);
            }

            _client = new ElasticClient(elasticSettings);
        }
        public static string GetIndexSeparationPeriod(this DateTime period, IndexSeparationPeriod separation)
        {
            string separationWithFormat;

            switch (separation)
            {
            case IndexSeparationPeriod.Hour:
                separationWithFormat = period.ToString("yyyyMMddhh0000");
                break;

            case IndexSeparationPeriod.Day:
                separationWithFormat = period.ToString("yyyyMMdd000000");
                break;

            case IndexSeparationPeriod.Week:
                separationWithFormat = period.StartOfWeek(DayOfWeek.Monday).ToString("yyyyMMdd000000");
                break;

            case IndexSeparationPeriod.Month:
                separationWithFormat = period.StartOfMonth().ToString("yyyyMM01000000");
                break;

            case IndexSeparationPeriod.Quarter:
                separationWithFormat = period.StartOfQuarter().ToString("yyyyMM01000000");
                break;

            case IndexSeparationPeriod.HalfYear:
                separationWithFormat = period.StartOfHalfYear().ToString("yyyyMM01000000");
                break;

            case IndexSeparationPeriod.Year:
                separationWithFormat = period.StartOfYear().ToString("yyyyMM01000000");
                break;

            default:
                separationWithFormat = "FULL";
                break;
            }

            return(separationWithFormat);
        }
 public void SetIndexSaparationPeriod(IndexSeparationPeriod separation)
 {
     _indexSeparationPeriod = separation;
 }