wire in source request UUID for client parameter events
This commit is contained in:
parent
55d6df4e25
commit
dfb58e04b6
@ -44,7 +44,11 @@ open class ActionOpenPageHandler: MVMCoreJSONActionHandlerProtocol {
|
||||
open func performRequestAddingClientParameters(with requestParameters: MVMCoreRequestParameters, model: ActionOpenPageModel, delegateObject: DelegateObject?, additionalData: [AnyHashable : Any]?) async throws -> MVMCoreLoadRequestOperation? {
|
||||
// Adds any client parameters to the request parameters.
|
||||
if let parametersToFetch = model.clientParameters,
|
||||
let fetchedParameters = try await ClientParameterHandler().getClientParameters(with: parametersToFetch, requestParameters: requestParameters.parameters as? [String : Any] ?? [:], showLoadingOverlay: !requestParameters.backgroundRequest) {
|
||||
let fetchedParameters = try await ClientParameterHandler().getClientParameters(
|
||||
with: parametersToFetch,
|
||||
requestParameters: requestParameters.parameters as? [String : Any] ?? [:],
|
||||
actionId: MVMCoreActionHandler.getUUID(additionalData: additionalData) ?? "unknown",
|
||||
showLoadingOverlay: !requestParameters.backgroundRequest) {
|
||||
requestParameters.add(fetchedParameters)
|
||||
}
|
||||
try Task.checkCancellation()
|
||||
@ -68,7 +72,7 @@ open class ActionOpenPageHandler: MVMCoreJSONActionHandlerProtocol {
|
||||
public extension ClientParameterHandler {
|
||||
|
||||
/// Iterates through the clientParameters list. Gets values from the individual handlers and attaches the parameters to extraParameters.
|
||||
func getClientParameters(with model: ClientParameterModel, requestParameters: [String: Any], showLoadingOverlay: Bool) async throws -> [String: Any]? {
|
||||
func getClientParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String, showLoadingOverlay: Bool) async throws -> [String: Any]? {
|
||||
if showLoadingOverlay {
|
||||
MVMCoreLoadingOverlayHandler.sharedLoadingOverlay()?.startLoading()
|
||||
}
|
||||
@ -79,7 +83,7 @@ public extension ClientParameterHandler {
|
||||
}
|
||||
return try await withCheckedThrowingContinuation({ continuation in
|
||||
do {
|
||||
try getParameters(with: model, requestParameters: requestParameters) { parameters in
|
||||
try getParameters(with: model, requestParameters: requestParameters, actionId: actionId) { parameters in
|
||||
continuation.resume(returning: parameters)
|
||||
}
|
||||
} catch {
|
||||
|
||||
@ -15,7 +15,6 @@
|
||||
let parameterType = try ModelRegistry.getHandler(clientParameterModel) as! ClientParameterProtocol.Type
|
||||
return parameterType.init(clientParameterModel)
|
||||
} catch {
|
||||
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterNotFound(name: clientParameterModel.type))
|
||||
if let errorObject = MVMCoreErrorObject.createErrorObject(for: error, location: #function) {
|
||||
MVMCoreLoggingHandler.addError(toLog: errorObject)
|
||||
}
|
||||
@ -42,15 +41,15 @@
|
||||
/// ]
|
||||
///}
|
||||
/// completionHandler can return flat dictinary or a map. It depends on the paramters handler
|
||||
open func getParameters(with clientParameters: [String: Any], requestParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws {
|
||||
open func getParameters(with clientParameters: [String: Any], requestParameters: [String: Any], actionId: String, completionHandler:@escaping ([String: Any]?) -> ()) throws {
|
||||
guard let clientParameterModel = try getClientParameterModel(clientParameters) else {
|
||||
completionHandler(nil)
|
||||
return
|
||||
}
|
||||
try getParameters(with: clientParameterModel, requestParameters: requestParameters, completionHandler: completionHandler)
|
||||
try getParameters(with: clientParameterModel, requestParameters: requestParameters, actionId: actionId, completionHandler: completionHandler)
|
||||
}
|
||||
|
||||
open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], completionHandler:@escaping ([String: Any]?) -> ()) throws {
|
||||
open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String, completionHandler:@escaping ([String: Any]?) -> ()) throws {
|
||||
|
||||
let parametersWorkQueue = DispatchQueue(label: "com.mva.clientparameter")
|
||||
let group = DispatchGroup()
|
||||
@ -67,7 +66,10 @@
|
||||
var mergedParametersList: [String: AnyHashable] {
|
||||
return returnedList.enumerated().map { (index, element) -> [String: AnyHashable] in
|
||||
guard let parameter = element else {
|
||||
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout(name: model.list[index].type, uuid: requestUUID[index]))
|
||||
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout(
|
||||
name: model.list[index].type,
|
||||
uuid: requestUUID[index],
|
||||
actionId: actionId))
|
||||
return parameterHandlerList[index].valueOnTimeout()
|
||||
}
|
||||
return parameter
|
||||
@ -96,7 +98,7 @@
|
||||
// Setup the parameter execution.
|
||||
for (index, parameterHandler) in parameterHandlerList.enumerated() {
|
||||
let parameterType = parameterHandler.clientParameterModel.type
|
||||
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetching(name: parameterType, uuid: requestUUID[index]))
|
||||
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterStartFetch(name: parameterType, uuid: requestUUID[index], actionId: actionId))
|
||||
group.enter()
|
||||
parameterHandler.fetchClientParameters(requestParameters: requestParameters,
|
||||
timingOutIn: timeout) { (receivedParameter) in
|
||||
@ -105,7 +107,7 @@
|
||||
if (returnedList[index] != nil) {
|
||||
MVMCoreLoggingHandler.addError(toLog: MVMCoreErrorObject(title: nil, message: "Client parameter \(parameterType) has already executed. The completion handler should only be called once!", code: ErrorCode.default.rawValue, domain: ErrorDomainNative, location: String(describing: ClientParameterHandler.self))!)
|
||||
} else {
|
||||
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete(name: parameterType, uuid: requestUUID[index]))
|
||||
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete(name: parameterType, uuid: requestUUID[index], actionId: actionId))
|
||||
returnedList[index] = receivedParameter
|
||||
group.leave() // Leaving is only done after setup (barriered).
|
||||
}
|
||||
|
||||
@ -56,25 +56,29 @@ public enum MVMCoreEvent {
|
||||
|
||||
/// Could not find the client parameter specified.
|
||||
case clientParameterNotFound(
|
||||
name: String
|
||||
name: String,
|
||||
actionId: String
|
||||
)
|
||||
|
||||
/// The client perameter handler was invoked and is in progress.
|
||||
case clientParameterFetching(
|
||||
case clientParameterStartFetch(
|
||||
name: String,
|
||||
uuid: String
|
||||
uuid: String,
|
||||
actionId: String
|
||||
)
|
||||
|
||||
/// The client perameter handler timed out and is returning a default value.
|
||||
case clientParameterTimeout(
|
||||
name: String,
|
||||
uuid: String
|
||||
uuid: String,
|
||||
actionId: String
|
||||
)
|
||||
|
||||
/// The client paramter fetch completed.
|
||||
case clientParameterFetchComplete(
|
||||
name: String,
|
||||
uuid: String
|
||||
uuid: String,
|
||||
actionId: String
|
||||
)
|
||||
|
||||
public enum EventType: String {
|
||||
@ -94,7 +98,7 @@ public enum MVMCoreEvent {
|
||||
case .actionFailed: return .action
|
||||
case .actionComplete: return .action
|
||||
case .clientParameterNotFound: return .clientParameter
|
||||
case .clientParameterFetching: return .clientParameter
|
||||
case .clientParameterStartFetch: return .clientParameter
|
||||
case .clientParameterTimeout: return .clientParameter
|
||||
case .clientParameterFetchComplete: return .clientParameter
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user