This commit is contained in:
Scott Pfeil 2024-02-02 15:28:32 -05:00
parent 606dbf6131
commit 3bde28c2d2

View File

@ -61,102 +61,6 @@
getParameters(with: clientParameterModel, requestParameters: requestParameters, actionId: actionId, completionHandler: completionHandler)
}
// open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String) async -> [String: AnyHashable] {
// let timeout = TimeInterval(10)//model.timeout ?? Self.DefaultTimeout)
// let parameterHandlerList = model.list.compactMap { createParametersHandler($0) }
// let parameters = await withThrowingTaskGroup(of: (any ClientParameterProtocol, [String: AnyHashable]).self, returning: [String: AnyHashable].self) { group in
//
// // Task for time out.
// group.addTask {
// try Task.checkCancellation()
// try await Task.sleep(nanoseconds: UInt64(timeout * TimeInterval(NSEC_PER_SEC)))
// try Task.checkCancellation()
// throw MVMCoreActionUtilityError.timeOut
// }
//
// for handler in parameterHandlerList {
// group.addTask{
// try Task.checkCancellation()
// print("vvvv start \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)")
// MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterStartFetch(
// name: handler.clientParameterModel.type,
// uuid: handler.clientParameterModel.id,
// actionId: actionId))
// let parameter = await handler.fetchClientParameters(requestParameters: requestParameters, timingOutIn: timeout)
// print("vvvv end \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)")
// MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete(
// name: handler.clientParameterModel.type,
// uuid: handler.clientParameterModel.id,
// actionId: actionId))
// return (handler, parameter)
// }
// }
// //
// // return parameter
// // } catch MVMCoreActionUtilityError.timeOut {
// // // The client parameter timed out.
// // MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout(
// // name: handler.clientParameterModel.type,
// // uuid: handler.clientParameterModel.id,
// // actionId: actionId))
// // return handler.valueOnTimeout()
// // } catch {
// // if let errorObject = MVMCoreErrorObject.createErrorObject(for: error, location: #function) {
// // MVMCoreLoggingHandler.shared()?.addError(toLog: errorObject)
// // }
// // return [handler.clientParameterModel.type: "failed_to_collect"]
// // }
//
// var finishedHandlers: [String: [String: AnyHashable]] = [:]
// //var parameters = [String: AnyHashable]()
// do {
// for try await currentParameter in group {
// print("vvvv finished \(currentParameter.0.clientParameterModel.type) \(currentParameter.0.clientParameterModel.id)")
// finishedHandlers[currentParameter.0.clientParameterModel.id] = currentParameter.1
// guard finishedHandlers.count >= parameterHandlerList.count else { continue }
// print("vvvv finished all handlers")
// // Cancel the timeout
// group.cancelAll()
// }
// } catch MVMCoreActionUtilityError.timeOut {
// // The client parameter timed out. Log each event and set failure values for unfinished handlers.
// print("vvvv timeout \(timeout)")
// group.cancelAll()
// for handler in parameterHandlerList {
// guard finishedHandlers[handler.clientParameterModel.id] == nil else { continue }
// print("vvvv timeout \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)")
// MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout(
// name: handler.clientParameterModel.type,
// uuid: handler.clientParameterModel.id,
// actionId: actionId))
// finishedHandlers[handler.clientParameterModel.id] = handler.valueOnTimeout()
// }
// } catch {
// if !(error is CancellationError) {
// print("vvvv error \(error.localizedDescription)")
// // Log the error and set failure values for unfinished handlers.
// group.cancelAll()
// if let errorObject = MVMCoreErrorObject.createErrorObject(for: error, location: #function) {
// MVMCoreLoggingHandler.shared()?.addError(toLog: errorObject)
// }
// for handler in parameterHandlerList {
// guard finishedHandlers[handler.clientParameterModel.id] == nil else { continue }
// finishedHandlers[handler.clientParameterModel.id] = handler.valueOnTimeout()
// }
// }
// }
// print("vvvv finishing group")
// return finishedHandlers.reduce(into: [String: AnyHashable]()) { partialResult, parameter in
// partialResult.merge(parameter.value) { first, last in first }
// }
// }
// print("vvvv parameters \(parameters)")
//
// return parameters
// }
// open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String) async -> [String: AnyHashable] {
// }
open func getParameters(with model: ClientParameterModel, requestParameters: [String: Any], actionId: String) async -> [String: AnyHashable] {
await withCheckedContinuation { continuation in
getParameters(with: model, requestParameters: requestParameters, actionId: actionId) { parameters in
@ -172,7 +76,6 @@
let timeout = model.timeout ?? Self.DefaultTimeout
let parameterHandlerList = model.list.compactMap { createParametersHandler($0) }
let requestUUID = (0..<parameterHandlerList.count).map { _ in UUID().uuidString }
var returnedList = [[String: AnyHashable]?](repeating: nil, count: parameterHandlerList.count)
// Dispatch setup on queue to ensure setup is complete before completion callbacks.
@ -183,7 +86,6 @@
return returnedList.enumerated().map { (index, element) -> [String: AnyHashable] in
guard let parameter = element else {
let handler = parameterHandlerList[index]
print("vvvv timeout \(handler.clientParameterModel.type) \(handler.clientParameterModel.id)")
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterTimeout(
name: handler.clientParameterModel.type,
uuid: handler.clientParameterModel.id,
@ -200,16 +102,13 @@
var complete = false
let timeoutWorkItem = DispatchWorkItem(qos: .userInitiated) {
let params = mergedParametersList
print("vvvv timeout parameters \(params)")
completionHandler(params);
complete = true
}
let completionWorkItem = DispatchWorkItem(qos: .userInitiated) {
timeoutWorkItem.cancel()
print("vvvv finishing group")
if !complete { // In the case of firing after timeout.
let params = mergedParametersList
print("vvvv finishing group \(params)")
completionHandler(params);
complete = true
}
@ -221,12 +120,11 @@
// Setup the parameter execution.
for (index, parameterHandler) in parameterHandlerList.enumerated() {
let parameterType = parameterHandler.clientParameterModel.type
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterStartFetch(name: parameterType, uuid: requestUUID[index], actionId: actionId))
let id = parameterHandler.clientParameterModel.id
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterStartFetch(name: parameterType, uuid: id, actionId: actionId))
group.enter()
print("vvvv start \(parameterHandler.clientParameterModel.type) \(parameterHandler.clientParameterModel.id)")
parameterHandler.fetchClientParametersBridge(requestParameters: requestParameters,
timingOutIn: timeout) { (receivedParameter) in
print("vvvv end \(parameterHandler.clientParameterModel.type) \(parameterHandler.clientParameterModel.id)")
// Queue the results for merge.
parametersWorkQueue.async {
guard !complete else {
@ -237,7 +135,7 @@
MVMCoreLoggingHandler.shared()?.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))!)
return
}
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete(name: parameterType, uuid: requestUUID[index], actionId: actionId))
MVMCoreLoggingHandler.shared()?.logCoreEvent(.clientParameterFetchComplete(name: parameterType, uuid: id, actionId: actionId))
returnedList[index] = receivedParameter
group.leave() // Leaving is only done after setup (barriered).
}