in reports-scheduler/src/main/kotlin/org/opensearch/reportsscheduler/action/ReportInstanceActions.kt [71:105]
fun createOnDemandFromDefinition(request: OnDemandReportCreateRequest, user: User?): OnDemandReportCreateResponse {
log.info("$LOG_PREFIX:ReportInstance-createOnDemandFromDefinition ${request.reportDefinitionId}")
UserAccessManager.validateUser(user)
val currentTime = Instant.now()
val reportDefinitionDetails = ReportDefinitionsIndex.getReportDefinition(request.reportDefinitionId)
reportDefinitionDetails
?: run {
Metrics.REPORT_DEFINITION_INFO_USER_ERROR_MISSING_REPORT_DEF_DETAILS.counter.increment()
throw OpenSearchStatusException("Report Definition ${request.reportDefinitionId} not found", RestStatus.NOT_FOUND)
}
if (!UserAccessManager.doesUserHasAccess(user, reportDefinitionDetails.tenant, reportDefinitionDetails.access)) {
Metrics.REPORT_PERMISSION_USER_ERROR.counter.increment()
throw OpenSearchStatusException("Permission denied for Report Definition ${request.reportDefinitionId}", RestStatus.FORBIDDEN)
}
val beginTime: Instant = currentTime.minus(reportDefinitionDetails.reportDefinition.format.duration)
val endTime: Instant = currentTime
val currentStatus: Status = Status.Success // TODO: Revert to Executing when background job execution supported
val reportInstance = ReportInstance("ignore",
currentTime,
currentTime,
beginTime,
endTime,
UserAccessManager.getUserTenant(user),
reportDefinitionDetails.access,
reportDefinitionDetails,
currentStatus)
val docId = ReportInstancesIndex.createReportInstance(reportInstance)
docId ?: run {
Metrics.REPORT_FROM_DEFINITION_ID_SYSTEM_ERROR.counter.increment()
throw OpenSearchStatusException("Report Instance Creation failed", RestStatus.INTERNAL_SERVER_ERROR)
}
val reportInstanceCopy = reportInstance.copy(id = docId)
return OnDemandReportCreateResponse(reportInstanceCopy, true)
}