diff --git a/gate-web/src/main/groovy/com/opsmx/spinnaker/gate/controllers/OpsmxAuditServiceController.groovy b/gate-web/src/main/groovy/com/opsmx/spinnaker/gate/controllers/OpsmxAuditServiceController.groovy index 6424ee644..47732152e 100644 --- a/gate-web/src/main/groovy/com/opsmx/spinnaker/gate/controllers/OpsmxAuditServiceController.groovy +++ b/gate-web/src/main/groovy/com/opsmx/spinnaker/gate/controllers/OpsmxAuditServiceController.groovy @@ -86,9 +86,14 @@ class OpsmxAuditServiceController { @RequestMapping(value = "/v1/acctEnvMapping/bulkimport", method = RequestMethod.POST, consumes = "multipart/form-data") Object bulkImportAcctEnvironmentMappings(@RequestParam("file") MultipartFile data) { try { - return uploadToAuditService(data) + def response = uploadToAuditService(data) + return ResponseEntity.ok(response) + } catch (OesRequestException e) { + log.error("Audit service request failed: {}", e.message, e) + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.message) } catch (Exception e) { - throw new RuntimeException("Failed to process file: ${e.message}", e) + log.error("Unexpected error while processing file: {}", e.message, e) + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("An unexpected error occurred.") } } private String uploadToAuditService(MultipartFile data) { @@ -100,12 +105,15 @@ class OpsmxAuditServiceController { def response = okHttpClient.newCall(request).execute() return response }.call() as okhttp3.Response + if (obj.code() == 304) { + log.info("No changes to process: {}", obj.body()?.string()) + return "No changes were made. All records are duplicates." + } if (!obj.isSuccessful()) { - def errorBody = obj.body()?.string() - log.error("Failed to upload multipart file to audit service: {}", errorBody) - def errorMessage = parseErrorMessage(errorBody, obj.code) - - throw new OesRequestException(errorMessage) + def errorBody = obj.body()?.string(); + log.error("Failed to upload multipart file to audit service: {}", errorBody); + def errorMessage = parseErrorMessage(errorBody, obj.code()); + throw new OesRequestException(errorMessage); } else { return obj.body()?.string() ?: "Unknown reason: ${obj.code}" as Object }