private ApiResponse <object> RunCalculation() { var vaultComponents = componentsApi.GetVaultComponentsWithHttpInfo(CommonParameters.VaultDefaultDocument); var vaultComponentId = vaultComponents.Data.Data.Keys.First(); var vaultConfigurations = configurationsApi.GetVaultConfigurationsWithHttpInfo(CommonParameters.VaultDefaultAccount); var vaultConfigurationsId = vaultConfigurations.Data.Data.Keys.First(); var vaultAccount = new VaultIdentifier(CommonParameters.VaultDefaultAccount); var vaultDates = new VaultDateParameters(CommonParameters.VaultStartDate, CommonParameters.VaultEndDate, "Monthly"); var vaultCalculationParameters = new VaultCalculationParameters(vaultComponentId, vaultAccount, vaultDates, vaultConfigurationsId); var parameters = new VaultCalculationParametersRoot { Data = new Dictionary <string, VaultCalculationParameters> { { "1", vaultCalculationParameters }, { "2", vaultCalculationParameters } } }; var response = vaultCalculationsApi.PostAndCalculateWithHttpInfo(null, "max-stale=0", parameters); return(response); }
public static void Main(string[] args) { try { var calculationParameters = new VaultCalculationParametersRoot { Data = new Dictionary <string, VaultCalculationParameters> { { "1", GetVaultCalculationParameters1() }, { "2", GetVaultCalculationParameters2() } } }; var calculationApi = new VaultCalculationsApi(GetApiConfiguration()); var calculationResponse = calculationApi.PostAndCalculateWithHttpInfo(null, null, calculationParameters); // Comment the above line and uncomment the below lines to add cache control configuration. Results are by default cached for 12 hours; Setting max-stale=300 will fetch a cached result which is at max 5 minutes older. max-stale=0 will be a fresh adhoc run and the max-stale value is in seconds. //var cacheControl = "max-stale=300"; //var calculationResponse = calculationApi.PostAndCalculateWithHttpInfo(null, cacheControl, calculationParameters); CalculationStatusRoot status = (CalculationStatusRoot)calculationResponse.Data; var calculationId = status.Data.Calculationid; Console.WriteLine("Calculation Id: " + calculationId); ApiResponse <CalculationStatusRoot> getStatusResponse = null; while (status.Data.Status == CalculationStatus.StatusEnum.Queued || status.Data.Status == CalculationStatus.StatusEnum.Executing) { if (getStatusResponse != null) { if (getStatusResponse.Headers.ContainsKey("Cache-Control")) { var maxAge = getStatusResponse.Headers["Cache-Control"][0]; if (string.IsNullOrWhiteSpace(maxAge)) { Console.WriteLine("Sleeping for 2 seconds"); // Sleep for at least 2 seconds. Thread.Sleep(2000); } else { var age = int.Parse(maxAge.Replace("max-age=", "")); Console.WriteLine($"Sleeping for {age} seconds"); Thread.Sleep(age * 1000); } } } getStatusResponse = calculationApi.GetCalculationStatusByIdWithHttpInfo(calculationId); status = getStatusResponse.Data; } Console.WriteLine("Calculation Completed"); foreach (var vaultCalculation in status.Data.Units) { if (vaultCalculation.Value.Status == CalculationUnitStatus.StatusEnum.Success) { var resultResponse = calculationApi.GetCalculationUnitResultByIdWithHttpInfo(calculationId, vaultCalculation.Key); PrintResult(resultResponse.Data); } else { Console.WriteLine($"Calculation Unit Id : {vaultCalculation.Key} Failed!!!"); Console.WriteLine($"Error message : {vaultCalculation.Value.Errors}"); } } Console.ReadKey(); } catch (ApiException e) { Console.WriteLine($"Status Code: {e.ErrorCode}"); Console.WriteLine($"Reason : {e.Message}"); Console.WriteLine(e.StackTrace); } catch (Exception e) { Console.WriteLine(e); throw; } }