You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by "det101 (via GitHub)" <gi...@apache.org> on 2025/05/07 11:10:40 UTC
[PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
det101 opened a new pull request, #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165
1.Pull local and remote task logs via the LogClientDelegate proxy. Fetch local logs first; if that fails, pull from the remote.
2.The logic in MasterLogServiceImpl and WorkerLogServiceImpl is the same. Abstract the shared logic into LoggerServiceImpl to maintain a single codebase.
close #15966
<!--Thanks very much for contributing to Apache DolphinScheduler, we are happy that you want to help us improve DolphinScheduler! -->
## Purpose of the pull request
<!--(For example: This pull request adds checkstyle plugin).-->
## Brief change log
<!--*(for example:)*
- *Add maven-checkstyle-plugin to root pom.xml*
-->
## Verify this pull request
<!--*(Please pick either of the following options)*-->
This pull request is code cleanup without any test coverage.
*(or)*
This pull request is already covered by existing tests, such as *(please describe tests)*.
(or)
This change added tests and can be verified as follows:
<!--*(example:)*
- *Added dolphinscheduler-dao tests for end-to-end.*
- *Added CronUtilsTest to verify the change.*
- *Manually verified the change by testing locally.* -->
(or)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2900320786
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "ruanwenjun (via GitHub)" <gi...@apache.org>.
ruanwenjun commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2081785047
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryResponse response = getLocalPartLog(taskInstance, skipLineNum, limit);
Review Comment:
We can check if the host exists from register to avoid wait connect timeout.
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryResponse response = getLocalPartLog(taskInstance, skipLineNum, limit);
+ if (response.getCode() == 0) {
+ return response.getLogContent();
+ } else {
+ log.warn("Failed to get local part log, trying remote: {}", response.getMessage());
+ // todo We can optimize requests by the actual range, reducing disk usage and network traffic.
+ return LogUtils.rollViewLogLines(
+ LogUtils.readPartFileContentFromRemote(taskInstance.getLogPath(), skipLineNum, limit));
+ }
+ }
+
+ /**
+ * Retrieves the complete log content for a given task instance as a byte array.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @return A byte array containing the complete log content.
+ */
+ public byte[] getWholeLogBytes(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadResponse response = getLocalWholeLog(taskInstance);
+ if (response.getCode() == 0) {
+ return response.getLogBytes();
+ } else {
+ log.warn("Failed to get local whole log, trying remote: {}", response.getMessage());
+ return getRemoteWholeLog(taskInstance.getLogPath());
+ }
+ }
+
+ private byte[] getRemoteWholeLog(String logPath) {
+ return LogUtils.getFileContentBytesFromRemote(logPath);
+ }
+
+ private TaskInstanceLogFileDownloadResponse getLocalWholeLog(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadRequest request = buildLogFileDownloadRequest(taskInstance);
+ return getProxyLogService(taskInstance).getTaskInstanceWholeLogFileBytes(request);
+ }
+
+ private TaskInstanceLogPageQueryResponse getLocalPartLog(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryRequest request = buildLogPageQueryRequest(taskInstance, skipLineNum, limit);
+ return getProxyLogService(taskInstance).pageQueryTaskInstanceLog(request);
+ }
Review Comment:
Move this to LocalLogClient?
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryResponse response = getLocalPartLog(taskInstance, skipLineNum, limit);
+ if (response.getCode() == 0) {
+ return response.getLogContent();
+ } else {
+ log.warn("Failed to get local part log, trying remote: {}", response.getMessage());
+ // todo We can optimize requests by the actual range, reducing disk usage and network traffic.
+ return LogUtils.rollViewLogLines(
+ LogUtils.readPartFileContentFromRemote(taskInstance.getLogPath(), skipLineNum, limit));
+ }
+ }
+
+ /**
+ * Retrieves the complete log content for a given task instance as a byte array.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @return A byte array containing the complete log content.
+ */
+ public byte[] getWholeLogBytes(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadResponse response = getLocalWholeLog(taskInstance);
+ if (response.getCode() == 0) {
+ return response.getLogBytes();
+ } else {
+ log.warn("Failed to get local whole log, trying remote: {}", response.getMessage());
+ return getRemoteWholeLog(taskInstance.getLogPath());
+ }
+ }
+
+ private byte[] getRemoteWholeLog(String logPath) {
+ return LogUtils.getFileContentBytesFromRemote(logPath);
+ }
Review Comment:
Move this to RemoteLogClient?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "det101 (via GitHub)" <gi...@apache.org>.
det101 commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2086722318
##########
dolphinscheduler-extract/dolphinscheduler-extract-common/src/main/java/org/apache/dolphinscheduler/extract/common/service/impl/LogServiceImpl.java:
##########
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.extract.common.service.impl;
+
+import org.apache.dolphinscheduler.common.utils.FileUtils;
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import java.util.List;
+
+public class LogServiceImpl implements ILogService {
+
+ /**
+ * Downloads the entire log file for a task instance.
+ *
+ * @param taskInstanceLogFileDownloadRequest Request object containing the path to the task instance log file.
+ * @return Response object containing the log file content in byte array form.
+ */
+ @Override
+ public TaskInstanceLogFileDownloadResponse getTaskInstanceWholeLogFileBytes(TaskInstanceLogFileDownloadRequest taskInstanceLogFileDownloadRequest) {
+ final TaskInstanceLogFileDownloadResponse taskInstanceLogFileDownloadResponse =
+ new TaskInstanceLogFileDownloadResponse();
+ try {
+ byte[] bytes = LogUtils
+ .getFileContentBytesFromLocal(taskInstanceLogFileDownloadRequest.getTaskInstanceLogAbsolutePath());
+ taskInstanceLogFileDownloadResponse.setLogBytes(bytes);
+ } catch (Exception e) {
+ taskInstanceLogFileDownloadResponse.setCode(1);
+ taskInstanceLogFileDownloadResponse.setMessage(e.getMessage());
+ }
+ return taskInstanceLogFileDownloadResponse;
+ }
+
+ /**
+ * Performs paginated queries on task instance logs.
+ *
+ * @param taskInstanceLogPageQueryRequest Request object containing the path to the task instance log file, the number of lines to skip, and the maximum number of lines to read.
+ * @return Response object containing the log content.
+ */
+ @Override
+ public TaskInstanceLogPageQueryResponse pageQueryTaskInstanceLog(TaskInstanceLogPageQueryRequest taskInstanceLogPageQueryRequest) {
+ final TaskInstanceLogPageQueryResponse taskInstanceLogPageQueryResponse =
+ new TaskInstanceLogPageQueryResponse();
+ List<String> lines;
+ try {
+ lines = LogUtils.readPartFileContentFromLocal(
+ taskInstanceLogPageQueryRequest.getTaskInstanceLogAbsolutePath(),
+ taskInstanceLogPageQueryRequest.getSkipLineNum(),
+ taskInstanceLogPageQueryRequest.getLimit());
+ taskInstanceLogPageQueryResponse.setLogContent(LogUtils.rollViewLogLines(lines));
+ } catch (Exception e) {
+ taskInstanceLogPageQueryResponse.setCode(1);
+ taskInstanceLogPageQueryResponse.setMessage(e.getMessage());
Review Comment:
change to ExceptionUtils.getMessage
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2890094870
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2900314946
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "SbloodyS (via GitHub)" <gi...@apache.org>.
SbloodyS merged PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "det101 (via GitHub)" <gi...@apache.org>.
det101 commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2086722793
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LocalLogClient.java:
##########
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class LocalLogClient {
+
+ /**
+ * Download the complete log of a task instance.
+ * This method is used to retrieve all log information from the start to the end of a task instance,
+ * suitable for scenarios where a complete log record is required.
+ *
+ * @param taskInstance The task instance object, containing information needed to retrieve the log.
+ * @return The complete log file download response of the task instance, including log content and metadata.
+ */
+ public TaskInstanceLogFileDownloadResponse getWholeLog(TaskInstance taskInstance) {
+ return getLocalWholeLog(taskInstance);
+ }
+
+ /**
+ * Query a portion of the log of a task instance.
+ * This method is used to query log information of a task instance in a paginated manner,
+ * suitable for scenarios where the log content is large and needs to be retrieved in batches.
+ *
+ * @param taskInstance The task instance object, containing information needed to retrieve the log.
+ * @param skipLineNum The number of lines to skip, indicating from which line to start reading the log.
+ * @param limit The maximum number of lines to read, indicating the maximum number of lines to retrieve in this query.
+ * @return The partial log query response, including log content within the specified range and metadata.
+ */
+ public TaskInstanceLogPageQueryResponse getPartLog(TaskInstance taskInstance, int skipLineNum, int limit) {
+ return getLocalPartLog(taskInstance, skipLineNum, limit);
+ }
+
+ private static TaskInstanceLogFileDownloadResponse getLocalWholeLog(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadRequest request = buildLogFileDownloadRequest(taskInstance);
+ return getProxyLogService(taskInstance).getTaskInstanceWholeLogFileBytes(request);
+ }
+
+ private static TaskInstanceLogPageQueryResponse getLocalPartLog(TaskInstance taskInstance, int skipLineNum,
+ int limit) {
+ TaskInstanceLogPageQueryRequest request = buildLogPageQueryRequest(taskInstance, skipLineNum, limit);
+ return getProxyLogService(taskInstance).pageQueryTaskInstanceLog(request);
+ }
+
+ private static TaskInstanceLogFileDownloadRequest buildLogFileDownloadRequest(TaskInstance taskInstance) {
+ return new TaskInstanceLogFileDownloadRequest(
+ taskInstance.getId(),
+ taskInstance.getLogPath());
+ }
+
+ private static TaskInstanceLogPageQueryRequest buildLogPageQueryRequest(TaskInstance taskInstance, int skipLineNum,
+ int limit) {
+ return TaskInstanceLogPageQueryRequest.builder()
+ .taskInstanceId(taskInstance.getId())
+ .taskInstanceLogAbsolutePath(taskInstance.getLogPath())
+ .skipLineNum(skipLineNum)
+ .limit(limit)
+ .build();
+ }
+
+ private static ILogService getProxyLogService(TaskInstance taskInstance) {
+ return Clients
+ .withService(ILogService.class)
+ .withHost(taskInstance.getHost());
+ }
Review Comment:
function merged
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2954461997
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2081343795
##########
dolphinscheduler-extract/dolphinscheduler-extract-common/src/main/java/org/apache/dolphinscheduler/extract/common/transportor/TaskInstanceLogFileDownloadResponse.java:
##########
@@ -28,4 +28,8 @@ public class TaskInstanceLogFileDownloadResponse {
private byte[] logBytes;
+ private int code = 0;
+
Review Comment:
[nitpick] Consider adding Javadoc comments for the new fields 'code' and 'message' to document their role in error reporting.
```suggestion
/**
* Status or error code indicating the result of the operation.
* A value of 0 typically indicates success, while non-zero values indicate errors.
*/
private int code = 0;
/**
* Human-readable message providing additional details about the status or error.
*/
```
##########
dolphinscheduler-extract/dolphinscheduler-extract-common/src/main/java/org/apache/dolphinscheduler/extract/common/transportor/TaskInstanceLogPageQueryResponse.java:
##########
@@ -28,4 +28,8 @@ public class TaskInstanceLogPageQueryResponse {
private String logContent;
+ private int code = 0;
+
Review Comment:
[nitpick] Consider adding Javadoc comments for the new fields 'code' and 'message' to clarify their purpose and usage in the response class.
```suggestion
/**
* Status code of the response. A value of 0 typically indicates success,
* while other values represent various error conditions.
*/
private int code = 0;
/**
* Additional information or context about the response, such as error
* details or success messages.
*/
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "det101 (via GitHub)" <gi...@apache.org>.
det101 commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2084564870
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryResponse response = getLocalPartLog(taskInstance, skipLineNum, limit);
+ if (response.getCode() == 0) {
+ return response.getLogContent();
+ } else {
+ log.warn("Failed to get local part log, trying remote: {}", response.getMessage());
+ // todo We can optimize requests by the actual range, reducing disk usage and network traffic.
+ return LogUtils.rollViewLogLines(
+ LogUtils.readPartFileContentFromRemote(taskInstance.getLogPath(), skipLineNum, limit));
+ }
+ }
+
+ /**
+ * Retrieves the complete log content for a given task instance as a byte array.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @return A byte array containing the complete log content.
+ */
+ public byte[] getWholeLogBytes(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadResponse response = getLocalWholeLog(taskInstance);
+ if (response.getCode() == 0) {
+ return response.getLogBytes();
+ } else {
+ log.warn("Failed to get local whole log, trying remote: {}", response.getMessage());
+ return getRemoteWholeLog(taskInstance.getLogPath());
+ }
+ }
+
+ private byte[] getRemoteWholeLog(String logPath) {
+ return LogUtils.getFileContentBytesFromRemote(logPath);
+ }
+
+ private TaskInstanceLogFileDownloadResponse getLocalWholeLog(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadRequest request = buildLogFileDownloadRequest(taskInstance);
+ return getProxyLogService(taskInstance).getTaskInstanceWholeLogFileBytes(request);
+ }
+
+ private TaskInstanceLogPageQueryResponse getLocalPartLog(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryRequest request = buildLogPageQueryRequest(taskInstance, skipLineNum, limit);
+ return getProxyLogService(taskInstance).pageQueryTaskInstanceLog(request);
+ }
Review Comment:
add LocalLogClient
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryResponse response = getLocalPartLog(taskInstance, skipLineNum, limit);
+ if (response.getCode() == 0) {
+ return response.getLogContent();
+ } else {
+ log.warn("Failed to get local part log, trying remote: {}", response.getMessage());
+ // todo We can optimize requests by the actual range, reducing disk usage and network traffic.
+ return LogUtils.rollViewLogLines(
+ LogUtils.readPartFileContentFromRemote(taskInstance.getLogPath(), skipLineNum, limit));
+ }
+ }
+
+ /**
+ * Retrieves the complete log content for a given task instance as a byte array.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @return A byte array containing the complete log content.
+ */
+ public byte[] getWholeLogBytes(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadResponse response = getLocalWholeLog(taskInstance);
+ if (response.getCode() == 0) {
+ return response.getLogBytes();
+ } else {
+ log.warn("Failed to get local whole log, trying remote: {}", response.getMessage());
+ return getRemoteWholeLog(taskInstance.getLogPath());
+ }
+ }
+
+ private byte[] getRemoteWholeLog(String logPath) {
+ return LogUtils.getFileContentBytesFromRemote(logPath);
+ }
Review Comment:
add RemoteLogClient
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2918800365
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "det101 (via GitHub)" <gi...@apache.org>.
det101 commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2084311981
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ TaskInstanceLogPageQueryResponse response = getLocalPartLog(taskInstance, skipLineNum, limit);
Review Comment:
Alright, I will check if the node exists in the registry before initiating the call.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "det101 (via GitHub)" <gi...@apache.org>.
det101 commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2086718346
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+import org.apache.dolphinscheduler.plugin.task.api.utils.TaskTypeUtils;
+import org.apache.dolphinscheduler.registry.api.RegistryClient;
+import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ @Autowired
+ private LocalLogClient localLogClient;
+ @Autowired
+ private RemoteLogClient remoteLogClient;
+ @Autowired
+ private RegistryClient registryClient;
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ checkArgs(taskInstance);
+ checkNodeExists(taskInstance);
Review Comment:
There is a logic problem here. If the node does not exist, it will neither download it locally nor make a remote request. Thank you very much for finding this problem. i fix it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2890097226
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "det101 (via GitHub)" <gi...@apache.org>.
det101 commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2889693274
@ruanwenjun @caishunfeng
Please help review if there are any problems
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2954461014
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "ruanwenjun (via GitHub)" <gi...@apache.org>.
ruanwenjun commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2084822638
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LocalLogClient.java:
##########
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.base.client.Clients;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class LocalLogClient {
+
+ /**
+ * Download the complete log of a task instance.
+ * This method is used to retrieve all log information from the start to the end of a task instance,
+ * suitable for scenarios where a complete log record is required.
+ *
+ * @param taskInstance The task instance object, containing information needed to retrieve the log.
+ * @return The complete log file download response of the task instance, including log content and metadata.
+ */
+ public TaskInstanceLogFileDownloadResponse getWholeLog(TaskInstance taskInstance) {
+ return getLocalWholeLog(taskInstance);
+ }
+
+ /**
+ * Query a portion of the log of a task instance.
+ * This method is used to query log information of a task instance in a paginated manner,
+ * suitable for scenarios where the log content is large and needs to be retrieved in batches.
+ *
+ * @param taskInstance The task instance object, containing information needed to retrieve the log.
+ * @param skipLineNum The number of lines to skip, indicating from which line to start reading the log.
+ * @param limit The maximum number of lines to read, indicating the maximum number of lines to retrieve in this query.
+ * @return The partial log query response, including log content within the specified range and metadata.
+ */
+ public TaskInstanceLogPageQueryResponse getPartLog(TaskInstance taskInstance, int skipLineNum, int limit) {
+ return getLocalPartLog(taskInstance, skipLineNum, limit);
+ }
+
+ private static TaskInstanceLogFileDownloadResponse getLocalWholeLog(TaskInstance taskInstance) {
+ TaskInstanceLogFileDownloadRequest request = buildLogFileDownloadRequest(taskInstance);
+ return getProxyLogService(taskInstance).getTaskInstanceWholeLogFileBytes(request);
+ }
+
+ private static TaskInstanceLogPageQueryResponse getLocalPartLog(TaskInstance taskInstance, int skipLineNum,
+ int limit) {
+ TaskInstanceLogPageQueryRequest request = buildLogPageQueryRequest(taskInstance, skipLineNum, limit);
+ return getProxyLogService(taskInstance).pageQueryTaskInstanceLog(request);
+ }
+
+ private static TaskInstanceLogFileDownloadRequest buildLogFileDownloadRequest(TaskInstance taskInstance) {
+ return new TaskInstanceLogFileDownloadRequest(
+ taskInstance.getId(),
+ taskInstance.getLogPath());
+ }
+
+ private static TaskInstanceLogPageQueryRequest buildLogPageQueryRequest(TaskInstance taskInstance, int skipLineNum,
+ int limit) {
+ return TaskInstanceLogPageQueryRequest.builder()
+ .taskInstanceId(taskInstance.getId())
+ .taskInstanceLogAbsolutePath(taskInstance.getLogPath())
+ .skipLineNum(skipLineNum)
+ .limit(limit)
+ .build();
+ }
+
+ private static ILogService getProxyLogService(TaskInstance taskInstance) {
+ return Clients
+ .withService(ILogService.class)
+ .withHost(taskInstance.getHost());
+ }
Review Comment:
Please don't use static here, and the method `buildLogFileDownloadRequest`, `buildLogFileDownloadRequest` seems meaningless, this is only use once.
##########
dolphinscheduler-extract/dolphinscheduler-extract-common/src/main/java/org/apache/dolphinscheduler/extract/common/service/impl/LogServiceImpl.java:
##########
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.extract.common.service.impl;
+
+import org.apache.dolphinscheduler.common.utils.FileUtils;
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import java.util.List;
+
+public class LogServiceImpl implements ILogService {
+
+ /**
+ * Downloads the entire log file for a task instance.
+ *
+ * @param taskInstanceLogFileDownloadRequest Request object containing the path to the task instance log file.
+ * @return Response object containing the log file content in byte array form.
+ */
+ @Override
+ public TaskInstanceLogFileDownloadResponse getTaskInstanceWholeLogFileBytes(TaskInstanceLogFileDownloadRequest taskInstanceLogFileDownloadRequest) {
+ final TaskInstanceLogFileDownloadResponse taskInstanceLogFileDownloadResponse =
+ new TaskInstanceLogFileDownloadResponse();
+ try {
+ byte[] bytes = LogUtils
+ .getFileContentBytesFromLocal(taskInstanceLogFileDownloadRequest.getTaskInstanceLogAbsolutePath());
+ taskInstanceLogFileDownloadResponse.setLogBytes(bytes);
+ } catch (Exception e) {
+ taskInstanceLogFileDownloadResponse.setCode(1);
+ taskInstanceLogFileDownloadResponse.setMessage(e.getMessage());
+ }
+ return taskInstanceLogFileDownloadResponse;
+ }
+
+ /**
+ * Performs paginated queries on task instance logs.
+ *
+ * @param taskInstanceLogPageQueryRequest Request object containing the path to the task instance log file, the number of lines to skip, and the maximum number of lines to read.
+ * @return Response object containing the log content.
+ */
+ @Override
+ public TaskInstanceLogPageQueryResponse pageQueryTaskInstanceLog(TaskInstanceLogPageQueryRequest taskInstanceLogPageQueryRequest) {
+ final TaskInstanceLogPageQueryResponse taskInstanceLogPageQueryResponse =
+ new TaskInstanceLogPageQueryResponse();
+ List<String> lines;
+ try {
+ lines = LogUtils.readPartFileContentFromLocal(
+ taskInstanceLogPageQueryRequest.getTaskInstanceLogAbsolutePath(),
+ taskInstanceLogPageQueryRequest.getSkipLineNum(),
+ taskInstanceLogPageQueryRequest.getLimit());
+ taskInstanceLogPageQueryResponse.setLogContent(LogUtils.rollViewLogLines(lines));
+ } catch (Exception e) {
+ taskInstanceLogPageQueryResponse.setCode(1);
Review Comment:
Use enum here please don't use 1.
##########
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/executor/logging/LogClientDelegate.java:
##########
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.executor.logging;
+
+import org.apache.dolphinscheduler.dao.entity.TaskInstance;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+import org.apache.dolphinscheduler.plugin.task.api.utils.TaskTypeUtils;
+import org.apache.dolphinscheduler.registry.api.RegistryClient;
+import org.apache.dolphinscheduler.registry.api.enums.RegistryNodeType;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@Component
+public class LogClientDelegate {
+
+ @Autowired
+ private LocalLogClient localLogClient;
+ @Autowired
+ private RemoteLogClient remoteLogClient;
+ @Autowired
+ private RegistryClient registryClient;
+
+ /**
+ * Retrieves a portion of the log string for a given task instance.
+ * This method first attempts to fetch the log from local storage; if unsuccessful, it tries to obtain the log from remote storage.
+ *
+ * @param taskInstance The task instance object, containing information needed for log retrieval.
+ * @param skipLineNum The number of log lines to skip from the beginning.
+ * @param limit The maximum number of log lines to retrieve.
+ * @return A string containing the specified portion of the log.
+ */
+ public String getPartLogString(TaskInstance taskInstance, int skipLineNum, int limit) {
+ checkArgs(taskInstance);
+ checkNodeExists(taskInstance);
Review Comment:
If the node doesn't exist, then we should try to fetch the log from remote.
##########
dolphinscheduler-extract/dolphinscheduler-extract-common/src/main/java/org/apache/dolphinscheduler/extract/common/service/impl/LogServiceImpl.java:
##########
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.extract.common.service.impl;
+
+import org.apache.dolphinscheduler.common.utils.FileUtils;
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import java.util.List;
+
+public class LogServiceImpl implements ILogService {
+
+ /**
+ * Downloads the entire log file for a task instance.
+ *
+ * @param taskInstanceLogFileDownloadRequest Request object containing the path to the task instance log file.
+ * @return Response object containing the log file content in byte array form.
+ */
+ @Override
+ public TaskInstanceLogFileDownloadResponse getTaskInstanceWholeLogFileBytes(TaskInstanceLogFileDownloadRequest taskInstanceLogFileDownloadRequest) {
+ final TaskInstanceLogFileDownloadResponse taskInstanceLogFileDownloadResponse =
+ new TaskInstanceLogFileDownloadResponse();
+ try {
+ byte[] bytes = LogUtils
+ .getFileContentBytesFromLocal(taskInstanceLogFileDownloadRequest.getTaskInstanceLogAbsolutePath());
+ taskInstanceLogFileDownloadResponse.setLogBytes(bytes);
+ } catch (Exception e) {
+ taskInstanceLogFileDownloadResponse.setCode(1);
+ taskInstanceLogFileDownloadResponse.setMessage(e.getMessage());
+ }
+ return taskInstanceLogFileDownloadResponse;
+ }
+
+ /**
+ * Performs paginated queries on task instance logs.
+ *
+ * @param taskInstanceLogPageQueryRequest Request object containing the path to the task instance log file, the number of lines to skip, and the maximum number of lines to read.
+ * @return Response object containing the log content.
+ */
+ @Override
+ public TaskInstanceLogPageQueryResponse pageQueryTaskInstanceLog(TaskInstanceLogPageQueryRequest taskInstanceLogPageQueryRequest) {
+ final TaskInstanceLogPageQueryResponse taskInstanceLogPageQueryResponse =
+ new TaskInstanceLogPageQueryResponse();
+ List<String> lines;
+ try {
+ lines = LogUtils.readPartFileContentFromLocal(
+ taskInstanceLogPageQueryRequest.getTaskInstanceLogAbsolutePath(),
+ taskInstanceLogPageQueryRequest.getSkipLineNum(),
+ taskInstanceLogPageQueryRequest.getLimit());
+ taskInstanceLogPageQueryResponse.setLogContent(LogUtils.rollViewLogLines(lines));
+ } catch (Exception e) {
+ taskInstanceLogPageQueryResponse.setCode(1);
+ taskInstanceLogPageQueryResponse.setMessage(e.getMessage());
Review Comment:
Use ExceptionUtils to get the root cause message.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "det101 (via GitHub)" <gi...@apache.org>.
det101 commented on code in PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#discussion_r2086719607
##########
dolphinscheduler-extract/dolphinscheduler-extract-common/src/main/java/org/apache/dolphinscheduler/extract/common/service/impl/LogServiceImpl.java:
##########
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.extract.common.service.impl;
+
+import org.apache.dolphinscheduler.common.utils.FileUtils;
+import org.apache.dolphinscheduler.common.utils.LogUtils;
+import org.apache.dolphinscheduler.extract.common.ILogService;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogFileDownloadResponse;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryRequest;
+import org.apache.dolphinscheduler.extract.common.transportor.TaskInstanceLogPageQueryResponse;
+
+import java.util.List;
+
+public class LogServiceImpl implements ILogService {
+
+ /**
+ * Downloads the entire log file for a task instance.
+ *
+ * @param taskInstanceLogFileDownloadRequest Request object containing the path to the task instance log file.
+ * @return Response object containing the log file content in byte array form.
+ */
+ @Override
+ public TaskInstanceLogFileDownloadResponse getTaskInstanceWholeLogFileBytes(TaskInstanceLogFileDownloadRequest taskInstanceLogFileDownloadRequest) {
+ final TaskInstanceLogFileDownloadResponse taskInstanceLogFileDownloadResponse =
+ new TaskInstanceLogFileDownloadResponse();
+ try {
+ byte[] bytes = LogUtils
+ .getFileContentBytesFromLocal(taskInstanceLogFileDownloadRequest.getTaskInstanceLogAbsolutePath());
+ taskInstanceLogFileDownloadResponse.setLogBytes(bytes);
+ } catch (Exception e) {
+ taskInstanceLogFileDownloadResponse.setCode(1);
+ taskInstanceLogFileDownloadResponse.setMessage(e.getMessage());
+ }
+ return taskInstanceLogFileDownloadResponse;
+ }
+
+ /**
+ * Performs paginated queries on task instance logs.
+ *
+ * @param taskInstanceLogPageQueryRequest Request object containing the path to the task instance log file, the number of lines to skip, and the maximum number of lines to read.
+ * @return Response object containing the log content.
+ */
+ @Override
+ public TaskInstanceLogPageQueryResponse pageQueryTaskInstanceLog(TaskInstanceLogPageQueryRequest taskInstanceLogPageQueryRequest) {
+ final TaskInstanceLogPageQueryResponse taskInstanceLogPageQueryResponse =
+ new TaskInstanceLogPageQueryResponse();
+ List<String> lines;
+ try {
+ lines = LogUtils.readPartFileContentFromLocal(
+ taskInstanceLogPageQueryRequest.getTaskInstanceLogAbsolutePath(),
+ taskInstanceLogPageQueryRequest.getSkipLineNum(),
+ taskInstanceLogPageQueryRequest.getLimit());
+ taskInstanceLogPageQueryResponse.setLogContent(LogUtils.rollViewLogLines(lines));
+ } catch (Exception e) {
+ taskInstanceLogPageQueryResponse.setCode(1);
Review Comment:
add enum LogResponseStatus
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "sonarqubecloud[bot] (via GitHub)" <gi...@apache.org>.
sonarqubecloud[bot] commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2918800682
## [](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165) **Quality Gate passed**
Issues
 [20 New issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [0 Accepted issues](https://sonarcloud.io/project/issues?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=ACCEPTED)
Measures
 [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=apache-dolphinscheduler&pullRequest=17165&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)
 [68.7% Coverage on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_coverage&view=list)
 [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=apache-dolphinscheduler&pullRequest=17165&metric=new_duplicated_lines_density&view=list)
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=apache-dolphinscheduler&pullRequest=17165)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [DSIP-40][APIService] Add LogClient to fetch log [dolphinscheduler]
Posted by "ruanwenjun (via GitHub)" <gi...@apache.org>.
ruanwenjun commented on PR #17165:
URL: https://github.com/apache/dolphinscheduler/pull/17165#issuecomment-2955270396
@SbloodyS PTAL
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@dolphinscheduler.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org