示例#1
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            StringBuilder trackingContents = new StringBuilder();

            trackingContents.AppendFormat(CultureInfo.InvariantCulture,
                                          "{0}:  Level: {1}, RecordNumber: {2}",
                                          record.GetType().Name, record.Level, record.RecordNumber);

            if (record is WorkflowInstanceRecord)
            {
                trackingContents.AppendFormat(CultureInfo.InvariantCulture,
                                              " Workflow InstanceID: {0} Workflow instance state: {1}\n",
                                              record.InstanceId, ((WorkflowInstanceRecord)record).State);
            }
            else if (record is ActivityStateRecord)
            {
                ActivityStateRecord activityTrackingRecord = (ActivityStateRecord)record;

                IDictionary <String, object> variables = activityTrackingRecord.Variables;
                StringBuilder vars = new StringBuilder();

                if (variables.Count > 0)
                {
                    vars.AppendLine("\n\tVariables:");
                    foreach (KeyValuePair <string, object> variable in variables)
                    {
                        vars.AppendLine(String.Format(
                                            "\t\tName: {0} Value: {1}", variable.Key, variable.Value));
                    }
                }
                trackingContents.AppendFormat(CultureInfo.InvariantCulture,
                                              " :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}\n",
                                              activityTrackingRecord.Activity.Name, activityTrackingRecord.State,
                                              ((variables.Count > 0) ? vars.ToString() : String.Empty));
            }
            else if (record is ActivityScheduledRecord)
            {
                trackingContents.AppendFormat(CultureInfo.InvariantCulture,
                                              " :ChildActivity DisplayName: {0}\n",
                                              ((ActivityScheduledRecord)record).Child.Name);
            }
            else if (record is CustomTrackingRecord)
            {
                CustomTrackingRecord userTrackingRecord = (CustomTrackingRecord)record;

                if (userTrackingRecord.Data.Count > 0)
                {
                    trackingContents.AppendFormat(CultureInfo.InvariantCulture,
                                                  "\n\tUser Data:\n");
                    foreach (string data in userTrackingRecord.Data.Keys)
                    {
                        trackingContents.AppendFormat(CultureInfo.InvariantCulture,
                                                      " \t\t {0} : {1}\n", data, userTrackingRecord.Data[data]);
                    }
                }
            }

            this.writer.WriteLine(trackingContents);
        }
示例#2
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            // Log header information
            AddEvent(String.Format("Type: {0}  Level: {1}, RecordNumber: {2}",
                                   record.GetType().Name, record.Level, record.RecordNumber));

            // If this is a instance record
            WorkflowInstanceRecord instance = record as WorkflowInstanceRecord;

            if (instance != null)
            {
                AddEvent(String.Format(" InstanceID: {0} State: {1}",
                                       instance.InstanceId, instance.State));
            }

            // If this is a bookmark record
            BookmarkResumptionRecord bookmark = record as BookmarkResumptionRecord;

            if (bookmark != null)
            {
                AddEvent(String.Format(" Bookmark {0} resumed",
                                       bookmark.BookmarkName));
            }

            // If this is an activity record
            ActivityStateRecord activity = record as ActivityStateRecord;

            if (activity != null)
            {
                IDictionary <String, object> variables = activity.Variables;
                StringBuilder s = new StringBuilder();


                if (variables.Count > 0)
                {
                    s.AppendLine(" Variables:");
                    foreach (KeyValuePair <string, object> v in variables)
                    {
                        s.AppendLine(String.Format("    {0} Value: [{1}]",
                                                   v.Key, v.Value));
                    }
                }
                AddEvent(String.Format(" Activity: {0} State: {1} {2}",
                                       activity.Activity.Name, activity.State, s.ToString()));
            }

            // If this is a user record
            CustomTrackingRecord user = record as CustomTrackingRecord;

            if ((user != null) && (user.Data.Count > 0))
            {
                AddEvent(String.Format(" User Data: {0}", user.Name));
                foreach (string data in user.Data.Keys)
                {
                    AddEvent(String.Format("   {0} : {1}", data, user.Data[data]));
                }
            }
        }
