private static void WriteActivityTrackingRecord(ActivityTrackingRecord activityTrackingRecord)
 {
     WriteTitle("Activity Tracking Record");
     Console.WriteLine("EventDateTime: " + activityTrackingRecord.EventDateTime.ToString());
     Console.WriteLine("QualifiedName: " + activityTrackingRecord.QualifiedName.ToString());
     Console.WriteLine("Type: " + activityTrackingRecord.ActivityType);
     Console.WriteLine("Status: " + activityTrackingRecord.ExecutionStatus.ToString());
 }
 private void WriteActivityTrackingRecord(ActivityTrackingRecord activityTrackingRecord)
 {
     var message = GetTitle("Activity Tracking Record");
     message += string.Format("EventDateTime: {0}\r\n" , activityTrackingRecord.EventDateTime);
     message += string.Format("QualifiedName: {0}\r\n" , activityTrackingRecord.QualifiedName);
     message += string.Format("Type: {0}\r\n" , activityTrackingRecord.ActivityType);
     message += string.Format("Status: {0}\r\n" , activityTrackingRecord.ExecutionStatus);
     foreach (var item in activityTrackingRecord.Body)
     {
         message += string.Format("{0}: {1}\r\n", item.FieldName, item.Data);
     }
     m_Logger.Debug(message);
 }
 internal void ActivityStatusChange(object sender, WorkflowExecutor.ActivityStatusChangeEventArgs e)
 {
     WorkflowTrace.Tracking.TraceInformation("TrackingListener::ActivityStatusChange - Received Activity Status Change Event for activity {0}", new object[] { e.Activity.QualifiedName });
     if (sender == null)
     {
         throw new ArgumentNullException("sender");
     }
     if (!typeof(WorkflowExecutor).IsInstanceOfType(sender))
     {
         throw new ArgumentException("sender");
     }
     if (e == null)
     {
         throw new ArgumentNullException("e");
     }
     WorkflowExecutor exec = (WorkflowExecutor) sender;
     if ((this._channels == null) || (this._channels.Count <= 0))
     {
         WorkflowTrace.Tracking.TraceEvent(TraceEventType.Error, 0, ExecutionStringManager.NoChannels);
     }
     else
     {
         Activity activity = e.Activity;
         if (this.SubscriptionRequired(activity, exec))
         {
             Guid empty = Guid.Empty;
             Guid contextGuid = Guid.Empty;
             this.GetContext(activity, exec, out contextGuid, out empty);
             DateTime utcNow = DateTime.UtcNow;
             int nextEventOrderId = this._broker.GetNextEventOrderId();
             foreach (TrackingChannelWrapper wrapper in this._channels)
             {
                 ActivityTrackingRecord record = new ActivityTrackingRecord(activity.GetType(), activity.QualifiedName, contextGuid, empty, activity.ExecutionStatus, utcNow, nextEventOrderId, null);
                 if (wrapper.GetTrackingProfile(exec).TryTrackActivityEvent(activity, activity.ExecutionStatus, exec, record))
                 {
                     wrapper.TrackingChannel.Send(record);
                 }
             }
         }
     }
 }
        internal bool TryTrackActivityEvent(Activity activity, ActivityExecutionStatus status, IServiceProvider provider, ActivityTrackingRecord record)
        {
            List<ActivityTrackPointCacheItem> points;
            //
            // Check the match caches.
            if (TryGetCacheItems(activity, out points))
            {
                bool ret = false;
                foreach (ActivityTrackPointCacheItem item in points)
                {
                    if (item.HasLocationConditions)
                    {
                        if (!item.Point.IsMatch(activity, status))
                            continue;
                    }

                    if (item.Events.Contains(status))
                    {
                        ret = true;
                        item.Point.Track(activity, provider, record.Body);
                        record.Annotations.AddRange(item.Point.Annotations);
                    }
                }
                return ret;
            }
            return false;
        }
