#pragma warning disable S2360 // Optional parameters should not be used, unless they are only used in the same assembly internal DebugState GetDebugState(IDSFDataObject dataObject, StateType stateType, ErrorResultTO errors, bool interrogateInputs = false, bool interrogateOutputs = false, bool durationVisible = false) #pragma warning restore S2360 // Optional parameters should not be used { var errorMessage = string.Empty; if (dataObject.Environment.HasErrors()) { errorMessage = dataObject.Environment.FetchErrors(); } var server = "localhost"; var hasRemote = Guid.TryParse(dataObject.RemoteInvokerID, out var remoteID); if (hasRemote) { var res = _lazyCat.GetResource(GlobalConstants.ServerWorkspaceID, remoteID); if (res != null) { server = remoteID != Guid.Empty ? _lazyCat.GetResource(GlobalConstants.ServerWorkspaceID, remoteID).ResourceName : "localhost"; } } Guid.TryParse(dataObject.ParentInstanceID, out var parentInstanceId); var debugState = new DebugState { ID = dataObject.OriginalInstanceID, ParentID = parentInstanceId, WorkspaceID = dataObject.WorkspaceID, StateType = stateType, StartTime = dataObject.StartTime, EndTime = DateTime.Now, ActivityType = ActivityType.Workflow, DisplayName = dataObject.ServiceName, IsSimulation = dataObject.IsOnDemandSimulation, ServerID = dataObject.ServerID, OriginatingResourceID = dataObject.ResourceID, OriginalInstanceID = dataObject.OriginalInstanceID, Server = server, Version = string.Empty, SessionID = dataObject.DebugSessionID, EnvironmentID = dataObject.DebugEnvironmentId, ClientID = dataObject.ClientID, SourceResourceID = dataObject.SourceResourceID, Name = stateType.ToString(), HasError = dataObject.Environment.HasErrors(), ErrorMessage = errorMessage, IsDurationVisible = durationVisible }; if (stateType == StateType.End) { debugState.NumberOfSteps = dataObject.NumberOfSteps; } if (stateType == StateType.Start) { debugState.ExecutionOrigin = dataObject.ExecutionOrigin; debugState.ExecutionOriginDescription = dataObject.ExecutionOriginDescription; } if (interrogateInputs) { var defs = DataListUtil.GenerateDefsFromDataListForDebug(FindServiceShape(dataObject.WorkspaceID, dataObject.ResourceID), enDev2ColumnArgumentDirection.Input); var inputs = GetDebugValues(defs, dataObject, out var invokeErrors); errors.MergeErrors(invokeErrors); debugState.Inputs.AddRange(inputs); } if (interrogateOutputs) { var defs = DataListUtil.GenerateDefsFromDataListForDebug(FindServiceShape(dataObject.WorkspaceID, dataObject.ResourceID), enDev2ColumnArgumentDirection.Output); var outputs = GetDebugValues(defs, dataObject, out var invokeErrors); errors.MergeErrors(invokeErrors); debugState.Outputs.AddRange(outputs); } return(debugState); }
public void DispatchDebugState(IDSFDataObject dataObject, StateType stateType, bool hasErrors, string existingErrors, out ErrorResultTO errors, DateTime?workflowStartTime = null, bool interrogateInputs = false, bool interrogateOutputs = false, bool durationVisible = true) { errors = new ErrorResultTO(); if (dataObject != null) { Guid parentInstanceId; Guid.TryParse(dataObject.ParentInstanceID, out parentInstanceId); bool hasError = dataObject.Environment.HasErrors(); var errorMessage = String.Empty; if (hasError) { errorMessage = dataObject.Environment.FetchErrors(); } if (String.IsNullOrEmpty(existingErrors)) { existingErrors = errorMessage; } else if (!existingErrors.Contains(errorMessage)) { existingErrors += Environment.NewLine + errorMessage; } string name = "localhost"; Guid remoteID; bool hasRemote = Guid.TryParse(dataObject.RemoteInvokerID, out remoteID); if (hasRemote) { var res = ResourceCatalog.Instance.GetResource(GlobalConstants.ServerWorkspaceID, remoteID); if (res != null) { name = remoteID != Guid.Empty ? ResourceCatalog.Instance.GetResource(GlobalConstants.ServerWorkspaceID, remoteID).ResourceName : "localhost"; } } var debugState = new DebugState { ID = dataObject.OriginalInstanceID, ParentID = parentInstanceId, WorkspaceID = dataObject.WorkspaceID, StateType = stateType, StartTime = workflowStartTime ?? DateTime.Now, EndTime = DateTime.Now, ActivityType = ActivityType.Workflow, DisplayName = dataObject.ServiceName, IsSimulation = dataObject.IsOnDemandSimulation, ServerID = dataObject.ServerID, OriginatingResourceID = dataObject.ResourceID, OriginalInstanceID = dataObject.OriginalInstanceID, Server = name, Version = string.Empty, SessionID = dataObject.DebugSessionID, EnvironmentID = dataObject.DebugEnvironmentId, ClientID = dataObject.ClientID, Name = stateType.ToString(), HasError = hasErrors || hasError, ErrorMessage = existingErrors, IsDurationVisible = durationVisible }; if (interrogateInputs) { ErrorResultTO invokeErrors; var defs = DataListUtil.GenerateDefsFromDataListForDebug(FindServiceShape(dataObject.WorkspaceID, dataObject.ResourceID), enDev2ColumnArgumentDirection.Input); var inputs = GetDebugValues(defs, dataObject, out invokeErrors); errors.MergeErrors(invokeErrors); debugState.Inputs.AddRange(inputs); } if (interrogateOutputs) { ErrorResultTO invokeErrors; var defs = DataListUtil.GenerateDefsFromDataListForDebug(FindServiceShape(dataObject.WorkspaceID, dataObject.ResourceID), enDev2ColumnArgumentDirection.Output); var inputs = GetDebugValues(defs, dataObject, out invokeErrors); errors.MergeErrors(invokeErrors); debugState.Outputs.AddRange(inputs); } if (stateType == StateType.End) { debugState.NumberOfSteps = dataObject.NumberOfSteps; } if (stateType == StateType.Start) { debugState.ExecutionOrigin = dataObject.ExecutionOrigin; debugState.ExecutionOriginDescription = dataObject.ExecutionOriginDescription; } if (dataObject.IsDebugMode() || dataObject.RunWorkflowAsync && !dataObject.IsFromWebServer) { var debugDispatcher = _getDebugDispatcher(); if (debugState.StateType == StateType.End) { while (!debugDispatcher.IsQueueEmpty) { Thread.Sleep(100); } debugDispatcher.Write(debugState, dataObject.RemoteInvoke, dataObject.RemoteInvokerID, dataObject.ParentInstanceID, dataObject.RemoteDebugItems); } else { debugDispatcher.Write(debugState); } } } }
public DebugState GetDebugState(IDSFDataObject dataObject, StateType stateType, bool hasErrors, string existingErrors, ErrorResultTO errors, DateTime?workflowStartTime, bool interrogateInputs, bool interrogateOutputs, bool durationVisible) { Guid parentInstanceId; Guid.TryParse(dataObject.ParentInstanceID, out parentInstanceId); var hasError = dataObject.Environment.HasErrors(); var errorMessage = string.Empty; if (hasError) { errorMessage = dataObject.Environment.FetchErrors(); } if (string.IsNullOrEmpty(existingErrors)) { existingErrors = errorMessage; } else if (!existingErrors.Contains(errorMessage)) { existingErrors += Environment.NewLine + errorMessage; } var name = "localhost"; Guid remoteID; var hasRemote = Guid.TryParse(dataObject.RemoteInvokerID, out remoteID); if (hasRemote) { var res = _lazyCat.GetResource(GlobalConstants.ServerWorkspaceID, remoteID); if (res != null) { name = remoteID != Guid.Empty ? _lazyCat.GetResource(GlobalConstants.ServerWorkspaceID, remoteID).ResourceName : "localhost"; } } var debugState = BuildDebugState(dataObject, stateType, hasErrors, existingErrors, workflowStartTime, durationVisible, parentInstanceId, name, hasError); if (stateType == StateType.End) { debugState.StartTime = dataObject.StartTime; debugState.EndTime = DateTime.Now; } if (interrogateInputs) { ErrorResultTO invokeErrors; var defs = DataListUtil.GenerateDefsFromDataListForDebug(FindServiceShape(dataObject.WorkspaceID, dataObject.ResourceID), enDev2ColumnArgumentDirection.Input); var inputs = GetDebugValues(defs, dataObject, out invokeErrors); errors.MergeErrors(invokeErrors); debugState.Inputs.AddRange(inputs); } if (interrogateOutputs) { ErrorResultTO invokeErrors; var defs = DataListUtil.GenerateDefsFromDataListForDebug(FindServiceShape(dataObject.WorkspaceID, dataObject.ResourceID), enDev2ColumnArgumentDirection.Output); var inputs = GetDebugValues(defs, dataObject, out invokeErrors); errors.MergeErrors(invokeErrors); debugState.Outputs.AddRange(inputs); } if (stateType == StateType.End) { debugState.NumberOfSteps = dataObject.NumberOfSteps; } if (stateType == StateType.Start) { debugState.ExecutionOrigin = dataObject.ExecutionOrigin; debugState.ExecutionOriginDescription = dataObject.ExecutionOriginDescription; } return(debugState); }