public void Ended(object sender, EventArgs args) { Assert.IsNotNull(args, nameof(args)); try { SitecoreEventArgs jobargs = args as SitecoreEventArgs; string index_name = jobargs.Parameters[0] as string; var index = ContentSearchManager.Indexes.SingleOrDefault(idx => idx.Name == index_name); var payload = new IndexingUpdate { IndexName = index.Name, State = State.Ended, IndexRebuildTime = BuildTime(index), IndexRebuildMilliseconds = IndexHealthHelper.GetIndexRebuildTime(index.Name), ThroughPut = ThroughPut(index), NumberOfDocuments = index.Summary.NumberOfDocuments }; new Services.NotificationService <IndexingUpdate>().Send(payload); } catch (Exception) { } }
public async Task <HttpResponseMessage> IndexNotification([FromBody] IndexingUpdate data) { foreach (var conversation in SubscribedIndexingConversations.Keys) { var conversationReference = SubscribedIndexingConversations[conversation]; IMessageActivity message = Activity.CreateMessageActivity(); message.ChannelId = conversationReference.ChannelId; message.From = conversationReference.Bot; message.Recipient = conversationReference.User; message.Conversation = conversationReference.Conversation; message.Locale = "en-US"; switch (data.State) { case State.Started: message.Text = data.IndexRebuildMilliseconds == 0 ? $"Index rebuild for {data.IndexName} started" : $"Index rebuild for {data.IndexName} started, will take approximately {data.IndexRebuildTime}"; break; case State.Ended: message.Text = $"Index rebuild for {data.IndexName} completed in {data.IndexRebuildTime}"; break; default: break; } var connector = new ConnectorClient(new Uri(conversationReference.ServiceUrl)); await connector.Conversations.SendToConversationAsync((Activity)message); } return(Request.CreateResponse("OK")); }
public IHttpActionResult List() { if (!IsAuthenticated) { return(Unauthorized()); } using (new UserSwitcher(Context.Site.Domain.GetFullName(this.ApiUser), false)) { if (!Context.User.IsAdministrator) { return(Unauthorized()); } IList <IndexingUpdate> indexes = ContentSearchManager.Indexes.Where(index => { return(index.Group != IndexGroup.Experience && ContentSearchManager.Locator.GetInstance <ISearchIndexSwitchTracker>().IsIndexOn(index.Name)); }) .Select(index => { StringBuilder sb = new StringBuilder(); sb.AppendLine(IndexingEventHandler.BuildTime(index)); sb.AppendLine(IndexingEventHandler.ThroughPut(index)); sb.AppendLine(string.Concat("Document count: ", index.Summary.NumberOfDocuments)); sb.AppendLine(string.Format("Last Updated: {0} (UTC)", string.Concat(index.Summary.LastUpdated.ToShortDateString(), " - ", index.Summary.LastUpdated.ToShortTimeString()))); var payload = new IndexingUpdate { IndexName = index.Name, Message = sb.ToString(), State = State.UnKnown, NumberOfDocuments = index.Summary.NumberOfDocuments, LastUpdated = index.Summary.LastUpdated, IndexRebuildMilliseconds = IndexHealthHelper.GetIndexRebuildTime(index.Name), IndexRebuildTime = IndexingEventHandler.BuildTime(index) }; return(payload); }).ToList(); return(new JsonResult <IList <IndexingUpdate> >(indexes, new JsonSerializerSettings(), Encoding.UTF8, this)); } }
public IHttpActionResult Rebuild([FromBody] string indexname) { if (!IsAuthenticated) { return(Unauthorized()); } using (new UserSwitcher(Context.Site.Domain.GetFullName(this.ApiUser), false)) { if (!Context.User.IsAdministrator) { return(Unauthorized()); } var index = ContentSearchManager.Indexes.SingleOrDefault(idx => idx.Name == indexname); var payload = new IndexingUpdate { IndexName = index.Name, State = State.Started, NumberOfDocuments = index.Summary.NumberOfDocuments, LastUpdated = index.Summary.LastUpdated, IndexRebuildMilliseconds = IndexHealthHelper.GetIndexRebuildTime(index.Name), IndexRebuildTime = IndexingEventHandler.BuildTime(index) }; if (index.Group == IndexGroup.Experience || !ContentSearchManager.Locator.GetInstance <ISearchIndexSwitchTracker>().IsIndexOn(index.Name)) { payload.State = State.NotStarting; return(new JsonResult <IndexingUpdate>(payload, new JsonSerializerSettings(), Encoding.UTF8, this)); } else { var job = IndexCustodian.FullRebuild(index, true); payload.Job = job.DisplayName; payload.State = State.Started; return(new JsonResult <IndexingUpdate>(payload, new JsonSerializerSettings(), Encoding.UTF8, this)); } } }