Exemplo n.º 1
0
        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)
            {
            }
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 3
0
        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));
            }
        }
Exemplo n.º 4
0
        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));
                }
            }
        }