xiangzihao
4 months ago
committed by
GitHub
46 changed files with 586 additions and 1780 deletions
After Width: | Height: | Size: 150 KiB |
Before Width: | Height: | Size: 204 KiB |
Before Width: | Height: | Size: 707 B |
After Width: | Height: | Size: 166 KiB |
@ -1,31 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.common.enums; |
|
||||||
|
|
||||||
/** |
|
||||||
* http check condition |
|
||||||
*/ |
|
||||||
public enum HttpCheckCondition { |
|
||||||
/** |
|
||||||
* 0 status_code_default:200 |
|
||||||
* 1 status_code_custom |
|
||||||
* 2 body_contains |
|
||||||
* 3 body_not_contains |
|
||||||
*/ |
|
||||||
STATUS_CODE_DEFAULT, STATUS_CODE_CUSTOM, BODY_CONTAINS, BODY_NOT_CONTAINS |
|
||||||
} |
|
@ -1,32 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.common.enums; |
|
||||||
|
|
||||||
/** |
|
||||||
* http method |
|
||||||
*/ |
|
||||||
public enum HttpMethod { |
|
||||||
/** |
|
||||||
* 0 get |
|
||||||
* 1 post |
|
||||||
* 2 head |
|
||||||
* 3 put |
|
||||||
* 4 delete |
|
||||||
*/ |
|
||||||
GET, POST, HEAD, PUT, DELETE |
|
||||||
} |
|
@ -1,30 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.common.enums; |
|
||||||
|
|
||||||
/** |
|
||||||
* http parameters type |
|
||||||
*/ |
|
||||||
public enum HttpParametersType { |
|
||||||
/** |
|
||||||
* 0 parameter; |
|
||||||
* 1 body; |
|
||||||
* 2 headers; |
|
||||||
*/ |
|
||||||
PARAMETER, BODY, HEADERS |
|
||||||
} |
|
@ -0,0 +1,42 @@ |
|||||||
|
/* |
||||||
|
* Licensed to 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. Apache Software Foundation (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.common.model; |
||||||
|
|
||||||
|
import lombok.Getter; |
||||||
|
import lombok.RequiredArgsConstructor; |
||||||
|
|
||||||
|
@Getter |
||||||
|
@RequiredArgsConstructor |
||||||
|
public enum OkHttpRequestHeaderContentType { |
||||||
|
|
||||||
|
APPLICATION_JSON("application/json"), |
||||||
|
APPLICATION_FORM_URLENCODED("application/x-www-form-urlencoded"); |
||||||
|
|
||||||
|
private final String value; |
||||||
|
|
||||||
|
public static OkHttpRequestHeaderContentType fromValue(String value) { |
||||||
|
for (OkHttpRequestHeaderContentType contentType : OkHttpRequestHeaderContentType.values()) { |
||||||
|
if (contentType.getValue().equalsIgnoreCase(value)) { |
||||||
|
return contentType; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,32 @@ |
|||||||
|
/* |
||||||
|
* Licensed to 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. Apache Software Foundation (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.common.model; |
||||||
|
|
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
import lombok.Data; |
||||||
|
|
||||||
|
@Data |
||||||
|
public class OkHttpRequestHeaders { |
||||||
|
|
||||||
|
private Map<String, String> headers; |
||||||
|
|
||||||
|
private OkHttpRequestHeaderContentType okHttpRequestHeaderContentType; |
||||||
|
} |
@ -0,0 +1,34 @@ |
|||||||
|
/* |
||||||
|
* Licensed to 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. Apache Software Foundation (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.common.model; |
||||||
|
|
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.Data; |
||||||
|
import lombok.NoArgsConstructor; |
||||||
|
|
||||||
|
@AllArgsConstructor |
||||||
|
@NoArgsConstructor |
||||||
|
@Data |
||||||
|
public class OkHttpResponse { |
||||||
|
|
||||||
|
private int statusCode; |
||||||
|
|
||||||
|
private String body; |
||||||
|
} |
@ -1,202 +0,0 @@ |
|||||||
|
|
||||||
Apache License |
|
||||||
Version 2.0, January 2004 |
|
||||||
http://www.apache.org/licenses/ |
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
|
||||||
|
|
||||||
1. Definitions. |
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction, |
|
||||||
and distribution as defined by Sections 1 through 9 of this document. |
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by |
|
||||||
the copyright owner that is granting the License. |
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all |
|
||||||
other entities that control, are controlled by, or are under common |
|
||||||
control with that entity. For the purposes of this definition, |
|
||||||
"control" means (i) the power, direct or indirect, to cause the |
|
||||||
direction or management of such entity, whether by contract or |
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the |
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity. |
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity |
|
||||||
exercising permissions granted by this License. |
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications, |
|
||||||
including but not limited to software source code, documentation |
|
||||||
source, and configuration files. |
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical |
|
||||||
transformation or translation of a Source form, including but |
|
||||||
not limited to compiled object code, generated documentation, |
|
||||||
and conversions to other media types. |
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or |
|
||||||
Object form, made available under the License, as indicated by a |
|
||||||
copyright notice that is included in or attached to the work |
|
||||||
(an example is provided in the Appendix below). |
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object |
|
||||||
form, that is based on (or derived from) the Work and for which the |
|
||||||
editorial revisions, annotations, elaborations, or other modifications |
|
||||||
represent, as a whole, an original work of authorship. For the purposes |
|
||||||
of this License, Derivative Works shall not include works that remain |
|
||||||
separable from, or merely link (or bind by name) to the interfaces of, |
|
||||||
the Work and Derivative Works thereof. |
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including |
|
||||||
the original version of the Work and any modifications or additions |
|
||||||
to that Work or Derivative Works thereof, that is intentionally |
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner |
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of |
|
||||||
the copyright owner. For the purposes of this definition, "submitted" |
|
||||||
means any form of electronic, verbal, or written communication sent |
|
||||||
to the Licensor or its representatives, including but not limited to |
|
||||||
communication on electronic mailing lists, source code control systems, |
|
||||||
and issue tracking systems that are managed by, or on behalf of, the |
|
||||||
Licensor for the purpose of discussing and improving the Work, but |
|
||||||
excluding communication that is conspicuously marked or otherwise |
|
||||||
designated in writing by the copyright owner as "Not a Contribution." |
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity |
|
||||||
on behalf of whom a Contribution has been received by Licensor and |
|
||||||
subsequently incorporated within the Work. |
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of |
|
||||||
this License, each Contributor hereby grants to You a perpetual, |
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|
||||||
copyright license to reproduce, prepare Derivative Works of, |
|
||||||
publicly display, publicly perform, sublicense, and distribute the |
|
||||||
Work and such Derivative Works in Source or Object form. |
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of |
|
||||||
this License, each Contributor hereby grants to You a perpetual, |
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
|
||||||
(except as stated in this section) patent license to make, have made, |
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work, |
|
||||||
where such license applies only to those patent claims licensable |
|
||||||
by such Contributor that are necessarily infringed by their |
|
||||||
Contribution(s) alone or by combination of their Contribution(s) |
|
||||||
with the Work to which such Contribution(s) was submitted. If You |
|
||||||
institute patent litigation against any entity (including a |
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work |
|
||||||
or a Contribution incorporated within the Work constitutes direct |
|
||||||
or contributory patent infringement, then any patent licenses |
|
||||||
granted to You under this License for that Work shall terminate |
|
||||||
as of the date such litigation is filed. |
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the |
|
||||||
Work or Derivative Works thereof in any medium, with or without |
|
||||||
modifications, and in Source or Object form, provided that You |
|
||||||
meet the following conditions: |
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or |
|
||||||
Derivative Works a copy of this License; and |
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices |
|
||||||
stating that You changed the files; and |
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works |
|
||||||
that You distribute, all copyright, patent, trademark, and |
|
||||||
attribution notices from the Source form of the Work, |
|
||||||
excluding those notices that do not pertain to any part of |
|
||||||
the Derivative Works; and |
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its |
|
||||||
distribution, then any Derivative Works that You distribute must |
|
||||||
include a readable copy of the attribution notices contained |
|
||||||
within such NOTICE file, excluding those notices that do not |
|
||||||
pertain to any part of the Derivative Works, in at least one |
|
||||||
of the following places: within a NOTICE text file distributed |
|
||||||
as part of the Derivative Works; within the Source form or |
|
||||||
documentation, if provided along with the Derivative Works; or, |
|
||||||
within a display generated by the Derivative Works, if and |
|
||||||
wherever such third-party notices normally appear. The contents |
|
||||||
of the NOTICE file are for informational purposes only and |
|
||||||
do not modify the License. You may add Your own attribution |
|
||||||
notices within Derivative Works that You distribute, alongside |
|
||||||
or as an addendum to the NOTICE text from the Work, provided |
|
||||||
that such additional attribution notices cannot be construed |
|
||||||
as modifying the License. |
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and |
|
||||||
may provide additional or different license terms and conditions |
|
||||||
for use, reproduction, or distribution of Your modifications, or |
|
||||||
for any such Derivative Works as a whole, provided Your use, |
|
||||||
reproduction, and distribution of the Work otherwise complies with |
|
||||||
the conditions stated in this License. |
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise, |
|
||||||
any Contribution intentionally submitted for inclusion in the Work |
|
||||||
by You to the Licensor shall be under the terms and conditions of |
|
||||||
this License, without any additional terms or conditions. |
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify |
|
||||||
the terms of any separate license agreement you may have executed |
|
||||||
with Licensor regarding such Contributions. |
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade |
|
||||||
names, trademarks, service marks, or product names of the Licensor, |
|
||||||
except as required for reasonable and customary use in describing the |
|
||||||
origin of the Work and reproducing the content of the NOTICE file. |
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or |
|
||||||
agreed to in writing, Licensor provides the Work (and each |
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS, |
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
|
||||||
implied, including, without limitation, any warranties or conditions |
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the |
|
||||||
appropriateness of using or redistributing the Work and assume any |
|
||||||
risks associated with Your exercise of permissions under this License. |
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory, |
|
||||||
whether in tort (including negligence), contract, or otherwise, |
|
||||||
unless required by applicable law (such as deliberate and grossly |
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be |
|
||||||
liable to You for damages, including any direct, indirect, special, |
|
||||||
incidental, or consequential damages of any character arising as a |
|
||||||
result of this License or out of the use or inability to use the |
|
||||||
Work (including but not limited to damages for loss of goodwill, |
|
||||||
work stoppage, computer failure or malfunction, or any and all |
|
||||||
other commercial damages or losses), even if such Contributor |
|
||||||
has been advised of the possibility of such damages. |
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing |
|
||||||
the Work or Derivative Works thereof, You may choose to offer, |
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity, |
|
||||||
or other liability obligations and/or rights consistent with this |
|
||||||
License. However, in accepting such obligations, You may act only |
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf |
|
||||||
of any other Contributor, and only if You agree to indemnify, |
|
||||||
defend, and hold each Contributor harmless for any liability |
|
||||||
incurred by, or claims asserted against, such Contributor by reason |
|
||||||
of your accepting any such warranty or additional liability. |
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS |
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work. |
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following |
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]" |
|
||||||
replaced with your own identifying information. (Don't include |
|
||||||
the brackets!) The text should be enclosed in the appropriate |
|
||||||
comment syntax for the file format. We also recommend that a |
|
||||||
file or class name and description of purpose be included on the |
|
||||||
same "printed page" as the copyright notice for easier |
|
||||||
identification within third-party archives. |
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner] |
|
||||||
|
|
||||||
Licensed 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. |
|
@ -1,31 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskMethodDefinition; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public interface TemplateMethodTransformer<YamlMethodT extends LoopTaskYamlDefinition.LoopTaskMethodYamlDefinition, MethodT extends HttpLoopTaskMethodDefinition> { |
|
||||||
|
|
||||||
/** |
|
||||||
* Transform the {@link LoopTaskYamlDefinition.LoopTaskMethodYamlDefinition} to {@link HttpLoopTaskMethodDefinition}. |
|
||||||
*/ |
|
||||||
@NonNull |
|
||||||
MethodT transform(@NonNull YamlMethodT loopTaskAPIYamlDefinition); |
|
||||||
} |
|
@ -1,57 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.TaskExecutionContext; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.BaseLoopTaskExecutor; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceStatus; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.parser.HttpTaskDefinitionParser; |
|
||||||
|
|
||||||
import javax.annotation.Nullable; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public abstract class BaseHttpTemplateLoopTaskExecutor extends BaseLoopTaskExecutor { |
|
||||||
|
|
||||||
private final HttpLoopTaskDefinition httpLoopTaskDefinition; |
|
||||||
|
|
||||||
public BaseHttpTemplateLoopTaskExecutor(@NonNull TaskExecutionContext taskExecutionContext, |
|
||||||
@NonNull String taskDefinitionYamlFile) { |
|
||||||
super(taskExecutionContext); |
|
||||||
this.httpLoopTaskDefinition = new HttpTaskDefinitionParser().parse(taskDefinitionYamlFile); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull LoopTaskInstanceInfo submitLoopTask() { |
|
||||||
return httpLoopTaskDefinition.getSubmitTaskMethod().submitLoopTask(); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull LoopTaskInstanceStatus queryTaskInstanceStatus(@NonNull LoopTaskInstanceInfo taskInstanceInfo) { |
|
||||||
return httpLoopTaskDefinition.getQueryTaskStateMethod().queryTaskInstanceStatus(taskInstanceInfo); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void cancelLoopTaskInstance(@Nullable LoopTaskInstanceInfo taskInstanceInfo) { |
|
||||||
if (taskInstanceInfo == null) { |
|
||||||
return; |
|
||||||
} |
|
||||||
httpLoopTaskDefinition.getCancelTaskMethod().cancelTaskInstance(taskInstanceInfo); |
|
||||||
} |
|
||||||
} |
|
@ -1,65 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskCancelTaskMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskQueryStatusMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskSubmitTaskMethodDefinition; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public class HttpLoopTaskDefinition |
|
||||||
implements |
|
||||||
LoopTaskDefinition<HttpLoopTaskSubmitTaskMethodDefinition, HttpLoopTaskQueryStatusMethodDefinition, HttpLoopTaskCancelTaskMethodDefinition> { |
|
||||||
|
|
||||||
private final String taskName; |
|
||||||
private final HttpLoopTaskSubmitTaskMethodDefinition submitTaskMethod; |
|
||||||
private final HttpLoopTaskQueryStatusMethodDefinition queryTaskStateMethod; |
|
||||||
private final HttpLoopTaskCancelTaskMethodDefinition cancelTaskMethod; |
|
||||||
|
|
||||||
public HttpLoopTaskDefinition(@NonNull String taskName, |
|
||||||
@NonNull HttpLoopTaskSubmitTaskMethodDefinition submitTaskMethod, |
|
||||||
@NonNull HttpLoopTaskQueryStatusMethodDefinition queryTaskStateMethod, |
|
||||||
@NonNull HttpLoopTaskCancelTaskMethodDefinition cancelTaskMethod) { |
|
||||||
this.taskName = taskName; |
|
||||||
this.submitTaskMethod = submitTaskMethod; |
|
||||||
this.queryTaskStateMethod = queryTaskStateMethod; |
|
||||||
this.cancelTaskMethod = cancelTaskMethod; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull String getTaskName() { |
|
||||||
return taskName; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull HttpLoopTaskSubmitTaskMethodDefinition getSubmitTaskMethod() { |
|
||||||
return submitTaskMethod; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull HttpLoopTaskQueryStatusMethodDefinition getQueryTaskStateMethod() { |
|
||||||
return queryTaskStateMethod; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull HttpLoopTaskCancelTaskMethodDefinition getCancelTaskMethod() { |
|
||||||
return cancelTaskMethod; |
|
||||||
} |
|
||||||
} |
|
@ -1,31 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo; |
|
||||||
|
|
||||||
import lombok.AllArgsConstructor; |
|
||||||
import lombok.Data; |
|
||||||
|
|
||||||
@Data |
|
||||||
@AllArgsConstructor |
|
||||||
public class HttpLoopTaskInstanceInfo implements LoopTaskInstanceInfo { |
|
||||||
|
|
||||||
private final String taskInstanceId; |
|
||||||
|
|
||||||
} |
|
@ -1,35 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceStatus; |
|
||||||
|
|
||||||
import lombok.AllArgsConstructor; |
|
||||||
import lombok.Data; |
|
||||||
|
|
||||||
@Data |
|
||||||
@AllArgsConstructor |
|
||||||
public class HttpLoopTaskInstanceStatus implements LoopTaskInstanceStatus { |
|
||||||
|
|
||||||
private final boolean finished; |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean isSuccess() { |
|
||||||
return true; |
|
||||||
} |
|
||||||
} |
|
@ -1,44 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskMethodType; |
|
||||||
|
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import lombok.AllArgsConstructor; |
|
||||||
import lombok.Data; |
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
@Data |
|
||||||
@AllArgsConstructor |
|
||||||
public abstract class HttpLoopTaskMethodDefinition implements LoopTaskMethodDefinition { |
|
||||||
|
|
||||||
protected final String url; |
|
||||||
protected final String httpMethodType; |
|
||||||
protected final String dataType; |
|
||||||
protected final Map<String, String> httpHeaders; |
|
||||||
protected final Map<String, Object> requestParams; |
|
||||||
protected final Map<String, Object> requestBody; |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull LoopTaskMethodType getLoopTaskMethodType() { |
|
||||||
return LoopTaskMethodType.HTTP; |
|
||||||
} |
|
||||||
} |
|
@ -1,81 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.method; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.utils.OkHttpUtils; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskCancelMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskMethodDefinition; |
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils; |
|
||||||
|
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import javax.annotation.Nullable; |
|
||||||
|
|
||||||
public class HttpLoopTaskCancelTaskMethodDefinition extends HttpLoopTaskMethodDefinition |
|
||||||
implements |
|
||||||
LoopTaskCancelMethodDefinition { |
|
||||||
|
|
||||||
private final String taskInstanceIdHolder = "${taskInstanceId}"; |
|
||||||
|
|
||||||
public HttpLoopTaskCancelTaskMethodDefinition(String url, |
|
||||||
String httpMethodType, |
|
||||||
String dataType, |
|
||||||
Map<String, String> httpHeaders, |
|
||||||
Map<String, Object> requestParams, |
|
||||||
Map<String, Object> requestBody) { |
|
||||||
super(url, httpMethodType, dataType, httpHeaders, requestParams, requestBody); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public void cancelTaskInstance(@Nullable LoopTaskInstanceInfo loopTaskInstanceInfo) { |
|
||||||
if (loopTaskInstanceInfo == null) { |
|
||||||
return; |
|
||||||
} |
|
||||||
if (requestParams != null) { |
|
||||||
for (Map.Entry<String, Object> entry : requestParams.entrySet()) { |
|
||||||
if (StringUtils.equals(entry.getValue().toString(), taskInstanceIdHolder)) { |
|
||||||
entry.setValue(loopTaskInstanceInfo.getTaskInstanceId()); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
if (requestBody != null) { |
|
||||||
for (Map.Entry<String, Object> entry : requestBody.entrySet()) { |
|
||||||
if (StringUtils.equalsIgnoreCase(entry.getValue().toString(), taskInstanceIdHolder)) { |
|
||||||
entry.setValue(loopTaskInstanceInfo.getTaskInstanceId()); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
try { |
|
||||||
if (StringUtils.equalsIgnoreCase("get", httpMethodType)) { |
|
||||||
OkHttpUtils.get(url, httpHeaders, requestParams); |
|
||||||
} else if (StringUtils.equalsIgnoreCase("post", httpMethodType)) { |
|
||||||
OkHttpUtils.post(url, httpHeaders, requestParams, requestBody); |
|
||||||
} else { |
|
||||||
throw new IllegalArgumentException(String.format("http method type: %s is not supported", |
|
||||||
httpMethodType)); |
|
||||||
} |
|
||||||
} catch (IllegalArgumentException ex) { |
|
||||||
throw ex; |
|
||||||
} catch (Exception ex) { |
|
||||||
throw new RuntimeException("Query loop task instance status failed", ex); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,88 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.method; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.utils.OkHttpUtils; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceStatus; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskQueryStatusMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskInstanceStatus; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.utils.JsonPathUtils; |
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils; |
|
||||||
|
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public class HttpLoopTaskQueryStatusMethodDefinition extends HttpLoopTaskMethodDefinition |
|
||||||
implements |
|
||||||
LoopTaskQueryStatusMethodDefinition { |
|
||||||
|
|
||||||
private final String taskInstanceFinishedJPath; |
|
||||||
// inject the taskInstanceId into template
|
|
||||||
private final String taskInstanceIdHolder = "${taskInstanceId}"; |
|
||||||
|
|
||||||
public HttpLoopTaskQueryStatusMethodDefinition(String url, |
|
||||||
String httpMethodType, |
|
||||||
String dataType, |
|
||||||
Map<String, String> httpHeaders, |
|
||||||
Map<String, Object> requestParams, |
|
||||||
Map<String, Object> requestBody, |
|
||||||
String taskInstanceFinishedJPath) { |
|
||||||
super(url, httpMethodType, dataType, httpHeaders, requestParams, requestBody); |
|
||||||
this.taskInstanceFinishedJPath = taskInstanceFinishedJPath; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull LoopTaskInstanceStatus queryTaskInstanceStatus(@NonNull LoopTaskInstanceInfo loopTaskInstanceInfo) { |
|
||||||
// set the loopTaskInstanceId to request params;
|
|
||||||
if (requestParams != null) { |
|
||||||
for (Map.Entry<String, Object> entry : requestParams.entrySet()) { |
|
||||||
if (StringUtils.equals(entry.getValue().toString(), taskInstanceIdHolder)) { |
|
||||||
entry.setValue(loopTaskInstanceInfo.getTaskInstanceId()); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
if (requestBody != null) { |
|
||||||
for (Map.Entry<String, Object> entry : requestBody.entrySet()) { |
|
||||||
if (StringUtils.equalsIgnoreCase(entry.getValue().toString(), taskInstanceIdHolder)) { |
|
||||||
entry.setValue(loopTaskInstanceInfo.getTaskInstanceId()); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
String responseBody; |
|
||||||
try { |
|
||||||
if (StringUtils.equalsIgnoreCase("get", httpMethodType)) { |
|
||||||
responseBody = OkHttpUtils.get(url, httpHeaders, requestParams); |
|
||||||
} else if (StringUtils.equalsIgnoreCase("post", httpMethodType)) { |
|
||||||
responseBody = OkHttpUtils.post(url, httpHeaders, requestParams, requestBody); |
|
||||||
} else { |
|
||||||
throw new IllegalArgumentException(String.format("http method type: %s is not supported", |
|
||||||
httpMethodType)); |
|
||||||
} |
|
||||||
} catch (IllegalArgumentException ex) { |
|
||||||
throw ex; |
|
||||||
} catch (Exception ex) { |
|
||||||
throw new RuntimeException("Query loop task instance status failed", ex); |
|
||||||
} |
|
||||||
return new HttpLoopTaskInstanceStatus(JsonPathUtils.exist(responseBody, taskInstanceFinishedJPath)); |
|
||||||
} |
|
||||||
} |
|
@ -1,76 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.method; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.utils.OkHttpUtils; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskInstanceInfo; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.LoopTaskSubmitTaskMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskInstanceInfo; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.utils.JsonPathUtils; |
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils; |
|
||||||
|
|
||||||
import java.util.Map; |
|
||||||
import java.util.Optional; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public class HttpLoopTaskSubmitTaskMethodDefinition extends HttpLoopTaskMethodDefinition |
|
||||||
implements |
|
||||||
LoopTaskSubmitTaskMethodDefinition { |
|
||||||
|
|
||||||
private final String taskInstanceIdJPath; |
|
||||||
|
|
||||||
public HttpLoopTaskSubmitTaskMethodDefinition(String url, |
|
||||||
String httpMethodType, |
|
||||||
String dataType, |
|
||||||
Map<String, String> httpHeaders, |
|
||||||
Map<String, Object> requestParams, |
|
||||||
Map<String, Object> requestBody, |
|
||||||
@NonNull String taskInstanceIdJPath) { |
|
||||||
super(url, httpMethodType, dataType, httpHeaders, requestParams, requestBody); |
|
||||||
this.taskInstanceIdJPath = taskInstanceIdJPath; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull LoopTaskInstanceInfo submitLoopTask() { |
|
||||||
// todo: call http api to submit task
|
|
||||||
String responseBody; |
|
||||||
try { |
|
||||||
if (StringUtils.equalsIgnoreCase(httpMethodType, "GET")) { |
|
||||||
responseBody = OkHttpUtils.get(url, httpHeaders, requestParams); |
|
||||||
} else if (StringUtils.equalsIgnoreCase(httpMethodType, "POST")) { |
|
||||||
responseBody = OkHttpUtils.post(url, httpHeaders, requestParams, requestBody); |
|
||||||
} else { |
|
||||||
throw new IllegalArgumentException(String.format("The request method type: %s is not supported.", |
|
||||||
httpMethodType)); |
|
||||||
} |
|
||||||
} catch (IllegalArgumentException ex) { |
|
||||||
throw ex; |
|
||||||
} catch (Exception ex) { |
|
||||||
throw new RuntimeException("Submit loop task error", ex); |
|
||||||
} |
|
||||||
Optional<String> taskInstanceIdOptional = JsonPathUtils.read(responseBody, taskInstanceIdJPath); |
|
||||||
String taskInstanceId = taskInstanceIdOptional.orElseThrow(() -> new RuntimeException(String.format( |
|
||||||
"Resolve the taskInstanceId error, responseBody: %s, taskInstanceIdJPath: %s", |
|
||||||
responseBody, |
|
||||||
taskInstanceIdJPath))); |
|
||||||
return new HttpLoopTaskInstanceInfo(taskInstanceId); |
|
||||||
} |
|
||||||
} |
|
@ -1,47 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.parser; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.LoopTaskYamlDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.TemplateMethodTransformer; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskCancelTaskMethodDefinition; |
|
||||||
|
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public class CancelTemplateMethodTransformer |
|
||||||
implements |
|
||||||
TemplateMethodTransformer<LoopTaskYamlDefinition.LoopTaskCancelYamlDefinition, HttpLoopTaskCancelTaskMethodDefinition> { |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull HttpLoopTaskCancelTaskMethodDefinition transform(@NonNull LoopTaskYamlDefinition.LoopTaskCancelYamlDefinition loopTaskAPIYamlDefinition) { |
|
||||||
String url = loopTaskAPIYamlDefinition.getUrl(); |
|
||||||
String method = loopTaskAPIYamlDefinition.getMethod(); |
|
||||||
String dataType = loopTaskAPIYamlDefinition.getDataType(); |
|
||||||
Map<String, String> httpHeaders = loopTaskAPIYamlDefinition.getHttpHeaders(); |
|
||||||
Map<String, Object> requestParams = loopTaskAPIYamlDefinition.getRequestParams(); |
|
||||||
Map<String, Object> requestBody = loopTaskAPIYamlDefinition.getRequestBody(); |
|
||||||
return new HttpLoopTaskCancelTaskMethodDefinition(url, |
|
||||||
method, |
|
||||||
dataType, |
|
||||||
httpHeaders, |
|
||||||
requestParams, |
|
||||||
requestBody); |
|
||||||
} |
|
||||||
} |
|
@ -1,89 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.parser; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.common.utils.ClassFilterConstructor; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.LoopTaskYamlDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.TaskDefinitionParser; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.HttpLoopTaskDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskCancelTaskMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskQueryStatusMethodDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskSubmitTaskMethodDefinition; |
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils; |
|
||||||
|
|
||||||
import java.io.FileReader; |
|
||||||
import java.io.IOException; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
import org.yaml.snakeyaml.Yaml; |
|
||||||
|
|
||||||
import com.google.common.base.Preconditions; |
|
||||||
|
|
||||||
public class HttpTaskDefinitionParser implements TaskDefinitionParser<HttpLoopTaskDefinition> { |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull HttpLoopTaskDefinition parse(@NonNull String yamlConfigFile) { |
|
||||||
LoopTaskYamlDefinition loopTaskYamlDefinition; |
|
||||||
try { |
|
||||||
loopTaskYamlDefinition = parseYamlConfigFile(yamlConfigFile); |
|
||||||
} catch (IOException ex) { |
|
||||||
throw new IllegalArgumentException(String.format("Parse yaml file: %s error", yamlConfigFile), ex); |
|
||||||
} |
|
||||||
validateYamlDefinition(loopTaskYamlDefinition); |
|
||||||
|
|
||||||
LoopTaskYamlDefinition.LoopTaskServiceYamlDefinition service = loopTaskYamlDefinition.getService(); |
|
||||||
LoopTaskYamlDefinition.LoopTaskAPIYamlDefinition api = service.getApi(); |
|
||||||
HttpLoopTaskSubmitTaskMethodDefinition submitTaskMethod = |
|
||||||
new SubmitTemplateMethodTransformer().transform(api.getSubmit()); |
|
||||||
HttpLoopTaskQueryStatusMethodDefinition queryTaskStateMethod = |
|
||||||
new QueryStateTemplateMethodTransformer().transform(api.getQueryState()); |
|
||||||
HttpLoopTaskCancelTaskMethodDefinition cancelTaskMethod = |
|
||||||
new CancelTemplateMethodTransformer().transform(api.getCancel()); |
|
||||||
return new HttpLoopTaskDefinition(service.getName(), submitTaskMethod, queryTaskStateMethod, cancelTaskMethod); |
|
||||||
} |
|
||||||
|
|
||||||
protected @NonNull LoopTaskYamlDefinition parseYamlConfigFile(@NonNull String yamlConfigFile) throws IOException { |
|
||||||
try (FileReader fileReader = new FileReader(yamlConfigFile)) { |
|
||||||
return new Yaml(new ClassFilterConstructor(new Class[]{ |
|
||||||
LoopTaskYamlDefinition.class, |
|
||||||
LoopTaskYamlDefinition.LoopTaskServiceYamlDefinition.class, |
|
||||||
LoopTaskYamlDefinition.LoopTaskAPIYamlDefinition.class, |
|
||||||
LoopTaskYamlDefinition.LoopTaskSubmitMethodYamlDefinition.class, |
|
||||||
LoopTaskYamlDefinition.LoopTaskQueryStateYamlDefinition.class, |
|
||||||
LoopTaskYamlDefinition.LoopTaskCancelYamlDefinition.class, |
|
||||||
LoopTaskYamlDefinition.LoopTaskMethodYamlDefinition.class, |
|
||||||
LoopTaskYamlDefinition.LoopTaskQueryStateYamlDefinition.class, |
|
||||||
Map.class, |
|
||||||
String.class |
|
||||||
})) |
|
||||||
.loadAs(fileReader, LoopTaskYamlDefinition.class); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
protected void validateYamlDefinition(@NonNull LoopTaskYamlDefinition loopTaskYamlDefinition) { |
|
||||||
LoopTaskYamlDefinition.LoopTaskServiceYamlDefinition service = loopTaskYamlDefinition.getService(); |
|
||||||
Preconditions.checkNotNull(service, "service is null"); |
|
||||||
Preconditions.checkNotNull(service.getName(), "service name is null"); |
|
||||||
if (!StringUtils.equalsIgnoreCase(service.getType(), "http")) { |
|
||||||
throw new IllegalArgumentException(String.format("service type: %s is invalidated", service.getType())); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,49 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.parser; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.LoopTaskYamlDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.TemplateMethodTransformer; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskQueryStatusMethodDefinition; |
|
||||||
|
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public class QueryStateTemplateMethodTransformer |
|
||||||
implements |
|
||||||
TemplateMethodTransformer<LoopTaskYamlDefinition.LoopTaskQueryStateYamlDefinition, HttpLoopTaskQueryStatusMethodDefinition> { |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull HttpLoopTaskQueryStatusMethodDefinition transform(@NonNull LoopTaskYamlDefinition.LoopTaskQueryStateYamlDefinition loopTaskAPIYamlDefinition) { |
|
||||||
String url = loopTaskAPIYamlDefinition.getUrl(); |
|
||||||
String method = loopTaskAPIYamlDefinition.getMethod(); |
|
||||||
String dataType = loopTaskAPIYamlDefinition.getDataType(); |
|
||||||
Map<String, String> httpHeaders = loopTaskAPIYamlDefinition.getHttpHeaders(); |
|
||||||
Map<String, Object> requestParams = loopTaskAPIYamlDefinition.getRequestParams(); |
|
||||||
Map<String, Object> requestBody = loopTaskAPIYamlDefinition.getRequestBody(); |
|
||||||
String taskInstanceFinishedJPath = loopTaskAPIYamlDefinition.getTaskInstanceFinishedJPath(); |
|
||||||
return new HttpLoopTaskQueryStatusMethodDefinition(url, |
|
||||||
method, |
|
||||||
dataType, |
|
||||||
httpHeaders, |
|
||||||
requestParams, |
|
||||||
requestBody, |
|
||||||
taskInstanceFinishedJPath); |
|
||||||
} |
|
||||||
} |
|
@ -1,49 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.parser; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.LoopTaskYamlDefinition; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.TemplateMethodTransformer; |
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.http.method.HttpLoopTaskSubmitTaskMethodDefinition; |
|
||||||
|
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import lombok.NonNull; |
|
||||||
|
|
||||||
public class SubmitTemplateMethodTransformer |
|
||||||
implements |
|
||||||
TemplateMethodTransformer<LoopTaskYamlDefinition.LoopTaskSubmitMethodYamlDefinition, HttpLoopTaskSubmitTaskMethodDefinition> { |
|
||||||
|
|
||||||
@Override |
|
||||||
public @NonNull HttpLoopTaskSubmitTaskMethodDefinition transform(@NonNull LoopTaskYamlDefinition.LoopTaskSubmitMethodYamlDefinition loopTaskAPIYamlDefinition) { |
|
||||||
String url = loopTaskAPIYamlDefinition.getUrl(); |
|
||||||
String method = loopTaskAPIYamlDefinition.getMethod(); |
|
||||||
String dataType = loopTaskAPIYamlDefinition.getDataType(); |
|
||||||
Map<String, String> httpHeaders = loopTaskAPIYamlDefinition.getHttpHeaders(); |
|
||||||
Map<String, Object> requestParams = loopTaskAPIYamlDefinition.getRequestParams(); |
|
||||||
Map<String, Object> requestBody = loopTaskAPIYamlDefinition.getRequestBody(); |
|
||||||
String taskInstanceIdJPath = loopTaskAPIYamlDefinition.getTaskInstanceIdJPath(); |
|
||||||
return new HttpLoopTaskSubmitTaskMethodDefinition(url, |
|
||||||
method, |
|
||||||
dataType, |
|
||||||
httpHeaders, |
|
||||||
requestParams, |
|
||||||
requestBody, |
|
||||||
taskInstanceIdJPath); |
|
||||||
} |
|
||||||
} |
|
@ -1,66 +0,0 @@ |
|||||||
/* |
|
||||||
* 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.plugin.task.api.loop.template.http.parser; |
|
||||||
|
|
||||||
import org.apache.dolphinscheduler.plugin.task.api.loop.template.LoopTaskYamlDefinition; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
import java.util.HashMap; |
|
||||||
import java.util.Map; |
|
||||||
|
|
||||||
import org.junit.jupiter.api.Assertions; |
|
||||||
import org.junit.jupiter.api.Test; |
|
||||||
|
|
||||||
public class HttpTaskDefinitionParserTest { |
|
||||||
|
|
||||||
private static final String yamlFile = HttpTaskDefinitionParserTest.class.getResource("/mock_loop_task.yaml") |
|
||||||
.getFile(); |
|
||||||
|
|
||||||
@Test |
|
||||||
public void parseYamlConfigFile() throws IOException { |
|
||||||
LoopTaskYamlDefinition loopTaskYamlDefinition = new HttpTaskDefinitionParser().parseYamlConfigFile(yamlFile); |
|
||||||
// check not null
|
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition); |
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition.getService()); |
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition.getService().getName()); |
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition.getService().getType()); |
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition.getService().getApi()); |
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition.getService().getApi().getSubmit()); |
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition.getService().getApi().getQueryState()); |
|
||||||
Assertions.assertNotNull(loopTaskYamlDefinition.getService().getApi().getCancel()); |
|
||||||
// check data consistency
|
|
||||||
LoopTaskYamlDefinition.LoopTaskServiceYamlDefinition service = loopTaskYamlDefinition.getService(); |
|
||||||
Assertions.assertEquals("MockService", service.getName()); |
|
||||||
Assertions.assertEquals("Http", service.getType()); |
|
||||||
Map<String, String> expectedHeaders = new HashMap<>(); |
|
||||||
expectedHeaders.put("Content-Type", "text/html"); |
|
||||||
expectedHeaders.put("Content-Length", "1234"); |
|
||||||
Assertions.assertEquals("/api/v1/submit", service.getApi().getSubmit().getUrl()); |
|
||||||
Assertions.assertEquals(expectedHeaders, service.getApi().getSubmit().getHttpHeaders()); |
|
||||||
} |
|
||||||
|
|
||||||
@Test |
|
||||||
public void validateYamlDefinition() throws IOException { |
|
||||||
HttpTaskDefinitionParser httpTaskDefinitionParser = new HttpTaskDefinitionParser(); |
|
||||||
LoopTaskYamlDefinition loopTaskYamlDefinition = httpTaskDefinitionParser.parseYamlConfigFile(yamlFile); |
|
||||||
httpTaskDefinitionParser.validateYamlDefinition(loopTaskYamlDefinition); |
|
||||||
// if no exception assert true
|
|
||||||
Assertions.assertTrue(true); |
|
||||||
|
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue