public async Task AddNewSupportRequestAsync(string subject, string message, string requestorEmailAddress, string reason, User user, Package package = null) { var loggedInUser = user?.Username ?? "Anonymous"; try { var newIssue = new Issue(); // If primary on-call person is not yet configured in the Support Request DB, assign to 'unassigned'. var primaryOnCall = await _pagerDutyClient.GetPrimaryOnCallAsync(); if (string.IsNullOrEmpty(primaryOnCall) || GetAdminKeyFromUsername(primaryOnCall) == -1) { newIssue.AssignedTo = null; } else { newIssue.AssignedToId = GetAdminKeyFromUsername(primaryOnCall); } newIssue.CreatedDate = DateTime.UtcNow; newIssue.Details = message; newIssue.IssueStatusId = IssueStatusKeys.New; newIssue.IssueTitle = subject; newIssue.CreatedBy = loggedInUser; newIssue.OwnerEmail = requestorEmailAddress; newIssue.PackageId = package?.PackageRegistration.Id; newIssue.PackageVersion = package?.Version; newIssue.Reason = reason; newIssue.SiteRoot = _siteRoot; newIssue.UserKey = user?.Key; newIssue.PackageRegistrationKey = package?.PackageRegistrationKey; await AddIssueAsync(newIssue); } catch (SqlException sqlException) { QuietLog.LogHandledException(sqlException); var packageInfo = "N/A"; if (package != null) { packageInfo = $"{package.PackageRegistration.Id} v{package.Version}"; } var errorMessage = $"Error while submitting support request at {DateTime.UtcNow}. User requesting support = {loggedInUser}. Support reason = {reason ?? "N/A"}. Package info = {packageInfo}"; await _pagerDutyClient.TriggerIncidentAsync(errorMessage); } catch (Exception e) //In case getting data from PagerDuty has failed { QuietLog.LogHandledException(e); } }