private ApiResponse <object> RunCalculation() { var sparComponents = componentsApi.GetSPARComponentsWithHttpInfo(CommonParameters.SPARDefaultDocument); var sparComponentId = sparComponents.Data.Data.Keys.First(); var sparAccountIdentifier = new SPARIdentifier(CommonParameters.SPARBenchmarkR1000); var sparAccount = new List <SPARIdentifier> { sparAccountIdentifier }; var sparBenchmark = new SPARIdentifier(CommonParameters.SPARBenchmarkRussellPR1000); var sparDates = new SPARDateParameters("20180101", "20181231", "Monthly"); var sparCalculationParameters = new SPARCalculationParameters(sparComponentId, sparAccount, sparBenchmark, sparDates); var parameters = new SPARCalculationParametersRoot { Data = new Dictionary <string, SPARCalculationParameters> { { "1", sparCalculationParameters }, { "2", sparCalculationParameters } } }; var response = sparCalculationsApi.PostAndCalculateWithHttpInfo(null, "max-stale=0", parameters); return(response); }
public static void Main(string[] args) { try { var calculationParameters = new SPARCalculationParametersRoot { Data = new Dictionary <string, SPARCalculationParameters> { { "1", GetSparCalculationParameters() } } }; var calculationApi = new SPARCalculationsApi(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. //var cacheControl = "max-stale=300"; //var calculationResponse = calculationApi.PostAndCalculateWithHttpInfo(null, cacheControl, calculationParameters); if (calculationResponse.StatusCode == HttpStatusCode.Created) { ObjectRoot result = (ObjectRoot)calculationResponse.Data; PrintResult(result); return; } 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 sparCalculation in status.Data.Units) { if (sparCalculation.Value.Status == CalculationUnitStatus.StatusEnum.Success) { var resultResponse = calculationApi.GetCalculationUnitResultByIdWithHttpInfo(calculationId, sparCalculation.Key); PrintResult(resultResponse.Data); } else { Console.WriteLine($"Calculation Unit Id : {sparCalculation.Key} Failed!!!"); Console.WriteLine($"Error message : {sparCalculation.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; } }