public TrackingCommand(TrackingRecord record) : this() { ActivityScheduledRecord activityScheduledRecord = record as ActivityScheduledRecord; if (activityScheduledRecord != null) { CreateTrackingCommand(activityScheduledRecord); return; } CancelRequestedRecord cancelRequestedRecord = record as CancelRequestedRecord; if (cancelRequestedRecord != null) { CreateTrackingCommand(cancelRequestedRecord); return; } FaultPropagationRecord faultPropagationRecord = record as FaultPropagationRecord; if (faultPropagationRecord != null) { CreateTrackingCommand(faultPropagationRecord); return; } ActivityStateRecord activityStateRecord = record as ActivityStateRecord; if (activityStateRecord != null) { CreateTrackingCommand(activityStateRecord); return; } WorkflowInstanceRecord workflowInstanceRecord = record as WorkflowInstanceRecord; if (workflowInstanceRecord != null) { CreateTrackingCommand(workflowInstanceRecord); return; } BookmarkResumptionRecord bookmarkResumptionRecord = record as BookmarkResumptionRecord; if (bookmarkResumptionRecord != null) { CreateTrackingCommand(bookmarkResumptionRecord); return; } CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord; if (customTrackingRecord != null) { CreateTrackingCommand(customTrackingRecord); return; } }
private void ProcessFaultPropagationRecord(FaultPropagationRecord faultPropagationRecord) { string pendingFaultedKey = FautedMessageKey(faultPropagationRecord.FaultSource); if (_pendingFaultedMessages.ContainsKey(pendingFaultedKey)) { TaskProgressCallbackMessage progressCallbackMessage = _pendingFaultedMessages[pendingFaultedKey]; _pendingFaultedMessages.Remove(pendingFaultedKey); progressCallbackMessage.Message = _formatError(faultPropagationRecord.Fault); PushProgressMessage(progressCallbackMessage, faultPropagationRecord.InstanceId); } }
private void TrackFaultPropagationRecord(FaultPropagationRecord faultRecord, ActualTrace _trace) { string faultName = (faultRecord.FaultHandler == null) ? "<Unknown>" : faultRecord.FaultHandler.Name; TestTraceManager.OptionalLogTrace("[InMemoryTrackingParticipant]faultPropatationRecord.TargetName = {0}", faultName); //string status = "Faulted"; // There is no Property called State in FaultPropagationRecord. Need to understand Fault propagation here //this gets propogated twice by the product: ActivityStates.Fault information. //if (faultRecord.State == ActivityStates.Schedule) //{ // _trace.Add(new ActivityTrace( // faultName, // (ActivityInstanceState)Enum.Parse(typeof(ActivityInstanceState), status))); //} }
private void TrackFaultPropagationRecord(FaultPropagationRecord faultRecord) { if (WfEtwTrackingEventSource.Instance.FaultPropagationRecordIsEnabled()) { WfEtwTrackingEventSource.Instance.FaultPropagationRecord(faultRecord.InstanceId, faultRecord.RecordNumber, faultRecord.EventTime, faultRecord.FaultSource.Name, faultRecord.FaultSource.Id, faultRecord.FaultSource.InstanceId, faultRecord.FaultSource.TypeName, faultRecord.FaultHandler != null ? faultRecord.FaultHandler.Name : string.Empty, faultRecord.FaultHandler != null ? faultRecord.FaultHandler.Id : string.Empty, faultRecord.FaultHandler != null ? faultRecord.FaultHandler.InstanceId : string.Empty, faultRecord.FaultHandler != null ? faultRecord.FaultHandler.TypeName : string.Empty, faultRecord.Fault.ToString(), faultRecord.IsFaultSource, faultRecord.HasAnnotations ? JsonConvert.SerializeObject(faultRecord.Annotations, Formatting.Indented) : emptyItemsTag, this.TrackingProfile == null ? string.Empty : this.TrackingProfile.Name, this.ApplicationReference); } }
protected override void Track(TrackingRecord record, TimeSpan timeout) { lock (this) { WorkflowInstanceUnhandledExceptionRecord unhandledExceptionRecord = record as WorkflowInstanceUnhandledExceptionRecord; if (unhandledExceptionRecord != null) { ProcessInstRecord(unhandledExceptionRecord); Console.WriteLine("Exception executing workflow " + unhandledExceptionRecord); return; } WorkflowInstanceRecord wfInstRecord = record as WorkflowInstanceRecord; if (wfInstRecord != null) { ProcessInstRecord(wfInstRecord); return; } ActivityStateRecord activityStateRecord = record as ActivityStateRecord; if (activityStateRecord != null) { ProcessActivityStateRecord(activityStateRecord); return; } FaultPropagationRecord faultPropagationRecord = record as FaultPropagationRecord; if (faultPropagationRecord != null) { ProcessFaultPropagationRecord(faultPropagationRecord); return; } CustomTrackingRecord customTrackingRecord = record as CustomTrackingRecord; if (customTrackingRecord != null) { ProcessCustomTrackingRecord(customTrackingRecord); return; } } }
void CreateTrackingCommand(FaultPropagationRecord record) { this.Procedure = "[MOJ.WorkflowManger.Tracking].[InsertFaultPropagationEvent]"; this.parameters.Add(CreateTrackingCommandParameter("@WorkflowInstanceId", SqlDbType.UniqueIdentifier, null, record.InstanceId)); this.parameters.Add(CreateTrackingCommandParameter("@RecordNumber", SqlDbType.BigInt, null, record.RecordNumber)); this.parameters.Add(CreateTrackingCommandParameter("@TraceLevelId", SqlDbType.TinyInt, null, record.Level)); this.parameters.Add(CreateTrackingCommandParameter("@ActivityRecordType", SqlDbType.NVarChar, 128, "FaultPropagation")); this.parameters.Add(CreateTrackingCommandParameter("@ActivityName", SqlDbType.NVarChar, 256, record.FaultSource.Name)); this.parameters.Add(CreateTrackingCommandParameter("@ActivityId", SqlDbType.NVarChar, 256, record.FaultSource.Id)); this.parameters.Add(CreateTrackingCommandParameter("@ActivityInstanceId", SqlDbType.NVarChar, 256, record.FaultSource.InstanceId)); this.parameters.Add(CreateTrackingCommandParameter("@ActivityType", SqlDbType.NVarChar, 2048, record.FaultSource.TypeName)); this.parameters.Add(CreateTrackingCommandParameter("@FaultDetails", SqlDbType.NVarChar, null, record.Fault.ToString())); this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityName", SqlDbType.NVarChar, null, record.FaultHandler == null ? null : record.FaultHandler.Name)); this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityId", SqlDbType.NVarChar, 256, record.FaultHandler == null ? null : record.FaultHandler.Id)); this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityInstanceId", SqlDbType.NVarChar, 256, record.FaultHandler == null ? null : record.FaultHandler.InstanceId)); this.parameters.Add(CreateTrackingCommandParameter("@FaultHandlerActivityType", SqlDbType.NVarChar, 2048, record.FaultHandler == null ? null : record.FaultHandler.TypeName)); this.parameters.Add(CreateTrackingCommandParameter("@AnnotationsXml", SqlDbType.NVarChar, null, this.SerializeData(record.Annotations))); this.parameters.Add(CreateTrackingCommandParameter("@TimeCreated", SqlDbType.DateTime, null, record.EventTime)); }
private void LogFaultPropagationRecord(FaultPropagationRecord record) { Contract.Requires(null != record); var annotations = JsonConvert.SerializeObject(record.Annotations, Formatting.Indented); var fault = JsonConvert.SerializeObject(record.Fault, Formatting.Indented); var faultHandler = JsonConvert.SerializeObject(record.FaultHandler, Formatting.Indented); var faultSource = JsonConvert.SerializeObject(record.FaultSource, Formatting.Indented); Logger.Get(_loggingTrackingParticipantSettings.TraceSourceName) .TraceInformation("{0} {1} {2} - InstanceId = '{3}', Annotations = '{4}', Fault = '{5}', FaultHandler = '{6}', FaultSource= '{7}', IsFaultSource = '{8}'", record.GetType().Name, record.EventTime, record.Level, record.InstanceId, annotations, fault, faultHandler, faultSource, record.IsFaultSource ); }
private Event ProcessTrackingRecord(FaultPropagationRecord record) { if (record.IsFaultSource) { Event e = new Event(); e.ContextGuid = record.InstanceId; e.EventDateTime = record.EventTime; e.EventOrder = record.RecordNumber; e.Operation = record.FaultSource.Name; e.EventSeverity = MapEventSeverity(record.Level); e.EventSource = EventSource.Workflow; e.ExecutionStatus = ExecutionStatus.Faulted; e.Exception = record.Fault; return(e); } else { return(null); } }