示例#5
0
        /// <summary>
        /// Serialise a <see cref="ActivityTrackingRecord" /> ready for persistence.
        /// </summary>
        /// <param name="activityTrackingRecord">
        /// The original <see cref="ActivityTrackingRecord" /> to serialise.
        /// </param>
        /// <returns>
        /// Modified copy of the <see cref="ActivityTrackingRecord" /> containing
        /// the serialised data.
        /// </returns>
        private static SerialisableActivityTrackingRecord buildSerialisableActivityTrackingRecord(ActivityTrackingRecord activityTrackingRecord)
        {
            SerialisableActivityTrackingRecord serialisableActivityTrackingRecord = new SerialisableActivityTrackingRecord();

            serialisableActivityTrackingRecord.ActivityType = activityTrackingRecord.ActivityType;
            serialisableActivityTrackingRecord.Annotations.AddRange(activityTrackingRecord.Annotations);
            serialisableActivityTrackingRecord.ContextGuid = activityTrackingRecord.ContextGuid;
            serialisableActivityTrackingRecord.EventDateTime = activityTrackingRecord.EventDateTime;
            serialisableActivityTrackingRecord.EventOrder = activityTrackingRecord.EventOrder;
            serialisableActivityTrackingRecord.ExecutionStatus = activityTrackingRecord.ExecutionStatus;
            serialisableActivityTrackingRecord.ParentContextGuid = activityTrackingRecord.ParentContextGuid;
            serialisableActivityTrackingRecord.QualifiedName = activityTrackingRecord.QualifiedName;
            
            if (activityTrackingRecord.Body != null)
            {
                for (int i = 0; i < activityTrackingRecord.Body.Count; i++)
                    serialisableActivityTrackingRecord.Body.Add(buildSerialisableTrackingDataItem(activityTrackingRecord.Body[i]));
            }

            if (activityTrackingRecord.EventArgs != null)
                serialisableActivityTrackingRecord.EventArgs = buildSerialisableData(activityTrackingRecord.EventArgs);

            return serialisableActivityTrackingRecord;
        }
 internal bool TryTrackActivityEvent(Activity activity, ActivityExecutionStatus status, IServiceProvider provider, ActivityTrackingRecord record)
 {
     List<ActivityTrackPointCacheItem> list;
     if (!this.TryGetCacheItems(activity, out list))
     {
         return false;
     }
     bool flag = false;
     foreach (ActivityTrackPointCacheItem item in list)
     {
         if ((!item.HasLocationConditions || item.Point.IsMatch(activity, status)) && item.Events.Contains(status))
         {
             flag = true;
             item.Point.Track(activity, provider, record.Body);
             record.Annotations.AddRange(item.Point.Annotations);
         }
     }
     return flag;
 }
示例#7
0
        private void LoadActivityEventsFromReader(SqlDataReader reader, object parameter)
        {
            if (null == reader)
            {
                throw new ArgumentNullException("reader");
            }

            //
            // There should always be 4 recordsets in this reader!
            //

            Dictionary <long, ActivityTrackingRecord> activities = new Dictionary <long, ActivityTrackingRecord>();
            //
            // Build a dictionary of activity records so that we can match
            // annotation and artifact records from subsequent recordsets
            DateTime tmpMin = SqlDateTime.MinValue.Value;

            while (reader.Read())
            {
                string qId = reader.GetString(0);
                ActivityExecutionStatus status = (ActivityExecutionStatus)reader[1];
                DateTime dt = reader.GetDateTime(2);
                Guid     context = reader.GetGuid(3), parentContext = reader.GetGuid(4);
                int      order = reader.GetInt32(5);

                if (reader.IsDBNull(6) || reader.IsDBNull(7))
                {
                    throw new InvalidOperationException(String.Format(System.Globalization.CultureInfo.CurrentCulture, ExecutionStringManager.SqlTrackingTypeNotFound, qId));
                }

                Type type    = Type.GetType(reader.GetString(6) + ", " + reader.GetString(7), true, false);
                long eventId = reader.GetInt64(8);

                DateTime dbDt = reader.GetDateTime(9);

                activities.Add(eventId, new ActivityTrackingRecord(type, qId, context, parentContext, status, dt, order, null));
                if (dbDt > tmpMin)
                {
                    tmpMin = dbDt;
                }
            }

            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidActivityEventReader);
            }

            //
            // If we have annotations on the event itself, add them
            while (reader.Read())
            {
                long   eventId    = reader.GetInt64(0);
                string annotation = null;

                if (!reader.IsDBNull(1))
                {
                    annotation = reader.GetString(1);
                }

                ActivityTrackingRecord activity = null;
                if (activities.TryGetValue(eventId, out activity))
                {
                    if (null != activity)
                    {
                        activity.Annotations.Add(annotation);
                    }
                }
            }

            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidActivityEventReader);
            }

            //
            // Build a dictionary of artifact records so that we can match
            // annotation records from subsequent recordsets
            BinaryFormatter formatter = new BinaryFormatter();
            Dictionary <long, TrackingDataItem> artifacts = new Dictionary <long, TrackingDataItem>();

            while (reader.Read())
            {
                long   eventId = reader.GetInt64(0);
                long   artId = reader.GetInt64(1);
                string name = reader.GetString(2), strData = null;
                object data = null;
                //
                // These may both be null
                if (!reader.IsDBNull(3))
                {
                    strData = reader.GetString(3);
                }

                if (!reader.IsDBNull(4))
                {
                    data = formatter.Deserialize(new MemoryStream((Byte[])reader[4]));
                }

                TrackingDataItem item = new TrackingDataItem();
                item.FieldName = name;
                if (null != data)
                {
                    item.Data = data;
                }
                else
                {
                    item.Data = strData;
                }

                artifacts.Add(artId, item);
                //
                // Find the event to which this artifact belongs and add it to the record
                ActivityTrackingRecord activity = null;
                if (activities.TryGetValue(eventId, out activity))
                {
                    if (null != activity)
                    {
                        activity.Body.Add(item);
                    }
                }
            }

            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidActivityEventReader);
            }

            //
            // If we have annotations add them to the appropriate artifact
            while (reader.Read())
            {
                long   artId      = reader.GetInt64(0);
                string annotation = null;

                if (!reader.IsDBNull(1))
                {
                    annotation = reader.GetString(1);
                }
                //
                // Find the right artifact and give it the annotation
                TrackingDataItem item = null;
                if (artifacts.TryGetValue(artId, out item))
                {
                    if (null != item)
                    {
                        item.Annotations.Add(annotation);
                    }
                }
            }

            _activityEvents.AddRange(activities.Values);

            //
            // Set the min value to the most recent event that we got with this query
            // Don't overwrite the previous min if nothing came back for this query
            if (tmpMin > SqlDateTime.MinValue.Value)
            {
                _actMinDT = tmpMin;
            }
            return;
        }
