public override void ClearAll()
 {
     QueryEvents.Clear();
     NotifyOfPropertyChange(() => CanClearAll);
     NotifyOfPropertyChange(() => CanCopyAll);
     NotifyOfPropertyChange(() => CanExport);
 }
        // This method is called after the WaitForEvent is seen (usually the QueryEnd event)
        // This is where you can do any processing of the events before displaying them to the UI
        protected override void ProcessResults()
        {
            //if (IsPaused) return; // exit here if we are paused

            if (Events != null)
            {
                foreach (var traceEvent in Events)
                {
                    QueryEvents.Insert(0, new QueryEvent()
                    {
                        QueryType = traceEvent.EventSubclassName.Substring(0, 3).ToUpper(),
                        StartTime = traceEvent.StartTime,
                        //EndTime = traceEvent.EndTime,
                        Username     = traceEvent.NTUserName,
                        Query        = traceEvent.TextData,
                        Duration     = traceEvent.Duration,
                        DatabaseName = traceEvent.DatabaseFriendlyName
                    });
                }

                Events.Clear();

                NotifyOfPropertyChange(() => QueryEvents);
                NotifyOfPropertyChange(() => CanClearAll);
                NotifyOfPropertyChange(() => CanCopyAll);
            }
        }
Example #3
0
        private bool Initialize()
        {
            Reset();

            if (!MakeConnection())
            {
                return(false);
            }
            if (!InitializeBot())
            {
                return(false);
            }

            modulesController.LoadModules(modules);

            TelnetConnector.Instance.Execute("servernotifyregister event=server");
            TelnetConnector.Instance.Execute("servernotifyregister event=channel id=0");
            TelnetConnector.Instance.Execute("servernotifyregister event=textprivate");
            //TelnetConnector.Instance.Execute("servernotifyregister event=textserver");

            if (luaController == null)
            {
                luaController = new LuaController();
                queryEvents   = new QueryEvents(luaController);
                luaController.InitializeLua();
            }

            ConsoleEx.WriteLine("Ready to go...");

            MakeSomeTest();
            return(true);
        }