示例#3
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            Console.Write(String.Format(CultureInfo.InvariantCulture,
                                        "{0} emitted trackRecord: {1}  Level: {2}, RecordNumber: {3}",
                                        participantName, record.GetType().FullName,
                                        record.Level, record.RecordNumber));

            WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;

            if (workflowInstanceRecord != null)
            {
                Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                                " Workflow InstanceID: {0} Workflow instance state: {1}",
                                                record.InstanceId, workflowInstanceRecord.State));
            }

            ActivityStateRecord activityStateRecord = record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                IDictionary <String, object> variables = activityStateRecord.Variables;
                StringBuilder vars = new StringBuilder();

                if (variables.Count > 0)
                {
                    vars.AppendLine("\n\tVariables:");
                    foreach (KeyValuePair <string, object> variable in variables)
                    {
                        vars.AppendLine(String.Format(
                                            "\t\tName: {0} Value: {1}", variable.Key, variable.Value));
                    }
                }
                Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                                " :Activity DisplayName: {0} :ActivityInstanceState: {1} {2}",
                                                activityStateRecord.Activity.Name, activityStateRecord.State,
                                                ((variables.Count > 0) ? vars.ToString() : String.Empty)));
            }

            CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

            if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
            {
                Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                                "\n\tUser Data:"));
                foreach (string data in customTrackingRecord.Data.Keys)
                {
                    Console.WriteLine(String.Format(CultureInfo.InvariantCulture,
                                                    " \t\t {0} : {1}", data, customTrackingRecord.Data[data]));
                }
            }
            Console.WriteLine();
        }
        public static String Serialize(TrackingRecord tr)
        {
            if (tr == null)
            {
                return(String.Empty);
            }

            XElement  root = new XElement(tr.GetType().Name);
            XDocument xml  = new XDocument(root);

            SerializeObject(root, tr);
            return(xml.ToString());
        }