示例#8
0
        private void LoadActivityEventsFromReader(SqlDataReader reader, object parameter)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            Dictionary <long, ActivityTrackingRecord> dictionary = new Dictionary <long, ActivityTrackingRecord>();
            DateTime time = SqlDateTime.MinValue.Value;

            while (reader.Read())
            {
                string qualifiedName = reader.GetString(0);
                ActivityExecutionStatus executionStatus = (ActivityExecutionStatus)reader[1];
                DateTime dateTime    = reader.GetDateTime(2);
                Guid     contextGuid = reader.GetGuid(3);
                Guid     guid        = reader.GetGuid(4);
                int      eventOrder  = reader.GetInt32(5);
                if (reader.IsDBNull(6) || reader.IsDBNull(7))
                {
                    throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, ExecutionStringManager.SqlTrackingTypeNotFound, new object[] { qualifiedName }));
                }
                Type     activityType = Type.GetType(reader.GetString(6) + ", " + reader.GetString(7), true, false);
                long     key          = reader.GetInt64(8);
                DateTime time3        = reader.GetDateTime(9);
                dictionary.Add(key, new ActivityTrackingRecord(activityType, qualifiedName, contextGuid, guid, executionStatus, dateTime, eventOrder, null));
                if (time3 > time)
                {
                    time = time3;
                }
            }
            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidActivityEventReader);
            }
            while (reader.Read())
            {
                long   num3 = reader.GetInt64(0);
                string str2 = null;
                if (!reader.IsDBNull(1))
                {
                    str2 = reader.GetString(1);
                }
                ActivityTrackingRecord record = null;
                if (dictionary.TryGetValue(num3, out record) && (record != null))
                {
                    record.Annotations.Add(str2);
                }
            }
            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidActivityEventReader);
            }
            BinaryFormatter formatter = new BinaryFormatter();
            Dictionary <long, TrackingDataItem> dictionary2 = new Dictionary <long, TrackingDataItem>();

            while (reader.Read())
            {
                long   num4 = reader.GetInt64(0);
                long   num5 = reader.GetInt64(1);
                string str3 = reader.GetString(2);
                string str4 = null;
                object obj2 = null;
                if (!reader.IsDBNull(3))
                {
                    str4 = reader.GetString(3);
                }
                if (!reader.IsDBNull(4))
                {
                    obj2 = formatter.Deserialize(new MemoryStream((byte[])reader[4]));
                }
                TrackingDataItem item = new TrackingDataItem {
                    FieldName = str3
                };
                if (obj2 != null)
                {
                    item.Data = obj2;
                }
                else
                {
                    item.Data = str4;
                }
                dictionary2.Add(num5, item);
                ActivityTrackingRecord record2 = null;
                if (dictionary.TryGetValue(num4, out record2) && (record2 != null))
                {
                    record2.Body.Add(item);
                }
            }
            if (!reader.NextResult())
            {
                throw new ArgumentException(ExecutionStringManager.InvalidActivityEventReader);
            }
            while (reader.Read())
            {
                long   num6 = reader.GetInt64(0);
                string str5 = null;
                if (!reader.IsDBNull(1))
                {
                    str5 = reader.GetString(1);
                }
                TrackingDataItem item2 = null;
                if (dictionary2.TryGetValue(num6, out item2) && (item2 != null))
                {
                    item2.Annotations.Add(str5);
                }
            }
            this._activityEvents.AddRange(dictionary.Values);
            if (time > SqlDateTime.MinValue.Value)
            {
                this._actMinDT = time;
            }
        }
 private void WriteActivityTrackingRecord(ActivityTrackingRecord activityTrackingRecord)
 {
     WriteToFile("Activity: " + activityTrackingRecord.QualifiedName.ToString() + " " + activityTrackingRecord.ExecutionStatus.ToString());
 }