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