示例#5
0
        public override void Track(TrackingRecord record, TimeSpan timeout)
        {
            Type recordType = record.GetType();

            Writer.WriteLine("[" + record.RecordNumber + "] ({" + record.EventTime + "}) Instance: " + record.InstanceId);

            if (record.Annotations.Count > 0)
            {
                Writer.WriteLine("Annotations:");
                foreach (string key in record.Annotations.Keys)
                {
                    Writer.WriteLine("\t" + key + "\t" + record.Annotations[key]);
                }
            }

            if (recordType == typeof(WorkflowInstanceUnhandledExceptionRecord))
            {
                WorkflowInstanceUnhandledExceptionRecord crecord = (WorkflowInstanceUnhandledExceptionRecord)record;
                RecordWriteLine(crecord, "-----------Exception");
                RecordWriteLine(crecord, crecord.UnhandledException.ToString());
                RecordWriteLine(crecord, "-----------End Exception");
            }
            else if (recordType == typeof(WorkflowInstanceRecord))
            {
                WorkflowInstanceRecord crecord = (WorkflowInstanceRecord)record;
                RecordWriteLine(crecord, "Workflow State: " + crecord.State);
            }
            else if (recordType == typeof(ActivityTrackingRecord))
            {
                ActivityTrackingRecord crecord = (ActivityTrackingRecord)record;
                RecordWriteLine(crecord, "Activity, " + crecord.Name + ", entered state: " + crecord.State);

                if (crecord.Variables.Count > 0)
                {
                    Writer.WriteLine("Variables:");
                    foreach (string key in crecord.Variables.Keys)
                    {
                        Writer.WriteLine("\t" + key + "\t" + crecord.Variables[key].ToString());
                    }
                }
            }
        }
 //  The track method is called whenever the workflow runtime emits a tracking record
 protected override void Track(TrackingRecord record, TimeSpan timeout)
 {
     try
     {
         using (FileStream fs = new FileStream(Environment.ExpandEnvironmentVariables(Path), FileMode.Append))
         {
             XmlTextWriter writer = new XmlTextWriter(fs, ASCIIEncoding.ASCII)
             {
                 Formatting = Formatting.Indented
             };
             DataContractSerializer serializer = new DataContractSerializer(record.GetType());
             serializer.WriteObject(writer, record);
             writer.WriteRaw(Environment.NewLine);
             writer.Flush();
             fs.Flush();
         }
     }
     catch (Exception e)
     {
         Trace.WriteLine(String.Format(CultureInfo.InvariantCulture, "Exception in track method {0}", e.Message));
     }
 }
        /// <summary>
        /// Constructs a tracking message
        /// </summary>
        /// <param name="trackingRecord">The message to track</param>
        public CustomTrackingMessage(TrackingRecord trackingRecord)
        {
            RecordType   = trackingRecord.GetType().Name;
            InstanceId   = trackingRecord.InstanceId.ToString();
            RecordNumber = trackingRecord.RecordNumber;
            EventTime    = trackingRecord.EventTime;
            Content      = trackingRecord.ToString().Replace("<null>", "null");

            if (trackingRecord is WorkflowInstanceRecord)
            {
                ActivityDefinitionId = ((WorkflowInstanceRecord)trackingRecord).ActivityDefinitionId;
                State = ((WorkflowInstanceRecord)trackingRecord).State;
            }
            if (trackingRecord is ActivityScheduledRecord)
            {
                Activity      = new CustomActivityMessage(((ActivityScheduledRecord)trackingRecord).Activity);
                ChildActivity = new CustomActivityMessage(((ActivityScheduledRecord)trackingRecord).Child);
            }
            if (trackingRecord is ActivityStateRecord)
            {
                Activity  = new CustomActivityMessage(((ActivityStateRecord)trackingRecord).Activity);
                State     = ((ActivityStateRecord)trackingRecord).State;
                Variables = ((ActivityStateRecord)trackingRecord).Variables.ToDictionary(kvp => kvp.Key, kvp => kvp.Value == null ? null : kvp.Value.ToString());
                Arguments = ((ActivityStateRecord)trackingRecord).Arguments.ToDictionary(kvp => kvp.Key, kvp => kvp.Value == null ? null : kvp.Value.ToString());
            }
            if (trackingRecord is CustomTrackingRecord)
            {
                Activity = new CustomActivityMessage(((CustomTrackingRecord)trackingRecord).Activity);
                Name     = ((CustomTrackingRecord)trackingRecord).Name;
                Data     = string.Join(", ", ((CustomTrackingRecord)trackingRecord).Data.Select(kvp => string.Format("{0} = {1}", kvp.Key, kvp.Value)));
            }
            if (trackingRecord is WorkflowInstanceUnhandledExceptionRecord)
            {
                Activity = new CustomActivityMessage(((WorkflowInstanceUnhandledExceptionRecord)trackingRecord).FaultSource);
                Data     = ((WorkflowInstanceUnhandledExceptionRecord)trackingRecord).UnhandledException.ToString();
            }
        }
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            try
            {
                TestTraceManager.OptionalLogTrace("[InMemoryTrackingParticipant]Track()::InMemory tracking participant = {0} ; Tracking record type = {1} ; Record Details = {2}", this.Name, record.GetType(), record.ToString());
                TestTraceManager.OptionalLogTrace("[InMemoryTrackingParticipant]TestTraceManager.IsDefaultTrackingConfiguration = {0}", TestTraceManager.IsDefaultTrackingConfiguration.ToString());
                bool IsPushDataToTraceManager = true;

                ActualTrace _trace = this.GetActualTrackingData(record.InstanceId);

                if (record is WorkflowInstanceRecord)
                {
                    TrackWorkflowInstanceRecord(record as WorkflowInstanceRecord, _trace);
                }
                else if (record is ActivityStateRecord)
                {
                    IsPushDataToTraceManager = TrackActivityStateRecord(record as ActivityStateRecord, _trace);
                }
                else if (record is ActivityScheduledRecord)
                {
                    TrackActivityScheduledRecord(record as ActivityScheduledRecord, _trace);
                }
                else if (record is BookmarkResumptionRecord)
                {
                    TrackBookmarkResumptionRecord(record as BookmarkResumptionRecord, _trace);
                }
                else if (record is CancelRequestedRecord)
                {
                    TrackCancelRequestedRecord(record as CancelRequestedRecord, _trace);
                }
                else if (record is FaultPropagationRecord)
                {
                    TrackFaultPropagationRecord(record as FaultPropagationRecord, _trace);
                }
                if (IsPushDataToTraceManager)
                {
                    PushDataToTraceManager(record);
                }
            }
            //This exception will be eaten by the product tracking code and not available for review
            //So the only chance we have to see it is if we log it.
            catch (Exception e)
            {
                //Log.WarnInternal("Exception thrown in Track() method\n" + e.ToString());
                throw;
            }
        }
