private static FindFreeBusyScheduleRequest GenerateFreeBusyScheduleRequest(FreeBusyRequest freeBusyRequest, List <GraphPerson> interviewers) { var request = new FindFreeBusyScheduleRequest() { Schedules = interviewers.Select(interviewer => interviewer.Email).ToList(), AvailabilityViewInterval = SchedulerConstants.ThirtyMinuteFreeBusy, StartTime = new Models.MeetingDateTime { DateTime = freeBusyRequest.UtcStart.ToString(), TimeZone = SchedulerConstants.UTCTimezone }, EndTime = new Models.MeetingDateTime { DateTime = freeBusyRequest.UtcEnd.ToString(), TimeZone = SchedulerConstants.UTCTimezone }, }; return(request); }
private static async System.Threading.Tasks.Task <List <FindFreeBusyScheduleResponse> > SendPostFindFreeBusySchedule(string token, FindFreeBusyScheduleRequest findFreeBusyRequest) { var findFreeBusyResponsePayload = new FindFreeBusyScheduleResponsePayload(); var findFreeBusyResponses = new List <FindFreeBusyScheduleResponse>(); var graphResourceId = "https://graph.microsoft.com"; using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Authorization = await GetBearerTokenFromUserToken(token, TokenCachingOptions.ForceRefreshCache); // Serialize the request object. var tasks = new List <Task>(); var schedules = findFreeBusyRequest.Schedules; foreach (var scheduleBatch in Chunk(schedules, 20)) { tasks.Add(Task.Run(async() => { for (int i = 1; i <= 5; i++) { findFreeBusyRequest.Schedules = (List <string>)scheduleBatch; var requestData = JsonConvert.SerializeObject(findFreeBusyRequest, jsonSerializerSettings); using (var response = await httpClient.PostAsync(graphResourceId + "/v1.0/me/calendar/getschedule", new StringContent(requestData, Encoding.UTF8, "application/json"))) { var responseHeaders = response.Headers.ToString(); //this.Trace.TraceInformation($"Response headers for find meeting times are {responseHeaders}"); if (response.IsSuccessStatusCode) { // Read and deserialize response. var content = await response.Content.ReadAsStringAsync(); findFreeBusyResponsePayload = JsonConvert.DeserializeObject <FindFreeBusyScheduleResponsePayload>(content, jsonSerializerSettings); if (findFreeBusyResponsePayload.Value?.Count > 0) { findFreeBusyResponses.AddRange(findFreeBusyResponsePayload.Value); } i = 5; } else { string content = string.Empty; if (response != null) { content = await response.Content.ReadAsStringAsync(); } if (i < 5)// && EmailUtils.ShouldRetryOnGraphException(response.StatusCode)) { //this.Trace.TraceWarning($"Attempt {i} : Exception during {HttpMethod.Post.Method}:{this.graphResourceId}/me/calendar/getschedule call to graph. Response {response.StatusCode.ToString()} with error message {content}"); //await EmailUtils.ExponentialDelay(response, i); } else { //this.Trace.TraceError($"Exception during {HttpMethod.Post.Method}:{this.graphBaseUrl}/me/getschedule call to graph. Response {response.StatusCode.ToString()} with error message {content}"); break; } } } } })); } Task.WaitAll(tasks.ToArray()); findFreeBusyRequest.Schedules = schedules; } return(findFreeBusyResponses); }