private void WriteSource(AuditSourceRecord record, StringBuilder sb)
 {
     if (record.Entry == null)
     {
         return;
     }
     sb.Append("<|||>" + _jsonSerializationService.SerializeObject(record) + "<|||>");
 }
        public void Rebuild()
        {
            if (Rebuilding)
            {
                return;
            }
            Rebuilt = 0;
            Task.Run(() =>
            {
                try
                {
                    Rebuilding = true;
                    lock (_locker)
                    {
                        _dir.ClearLock("rebuilding");
                        using (var writer = new IndexWriter(_dir, Analyzer, IndexWriter.MaxFieldLength.UNLIMITED))
                        {
                            writer.DeleteAll();
                        }
                    }

                    DateTime start = DateTime.Now.Subtract(TimeSpan.FromDays(_recordDays));
                    while (start < DateTime.Now.AddDays(1))
                    {
                        string file = _dataDirectory + "/source/" + start.ToString("yyyy-MMM-dd") + "/source.src";
                        if (File.Exists(file))
                        {
                            byte[] txt = File.ReadAllBytes(file);
                            foreach (string entry in StringZipper.Unzip(txt).Split(new[] { "<|||>" }, StringSplitOptions.RemoveEmptyEntries))
                            {
                                AuditSourceRecord record = _jsonSerializationService.DeserializeObject <AuditSourceRecord>(entry);
                                Log(record.Entry, record.Content, false);
                                Rebuilt++;
                            }
                        }

                        start = start.AddDays(1);
                    }
                }
                catch (Exception e)
                {
                    Sitecore.Diagnostics.Log.Error(e.ToString(), this);
                }
                finally
                {
                    Rebuilt    = -1;
                    Rebuilding = false;
                }
            });
        }