示例#9
0
        /// <summary>
        /// Retreive each type of tracking record and perform the corresponding fucntionality.
        /// </summary>
        /// <param name="record">Represents the tracking record.</param>
        /// <param name="timeout">Time out for the tracking to be completed.</param>
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            Tracer.WriteMessage(String.Format(CultureInfo.InvariantCulture, "{0} Emitted trackRecord: {1}  Level: {2}, RecordNumber: {3}", participantName, record.GetType().FullName, record.Level, record.RecordNumber));

            WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;

            if (workflowInstanceRecord != null)
            {
                if (_structuredTracer.IsEnabled)
                {
                    if (string.Equals(WorkflowInstanceStates.Persisted, workflowInstanceRecord.State, StringComparison.OrdinalIgnoreCase))
                    {
                        _structuredTracer.WorkflowPersisted(workflowInstanceRecord.InstanceId);
                    }
                    else if (string.Equals(WorkflowInstanceStates.UnhandledException, workflowInstanceRecord.State, StringComparison.OrdinalIgnoreCase))
                    {
                        WorkflowInstanceUnhandledExceptionRecord unhandledRecord = workflowInstanceRecord as WorkflowInstanceUnhandledExceptionRecord;
                        if (unhandledRecord != null)
                        {
                            _structuredTracer.WorkflowActivityExecutionFailed(unhandledRecord.InstanceId,
                                                                              unhandledRecord.FaultSource != null ? unhandledRecord.FaultSource.Name : unhandledRecord.ActivityDefinitionId,
                                                                              System.Management.Automation.Tracing.Tracer.GetExceptionString(unhandledRecord.UnhandledException));
                        }
                    }
                }
                this.ProcessWorkflowInstanceRecord(workflowInstanceRecord);
            }

            ActivityStateRecord activityStateRecord = record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                if (_structuredTracer.IsEnabled)
                {
                    ActivityInstanceState activityState = ActivityInstanceState.Executing;
                    if (!string.IsNullOrEmpty(activityStateRecord.State) &&
                        Enum.TryParse <ActivityInstanceState>(activityStateRecord.State, out activityState))
                    {
                        if (activityState == ActivityInstanceState.Executing)
                        {
                            _structuredTracer.ActivityExecutionQueued(activityStateRecord.InstanceId, activityStateRecord.Activity.Name);
                        }
                    }
                }
                this.ProcessActivityStateRecord(activityStateRecord);
            }

            CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

            if ((customTrackingRecord != null) && (customTrackingRecord.Data.Count > 0))
            {
                this.ProcessCustomTrackingRecord(customTrackingRecord);
            }
        }
 protected override void Track(TrackingRecord record, TimeSpan timeout)
 {
     if (record is ActivityStateRecord)
     {
         TrackActivityRecord((ActivityStateRecord)record);
     }
     else if (record is WorkflowInstanceRecord)
     {
         TrackWorkflowRecord((WorkflowInstanceRecord)record);
     }
     else if (record is BookmarkResumptionRecord)
     {
         TrackBookmarkRecord((BookmarkResumptionRecord)record);
     }
     else if (record is ActivityScheduledRecord)
     {
         TrackActivityScheduledRecord((ActivityScheduledRecord)record);
     }
     else if (record is CancelRequestedRecord)
     {
         TrackCancelRequestedRecord((CancelRequestedRecord)record);
     }
     else if (record is FaultPropagationRecord)
     {
         TrackFaultPropagationRecord((FaultPropagationRecord)record);
     }
     else if (record is CustomTrackingRecord)
     {
         TrackCustomRecord((CustomTrackingRecord)record);
     }
     else
     {
         throw new PlatformNotSupportedException(Resources.UnrecognizedTrackingRecord(record?.GetType().Name));
     }
 }
