コード例 #1
0
        void HandleActivityEvent(ActivityEventBase evt, ActivityType type, string activityMatchingId = null)
        {
            var eventInfo = new EventInfo(evt, currentTimeOffsets);

            SetOrigin(eventInfo);
            if (evt.Type == ActivityEventType.Begin || evt.Type == ActivityEventType.PotentialBegin)
            {
                var activity = new StartedActivity()
                {
                    begin              = eventInfo,
                    beginOwner         = currentPostprocessorOutput,
                    type               = type,
                    activityMatchingId = activityMatchingId,
                    milestones         = new List <ActivityMilestone>(),
                    phases             = new List <ActivityPhase>(),
                    mayLackEnd         = evt.Type == ActivityEventType.PotentialBegin
                };
                startedActivities[evt.ActivityId] = activity;
                if (activity.status == ActivityStatus.Unspecified)
                {
                    activity.status = evt.Status;
                }
                AddPhases(activity, evt);
            }
            else if (evt.Type == ActivityEventType.End)
            {
                StartedActivity startedActivity;
                if (startedActivities.TryGetValue(evt.ActivityId, out startedActivity))
                {
                    AddPhases(startedActivity, evt);
                    if (startedActivity.status == ActivityStatus.Unspecified)
                    {
                        startedActivity.status = evt.Status;
                    }
                    YieldActivity(startedActivity, eventInfo, currentPostprocessorOutput, allowTakingEndsDisplayName: true);
                    startedActivities.Remove(evt.ActivityId);
                }
            }
            else if (evt.Type == ActivityEventType.Milestone)
            {
                StartedActivity startedActivity;
                if (startedActivities.TryGetValue(evt.ActivityId, out startedActivity))
                {
                    startedActivity.milestones.Add(new ActivityMilestone(
                                                       null,
                                                       currentPostprocessorOutput,
                                                       eventInfo.timestamp - origin,
                                                       evt.DisplayName,
                                                       evt.Trigger
                                                       ));
                    AddPhases(startedActivity, evt);
                }
            }
        }
コード例 #2
0
 void UpdateStatus(StartedActivity activity, ActivityStatus eventStatus)
 {
     if (activity.status == ActivityStatus.Unspecified)
     {
         activity.status = eventStatus;
     }
     else if (eventStatus == ActivityStatus.Error)
     {
         activity.status = eventStatus;
     }
 }
コード例 #3
0
 void AddPhases(StartedActivity startedActivity, ActivityEventBase evt)
 {
     if (evt.Phases != null && evt.Phases.Count > 0 && startedActivity.phases.Count == 0)
     {
         startedActivity.phases.AddRange(evt.Phases.Select(ph => new ActivityPhase(
                                                               null,
                                                               currentPostprocessorOutput,
                                                               startedActivity.begin.timestamp - origin + ph.Begin,
                                                               startedActivity.begin.timestamp - origin + ph.End,
                                                               ph.Type,
                                                               ph.DisplayName
                                                               )));
     }
 }
コード例 #4
0
        void YieldActivity(StartedActivity startedActivity, EventInfo endEvtInfo, ITimelinePostprocessorOutput endOwner, bool allowTakingEndsDisplayName)
        {
            var begin = startedActivity.begin;

            activities.Add(new ActivityImpl(
                               startedActivity.beginOwner,
                               endOwner,
                               begin.timestamp - origin,
                               endEvtInfo.timestamp - origin,
                               (startedActivity.type == ActivityType.Lifespan && allowTakingEndsDisplayName && endEvtInfo.evt.DisplayName.Length > begin.evt.DisplayName.Length) ?
                               endEvtInfo.evt.DisplayName :          // for lifespans get End's display name because it may be more specific than Begin's one
                               begin.evt.DisplayName,
                               startedActivity.activityMatchingId,
                               startedActivity.type,
                               begin.evt.Trigger,
                               endEvtInfo.evt.Trigger,
                               startedActivity.milestones,
                               startedActivity.begin.evt.Tags.Concat(endEvtInfo.evt.Tags)
                               ));
        }
コード例 #5
0
        void YieldActivity(StartedActivity startedActivity, EventInfo endEvtInfo, ITimelinePostprocessorOutput endOwner, bool isEndedForcefully)
        {
            var begin = startedActivity.begin;

            activities.Add(new ActivityImpl(
                               startedActivity.beginOwner,
                               endOwner,
                               begin.timestamp - origin,
                               endEvtInfo.timestamp - origin,
                               (startedActivity.type == ActivityType.Lifespan && !isEndedForcefully && endEvtInfo.evt.DisplayName.Length > begin.evt.DisplayName.Length) ?
                               endEvtInfo.evt.DisplayName :          // for lifespans get End's display name because it may be more specific than Begin's one
                               begin.evt.DisplayName,
                               startedActivity.activityMatchingId,
                               startedActivity.type,
                               begin.evt.Trigger,
                               endEvtInfo.evt.Trigger,
                               startedActivity.milestones,
                               startedActivity.phases,
                               startedActivity.begin.evt.Tags.Concat(endEvtInfo.evt.Tags),
                               isError: startedActivity.status == ActivityStatus.Error,
                               isEndedForcefully: isEndedForcefully
                               ));
        }