diff --git a/lib/src/main/java/com/example/service/TaskReportService.kt b/lib/src/main/java/com/example/service/TaskReportService.kt new file mode 100644 index 0000000..1f37936 --- /dev/null +++ b/lib/src/main/java/com/example/service/TaskReportService.kt @@ -0,0 +1,62 @@ +package com.example.service + +import com.example.action.HttpMethod +import com.example.http.HttpClient +import com.example.http.HttpClient.call +import com.example.http.Request +import com.example.http.Response +import com.example.logger.LogUtils +import com.example.report.TaskExec +import com.example.request.BaseRequest +import com.example.request.ReportTaskRequest +import com.example.utils.toJsonString +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +class TaskReportService( + private val taskExec: TaskExec, + private val reportUrl: String, + private val baseRequest: BaseRequest +) { + + companion object { + private const val CONTENT_TYPE_STREAM = HttpClient.Params.REQUEST_HEADER_CONTENT_TYPE_STREAM + } + + suspend fun run(): Response = withContext(Dispatchers.IO) { + val request = buildRequest() + logRequest(request) + request.call() + } + + private fun buildRequest(): Request { + val requestBody = buildRequestBody() + return Request( + url = reportUrl, + headers = buildHeaders(), + method = HttpMethod.Post, + body = requestBody.toByteArray() + ) + } + + private fun buildHeaders(): Map { + return mapOf( + HttpClient.Params.REQUEST_HEADER_CONTENT_TYPE to CONTENT_TYPE_STREAM, + HttpClient.Params.REQUEST_HEADER_ACCEPT to CONTENT_TYPE_STREAM + ) + } + + private fun buildRequestBody(): String { + val reportRequest = ReportTaskRequest( + baseRequest, + taskLogs = listOf(taskExec) + ) + return reportRequest.toJsonString() + } + + private fun logRequest(request: Request) { + val requestData = String(request.body) + LogUtils.info("TaskReportService request-data: $requestData") + LogUtils.info("TaskReportService request-url: ${request.url}") + } +} \ No newline at end of file