Ejemplo n.º 1
0
 /// <summary>Sends the specified custom tracking record to any registered tracking providers.</summary>
 /// <param name="context"></param>
 /// <param name="record">The data to be tracked.</param>
 public static void Track(this IExtendedWorkflowContext context, CustomTrackingRecord record)
 {
     context.CodeActivityContext.Track(record);
 }
Ejemplo n.º 2
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            WorkflowRecord message = new WorkflowRecord();

            message.WFId  = WFIdentifier;
            message.JobId = JobId;

            message.EventId   = (int)record.RecordNumber;
            message.EventTime = record.EventTime.ToLocalTime();
            message.RunId     = record.InstanceId;

            WorkflowInstanceRecord wfRecord = record as WorkflowInstanceRecord;

            if (wfRecord != null)
            {
                message.State = wfRecord.State;
                message.Name  = WorkflowName;

                if (wfRecord.State == WorkflowInstanceStates.Idle)
                {
                    return;                                                //do not track idle status
                }
            }

            ActivityStateRecord actRecord = record as ActivityStateRecord;

            if (actRecord != null)
            {
                message.State = actRecord.State;
                message.Name  = actRecord.Activity.Name;
                if (actRecord.Activity.Name.Equals("DynamicActivity"))
                {
                    return;
                }

                if (actRecord.State == ActivityStates.Executing && actRecord.Activity.TypeName == "System.Activities.Statements.WriteLine")
                {
                    using (StringWriter writer = new StringWriter())
                    {
                        writer.Write(actRecord.Arguments["Text"]);
                        message.Message = writer.ToString();
                        writer.Close();
                    }
                }
            }

            WorkflowInstanceUnhandledExceptionRecord exRecord = record as WorkflowInstanceUnhandledExceptionRecord;

            if (exRecord != null)
            {
                message.State   = exRecord.State;
                message.Name    = WorkflowName;
                message.Message = exRecord.UnhandledException.Message;
            }

            CustomTrackingRecord cuRecord = record as CustomTrackingRecord;

            if (cuRecord != null)
            {
                message.Name    = cuRecord.Activity.Name;
                message.State   = cuRecord.Name;
                message.Message = cuRecord.Data["Message"] as string;
            }

            logWorkflowEvents.InsertEvent(message);
        }
        /// <summary>
        /// Logs a error message to the build summary.
        /// </summary>
        /// <param name="message">The message to the build summary.</param>
        public void LogError(string message)
        {
            var importance = new CustomTrackingRecord(string.Format("TrackBuildError: {0}", message));

            _context.Track(importance);
        }
Ejemplo n.º 4
0
        public static void TrackRecord(this NativeActivityContext context, String msg)
        {
            var ctr = new CustomTrackingRecord(msg, TraceLevel.Info);

            context.Track(ctr);
        }
        /// <summary>
        /// Logs a message to the build summary.
        /// </summary>
        /// <param name="message">The message to the build summary.</param>
        public void LogMsg(string message)
        {
            var importance = new CustomTrackingRecord(string.Format("TrackBuildMessage {0} {1}", BuildMessageImportance.High, message));

            _context.Track(importance);
        }
Ejemplo n.º 6
0
        protected override void Track(TrackingRecord record, TimeSpan timeout)
        {
            WorkflowInstanceRecord instanceTrackingRecord =
                record as WorkflowInstanceRecord;

            if (instanceTrackingRecord != null)
            {
                TrackInstance t = new TrackInstance();

                t.WorkflowID = instanceTrackingRecord.InstanceId;
                t.Status     = instanceTrackingRecord.State;
                t.EventDate  = DateTime.UtcNow;

                // Insert a record into the TrackInstance table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackInstances.InsertOnSubmit(t);
                dc.SubmitChanges();
            }

            BookmarkResumptionRecord bookTrackingRecord =
                record as BookmarkResumptionRecord;

            if (bookTrackingRecord != null)
            {
                TrackBookmark t = new TrackBookmark();

                t.WorkflowID   = bookTrackingRecord.InstanceId;
                t.BookmarkName = bookTrackingRecord.BookmarkName;
                t.EventDate    = DateTime.UtcNow;

                // Insert a record into the TrackBookmark table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackBookmarks.InsertOnSubmit(t);
                dc.SubmitChanges();
            }

            ActivityStateRecord activityStateRecord =
                record as ActivityStateRecord;

            if (activityStateRecord != null)
            {
                TrackActivity t = new TrackActivity();

                t.ActivityName = activityStateRecord.Activity.Name;
                t.WorkflowID   = activityStateRecord.InstanceId;
                t.Status       = activityStateRecord.State;
                t.EventDate    = DateTime.UtcNow;

                // Concatenate all the variables into a string
                IDictionary <String, object> variables =
                    activityStateRecord.Variables;
                StringBuilder s = new StringBuilder();

                if (variables.Count > 0)
                {
                    foreach (KeyValuePair <string, object> v in variables)
                    {
                        s.AppendLine(String.Format("{0}: Value = [{1}]",
                                                   v.Key, v.Value));
                    }
                }

                // Store the variables string
                t.Variables = s.ToString();

                // Insert a record into the TrackActivity table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackActivities.InsertOnSubmit(t);
                dc.SubmitChanges();
            }

            CustomTrackingRecord customTrackingRecord =
                record as CustomTrackingRecord;

            if (customTrackingRecord != null)
            {
                TrackCustom t = new TrackCustom();

                t.WorkflowID      = customTrackingRecord.InstanceId;
                t.CustomEventName = customTrackingRecord.Name;
                t.EventDate       = DateTime.UtcNow;

                // Concatenate all the user data into a string
                string s = "";
                if ((customTrackingRecord != null) &&
                    (customTrackingRecord.Data.Count > 0))
                {
                    foreach (string data in customTrackingRecord.Data.Keys)
                    {
                        if (s.Length > 1)
                        {
                            s += "\r\n";
                        }
                        s += String.Format("{0}: Value = [{1}]", data,
                                           customTrackingRecord.Data[data]);
                    }
                }
                t.UserData = s;

                // Insert a record into the TrackUser table
                LeadDataDataContext dc =
                    new LeadDataDataContext(_connectionString);
                dc.TrackCustoms.InsertOnSubmit(t);
                dc.SubmitChanges();
            }
        }
Ejemplo n.º 7
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);
            }
        }
Ejemplo n.º 8
0
 public void Track(CustomTrackingRecord record)
 {
     throw new NotImplementedException();
 }
 public static T GetData <T>(this CustomTrackingRecord record, string key)
 {
     return((T)record.Data[key]);
 }