Example #4
0
        //[EntryPoint]
        async Task When(QueryEvents e, ILegacyEventContext context)
        {
            bool singleStep    = e.Count == BatchProcessingSize;
            bool underSized    = e.Count < BatchProcessingSize;
            var  numberOfSteps = singleStep ? 1
                : underSized ? 1
                : (e.Count / BatchProcessingSize);
            int remainder              = e.Count % BatchProcessingSize;
            int checkpoint             = 0;
            List <TotemV1Event> events = new List <TotemV1Event>();

            for (int step = 1; step <= numberOfSteps; step++)
            {
                events.AddRange(await context.GetEvents(BatchProcessingSize, checkpoint));
                checkpoint = checkpoint + BatchProcessingSize;
                Then(new BatchStatusUpdated((100 / (float)numberOfSteps) * step));
            }
            if (remainder > 0)
            {
                events.AddRange(await context.GetEvents(remainder, checkpoint));
            }
            var safeEvents = events.Select(ev => new LegacyEvent(ev)).ToList();

            //var safeEvents = new List<string>();
            //foreach (var ev in events)
            //{
            //    safeEvents.Add(JsonConvert.SerializeObject(new LegacyEvent(ev)));
            //}
            Then(new LegacyEventsQueried(safeEvents));
        }
        // This method is called after the WaitForEvent is seen (usually the QueryEnd event)
        // This is where you can do any processing of the events before displaying them to the UI
        protected override void ProcessResults()
        {
            //if (IsPaused) return; // exit here if we are paused

            if (Events != null)
            {
                foreach (var traceEvent in Events)
                {
                    var newEvent = new QueryEvent()
                    {
                        QueryType         = traceEvent.EventSubclassName.Substring(0, 3).ToUpper(),
                        StartTime         = traceEvent.StartTime,
                        Username          = traceEvent.NTUserName,
                        Query             = traceEvent.TextData,
                        Duration          = traceEvent.Duration,
                        DatabaseName      = traceEvent.DatabaseFriendlyName,
                        RequestID         = traceEvent.RequestID,
                        RequestParameters = traceEvent.RequestParameters,
                        RequestProperties = traceEvent.RequestProperties
                    };

                    switch (traceEvent.EventClass)
                    {
                    case DaxStudioTraceEventClass.QueryEnd:

                        // if this is the blank query after a "clear cache and run" then skip it
                        if (newEvent.Query == Constants.RefreshSessionQuery)
                        {
                            continue;
                        }

                        // look for any cached rewrite events
                        if (traceEvent.RequestID != null && _rewriteEventCache.ContainsKey(traceEvent.RequestID))
                        {
                            var summary = _rewriteEventCache[traceEvent.RequestID];
                            newEvent.AggregationMatchCount = summary.MatchCount;
                            newEvent.AggregationMissCount  = summary.MissCount;
                            _rewriteEventCache.Remove(traceEvent.RequestID);
                        }

                        // TODO - update newEvent with queryBegin
                        QueryBeginEvent beginEvent = null;

                        _queryBeginCache.TryGetValue(traceEvent.RequestID ?? "", out beginEvent);
                        if (beginEvent != null)
                        {
                            // Add the parameters XML after the query text
                            if (beginEvent.RequestParameters != null)
                            {
                                newEvent.Query += Environment.NewLine +
                                                  Environment.NewLine +
                                                  beginEvent.RequestParameters +
                                                  Environment.NewLine;
                            }

                            // overwrite the username with the effective user if it's present
                            var effectiveUser = beginEvent.ParseEffectiveUsername();
                            if (!string.IsNullOrEmpty(effectiveUser))
                            {
                                newEvent.Username = effectiveUser;
                            }

                            _queryBeginCache.Remove(traceEvent.RequestID);
                        }



                        QueryEvents.Insert(0, newEvent);
                        break;

                    case DaxStudioTraceEventClass.AggregateTableRewriteQuery:
                        // cache rewrite events
                        var rewriteSummary = new AggregateRewriteSummary(traceEvent.RequestID, traceEvent.TextData);
                        if (_rewriteEventCache.ContainsKey(traceEvent.RequestID))
                        {
                            var summary = _rewriteEventCache[key : traceEvent.RequestID];
                            summary.MatchCount += rewriteSummary.MatchCount;
                            summary.MissCount  += rewriteSummary.MissCount;
                            _rewriteEventCache[key : traceEvent.RequestID] = summary;
                        }
                        else
                        {
                            _rewriteEventCache.Add(traceEvent.RequestID, rewriteSummary);
                        }

                        break;

                    case DaxStudioTraceEventClass.QueryBegin:

                        // if the requestID is null we are running against PowerPivot which does
                        // not seem to expose the RequestID property
                        if (traceEvent.RequestID == null)
                        {
                            break;
                        }

                        // cache rewrite events
                        if (_queryBeginCache.ContainsKey(traceEvent.RequestID))
                        {
                            // TODO - this should not happen
                            // we should not get 2 begin events for the same request
                        }
                        else
                        {
                            var newBeginEvent = new QueryBeginEvent()
                            {
                                RequestID         = traceEvent.RequestID,
                                Query             = traceEvent.TextData,
                                RequestProperties = traceEvent.RequestProperties,
                                RequestParameters = traceEvent.RequestParameters
                            };
                            _queryBeginCache.Add(traceEvent.RequestID, newBeginEvent);
                        }

                        break;
                    }
                }

                Events.Clear();

                // Clear out any cached rewrite events older than 10 minutes
                var toRemoveFromCache = _rewriteEventCache.Where((kvp) => kvp.Value.UtcCurrentTime > DateTime.UtcNow.AddMinutes(10)).Select(c => c.Key).ToList();
                foreach (var requestId in toRemoveFromCache)
                {
                    _rewriteEventCache.Remove(requestId);
                }

                NotifyOfPropertyChange(() => QueryEvents);
                NotifyOfPropertyChange(() => CanClearAll);
                NotifyOfPropertyChange(() => CanCopyAll);
                NotifyOfPropertyChange(() => CanExport);
            }
        }
        public IActionResult QueryEvents([FromQuery] int?eventCounter, [FromQuery] int?amount, [FromServices] QueryEvents queryEvents)
        {
            IEnumerable <EventDTO> events;

            if (eventCounter != null && amount != null)
            {
                events = queryEvents.Query((int)eventCounter, (int)amount);
            }
            else
            {
                events = queryEvents.Query();
            }


            if (!queryEvents.IsSuccesful)
            {
                return(BadRequest(queryEvents.Errors));
            }

            return(Ok(events));
        }
        // This method is called after the WaitForEvent is seen (usually the QueryEnd event)
        // This is where you can do any processing of the events before displaying them to the UI
        protected override void ProcessResults()
        {
            //if (IsPaused) return; // exit here if we are paused

            if (Events != null)
            {
                foreach (var traceEvent in Events)
                {
                    var newEvent = new QueryEvent()
                    {
                        QueryType    = traceEvent.EventSubclassName.Substring(0, 3).ToUpper(),
                        StartTime    = traceEvent.StartTime,
                        Username     = traceEvent.NTUserName,
                        Query        = traceEvent.TextData,
                        Duration     = traceEvent.Duration,
                        DatabaseName = traceEvent.DatabaseFriendlyName,
                        RequestID    = traceEvent.RequestID
                    };

                    switch (traceEvent.EventClass)
                    {
                    case DaxStudioTraceEventClass.QueryEnd:
                        // look for any cached rewrite events
                        if (_rewriteEventCache.ContainsKey(traceEvent.RequestID))
                        {
                            var summary = _rewriteEventCache[traceEvent.RequestID];
                            newEvent.AggregationMatchCount = summary.MatchCount;
                            newEvent.AggregationMissCount  = summary.MissCount;
                            _rewriteEventCache.Remove(traceEvent.RequestID);
                        }
                        QueryEvents.Insert(0, newEvent);
                        break;

                    case DaxStudioTraceEventClass.AggregateTableRewriteQuery:
                        // cache rewrite events
                        var rewriteSummary = new AggregateRewriteSummary(traceEvent.RequestID, traceEvent.TextData);
                        if (_rewriteEventCache.ContainsKey(traceEvent.RequestID))
                        {
                            var summary = _rewriteEventCache[key : traceEvent.RequestID];
                            summary.MatchCount += rewriteSummary.MatchCount;
                            summary.MissCount  += rewriteSummary.MissCount;
                            _rewriteEventCache[key : traceEvent.RequestID] = summary;
                        }
                        else
                        {
                            _rewriteEventCache.Add(traceEvent.RequestID, rewriteSummary);
                        }

                        break;
                    }
                }

                Events.Clear();

                // Clear out any cached rewrite events older than 10 minutes
                var toRemoveFromCache = _rewriteEventCache.Where((kvp) => kvp.Value.UtcCurrentTime > DateTime.UtcNow.AddMinutes(10)).Select(c => c.Key).ToList();
                foreach (var requestId in toRemoveFromCache)
                {
                    _rewriteEventCache.Remove(requestId);
                }

                NotifyOfPropertyChange(() => QueryEvents);
                NotifyOfPropertyChange(() => CanClearAll);
                NotifyOfPropertyChange(() => CanCopyAll);
            }
        }