/// <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); }
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); }
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); }
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(); } }
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); } }
public void Track(CustomTrackingRecord record) { throw new NotImplementedException(); }
public static T GetData <T>(this CustomTrackingRecord record, string key) { return((T)record.Data[key]); }