示例#11
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            string name;

            object[] fullName = new object[4];
            fullName[0] = "WorkflowTrackingParticipant";
            fullName[1] = record.GetType().FullName;
            fullName[2] = record.Level;
            fullName[3] = record.RecordNumber;
            this.Tracer.WriteMessage(string.Format(CultureInfo.InvariantCulture, "{0} Emitted trackRecord: {1}  Level: {2}, RecordNumber: {3}", fullName));
            WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord;

            if (workflowInstanceRecord != null)
            {
                if (this._structuredTracer.IsEnabled)
                {
                    if (!string.Equals("Persisted", workflowInstanceRecord.State, StringComparison.OrdinalIgnoreCase))
                    {
                        if (string.Equals("UnhandledException", workflowInstanceRecord.State, StringComparison.OrdinalIgnoreCase))
                        {
                            WorkflowInstanceUnhandledExceptionRecord workflowInstanceUnhandledExceptionRecord = workflowInstanceRecord as WorkflowInstanceUnhandledExceptionRecord;
                            if (workflowInstanceUnhandledExceptionRecord != null)
                            {
                                Tracer tracer     = this._structuredTracer;
                                Guid   instanceId = workflowInstanceUnhandledExceptionRecord.InstanceId;
                                if (workflowInstanceUnhandledExceptionRecord.FaultSource != null)
                                {
                                    name = workflowInstanceUnhandledExceptionRecord.FaultSource.Name;
                                }
                                else
                                {
                                    name = workflowInstanceUnhandledExceptionRecord.ActivityDefinitionId;
                                }
                                tracer.WorkflowActivityExecutionFailed(instanceId, name, Tracer.GetExceptionString(workflowInstanceUnhandledExceptionRecord.UnhandledException));
                            }
                        }
                    }
                    else
                    {
                        this._structuredTracer.WorkflowPersisted(workflowInstanceRecord.InstanceId);
                    }
                }
                this.ProcessWorkflowInstanceRecord(workflowInstanceRecord);
            }
            ActivityStateRecord activityStateRecord = record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                if (this._structuredTracer.IsEnabled)
                {
                    ActivityInstanceState activityInstanceState = ActivityInstanceState.Executing;
                    if (!string.IsNullOrEmpty(activityStateRecord.State) && Enum.TryParse <ActivityInstanceState>(activityStateRecord.State, out activityInstanceState) && activityInstanceState == ActivityInstanceState.Executing)
                    {
                        this._structuredTracer.ActivityExecutionQueued(activityStateRecord.InstanceId, activityStateRecord.Activity.Name);
                    }
                }
                this.ProcessActivityStateRecord(activityStateRecord);
            }
            CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord;

            if (customTrackingRecord != null && customTrackingRecord.Data.Count > 0)
            {
                this.ProcessCustomTrackingRecord(customTrackingRecord);
            }
        }