mirror of
https://gitee.com/dolphinscheduler/DolphinScheduler.git
synced 2024-12-04 13:17:50 +08:00
commit
f3f3ada959
11
.github/workflows/ci_ut.yml
vendored
11
.github/workflows/ci_ut.yml
vendored
@ -16,6 +16,9 @@
|
||||
#
|
||||
|
||||
on: ["pull_request"]
|
||||
env:
|
||||
DOCKER_DIR: ./docker
|
||||
LOG_DIR: /tmp/dolphinscheduler
|
||||
|
||||
name: Test Coveralls Parallel
|
||||
|
||||
@ -35,6 +38,8 @@ jobs:
|
||||
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-maven-
|
||||
- name: Bootstrap database
|
||||
run: cd ${DOCKER_DIR} && docker-compose up -d
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
@ -44,3 +49,9 @@ jobs:
|
||||
export MAVEN_OPTS='-Dmaven.repo.local=.m2/repository -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit -Xmx3g'
|
||||
mvn test -Dmaven.test.skip=false cobertura:cobertura
|
||||
CODECOV_TOKEN="09c2663f-b091-4258-8a47-c981827eb29a" bash <(curl -s https://codecov.io/bash)
|
||||
- name: Collect logs
|
||||
run: |
|
||||
mkdir -p ${LOG_DIR}
|
||||
cd ${DOCKER_DIR}
|
||||
docker-compose logs db > ${LOG_DIR}/db.txt
|
||||
continue-on-error: true
|
||||
|
0
docker/README.md
Normal file
0
docker/README.md
Normal file
24
docker/docker-compose.yml
Normal file
24
docker/docker-compose.yml
Normal file
@ -0,0 +1,24 @@
|
||||
version: '2'
|
||||
services:
|
||||
zookeeper:
|
||||
image: zookeeper
|
||||
restart: always
|
||||
container_name: zookeeper
|
||||
ports:
|
||||
- "2181:2181"
|
||||
environment:
|
||||
ZOO_MY_ID: 1
|
||||
db:
|
||||
image: postgres
|
||||
container_name: postgres
|
||||
environment:
|
||||
- POSTGRES_USER=test
|
||||
- POSTGRES_PASSWORD=test
|
||||
- POSTGRES_DB=dolphinscheduler
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
- ./postgres/docker-entrypoint-initdb:/docker-entrypoint-initdb.d
|
||||
volumes:
|
||||
pgdata:
|
771
docker/postgres/docker-entrypoint-initdb/init.sql
Executable file
771
docker/postgres/docker-entrypoint-initdb/init.sql
Executable file
@ -0,0 +1,771 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
|
||||
DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
|
||||
DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
|
||||
DROP TABLE IF EXISTS QRTZ_LOCKS;
|
||||
DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
|
||||
DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
|
||||
DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
|
||||
DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
|
||||
DROP TABLE IF EXISTS QRTZ_TRIGGERS;
|
||||
DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
|
||||
DROP TABLE IF EXISTS QRTZ_CALENDARS;
|
||||
|
||||
CREATE TABLE QRTZ_JOB_DETAILS(
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
JOB_NAME character varying(200) NOT NULL,
|
||||
JOB_GROUP character varying(200) NOT NULL,
|
||||
DESCRIPTION character varying(250) NULL,
|
||||
JOB_CLASS_NAME character varying(250) NOT NULL,
|
||||
IS_DURABLE boolean NOT NULL,
|
||||
IS_NONCONCURRENT boolean NOT NULL,
|
||||
IS_UPDATE_DATA boolean NOT NULL,
|
||||
REQUESTS_RECOVERY boolean NOT NULL,
|
||||
JOB_DATA bytea NULL);
|
||||
alter table QRTZ_JOB_DETAILS add primary key(SCHED_NAME,JOB_NAME,JOB_GROUP);
|
||||
|
||||
CREATE TABLE QRTZ_TRIGGERS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
TRIGGER_NAME character varying(200) NOT NULL,
|
||||
TRIGGER_GROUP character varying(200) NOT NULL,
|
||||
JOB_NAME character varying(200) NOT NULL,
|
||||
JOB_GROUP character varying(200) NOT NULL,
|
||||
DESCRIPTION character varying(250) NULL,
|
||||
NEXT_FIRE_TIME BIGINT NULL,
|
||||
PREV_FIRE_TIME BIGINT NULL,
|
||||
PRIORITY INTEGER NULL,
|
||||
TRIGGER_STATE character varying(16) NOT NULL,
|
||||
TRIGGER_TYPE character varying(8) NOT NULL,
|
||||
START_TIME BIGINT NOT NULL,
|
||||
END_TIME BIGINT NULL,
|
||||
CALENDAR_NAME character varying(200) NULL,
|
||||
MISFIRE_INSTR SMALLINT NULL,
|
||||
JOB_DATA bytea NULL) ;
|
||||
alter table QRTZ_TRIGGERS add primary key(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
|
||||
|
||||
CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
TRIGGER_NAME character varying(200) NOT NULL,
|
||||
TRIGGER_GROUP character varying(200) NOT NULL,
|
||||
REPEAT_COUNT BIGINT NOT NULL,
|
||||
REPEAT_INTERVAL BIGINT NOT NULL,
|
||||
TIMES_TRIGGERED BIGINT NOT NULL) ;
|
||||
alter table QRTZ_SIMPLE_TRIGGERS add primary key(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
|
||||
|
||||
CREATE TABLE QRTZ_CRON_TRIGGERS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
TRIGGER_NAME character varying(200) NOT NULL,
|
||||
TRIGGER_GROUP character varying(200) NOT NULL,
|
||||
CRON_EXPRESSION character varying(120) NOT NULL,
|
||||
TIME_ZONE_ID character varying(80)) ;
|
||||
alter table QRTZ_CRON_TRIGGERS add primary key(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
|
||||
|
||||
CREATE TABLE QRTZ_SIMPROP_TRIGGERS
|
||||
(
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
TRIGGER_NAME character varying(200) NOT NULL,
|
||||
TRIGGER_GROUP character varying(200) NOT NULL,
|
||||
STR_PROP_1 character varying(512) NULL,
|
||||
STR_PROP_2 character varying(512) NULL,
|
||||
STR_PROP_3 character varying(512) NULL,
|
||||
INT_PROP_1 INT NULL,
|
||||
INT_PROP_2 INT NULL,
|
||||
LONG_PROP_1 BIGINT NULL,
|
||||
LONG_PROP_2 BIGINT NULL,
|
||||
DEC_PROP_1 NUMERIC(13,4) NULL,
|
||||
DEC_PROP_2 NUMERIC(13,4) NULL,
|
||||
BOOL_PROP_1 boolean NULL,
|
||||
BOOL_PROP_2 boolean NULL) ;
|
||||
alter table QRTZ_SIMPROP_TRIGGERS add primary key(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
|
||||
|
||||
CREATE TABLE QRTZ_BLOB_TRIGGERS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
TRIGGER_NAME character varying(200) NOT NULL,
|
||||
TRIGGER_GROUP character varying(200) NOT NULL,
|
||||
BLOB_DATA bytea NULL) ;
|
||||
alter table QRTZ_BLOB_TRIGGERS add primary key(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
|
||||
|
||||
CREATE TABLE QRTZ_CALENDARS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
CALENDAR_NAME character varying(200) NOT NULL,
|
||||
CALENDAR bytea NOT NULL) ;
|
||||
alter table QRTZ_CALENDARS add primary key(SCHED_NAME,CALENDAR_NAME);
|
||||
|
||||
CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
TRIGGER_GROUP character varying(200) NOT NULL) ;
|
||||
alter table QRTZ_PAUSED_TRIGGER_GRPS add primary key(SCHED_NAME,TRIGGER_GROUP);
|
||||
|
||||
CREATE TABLE QRTZ_FIRED_TRIGGERS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
ENTRY_ID character varying(95) NOT NULL,
|
||||
TRIGGER_NAME character varying(200) NOT NULL,
|
||||
TRIGGER_GROUP character varying(200) NOT NULL,
|
||||
INSTANCE_NAME character varying(200) NOT NULL,
|
||||
FIRED_TIME BIGINT NOT NULL,
|
||||
SCHED_TIME BIGINT NOT NULL,
|
||||
PRIORITY INTEGER NOT NULL,
|
||||
STATE character varying(16) NOT NULL,
|
||||
JOB_NAME character varying(200) NULL,
|
||||
JOB_GROUP character varying(200) NULL,
|
||||
IS_NONCONCURRENT boolean NULL,
|
||||
REQUESTS_RECOVERY boolean NULL) ;
|
||||
alter table QRTZ_FIRED_TRIGGERS add primary key(SCHED_NAME,ENTRY_ID);
|
||||
|
||||
CREATE TABLE QRTZ_SCHEDULER_STATE (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
INSTANCE_NAME character varying(200) NOT NULL,
|
||||
LAST_CHECKIN_TIME BIGINT NOT NULL,
|
||||
CHECKIN_INTERVAL BIGINT NOT NULL) ;
|
||||
alter table QRTZ_SCHEDULER_STATE add primary key(SCHED_NAME,INSTANCE_NAME);
|
||||
|
||||
CREATE TABLE QRTZ_LOCKS (
|
||||
SCHED_NAME character varying(120) NOT NULL,
|
||||
LOCK_NAME character varying(40) NOT NULL) ;
|
||||
alter table QRTZ_LOCKS add primary key(SCHED_NAME,LOCK_NAME);
|
||||
|
||||
CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY);
|
||||
CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);
|
||||
|
||||
CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
|
||||
CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP);
|
||||
CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME);
|
||||
CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
|
||||
CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE);
|
||||
CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
|
||||
CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
|
||||
CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME);
|
||||
CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
|
||||
CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
|
||||
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
|
||||
CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
|
||||
|
||||
CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME);
|
||||
CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
|
||||
CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP);
|
||||
CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP);
|
||||
CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
|
||||
CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_access_token
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_access_token;
|
||||
CREATE TABLE t_ds_access_token (
|
||||
id int NOT NULL ,
|
||||
user_id int DEFAULT NULL ,
|
||||
token varchar(64) DEFAULT NULL ,
|
||||
expire_time timestamp DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_alert
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_alert;
|
||||
CREATE TABLE t_ds_alert (
|
||||
id int NOT NULL ,
|
||||
title varchar(64) DEFAULT NULL ,
|
||||
show_type int DEFAULT NULL ,
|
||||
content text ,
|
||||
alert_type int DEFAULT NULL ,
|
||||
alert_status int DEFAULT '0' ,
|
||||
log text ,
|
||||
alertgroup_id int DEFAULT NULL ,
|
||||
receivers text ,
|
||||
receivers_cc text ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
--
|
||||
-- Table structure for table t_ds_alertgroup
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_alertgroup;
|
||||
CREATE TABLE t_ds_alertgroup (
|
||||
id int NOT NULL ,
|
||||
group_name varchar(255) DEFAULT NULL ,
|
||||
group_type int DEFAULT NULL ,
|
||||
description varchar(255) DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_command
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_command;
|
||||
CREATE TABLE t_ds_command (
|
||||
id int NOT NULL ,
|
||||
command_type int DEFAULT NULL ,
|
||||
process_definition_id int DEFAULT NULL ,
|
||||
command_param text ,
|
||||
task_depend_type int DEFAULT NULL ,
|
||||
failure_strategy int DEFAULT '0' ,
|
||||
warning_type int DEFAULT '0' ,
|
||||
warning_group_id int DEFAULT NULL ,
|
||||
schedule_time timestamp DEFAULT NULL ,
|
||||
start_time timestamp DEFAULT NULL ,
|
||||
executor_id int DEFAULT NULL ,
|
||||
dependence varchar(255) DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
process_instance_priority int DEFAULT NULL ,
|
||||
worker_group_id int DEFAULT '-1' ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_datasource
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_datasource;
|
||||
CREATE TABLE t_ds_datasource (
|
||||
id int NOT NULL ,
|
||||
name varchar(64) NOT NULL ,
|
||||
note varchar(256) DEFAULT NULL ,
|
||||
type int NOT NULL ,
|
||||
user_id int NOT NULL ,
|
||||
connection_params text NOT NULL ,
|
||||
create_time timestamp NOT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_error_command
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_error_command;
|
||||
CREATE TABLE t_ds_error_command (
|
||||
id int NOT NULL ,
|
||||
command_type int DEFAULT NULL ,
|
||||
executor_id int DEFAULT NULL ,
|
||||
process_definition_id int DEFAULT NULL ,
|
||||
command_param text ,
|
||||
task_depend_type int DEFAULT NULL ,
|
||||
failure_strategy int DEFAULT '0' ,
|
||||
warning_type int DEFAULT '0' ,
|
||||
warning_group_id int DEFAULT NULL ,
|
||||
schedule_time timestamp DEFAULT NULL ,
|
||||
start_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
dependence text ,
|
||||
process_instance_priority int DEFAULT NULL ,
|
||||
worker_group_id int DEFAULT '-1' ,
|
||||
message text ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
--
|
||||
-- Table structure for table t_ds_master_server
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_master_server;
|
||||
CREATE TABLE t_ds_master_server (
|
||||
id int NOT NULL ,
|
||||
host varchar(45) DEFAULT NULL ,
|
||||
port int DEFAULT NULL ,
|
||||
zk_directory varchar(64) DEFAULT NULL ,
|
||||
res_info varchar(256) DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
last_heartbeat_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_process_definition
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_process_definition;
|
||||
CREATE TABLE t_ds_process_definition (
|
||||
id int NOT NULL ,
|
||||
name varchar(255) DEFAULT NULL ,
|
||||
version int DEFAULT NULL ,
|
||||
release_state int DEFAULT NULL ,
|
||||
project_id int DEFAULT NULL ,
|
||||
user_id int DEFAULT NULL ,
|
||||
process_definition_json text ,
|
||||
description text ,
|
||||
global_params text ,
|
||||
flag int DEFAULT NULL ,
|
||||
locations text ,
|
||||
connects text ,
|
||||
receivers text ,
|
||||
receivers_cc text ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
timeout int DEFAULT '0' ,
|
||||
tenant_id int NOT NULL DEFAULT '-1' ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
create index process_definition_index on t_ds_process_definition (project_id,id);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_process_instance
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_process_instance;
|
||||
CREATE TABLE t_ds_process_instance (
|
||||
id int NOT NULL ,
|
||||
name varchar(255) DEFAULT NULL ,
|
||||
process_definition_id int DEFAULT NULL ,
|
||||
state int DEFAULT NULL ,
|
||||
recovery int DEFAULT NULL ,
|
||||
start_time timestamp DEFAULT NULL ,
|
||||
end_time timestamp DEFAULT NULL ,
|
||||
run_times int DEFAULT NULL ,
|
||||
host varchar(45) DEFAULT NULL ,
|
||||
command_type int DEFAULT NULL ,
|
||||
command_param text ,
|
||||
task_depend_type int DEFAULT NULL ,
|
||||
max_try_times int DEFAULT '0' ,
|
||||
failure_strategy int DEFAULT '0' ,
|
||||
warning_type int DEFAULT '0' ,
|
||||
warning_group_id int DEFAULT NULL ,
|
||||
schedule_time timestamp DEFAULT NULL ,
|
||||
command_start_time timestamp DEFAULT NULL ,
|
||||
global_params text ,
|
||||
process_instance_json text ,
|
||||
flag int DEFAULT '1' ,
|
||||
update_time timestamp NULL ,
|
||||
is_sub_process int DEFAULT '0' ,
|
||||
executor_id int NOT NULL ,
|
||||
locations text ,
|
||||
connects text ,
|
||||
history_cmd text ,
|
||||
dependence_schedule_times text ,
|
||||
process_instance_priority int DEFAULT NULL ,
|
||||
worker_group_id int DEFAULT '-1' ,
|
||||
timeout int DEFAULT '0' ,
|
||||
tenant_id int NOT NULL DEFAULT '-1' ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
create index process_instance_index on t_ds_process_instance (process_definition_id,id);
|
||||
create index start_time_index on t_ds_process_instance (start_time);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_project
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_project;
|
||||
CREATE TABLE t_ds_project (
|
||||
id int NOT NULL ,
|
||||
name varchar(100) DEFAULT NULL ,
|
||||
description varchar(200) DEFAULT NULL ,
|
||||
user_id int DEFAULT NULL ,
|
||||
flag int DEFAULT '1' ,
|
||||
create_time timestamp DEFAULT CURRENT_TIMESTAMP ,
|
||||
update_time timestamp DEFAULT CURRENT_TIMESTAMP ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
create index user_id_index on t_ds_project (user_id);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_queue
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_queue;
|
||||
CREATE TABLE t_ds_queue (
|
||||
id int NOT NULL ,
|
||||
queue_name varchar(64) DEFAULT NULL ,
|
||||
queue varchar(64) DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_relation_datasource_user
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_relation_datasource_user;
|
||||
CREATE TABLE t_ds_relation_datasource_user (
|
||||
id int NOT NULL ,
|
||||
user_id int NOT NULL ,
|
||||
datasource_id int DEFAULT NULL ,
|
||||
perm int DEFAULT '1' ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_relation_process_instance
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_relation_process_instance;
|
||||
CREATE TABLE t_ds_relation_process_instance (
|
||||
id int NOT NULL ,
|
||||
parent_process_instance_id int DEFAULT NULL ,
|
||||
parent_task_instance_id int DEFAULT NULL ,
|
||||
process_instance_id int DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_relation_project_user
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_relation_project_user;
|
||||
CREATE TABLE t_ds_relation_project_user (
|
||||
id int NOT NULL ,
|
||||
user_id int NOT NULL ,
|
||||
project_id int DEFAULT NULL ,
|
||||
perm int DEFAULT '1' ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
create index relation_project_user_id_index on t_ds_relation_project_user (user_id);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_relation_resources_user
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_relation_resources_user;
|
||||
CREATE TABLE t_ds_relation_resources_user (
|
||||
id int NOT NULL ,
|
||||
user_id int NOT NULL ,
|
||||
resources_id int DEFAULT NULL ,
|
||||
perm int DEFAULT '1' ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_relation_udfs_user
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_relation_udfs_user;
|
||||
CREATE TABLE t_ds_relation_udfs_user (
|
||||
id int NOT NULL ,
|
||||
user_id int NOT NULL ,
|
||||
udf_id int DEFAULT NULL ,
|
||||
perm int DEFAULT '1' ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_relation_user_alertgroup
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_relation_user_alertgroup;
|
||||
CREATE TABLE t_ds_relation_user_alertgroup (
|
||||
id int NOT NULL,
|
||||
alertgroup_id int DEFAULT NULL,
|
||||
user_id int DEFAULT NULL,
|
||||
create_time timestamp DEFAULT NULL,
|
||||
update_time timestamp DEFAULT NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_resources
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_resources;
|
||||
CREATE TABLE t_ds_resources (
|
||||
id int NOT NULL ,
|
||||
alias varchar(64) DEFAULT NULL ,
|
||||
file_name varchar(64) DEFAULT NULL ,
|
||||
description varchar(256) DEFAULT NULL ,
|
||||
user_id int DEFAULT NULL ,
|
||||
type int DEFAULT NULL ,
|
||||
size bigint DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_schedules
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_schedules;
|
||||
CREATE TABLE t_ds_schedules (
|
||||
id int NOT NULL ,
|
||||
process_definition_id int NOT NULL ,
|
||||
start_time timestamp NOT NULL ,
|
||||
end_time timestamp NOT NULL ,
|
||||
crontab varchar(256) NOT NULL ,
|
||||
failure_strategy int NOT NULL ,
|
||||
user_id int NOT NULL ,
|
||||
release_state int NOT NULL ,
|
||||
warning_type int NOT NULL ,
|
||||
warning_group_id int DEFAULT NULL ,
|
||||
process_instance_priority int DEFAULT NULL ,
|
||||
worker_group_id int DEFAULT '-1' ,
|
||||
create_time timestamp NOT NULL ,
|
||||
update_time timestamp NOT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_session
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_session;
|
||||
CREATE TABLE t_ds_session (
|
||||
id varchar(64) NOT NULL ,
|
||||
user_id int DEFAULT NULL ,
|
||||
ip varchar(45) DEFAULT NULL ,
|
||||
last_login_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_task_instance
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_task_instance;
|
||||
CREATE TABLE t_ds_task_instance (
|
||||
id int NOT NULL ,
|
||||
name varchar(255) DEFAULT NULL ,
|
||||
task_type varchar(64) DEFAULT NULL ,
|
||||
process_definition_id int DEFAULT NULL ,
|
||||
process_instance_id int DEFAULT NULL ,
|
||||
task_json text ,
|
||||
state int DEFAULT NULL ,
|
||||
submit_time timestamp DEFAULT NULL ,
|
||||
start_time timestamp DEFAULT NULL ,
|
||||
end_time timestamp DEFAULT NULL ,
|
||||
host varchar(45) DEFAULT NULL ,
|
||||
execute_path varchar(200) DEFAULT NULL ,
|
||||
log_path varchar(200) DEFAULT NULL ,
|
||||
alert_flag int DEFAULT NULL ,
|
||||
retry_times int DEFAULT '0' ,
|
||||
pid int DEFAULT NULL ,
|
||||
app_link varchar(255) DEFAULT NULL ,
|
||||
flag int DEFAULT '1' ,
|
||||
retry_interval int DEFAULT NULL ,
|
||||
max_retry_times int DEFAULT NULL ,
|
||||
task_instance_priority int DEFAULT NULL ,
|
||||
worker_group_id int DEFAULT '-1' ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_tenant
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_tenant;
|
||||
CREATE TABLE t_ds_tenant (
|
||||
id int NOT NULL ,
|
||||
tenant_code varchar(64) DEFAULT NULL ,
|
||||
tenant_name varchar(64) DEFAULT NULL ,
|
||||
description varchar(256) DEFAULT NULL ,
|
||||
queue_id int DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_udfs
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_udfs;
|
||||
CREATE TABLE t_ds_udfs (
|
||||
id int NOT NULL ,
|
||||
user_id int NOT NULL ,
|
||||
func_name varchar(100) NOT NULL ,
|
||||
class_name varchar(255) NOT NULL ,
|
||||
type int NOT NULL ,
|
||||
arg_types varchar(255) DEFAULT NULL ,
|
||||
database varchar(255) DEFAULT NULL ,
|
||||
description varchar(255) DEFAULT NULL ,
|
||||
resource_id int NOT NULL ,
|
||||
resource_name varchar(255) NOT NULL ,
|
||||
create_time timestamp NOT NULL ,
|
||||
update_time timestamp NOT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_user
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_user;
|
||||
CREATE TABLE t_ds_user (
|
||||
id int NOT NULL ,
|
||||
user_name varchar(64) DEFAULT NULL ,
|
||||
user_password varchar(64) DEFAULT NULL ,
|
||||
user_type int DEFAULT NULL ,
|
||||
email varchar(64) DEFAULT NULL ,
|
||||
phone varchar(11) DEFAULT NULL ,
|
||||
tenant_id int DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
queue varchar(64) DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_version
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_version;
|
||||
CREATE TABLE t_ds_version (
|
||||
id int NOT NULL ,
|
||||
version varchar(200) NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
create index version_index on t_ds_version(version);
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_worker_group
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_worker_group;
|
||||
CREATE TABLE t_ds_worker_group (
|
||||
id bigint NOT NULL ,
|
||||
name varchar(256) DEFAULT NULL ,
|
||||
ip_list varchar(256) DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
update_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
--
|
||||
-- Table structure for table t_ds_worker_server
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS t_ds_worker_server;
|
||||
CREATE TABLE t_ds_worker_server (
|
||||
id int NOT NULL ,
|
||||
host varchar(45) DEFAULT NULL ,
|
||||
port int DEFAULT NULL ,
|
||||
zk_directory varchar(64) DEFAULT NULL ,
|
||||
res_info varchar(255) DEFAULT NULL ,
|
||||
create_time timestamp DEFAULT NULL ,
|
||||
last_heartbeat_time timestamp DEFAULT NULL ,
|
||||
PRIMARY KEY (id)
|
||||
) ;
|
||||
|
||||
|
||||
DROP SEQUENCE IF EXISTS t_ds_access_token_id_sequence;
|
||||
CREATE SEQUENCE t_ds_access_token_id_sequence;
|
||||
ALTER TABLE t_ds_access_token ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_access_token_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_alert_id_sequence;
|
||||
CREATE SEQUENCE t_ds_alert_id_sequence;
|
||||
ALTER TABLE t_ds_alert ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_alert_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_alertgroup_id_sequence;
|
||||
CREATE SEQUENCE t_ds_alertgroup_id_sequence;
|
||||
ALTER TABLE t_ds_alertgroup ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_alertgroup_id_sequence');
|
||||
|
||||
DROP SEQUENCE IF EXISTS t_ds_command_id_sequence;
|
||||
CREATE SEQUENCE t_ds_command_id_sequence;
|
||||
ALTER TABLE t_ds_command ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_command_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_datasource_id_sequence;
|
||||
CREATE SEQUENCE t_ds_datasource_id_sequence;
|
||||
ALTER TABLE t_ds_datasource ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_datasource_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_master_server_id_sequence;
|
||||
CREATE SEQUENCE t_ds_master_server_id_sequence;
|
||||
ALTER TABLE t_ds_master_server ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_master_server_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_process_definition_id_sequence;
|
||||
CREATE SEQUENCE t_ds_process_definition_id_sequence;
|
||||
ALTER TABLE t_ds_process_definition ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_process_definition_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_process_instance_id_sequence;
|
||||
CREATE SEQUENCE t_ds_process_instance_id_sequence;
|
||||
ALTER TABLE t_ds_process_instance ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_process_instance_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_project_id_sequence;
|
||||
CREATE SEQUENCE t_ds_project_id_sequence;
|
||||
ALTER TABLE t_ds_project ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_project_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_queue_id_sequence;
|
||||
CREATE SEQUENCE t_ds_queue_id_sequence;
|
||||
ALTER TABLE t_ds_queue ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_queue_id_sequence');
|
||||
|
||||
DROP SEQUENCE IF EXISTS t_ds_relation_datasource_user_id_sequence;
|
||||
CREATE SEQUENCE t_ds_relation_datasource_user_id_sequence;
|
||||
ALTER TABLE t_ds_relation_datasource_user ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_relation_datasource_user_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_relation_process_instance_id_sequence;
|
||||
CREATE SEQUENCE t_ds_relation_process_instance_id_sequence;
|
||||
ALTER TABLE t_ds_relation_process_instance ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_relation_process_instance_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_relation_project_user_id_sequence;
|
||||
CREATE SEQUENCE t_ds_relation_project_user_id_sequence;
|
||||
ALTER TABLE t_ds_relation_project_user ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_relation_project_user_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_relation_resources_user_id_sequence;
|
||||
CREATE SEQUENCE t_ds_relation_resources_user_id_sequence;
|
||||
ALTER TABLE t_ds_relation_resources_user ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_relation_resources_user_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_relation_udfs_user_id_sequence;
|
||||
CREATE SEQUENCE t_ds_relation_udfs_user_id_sequence;
|
||||
ALTER TABLE t_ds_relation_udfs_user ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_relation_udfs_user_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_relation_user_alertgroup_id_sequence;
|
||||
CREATE SEQUENCE t_ds_relation_user_alertgroup_id_sequence;
|
||||
ALTER TABLE t_ds_relation_user_alertgroup ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_relation_user_alertgroup_id_sequence');
|
||||
|
||||
DROP SEQUENCE IF EXISTS t_ds_resources_id_sequence;
|
||||
CREATE SEQUENCE t_ds_resources_id_sequence;
|
||||
ALTER TABLE t_ds_resources ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_resources_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_schedules_id_sequence;
|
||||
CREATE SEQUENCE t_ds_schedules_id_sequence;
|
||||
ALTER TABLE t_ds_schedules ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_schedules_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_task_instance_id_sequence;
|
||||
CREATE SEQUENCE t_ds_task_instance_id_sequence;
|
||||
ALTER TABLE t_ds_task_instance ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_task_instance_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_tenant_id_sequence;
|
||||
CREATE SEQUENCE t_ds_tenant_id_sequence;
|
||||
ALTER TABLE t_ds_tenant ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_tenant_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_udfs_id_sequence;
|
||||
CREATE SEQUENCE t_ds_udfs_id_sequence;
|
||||
ALTER TABLE t_ds_udfs ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_udfs_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_user_id_sequence;
|
||||
CREATE SEQUENCE t_ds_user_id_sequence;
|
||||
ALTER TABLE t_ds_user ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_user_id_sequence');
|
||||
|
||||
DROP SEQUENCE IF EXISTS t_ds_version_id_sequence;
|
||||
CREATE SEQUENCE t_ds_version_id_sequence;
|
||||
ALTER TABLE t_ds_version ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_version_id_sequence');
|
||||
|
||||
DROP SEQUENCE IF EXISTS t_ds_worker_group_id_sequence;
|
||||
CREATE SEQUENCE t_ds_worker_group_id_sequence;
|
||||
ALTER TABLE t_ds_worker_group ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_worker_group_id_sequence');
|
||||
DROP SEQUENCE IF EXISTS t_ds_worker_server_id_sequence;
|
||||
CREATE SEQUENCE t_ds_worker_server_id_sequence;
|
||||
ALTER TABLE t_ds_worker_server ALTER COLUMN id SET DEFAULT NEXTVAL('t_ds_worker_server_id_sequence');
|
||||
|
||||
|
||||
-- Records of t_ds_user,user : admin , password : dolphinscheduler123
|
||||
INSERT INTO t_ds_user(user_name,user_password,user_type,email,phone,tenant_id,create_time,update_time) VALUES ('admin', '7ad2410b2f4c074479a8937a28a22b8f', '0', 'xxx@qq.com', 'xx', '0', '2018-03-27 15:48:50', '2018-10-24 17:40:22');
|
||||
|
||||
-- Records of t_ds_alertgroup,dolphinscheduler warning group
|
||||
INSERT INTO t_ds_alertgroup(group_name,group_type,description,create_time,update_time) VALUES ('dolphinscheduler warning group', '0', 'dolphinscheduler warning group','2018-11-29 10:20:39', '2018-11-29 10:20:39');
|
||||
INSERT INTO t_ds_relation_user_alertgroup(alertgroup_id,user_id,create_time,update_time) VALUES ( '1', '1', '2018-11-29 10:22:33', '2018-11-29 10:22:33');
|
||||
|
||||
-- Records of t_ds_queue,default queue name : default
|
||||
INSERT INTO t_ds_queue(queue_name,queue,create_time,update_time) VALUES ('default', 'default','2018-11-29 10:22:33', '2018-11-29 10:22:33');
|
||||
|
||||
-- Records of t_ds_queue,default queue name : default
|
||||
INSERT INTO t_ds_version(version) VALUES ('1.2.0');
|
@ -20,6 +20,8 @@ import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.ss.usermodel.CellStyle;
|
||||
import org.apache.poi.ss.usermodel.HorizontalAlignment;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -71,10 +73,14 @@ public class ExcelUtils {
|
||||
//set the height of the first line
|
||||
row.setHeight((short)500);
|
||||
|
||||
//set Horizontal right
|
||||
CellStyle cellStyle = wb.createCellStyle();
|
||||
cellStyle.setAlignment(HorizontalAlignment.RIGHT);
|
||||
|
||||
//setting excel headers
|
||||
for (int i = 0; i < headerList.size(); i++) {
|
||||
HSSFCell cell = row.createCell(i);
|
||||
cell.setCellStyle(cellStyle);
|
||||
cell.setCellValue(headerList.get(i));
|
||||
}
|
||||
|
||||
@ -88,6 +94,7 @@ public class ExcelUtils {
|
||||
rowIndex++;
|
||||
for (int j = 0 ; j < values.length ; j++){
|
||||
HSSFCell cell1 = row.createCell(j);
|
||||
cell1.setCellStyle(cellStyle);
|
||||
cell1.setCellValue(String.valueOf(values[j]));
|
||||
}
|
||||
}
|
||||
|
@ -14,4 +14,4 @@
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'><html><head><title> dolphinscheduler</title><meta name='Keywords' content=''><meta name='Description' content=''><style type="text/css">table { margin-top:0px; padding-top:0px; border:1px solid; font-size: 14px; color: #333333; border-width: 1px; border-color: #666666; border-collapse: collapse; } table th { border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede; } table td { border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff; }</style></head><body style="margin:0;padding:0"><table border="1px" cellpadding="5px" cellspacing="-10px"><thead><#if title??> ${title}</#if></thead><#if content??> ${content}</#if></table></body></html>
|
||||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'><html><head><title> dolphinscheduler</title><meta name='Keywords' content=''><meta name='Description' content=''><style type="text/css">table { margin-top:0px; padding-top:0px; border:1px solid; font-size: 14px; color: #333333; border-width: 1px; border-color: #666666; border-collapse: collapse; } table th { border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #dedede; text-align: right;} table td { border-width: 1px; padding: 8px; border-style: solid; border-color: #666666; background-color: #ffffff; text-align: right;}</style></head><body style="margin:0;padding:0"><table border="1px" cellpadding="5px" cellspacing="-10px"><thead><#if title??> ${title}</#if></thead><#if content??> ${content}</#if></table></body></html>
|
@ -26,7 +26,6 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
||||
@SpringBootApplication
|
||||
@ServletComponentScan
|
||||
@ComponentScan("org.apache.dolphinscheduler")
|
||||
@EnableSwagger2
|
||||
public class ApiApplicationServer extends SpringBootServletInitializer {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
@ -16,12 +16,12 @@
|
||||
*/
|
||||
package org.apache.dolphinscheduler.api.configuration;
|
||||
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import io.swagger.models.*;
|
||||
import io.swagger.models.parameters.Parameter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
@ -41,6 +41,7 @@ import static com.google.common.collect.Maps.newTreeMap;
|
||||
*/
|
||||
@Component(value = "ServiceModelToSwagger2Mapper")
|
||||
@Primary
|
||||
@ConditionalOnWebApplication
|
||||
public class ServiceModelToSwagger2MapperImpl extends ServiceModelToSwagger2Mapper {
|
||||
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
package org.apache.dolphinscheduler.api.configuration;
|
||||
|
||||
import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
@ -37,6 +38,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
|
||||
@Configuration
|
||||
@EnableSwagger2
|
||||
@EnableSwaggerBootstrapUI
|
||||
@ConditionalOnWebApplication
|
||||
public class SwaggerConfig implements WebMvcConfigurer {
|
||||
|
||||
@Bean
|
||||
|
@ -248,8 +248,8 @@ public enum Status {
|
||||
KERBEROS_STARTUP_STATE(100001,"get kerberos startup state error"),
|
||||
;
|
||||
|
||||
private int code;
|
||||
private String msg;
|
||||
private final int code;
|
||||
private final String msg;
|
||||
|
||||
private Status(int code, String msg) {
|
||||
this.code = code;
|
||||
@ -260,15 +260,7 @@ public enum Status {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMsg() {
|
||||
return this.msg;
|
||||
}
|
||||
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,8 @@ import java.util.Map;
|
||||
@Service
|
||||
public class MonitorService extends BaseService{
|
||||
|
||||
@Autowired
|
||||
private ZookeeperMonitor zookeeperMonitor;
|
||||
|
||||
@Autowired
|
||||
private MonitorDBDao monitorDBDao;
|
||||
@ -86,7 +88,7 @@ public class MonitorService extends BaseService{
|
||||
public Map<String,Object> queryZookeeperState(User loginUser) {
|
||||
Map<String, Object> result = new HashMap<>(5);
|
||||
|
||||
List<ZookeeperRecord> zookeeperRecordList = ZookeeperMonitor.zookeeperInfoList();
|
||||
List<ZookeeperRecord> zookeeperRecordList = zookeeperMonitor.zookeeperInfoList();
|
||||
|
||||
result.put(Constants.DATA_LIST, zookeeperRecordList);
|
||||
putMsg(result, Status.SUCCESS);
|
||||
|
@ -104,7 +104,7 @@ public class CheckUtils {
|
||||
* @return true if phone regex valid, otherwise return false
|
||||
*/
|
||||
public static boolean checkPhone(String phone) {
|
||||
return StringUtils.isEmpty(phone) || phone.length() <= 11;
|
||||
return StringUtils.isEmpty(phone) || phone.length() == 11;
|
||||
}
|
||||
|
||||
|
||||
|
@ -23,6 +23,7 @@ import org.apache.dolphinscheduler.dao.entity.ZookeeperRecord;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
@ -32,17 +33,17 @@ import java.util.List;
|
||||
/**
|
||||
* monitor zookeeper info
|
||||
*/
|
||||
@Component
|
||||
public class ZookeeperMonitor extends AbstractZKClient{
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(ZookeeperMonitor.class);
|
||||
private static final String zookeeperList = AbstractZKClient.getZookeeperQuorum();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return zookeeper info list
|
||||
*/
|
||||
public static List<ZookeeperRecord> zookeeperInfoList(){
|
||||
String zookeeperServers = zookeeperList.replaceAll("[\\t\\n\\x0B\\f\\r]", "");
|
||||
public List<ZookeeperRecord> zookeeperInfoList(){
|
||||
String zookeeperServers = getZookeeperQuorum().replaceAll("[\\t\\n\\x0B\\f\\r]", "");
|
||||
try{
|
||||
return zookeeperInfoList(zookeeperServers);
|
||||
}catch(Exception e){
|
||||
|
@ -80,4 +80,4 @@ public class AbstractControllerTest {
|
||||
Assert.assertTrue(StringUtils.isNotEmpty(session));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,125 @@
|
||||
/*
|
||||
* 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.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
|
||||
|
||||
public class AccessTokenControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(AccessTokenControllerTest.class);
|
||||
|
||||
|
||||
@Test
|
||||
public void testCreateToken() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","4");
|
||||
paramsMap.add("expireTime","2019-12-18 00:00:00");
|
||||
paramsMap.add("token","607f5aeaaa2093dbdff5d5522ce00510");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/access-token/create")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGenerateToken() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","4");
|
||||
paramsMap.add("expireTime","2019-12-28 00:00:00");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/access-token/generate")
|
||||
.header("sessionId", "5925a115-1691-47e0-9c46-4c7da03f6bbd")
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryAccessTokenList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("pageSize","20");
|
||||
paramsMap.add("searchVal","");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/access-token/list-paging")
|
||||
.header("sessionId", "5925a115-1691-47e0-9c46-4c7da03f6bbd")
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDelAccessTokenById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","13");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/access-token/delete")
|
||||
.header("sessionId", "5925a115-1691-47e0-9c46-4c7da03f6bbd")
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateToken() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","12");
|
||||
paramsMap.add("userId","4");
|
||||
paramsMap.add("expireTime","2019-12-20 00:00:00");
|
||||
paramsMap.add("token","cxctoken123update");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/access-token/update")
|
||||
.header("sessionId", "5925a115-1691-47e0-9c46-4c7da03f6bbd")
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,170 @@
|
||||
/*
|
||||
* 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.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.enums.AlertType;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
public class AlertGroupControllerTest extends AbstractControllerTest{
|
||||
private static final Logger logger = LoggerFactory.getLogger(AlertGroupController.class);
|
||||
|
||||
@Test
|
||||
public void testCreateAlertgroup() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("groupName","cxc test group name");
|
||||
paramsMap.add("groupType", AlertType.EMAIL.toString());
|
||||
paramsMap.add("description","cxc junit 测试告警描述");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/alert-group/create")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
MvcResult mvcResult = mockMvc.perform(get("/alert-group/list")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("searchVal", AlertType.EMAIL.toString());
|
||||
paramsMap.add("pageSize","1");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/alert-group/list-paging")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateAlertgroup() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","22");
|
||||
paramsMap.add("groupName", "hd test group name");
|
||||
paramsMap.add("groupType",AlertType.EMAIL.toString());
|
||||
paramsMap.add("description","update alter group");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/alert-group/update")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testVerifyGroupName() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("groupName","hd test group name");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/alert-group/verify-group-name")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.ALERT_GROUP_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testVerifyGroupNameNotExit() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("groupName","cxc test group name");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/alert-group/verify-group-name")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGrantUser() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("alertgroupId","2");
|
||||
paramsMap.add("userIds","2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/alert-group/grant-user")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDelAlertgroupById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","22");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/alert-group/delete")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
@ -41,32 +41,21 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@Ignore
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest
|
||||
public class DataAnalysisControllerTest {
|
||||
|
||||
public class DataAnalysisControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(DataAnalysisControllerTest.class);
|
||||
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private WebApplicationContext webApplicationContext;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void countTaskState() throws Exception {
|
||||
public void testCountTaskState() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("startDate","2019-02-01 00:00:00");
|
||||
paramsMap.add("endDate","2019-02-28 00:00:00");
|
||||
paramsMap.add("projectId","21");
|
||||
paramsMap.add("startDate","2019-12-01 00:00:00");
|
||||
paramsMap.add("endDate","2019-12-28 00:00:00");
|
||||
paramsMap.add("projectId","16");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/analysis/task-state-count")
|
||||
.header("sessionId", "08fae8bf-fe2d-4fc0-8129-23c37fbfac82")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
@ -77,15 +66,15 @@ public class DataAnalysisControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void countProcessInstanceState() throws Exception {
|
||||
public void testCountProcessInstanceState() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("startDate","2019-02-01 00:00:00");
|
||||
paramsMap.add("endDate","2019-02-28 00:00:00");
|
||||
paramsMap.add("projectId","21");
|
||||
paramsMap.add("startDate","2019-12-01 00:00:00");
|
||||
paramsMap.add("endDate","2019-12-28 00:00:00");
|
||||
paramsMap.add("projectId","16");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/analysis/process-state-count")
|
||||
.header("sessionId", "08fae8bf-fe2d-4fc0-8129-23c37fbfac82")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
@ -94,4 +83,55 @@ public class DataAnalysisControllerTest {
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCountDefinitionByUser() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("projectId","16");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/analysis/define-user-count")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCountCommandState() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("startDate","2019-12-01");
|
||||
paramsMap.add("endDate","2019-12-15");
|
||||
paramsMap.add("projectId","16");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/analysis/command-state-count")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testCountQueueState() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("projectId","16");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/analysis/queue-count")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -41,10 +41,67 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
public class DataSourceControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(DataSourceControllerTest.class);
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testCreateDataSource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","mysql");
|
||||
paramsMap.add("node","mysql data source test");
|
||||
paramsMap.add("type","MYSQL");
|
||||
paramsMap.add("host","192.168.xxxx.xx");
|
||||
paramsMap.add("port","3306");
|
||||
paramsMap.add("principal","");
|
||||
paramsMap.add("database","dolphinscheduler");
|
||||
paramsMap.add("userName","root");
|
||||
paramsMap.add("password","root@123");
|
||||
paramsMap.add("other","");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/datasources/create")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testUpdateDataSource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","2");
|
||||
paramsMap.add("name","mysql");
|
||||
paramsMap.add("node","mysql data source test");
|
||||
paramsMap.add("type","MYSQL");
|
||||
paramsMap.add("host","192.168.xxxx.xx");
|
||||
paramsMap.add("port","3306");
|
||||
paramsMap.add("principal","");
|
||||
paramsMap.add("database","dolphinscheduler");
|
||||
paramsMap.add("userName","root");
|
||||
paramsMap.add("password","root@123");
|
||||
paramsMap.add("other","");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/datasources/update")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void queryDataSource() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/list").header("sessionId", sessionId).param("type","HIVE"))
|
||||
public void testQueryDataSource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","2");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/datasources/update-ui")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
@ -53,10 +110,44 @@ public class DataSourceControllerTest extends AbstractControllerTest{
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryDataSourceList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("type","MYSQL");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/list")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryDataSourceListPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("searchVal","mysql");
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("pageSize","1");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/list-paging")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void connectDataSource() throws Exception {
|
||||
|
||||
public void testConnectDataSource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","hive data source");
|
||||
paramsMap.add("type","HIVE");
|
||||
@ -68,7 +159,7 @@ public class DataSourceControllerTest extends AbstractControllerTest{
|
||||
paramsMap.add("other","");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/datasources/connect")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
@ -78,4 +169,97 @@ public class DataSourceControllerTest extends AbstractControllerTest{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@Test
|
||||
public void testConnectionTest() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","2");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/connect-by-id")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testVerifyDataSourceName() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","mysql");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/verify-name")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAuthedDatasource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","2");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/authed-datasource")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUnauthDatasource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","2");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/unauth-datasource")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGetKerberosStartupState() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/kerberos-startup-state")
|
||||
.header("sessionId", sessionId))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testDelete() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","16");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/datasources/delete")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -16,8 +16,11 @@
|
||||
*/
|
||||
package org.apache.dolphinscheduler.api.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.ExecuteType;
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.enums.FailureStrategy;
|
||||
import org.apache.dolphinscheduler.common.enums.WarningType;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
@ -37,17 +40,64 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
/**
|
||||
* executor controller test
|
||||
*/
|
||||
@Ignore
|
||||
public class ExecutorControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(ExecutorControllerTest.class);
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testStartProcessInstance() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionId","40");
|
||||
paramsMap.add("scheduleTime","");
|
||||
paramsMap.add("failureStrategy", String.valueOf(FailureStrategy.CONTINUE));
|
||||
paramsMap.add("startNodeList","");
|
||||
paramsMap.add("taskDependType","");
|
||||
paramsMap.add("execType","");
|
||||
paramsMap.add("warningType", String.valueOf(WarningType.NONE));
|
||||
paramsMap.add("warningGroupId","");
|
||||
paramsMap.add("receivers","");
|
||||
paramsMap.add("receiversCc","");
|
||||
paramsMap.add("runMode","");
|
||||
paramsMap.add("processInstancePriority","");
|
||||
paramsMap.add("workerGroupId","");
|
||||
paramsMap.add("timeout","");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/executors/start-process-instance","cxc_1113")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testExecute() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processInstanceId","40");
|
||||
paramsMap.add("executeType",String.valueOf(ExecuteType.NONE));
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/executors/execute","cxc_1113")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void startCheckProcessDefinition() throws Exception {
|
||||
public void testStartCheckProcessDefinition() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/executors/start-check","project_test1")
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/executors/start-check","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("processDefinitionId","226"))
|
||||
.param("processDefinitionId","40"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
@ -57,11 +107,10 @@ public class ExecutorControllerTest extends AbstractControllerTest{
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getReceiverCc() throws Exception {
|
||||
public void testGetReceiverCc() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
//paramsMap.add("processDefinitionId","4");
|
||||
paramsMap.add("processInstanceId","13");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/executors/get-receiver-cc","li_sql_test")
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/executors/get-receiver-cc","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
@ -71,4 +120,4 @@ public class ExecutorControllerTest extends AbstractControllerTest{
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,39 +20,64 @@ import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
|
||||
|
||||
/**
|
||||
* logger controller test
|
||||
*/
|
||||
|
||||
@Ignore
|
||||
public class LoggerControllerTest extends AbstractControllerTest {
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(DataAnalysisControllerTest.class);
|
||||
private static Logger logger = LoggerFactory.getLogger(LoggerControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void queryLog() throws Exception {
|
||||
public void testQueryLog() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("taskInstId","-1");
|
||||
paramsMap.add("taskInstId","1501");
|
||||
paramsMap.add("skipLineNum","0");
|
||||
paramsMap.add("limit","1000");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/log/detail")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
// .andExpect(status().isOk())
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDownloadTaskLog() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("taskInstId","1501");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/log/download-log")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
// .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.TASK_INSTANCE_NOT_FOUND.getCode(),result.getCode().intValue());
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,12 +40,11 @@ public class LoginControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(SchedulerControllerTest.class);
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void login() throws Exception {
|
||||
public void testLogin() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userName","admin");
|
||||
paramsMap.add("userPassword","dolphinscheduler123");
|
||||
paramsMap.add("userName","cxc");
|
||||
paramsMap.add("userPassword","123456");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/login")
|
||||
.params(paramsMap))
|
||||
@ -57,4 +56,21 @@ public class LoginControllerTest extends AbstractControllerTest{
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSignOut() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/signOut")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -40,59 +40,71 @@ public class MonitorControllerTest extends AbstractControllerTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void listMaster() throws Exception {
|
||||
public void testListMaster() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/monitor/master/list")
|
||||
.header(SESSION_ID, sessionId)
|
||||
/* .param("type", ResourceType.FILE.name())*/ )
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
.header(SESSION_ID, sessionId)
|
||||
/* .param("type", ResourceType.FILE.name())*/ )
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
|
||||
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void queryDatabaseState() throws Exception {
|
||||
public void testListWorker() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/monitor/worker/list")
|
||||
.header(SESSION_ID, sessionId)
|
||||
/* .param("type", ResourceType.FILE.name())*/ )
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryDatabaseState() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(get("/monitor/database")
|
||||
.header(SESSION_ID, sessionId)
|
||||
/* .param("type", ResourceType.FILE.name())*/ )
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
.header(SESSION_ID, sessionId)
|
||||
/* .param("type", ResourceType.FILE.name())*/ )
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void queryZookeeperState() throws Exception {
|
||||
public void testQueryZookeeperState() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(get("/monitor/zookeeper/list")
|
||||
.header(SESSION_ID, sessionId)
|
||||
/* .param("type", ResourceType.FILE.name())*/ )
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
.header(SESSION_ID, sessionId)
|
||||
/* .param("type", ResourceType.FILE.name())*/ )
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
|
||||
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,8 +18,10 @@ package org.apache.dolphinscheduler.api.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.enums.ReleaseState;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -28,6 +30,7 @@ import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
@ -40,7 +43,7 @@ public class ProcessDefinitionControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(ProcessDefinitionControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void createProcessDefinition() throws Exception {
|
||||
public void testCreateProcessDefinition() throws Exception {
|
||||
String json = "{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-36196\",\"name\":\"ssh_test1\",\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"aa=\\\"1234\\\"\\necho ${aa}\"},\"desc\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":-1,\"timeout\":0}";
|
||||
String locations = "{\"tasks-36196\":{\"name\":\"ssh_test1\",\"targetarr\":\"\",\"x\":141,\"y\":70}}";
|
||||
|
||||
@ -49,9 +52,9 @@ public class ProcessDefinitionControllerTest extends AbstractControllerTest{
|
||||
paramsMap.add("processDefinitionJson",json);
|
||||
paramsMap.add("locations", locations);
|
||||
paramsMap.add("connects", "[]");
|
||||
paramsMap.add("desc", "desc test");
|
||||
paramsMap.add("description", "desc test");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/process/save","project_test1")
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/process/save","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
@ -59,7 +62,269 @@ public class ProcessDefinitionControllerTest extends AbstractControllerTest{
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.PROJECT_NOT_FOUNT.getCode(),result.getCode().intValue());
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testVerifyProccessDefinitionName() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","dag_test");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/verify-name","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.PROCESS_INSTANCE_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testVerifyProccessDefinitionNameNotExit() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","dag_test_1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/verify-name","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void UpdateProccessDefinition() throws Exception {
|
||||
String json = "{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-36196\",\"name\":\"ssh_test1\",\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"aa=\\\"1234\\\"\\necho ${aa}\"},\"desc\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":-1,\"timeout\":0}";
|
||||
String locations = "{\"tasks-36196\":{\"name\":\"ssh_test1\",\"targetarr\":\"\",\"x\":141,\"y\":70}}";
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","dag_test_update");
|
||||
paramsMap.add("id","91");
|
||||
paramsMap.add("processDefinitionJson",json);
|
||||
paramsMap.add("locations", locations);
|
||||
paramsMap.add("connects", "[]");
|
||||
paramsMap.add("description", "desc test update");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/process/update","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testReleaseProccessDefinition() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processId","91");
|
||||
paramsMap.add("releaseState",String.valueOf(ReleaseState.OFFLINE));
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/process/release","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryProccessDefinitionById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processId","91");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/select-by-id","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryProccessDefinitionList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/list","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryProcessDefinitionListPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("searchVal","test");
|
||||
paramsMap.add("userId","");
|
||||
paramsMap.add("pageSize", "1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/list-paging","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testViewTree() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processId","91");
|
||||
paramsMap.add("limit","30");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/view-tree","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetNodeListByDefinitionId() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionId","40");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/gen-task-list","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetNodeListByDefinitionIdList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionIdList","40,90,91");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/get-task-list","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testExportProcessDefinitionById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionId","91");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/export","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
// .andExpect(status().isOk())
|
||||
// .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryProccessDefinitionAllByProjectId() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("projectId","9");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/queryProccessDefinitionAllByProjectId","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testDeleteProcessDefinitionById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionId","73");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/delete","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBatchDeleteProcessDefinitionByIds() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionIds","54,62");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/process/batch-delete","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ package org.apache.dolphinscheduler.api.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
@ -25,8 +26,11 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@ -36,13 +40,35 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
public class ProcessInstanceControllerTest extends AbstractControllerTest {
|
||||
private static Logger logger = LoggerFactory.getLogger(ProcessInstanceControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void testQueryProcessInstanceList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionId", "91");
|
||||
paramsMap.add("searchVal", "cxc");
|
||||
paramsMap.add("stateType", String.valueOf(ExecutionStatus.SUCCESS));
|
||||
paramsMap.add("host", "192.168.1.13");
|
||||
paramsMap.add("startDate", "2019-12-15 00:00:00");
|
||||
paramsMap.add("endDate", "2019-12-16 00:00:00");
|
||||
paramsMap.add("pageNo", "2");
|
||||
paramsMap.add("pageSize", "2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/list-paging","cxc_1113")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryTaskListByProcessId() throws Exception {
|
||||
public void testQueryTaskListByProcessId() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/task-list-by-process-id","project_test1")
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/task-list-by-process-id","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("processInstanceId","-1"))
|
||||
.param("processInstanceId","1203"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
@ -51,4 +77,123 @@ public class ProcessInstanceControllerTest extends AbstractControllerTest {
|
||||
Assert.assertEquals(Status.PROJECT_NOT_FOUNT,result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateProcessInstance() throws Exception {
|
||||
String json = "{\"globalParams\":[],\"tasks\":[{\"type\":\"SHELL\",\"id\":\"tasks-36196\",\"name\":\"ssh_test1\",\"params\":{\"resourceList\":[],\"localParams\":[],\"rawScript\":\"aa=\\\"1234\\\"\\necho ${aa}\"},\"desc\":\"\",\"runFlag\":\"NORMAL\",\"dependence\":{},\"maxRetryTimes\":\"0\",\"retryInterval\":\"1\",\"timeout\":{\"strategy\":\"\",\"interval\":null,\"enable\":false},\"taskInstancePriority\":\"MEDIUM\",\"workerGroupId\":-1,\"preTasks\":[]}],\"tenantId\":-1,\"timeout\":0}";
|
||||
String locations = "{\"tasks-36196\":{\"name\":\"ssh_test1\",\"targetarr\":\"\",\"x\":141,\"y\":70}}";
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processInstanceJson", json);
|
||||
paramsMap.add("processInstanceId", "91");
|
||||
paramsMap.add("scheduleTime", "2019-12-15 00:00:00");
|
||||
paramsMap.add("syncDefine", "false");
|
||||
paramsMap.add("locations", locations);
|
||||
paramsMap.add("connects", "[]");
|
||||
// paramsMap.add("flag", "2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/instance/update","cxc_1113")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryProcessInstanceById() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/select-by-id","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("processInstanceId","1203"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testQuerySubProcessInstanceByTaskId() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/select-sub-process","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("taskId","1203"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.TASK_INSTANCE_NOT_EXISTS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryParentInstanceBySubId() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/select-parent-process","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("subId","1204"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.PROCESS_INSTANCE_NOT_SUB_PROCESS_INSTANCE.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testViewVariables() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/view-variables","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("processInstanceId","1204"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDeleteProcessInstanceById() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/delete","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("processInstanceId","1204"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBatchDeleteProcessInstanceByIds() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/instance/batch-delete","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("processInstanceIds","1205,1206"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.DELETE_PROCESS_INSTANCE_BY_ID_ERROR.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -20,6 +20,7 @@ import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -28,6 +29,9 @@ import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import javax.ws.rs.POST;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
@ -36,11 +40,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
* project controller
|
||||
*/
|
||||
public class ProjectControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(ProcessInstanceControllerTest.class);
|
||||
private static Logger logger = LoggerFactory.getLogger(ProjectControllerTest.class);
|
||||
|
||||
|
||||
@Test
|
||||
public void createProject() throws Exception {
|
||||
public void testCreateProject() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("projectName","project_test1");
|
||||
@ -57,4 +61,160 @@ public class ProjectControllerTest extends AbstractControllerTest{
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateProject() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("projectId","18");
|
||||
paramsMap.add("projectName","project_test_update");
|
||||
paramsMap.add("desc","the test project update");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/update")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryProjectById() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("projectId","18");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/query-by-id")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryProjectListPaging() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("searchVal","test");
|
||||
paramsMap.add("pageSize","2");
|
||||
paramsMap.add("pageNo","2");
|
||||
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/list-paging")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryUnauthorizedProject() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/unauth-project")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryAuthorizedProject() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/authed-project")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryAllProjectList() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/query-project-list")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testImportProcessDefinition() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("file","test");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/import-definition")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.TEXT_PLAIN))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.IMPORT_PROCESS_DEFINE_ERROR.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDeleteProject() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("projectId","18");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/delete")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public class QueueControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(QueueControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void queryList() throws Exception {
|
||||
public void testQueryList() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/queue/list")
|
||||
.header(SESSION_ID, sessionId))
|
||||
@ -55,7 +55,7 @@ public class QueueControllerTest extends AbstractControllerTest{
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryPagingList() throws Exception {
|
||||
public void testQueryQueueListPaging() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
//paramsMap.add("processInstanceId","1380");
|
||||
@ -74,8 +74,11 @@ public class QueueControllerTest extends AbstractControllerTest{
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void createQueue() throws Exception {
|
||||
public void testCreateQueue() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("queue","ait");
|
||||
@ -90,12 +93,10 @@ public class QueueControllerTest extends AbstractControllerTest{
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
// Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateQueue() throws Exception {
|
||||
public void testUpdateQueue() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","2");
|
||||
@ -114,7 +115,7 @@ public class QueueControllerTest extends AbstractControllerTest{
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyQueue() throws Exception {
|
||||
public void testVerifyQueue() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("queue","ait123");
|
||||
@ -130,4 +131,4 @@ public class QueueControllerTest extends AbstractControllerTest{
|
||||
//Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -18,10 +18,13 @@ package org.apache.dolphinscheduler.api.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
|
||||
import org.apache.dolphinscheduler.common.enums.ResourceType;
|
||||
import org.apache.dolphinscheduler.common.enums.UdfType;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -31,6 +34,7 @@ import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@ -41,7 +45,7 @@ public class ResourcesControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(ResourcesControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void querytResourceList() throws Exception {
|
||||
public void testQuerytResourceList() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/list")
|
||||
.header(SESSION_ID, sessionId)
|
||||
@ -58,8 +62,33 @@ public class ResourcesControllerTest extends AbstractControllerTest{
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void verifyResourceName() throws Exception {
|
||||
public void testQueryResourceListPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("type", String.valueOf(ResourceType.FILE));
|
||||
paramsMap.add("pageNo", "1");
|
||||
paramsMap.add("searchVal", "test");
|
||||
paramsMap.add("pageSize", "1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/list-paging")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testVerifyResourceName() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","list_resources_1.sh");
|
||||
@ -77,4 +106,351 @@ public class ResourcesControllerTest extends AbstractControllerTest{
|
||||
Assert.assertEquals(Status.TENANT_NOT_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testViewResource() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","5");
|
||||
paramsMap.add("skipLineNum","2");
|
||||
paramsMap.add("limit","100");
|
||||
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/view")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnlineCreateResource() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("type", String.valueOf(ResourceType.FILE));
|
||||
paramsMap.add("fileName","test_file_1");
|
||||
paramsMap.add("suffix","sh");
|
||||
paramsMap.add("description","test");
|
||||
paramsMap.add("content","echo 1111");
|
||||
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/resources/online-create")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
|
||||
Assert.assertEquals(Status.TENANT_NOT_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateResourceContent() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id", "1");
|
||||
paramsMap.add("content","echo test_1111");
|
||||
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/resources/update-content")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
|
||||
Assert.assertEquals(Status.TENANT_NOT_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDownloadResource() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id", "5");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/download")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
|
||||
Assert.assertEquals(Status.TENANT_NOT_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testCreateUdfFunc() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("type", String.valueOf(UdfType.HIVE));
|
||||
paramsMap.add("funcName", "test_udf");
|
||||
paramsMap.add("className", "com.test.word.contWord");
|
||||
paramsMap.add("argTypes", "argTypes");
|
||||
paramsMap.add("database", "database");
|
||||
paramsMap.add("description", "description");
|
||||
paramsMap.add("resourceId", "1");
|
||||
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/resources/udf-func/create")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
|
||||
Assert.assertEquals(Status.TENANT_NOT_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testViewUIUdfFunction() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id", "1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/udf-func/update-ui")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
|
||||
Assert.assertEquals(Status.TENANT_NOT_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUpdateUdfFunc() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id", "1");
|
||||
paramsMap.add("type", String.valueOf(UdfType.HIVE));
|
||||
paramsMap.add("funcName", "update_duf");
|
||||
paramsMap.add("className", "com.test.word.contWord");
|
||||
paramsMap.add("argTypes", "argTypes");
|
||||
paramsMap.add("database", "database");
|
||||
paramsMap.add("description", "description");
|
||||
paramsMap.add("resourceId", "1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/resources/udf-func/update")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
|
||||
Assert.assertEquals(Status.TENANT_NOT_EXIST.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryUdfFuncList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("pageNo", "1");
|
||||
paramsMap.add("searchVal", "udf");
|
||||
paramsMap.add("pageSize", "1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/udf-func/list-paging")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryResourceList() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("type", String.valueOf(UdfType.HIVE));
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/udf-func/list")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testVerifyUdfFuncName() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name", "test");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/udf-func/verify-name")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAuthorizedFile() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId", "2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/authed-file")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUnauthorizedFile() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId", "2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/unauth-file")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAuthorizedUDFFunction() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId", "2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/authed-udf-func")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnauthUDFFunc() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId", "2");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/unauth-udf-func")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDeleteUdfFunc() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id", "1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/udf-func/delete")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testDeleteResource() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/resources/delete")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("id", "2"))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
result.getCode().equals(Status.SUCCESS.getCode());
|
||||
JSONObject object = (JSONObject) JSONObject.parse(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -18,6 +18,9 @@ package org.apache.dolphinscheduler.api.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.enums.FailureStrategy;
|
||||
import org.apache.dolphinscheduler.common.enums.Priority;
|
||||
import org.apache.dolphinscheduler.common.enums.WarningType;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
@ -25,7 +28,10 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
@ -37,8 +43,116 @@ public class SchedulerControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(SchedulerControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void queryScheduleList() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/list","project_test1")
|
||||
public void testCreateSchedule() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionId","40");
|
||||
paramsMap.add("schedule","{'startTime':'2019-12-16 00:00:00','endTime':'2019-12-17 00:00:00','crontab':'0 0 6 * * ? *'}");
|
||||
paramsMap.add("warningType",String.valueOf(WarningType.NONE));
|
||||
paramsMap.add("warningGroupId","1");
|
||||
paramsMap.add("failureStrategy",String.valueOf(FailureStrategy.CONTINUE));
|
||||
paramsMap.add("receivers","");
|
||||
paramsMap.add("receiversCc","");
|
||||
paramsMap.add("workerGroupId","1");
|
||||
paramsMap.add("processInstancePriority",String.valueOf(Priority.HIGH));
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/create","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUpdateSchedule() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","37");
|
||||
paramsMap.add("schedule","{'startTime':'2019-12-16 00:00:00','endTime':'2019-12-17 00:00:00','crontab':'0 0 7 * * ? *'}");
|
||||
paramsMap.add("warningType",String.valueOf(WarningType.NONE));
|
||||
paramsMap.add("warningGroupId","1");
|
||||
paramsMap.add("failureStrategy",String.valueOf(FailureStrategy.CONTINUE));
|
||||
paramsMap.add("receivers","");
|
||||
paramsMap.add("receiversCc","");
|
||||
paramsMap.add("workerGroupId","1");
|
||||
paramsMap.add("processInstancePriority",String.valueOf(Priority.HIGH));
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/update","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnline() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","37");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/online","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testOffline() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","28");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/offline","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryScheduleListPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("processDefinitionId","40");
|
||||
paramsMap.add("searchVal","test");
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("pageSize","30");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/schedule/list-paging","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryScheduleList() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/list","cxc_1113")
|
||||
.header(SESSION_ID, sessionId))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
@ -51,8 +165,8 @@ public class SchedulerControllerTest extends AbstractControllerTest{
|
||||
|
||||
|
||||
@Test
|
||||
public void previewSchedule() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/preview","li_test_1")
|
||||
public void testPreviewSchedule() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/preview","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.param("schedule","{'startTime':'2019-06-10 00:00:00','endTime':'2019-06-13 00:00:00','crontab':'0 0 3/6 * * ? *'}"))
|
||||
.andExpect(status().isCreated())
|
||||
@ -63,4 +177,21 @@ public class SchedulerControllerTest extends AbstractControllerTest{
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteScheduleById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("scheduleId","37");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/schedule/delete","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
|
@ -36,10 +36,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
* task instance controller test
|
||||
*/
|
||||
public class TaskInstanceControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(SchedulerControllerTest.class);
|
||||
private static Logger logger = LoggerFactory.getLogger(TaskInstanceControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void queryTaskListPaging() throws Exception {
|
||||
public void testQueryTaskListPaging() throws Exception {
|
||||
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
//paramsMap.add("processInstanceId","1380");
|
||||
@ -51,7 +51,7 @@ public class TaskInstanceControllerTest extends AbstractControllerTest{
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("pageSize","20");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/task-instance/list-paging","project_test1")
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/{projectName}/task-instance/list-paging","cxc_1113")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
@ -62,4 +62,4 @@ public class TaskInstanceControllerTest extends AbstractControllerTest{
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* 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.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.enums.FailureStrategy;
|
||||
import org.apache.dolphinscheduler.common.enums.Priority;
|
||||
import org.apache.dolphinscheduler.common.enums.WarningType;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
public class TaskRecordControllerTest extends AbstractControllerTest {
|
||||
private static final Logger logger = LoggerFactory.getLogger(TaskInstanceController.class);
|
||||
|
||||
@Test
|
||||
public void testQueryTaskRecordListPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("taskName","taskName");
|
||||
paramsMap.add("state","state");
|
||||
paramsMap.add("sourceTable","");
|
||||
paramsMap.add("destTable","");
|
||||
paramsMap.add("taskDate","");
|
||||
paramsMap.add("startDate","2019-12-16 00:00:00");
|
||||
paramsMap.add("endDate","2019-12-17 00:00:00");
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("pageSize","30");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/task-record/list-paging")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryHistoryTaskRecordListPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("taskName","taskName");
|
||||
paramsMap.add("state","state");
|
||||
paramsMap.add("sourceTable","");
|
||||
paramsMap.add("destTable","");
|
||||
paramsMap.add("taskDate","");
|
||||
paramsMap.add("startDate","2019-12-16 00:00:00");
|
||||
paramsMap.add("endDate","2019-12-17 00:00:00");
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("pageSize","30");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/projects/task-record/history-list-paging")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
}
|
||||
}
|
@ -25,8 +25,11 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@ -34,11 +37,93 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
* tenant controller test
|
||||
*/
|
||||
public class TenantControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(DataAnalysisControllerTest.class);
|
||||
private static Logger logger = LoggerFactory.getLogger(TenantControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void testCreateTenant() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("tenantCode","tenantCode");
|
||||
paramsMap.add("tenantName","tenantName");
|
||||
paramsMap.add("queueId","1");
|
||||
paramsMap.add("description","tenant description");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/tenant/create")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryTenantlistPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("pageNo","1");
|
||||
paramsMap.add("searchVal","tenant");
|
||||
paramsMap.add("pageSize","30");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/tenant/list-paging")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateTenant() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","9");
|
||||
paramsMap.add("tenantCode","cxc_te");
|
||||
paramsMap.add("tenantName","tenant_update_2");
|
||||
paramsMap.add("queueId","1");
|
||||
paramsMap.add("description","tenant description");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/tenant/update")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void countTaskState() throws Exception {
|
||||
public void testVerifyTenantCode() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("tenantCode","cxc_test");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/tenant/verify-tenant-code")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testQueryTenantlist() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/tenant/list")
|
||||
.header(SESSION_ID, sessionId))
|
||||
@ -46,9 +131,25 @@ public class TenantControllerTest extends AbstractControllerTest{
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteTenantById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","64");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/tenant/delete")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,8 +25,11 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@ -36,9 +39,224 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
||||
public class UsersControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(QueueControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void testCreateUser() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userName","user_test");
|
||||
paramsMap.add("userPassword","123456qwe?");
|
||||
paramsMap.add("tenantId","9");
|
||||
paramsMap.add("queue","1");
|
||||
paramsMap.add("email","12343534@qq.com");
|
||||
paramsMap.add("phone","15800000000");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/users/create")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isCreated())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void queryList() throws Exception {
|
||||
public void testUpdateUser() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","32");
|
||||
paramsMap.add("userName","user_test");
|
||||
paramsMap.add("userPassword","123456qwe?");
|
||||
paramsMap.add("tenantId","9");
|
||||
paramsMap.add("queue","1");
|
||||
paramsMap.add("email","12343534@qq.com");
|
||||
paramsMap.add("phone","15800000000");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/users/update")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGrantProject() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","32");
|
||||
paramsMap.add("projectIds","3");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/users/grant-project")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGrantResource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","32");
|
||||
paramsMap.add("resourceIds","5");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/users/grant-file")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testGrantUDFFunc() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","32");
|
||||
paramsMap.add("udfIds","5");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/users/grant-udf-func")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testGrantDataSource() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userId","32");
|
||||
paramsMap.add("datasourceIds","5");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/users/grant-datasource")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUserInfo() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(get("/users/get-user-info")
|
||||
.header(SESSION_ID, sessionId))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testListAll() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("userName","test");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/users/list-all")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testAuthorizedUser() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("alertgroupId","1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/users/authed-user")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUnauthorizedUser() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("alertgroupId","1");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/users/unauth-user")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testVerifyUserName() throws Exception {
|
||||
MvcResult mvcResult = mockMvc.perform(get("/users/verify-user-name")
|
||||
.header(SESSION_ID, sessionId))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDelUserById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","32");
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(post("/users/delete")
|
||||
.header(SESSION_ID, sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryList() throws Exception {
|
||||
|
||||
MvcResult mvcResult = mockMvc.perform(get("/users/list")
|
||||
.header(SESSION_ID, sessionId))
|
||||
@ -50,4 +268,4 @@ public class UsersControllerTest extends AbstractControllerTest{
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,102 @@
|
||||
|
||||
/*
|
||||
* 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.controller;
|
||||
|
||||
import org.apache.dolphinscheduler.api.enums.Status;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.utils.JSONUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
public class WorkerGroupControllerTest extends AbstractControllerTest{
|
||||
private static Logger logger = LoggerFactory.getLogger(WorkerGroupControllerTest.class);
|
||||
|
||||
@Test
|
||||
public void testSaveWorkerGroup() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("name","cxc_work_group");
|
||||
paramsMap.add("ipList","192.16.12,192.168,10,12");
|
||||
MvcResult mvcResult = mockMvc.perform(post("/worker-group/save")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryAllWorkerGroupsPaging() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("pageNo","2");
|
||||
paramsMap.add("searchVal","cxc");
|
||||
paramsMap.add("pageSize","2");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/worker-group/list-paging")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testQueryAllWorkerGroups() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
MvcResult mvcResult = mockMvc.perform(get("/worker-group/all-groups")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteById() throws Exception {
|
||||
MultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
|
||||
paramsMap.add("id","12");
|
||||
MvcResult mvcResult = mockMvc.perform(get("/worker-group/delete-by-id")
|
||||
.header("sessionId", sessionId)
|
||||
.params(paramsMap))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
|
||||
.andReturn();
|
||||
Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue());
|
||||
logger.info(mvcResult.getResponse().getContentAsString());
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* 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.enums;
|
||||
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class ExecuteTypeTest {
|
||||
|
||||
@Test
|
||||
public void testGetEnum() {
|
||||
assertEquals(ExecuteType.REPEAT_RUNNING, ExecuteType.getEnum(1));
|
||||
assertEquals(ExecuteType.RECOVER_SUSPENDED_PROCESS, ExecuteType.getEnum(2));
|
||||
assertEquals(ExecuteType.START_FAILURE_TASK_PROCESS, ExecuteType.getEnum(3));
|
||||
assertEquals(ExecuteType.STOP, ExecuteType.getEnum(4));
|
||||
assertEquals(ExecuteType.PAUSE, ExecuteType.getEnum(5));
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* 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.enums;
|
||||
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
public class StatusTest {
|
||||
|
||||
@Test
|
||||
public void testGetCode() {
|
||||
assertEquals(Status.SUCCESS.getCode(), 0);
|
||||
assertNotEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR.getCode(), 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetMsg() {
|
||||
assertEquals("success", Status.SUCCESS.getMsg());
|
||||
}
|
||||
}
|
@ -611,5 +611,10 @@
|
||||
<version>${lombok.version}</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@ -139,42 +139,50 @@ public final class Constants {
|
||||
/**
|
||||
* MasterServer directory registered in zookeeper
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_MASTERS = "zookeeper.dolphinscheduler.masters";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_MASTERS = "zookeeper.dolphinscheduler.masters";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_MASTERS = "/masters";
|
||||
|
||||
/**
|
||||
* WorkerServer directory registered in zookeeper
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_WORKERS = "zookeeper.dolphinscheduler.workers";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_WORKERS = "zookeeper.dolphinscheduler.workers";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_WORKERS = "/workers";
|
||||
|
||||
/**
|
||||
* all servers directory registered in zookeeper
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_DEAD_SERVERS = "zookeeper.dolphinscheduler.dead.servers";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_DEAD_SERVERS = "zookeeper.dolphinscheduler.dead.servers";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_DEAD_SERVERS = "/dead-servers";
|
||||
|
||||
/**
|
||||
* MasterServer lock directory registered in zookeeper
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_MASTERS = "zookeeper.dolphinscheduler.lock.masters";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_MASTERS = "zookeeper.dolphinscheduler.lock.masters";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_MASTERS = "/lock/masters";
|
||||
|
||||
/**
|
||||
* WorkerServer lock directory registered in zookeeper
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_WORKERS = "zookeeper.dolphinscheduler.lock.workers";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_WORKERS = "zookeeper.dolphinscheduler.lock.workers";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_WORKERS = "/lock/workers";
|
||||
|
||||
/**
|
||||
* MasterServer failover directory registered in zookeeper
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_MASTERS = "zookeeper.dolphinscheduler.lock.failover.masters";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_MASTERS = "zookeeper.dolphinscheduler.lock.failover.masters";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_MASTERS = "/lock/failover/masters";
|
||||
|
||||
/**
|
||||
* WorkerServer failover directory registered in zookeeper
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_WORKERS = "zookeeper.dolphinscheduler.lock.failover.workers";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_WORKERS = "zookeeper.dolphinscheduler.lock.failover.workers";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_WORKERS = "/lock/failover/workers";
|
||||
|
||||
/**
|
||||
* MasterServer startup failover runing and fault tolerance process
|
||||
*/
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_STARTUP_MASTERS = "zookeeper.dolphinscheduler.lock.failover.startup.masters";
|
||||
//public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_STARTUP_MASTERS = "zookeeper.dolphinscheduler.lock.failover.startup.masters";
|
||||
public static final String ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_STARTUP_MASTERS = "/lock/failover/startup-masters";
|
||||
|
||||
/**
|
||||
* need send warn times when master server or worker server failover
|
||||
@ -997,4 +1005,10 @@ public final class Constants {
|
||||
public static final String CLASS = "class";
|
||||
public static final String RECEIVERS = "receivers";
|
||||
public static final String RECEIVERS_CC = "receiversCc";
|
||||
|
||||
|
||||
/**
|
||||
* dataSource sensitive param
|
||||
*/
|
||||
public static final String DATASOURCE_PASSWORD_REGEX = "(?<=(\"password\":\")).*?(?=(\"))";
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ public enum CommandType {
|
||||
REPEAT_RUNNING(7, "repeat running a process"),
|
||||
PAUSE(8, "pause a process"),
|
||||
STOP(9, "stop a process"),
|
||||
RECOVER_WAITTING_THREAD(10, "recover waitting thread");
|
||||
RECOVER_WAITTING_THREAD(10, "recover waiting thread");
|
||||
|
||||
CommandType(int code, String descp){
|
||||
this.code = code;
|
||||
|
@ -21,7 +21,7 @@ import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* runing status for workflow and task nodes
|
||||
* running status for workflow and task nodes
|
||||
*
|
||||
*/
|
||||
@Getter
|
||||
|
@ -25,7 +25,7 @@ public enum TaskRecordStatus {
|
||||
|
||||
/**
|
||||
* status:
|
||||
* 0 sucess
|
||||
* 0 success
|
||||
* 1 failure
|
||||
* 2 exception
|
||||
*/
|
||||
|
@ -40,7 +40,7 @@ public class Server {
|
||||
private int port;
|
||||
|
||||
/**
|
||||
* master direcotry in zookeeper
|
||||
* master directory in zookeeper
|
||||
*/
|
||||
private String zkDirectory;
|
||||
|
||||
|
@ -17,36 +17,43 @@
|
||||
package org.apache.dolphinscheduler.common.queue;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
import org.apache.commons.configuration.ConfigurationException;
|
||||
import org.apache.commons.configuration.PropertiesConfiguration;
|
||||
import org.apache.curator.framework.CuratorFramework;
|
||||
import org.apache.curator.framework.CuratorFrameworkFactory;
|
||||
import org.apache.curator.retry.ExponentialBackoffRetry;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.common.utils.Bytes;
|
||||
import org.apache.dolphinscheduler.common.utils.IpUtils;
|
||||
import org.apache.dolphinscheduler.common.utils.OSUtils;
|
||||
import org.apache.dolphinscheduler.common.zk.AbstractZKClient;
|
||||
import org.apache.curator.framework.CuratorFramework;
|
||||
import org.apache.dolphinscheduler.common.zk.DefaultEnsembleProvider;
|
||||
import org.apache.dolphinscheduler.common.zk.ZookeeperConfig;
|
||||
import org.apache.zookeeper.CreateMode;
|
||||
import org.apache.zookeeper.data.Stat;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* A singleton of a task queue implemented with zookeeper
|
||||
* tasks queue implemention
|
||||
*/
|
||||
public class TaskQueueZkImpl extends AbstractZKClient implements ITaskQueue {
|
||||
public class TaskQueueZkImpl implements ITaskQueue {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(TaskQueueZkImpl.class);
|
||||
|
||||
private static volatile TaskQueueZkImpl instance;
|
||||
|
||||
private CuratorFramework zkClient;
|
||||
|
||||
private ZookeeperConfig zookeeperConfig;
|
||||
|
||||
private CuratorFramework getZkClient() {
|
||||
return zkClient;
|
||||
}
|
||||
|
||||
private TaskQueueZkImpl(){
|
||||
init();
|
||||
}
|
||||
@ -376,6 +383,7 @@ public class TaskQueueZkImpl extends AbstractZKClient implements ITaskQueue {
|
||||
* Init the task queue of zookeeper node
|
||||
*/
|
||||
private void init(){
|
||||
initZkClient();
|
||||
try {
|
||||
String tasksQueuePath = getTasksPath(Constants.DOLPHINSCHEDULER_TASKS_QUEUE);
|
||||
String tasksCancelPath = getTasksPath(Constants.DOLPHINSCHEDULER_TASKS_KILL);
|
||||
@ -394,6 +402,30 @@ public class TaskQueueZkImpl extends AbstractZKClient implements ITaskQueue {
|
||||
}
|
||||
}
|
||||
|
||||
private void initZkClient() {
|
||||
|
||||
Configuration conf = null;
|
||||
try {
|
||||
conf = new PropertiesConfiguration(Constants.ZOOKEEPER_PROPERTIES_PATH);
|
||||
} catch (ConfigurationException ex) {
|
||||
logger.error("load zookeeper properties file failed, system exit");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
zkClient = CuratorFrameworkFactory.builder().ensembleProvider(new DefaultEnsembleProvider(conf.getString("zookeeper.quorum")))
|
||||
.retryPolicy(new ExponentialBackoffRetry(conf.getInt("zookeeper.retry.base.sleep"), conf.getInt("zookeeper.retry.maxtime"), conf.getInt("zookeeper.retry.max.sleep")))
|
||||
.sessionTimeoutMs(conf.getInt("zookeeper.session.timeout"))
|
||||
.connectionTimeoutMs(conf.getInt("zookeeper.connection.timeout"))
|
||||
.build();
|
||||
|
||||
zkClient.start();
|
||||
try {
|
||||
zkClient.blockUntilConnected();
|
||||
} catch (final Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clear the task queue of zookeeper node
|
||||
@ -429,8 +461,7 @@ public class TaskQueueZkImpl extends AbstractZKClient implements ITaskQueue {
|
||||
* @return
|
||||
*/
|
||||
public String getTasksPath(String key){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_ROOT) + Constants.SINGLE_SLASH + key;
|
||||
return "/dolphinscheduler" + Constants.SINGLE_SLASH + key;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -152,7 +152,7 @@ public class FileUtils {
|
||||
}
|
||||
bufferedReader = new BufferedReader(new StringReader(content));
|
||||
bufferedWriter = new BufferedWriter(new FileWriter(distFile));
|
||||
char buf[] = new char[1024];
|
||||
char[] buf = new char[1024];
|
||||
int len;
|
||||
while ((len = bufferedReader.read(buf)) != -1) {
|
||||
bufferedWriter.write(buf, 0, len);
|
||||
@ -320,7 +320,7 @@ public class FileUtils {
|
||||
if (file.isDirectory()) {
|
||||
throw new IOException("File '" + file + "' exists but is a directory");
|
||||
}
|
||||
if (file.canWrite() == false) {
|
||||
if (!file.canWrite()) {
|
||||
throw new IOException("File '" + file + "' cannot be written to");
|
||||
}
|
||||
} else {
|
||||
@ -377,41 +377,24 @@ public class FileUtils {
|
||||
throw new RuntimeException("parentDir not exist, or is not a directory:"+parentDir);
|
||||
}
|
||||
|
||||
File[] schemaDirs = file.listFiles(new FileFilter() {
|
||||
|
||||
@Override
|
||||
public boolean accept(File pathname) {
|
||||
if (pathname.isDirectory()) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return schemaDirs;
|
||||
return file.listFiles(File::isDirectory);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Content
|
||||
* @param inputStream input stream
|
||||
* @return string of input stream
|
||||
* @throws IOException errors
|
||||
*/
|
||||
public static String readFile2Str(InputStream inputStream) throws IOException{
|
||||
String all_content=null;
|
||||
public static String readFile2Str(InputStream inputStream) {
|
||||
|
||||
try {
|
||||
all_content = new String();
|
||||
InputStream ins = inputStream;
|
||||
ByteArrayOutputStream outputstream = new ByteArrayOutputStream();
|
||||
byte[] str_b = new byte[1024];
|
||||
int i = -1;
|
||||
while ((i=ins.read(str_b)) > 0) {
|
||||
outputstream.write(str_b,0,i);
|
||||
ByteArrayOutputStream output = new ByteArrayOutputStream();
|
||||
byte[] buffer = new byte[1024];
|
||||
int length;
|
||||
while ((length= inputStream.read(buffer)) != -1) {
|
||||
output.write(buffer,0,length);
|
||||
}
|
||||
all_content = outputstream.toString();
|
||||
return all_content;
|
||||
return output.toString();
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(),e);
|
||||
throw new RuntimeException(e);
|
||||
|
@ -0,0 +1,288 @@
|
||||
/*
|
||||
* 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.utils;
|
||||
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
* A collection of static utility methods to validate input.
|
||||
*
|
||||
* <p>This class is modelled after Google Guava's Preconditions class, and partly takes code
|
||||
* from that class. We add this code to here base in order to reduce external
|
||||
* dependencies.
|
||||
*/
|
||||
public final class Preconditions {
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Null checks
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Ensures that the given object reference is not null.
|
||||
* Upon violation, a {@code NullPointerException} with no message is thrown.
|
||||
*
|
||||
* @param reference The object reference
|
||||
* @return The object reference itself (generically typed).
|
||||
*
|
||||
* @throws NullPointerException Thrown, if the passed reference was null.
|
||||
*/
|
||||
public static <T> T checkNotNull(T reference) {
|
||||
if (reference == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
return reference;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the given object reference is not null.
|
||||
* Upon violation, a {@code NullPointerException} with the given message is thrown.
|
||||
*
|
||||
* @param reference The object reference
|
||||
* @param errorMessage The message for the {@code NullPointerException} that is thrown if the check fails.
|
||||
* @return The object reference itself (generically typed).
|
||||
*
|
||||
* @throws NullPointerException Thrown, if the passed reference was null.
|
||||
*/
|
||||
public static <T> T checkNotNull(T reference, @Nullable String errorMessage) {
|
||||
if (reference == null) {
|
||||
throw new NullPointerException(String.valueOf(errorMessage));
|
||||
}
|
||||
return reference;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the given object reference is not null.
|
||||
* Upon violation, a {@code NullPointerException} with the given message is thrown.
|
||||
*
|
||||
* <p>The error message is constructed from a template and an arguments array, after
|
||||
* a similar fashion as {@link String#format(String, Object...)}, but supporting only
|
||||
* {@code %s} as a placeholder.
|
||||
*
|
||||
* @param reference The object reference
|
||||
* @param errorMessageTemplate The message template for the {@code NullPointerException}
|
||||
* that is thrown if the check fails. The template substitutes its
|
||||
* {@code %s} placeholders with the error message arguments.
|
||||
* @param errorMessageArgs The arguments for the error message, to be inserted into the
|
||||
* message template for the {@code %s} placeholders.
|
||||
*
|
||||
* @return The object reference itself (generically typed).
|
||||
*
|
||||
* @throws NullPointerException Thrown, if the passed reference was null.
|
||||
*/
|
||||
public static <T> T checkNotNull(T reference,
|
||||
@Nullable String errorMessageTemplate,
|
||||
@Nullable Object... errorMessageArgs) {
|
||||
|
||||
if (reference == null) {
|
||||
throw new NullPointerException(format(errorMessageTemplate, errorMessageArgs));
|
||||
}
|
||||
return reference;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Boolean Condition Checking (Argument)
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Checks the given boolean condition, and throws an {@code IllegalArgumentException} if
|
||||
* the condition is not met (evaluates to {@code false}).
|
||||
*
|
||||
* @param condition The condition to check
|
||||
*
|
||||
* @throws IllegalArgumentException Thrown, if the condition is violated.
|
||||
*/
|
||||
public static void checkArgument(boolean condition) {
|
||||
if (!condition) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the given boolean condition, and throws an {@code IllegalArgumentException} if
|
||||
* the condition is not met (evaluates to {@code false}). The exception will have the
|
||||
* given error message.
|
||||
*
|
||||
* @param condition The condition to check
|
||||
* @param errorMessage The message for the {@code IllegalArgumentException} that is thrown if the check fails.
|
||||
*
|
||||
* @throws IllegalArgumentException Thrown, if the condition is violated.
|
||||
*/
|
||||
public static void checkArgument(boolean condition, @Nullable Object errorMessage) {
|
||||
if (!condition) {
|
||||
throw new IllegalArgumentException(String.valueOf(errorMessage));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the given boolean condition, and throws an {@code IllegalArgumentException} if
|
||||
* the condition is not met (evaluates to {@code false}).
|
||||
*
|
||||
* @param condition The condition to check
|
||||
* @param errorMessageTemplate The message template for the {@code IllegalArgumentException}
|
||||
* that is thrown if the check fails. The template substitutes its
|
||||
* {@code %s} placeholders with the error message arguments.
|
||||
* @param errorMessageArgs The arguments for the error message, to be inserted into the
|
||||
* message template for the {@code %s} placeholders.
|
||||
*
|
||||
* @throws IllegalArgumentException Thrown, if the condition is violated.
|
||||
*/
|
||||
public static void checkArgument(boolean condition,
|
||||
@Nullable String errorMessageTemplate,
|
||||
@Nullable Object... errorMessageArgs) {
|
||||
|
||||
if (!condition) {
|
||||
throw new IllegalArgumentException(format(errorMessageTemplate, errorMessageArgs));
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Boolean Condition Checking (State)
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Checks the given boolean condition, and throws an {@code IllegalStateException} if
|
||||
* the condition is not met (evaluates to {@code false}).
|
||||
*
|
||||
* @param condition The condition to check
|
||||
*
|
||||
* @throws IllegalStateException Thrown, if the condition is violated.
|
||||
*/
|
||||
public static void checkState(boolean condition) {
|
||||
if (!condition) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the given boolean condition, and throws an {@code IllegalStateException} if
|
||||
* the condition is not met (evaluates to {@code false}). The exception will have the
|
||||
* given error message.
|
||||
*
|
||||
* @param condition The condition to check
|
||||
* @param errorMessage The message for the {@code IllegalStateException} that is thrown if the check fails.
|
||||
*
|
||||
* @throws IllegalStateException Thrown, if the condition is violated.
|
||||
*/
|
||||
public static void checkState(boolean condition, @Nullable Object errorMessage) {
|
||||
if (!condition) {
|
||||
throw new IllegalStateException(String.valueOf(errorMessage));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks the given boolean condition, and throws an {@code IllegalStateException} if
|
||||
* the condition is not met (evaluates to {@code false}).
|
||||
*
|
||||
* @param condition The condition to check
|
||||
* @param errorMessageTemplate The message template for the {@code IllegalStateException}
|
||||
* that is thrown if the check fails. The template substitutes its
|
||||
* {@code %s} placeholders with the error message arguments.
|
||||
* @param errorMessageArgs The arguments for the error message, to be inserted into the
|
||||
* message template for the {@code %s} placeholders.
|
||||
*
|
||||
* @throws IllegalStateException Thrown, if the condition is violated.
|
||||
*/
|
||||
public static void checkState(boolean condition,
|
||||
@Nullable String errorMessageTemplate,
|
||||
@Nullable Object... errorMessageArgs) {
|
||||
|
||||
if (!condition) {
|
||||
throw new IllegalStateException(format(errorMessageTemplate, errorMessageArgs));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the given index is valid for an array, list or string of the given size.
|
||||
*
|
||||
* @param index index to check
|
||||
* @param size size of the array, list or string
|
||||
*
|
||||
* @throws IllegalArgumentException Thrown, if size is negative.
|
||||
* @throws IndexOutOfBoundsException Thrown, if the index negative or greater than or equal to size
|
||||
*/
|
||||
public static void checkElementIndex(int index, int size) {
|
||||
checkArgument(size >= 0, "Size was negative.");
|
||||
if (index < 0 || index >= size) {
|
||||
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that the given index is valid for an array, list or string of the given size.
|
||||
*
|
||||
* @param index index to check
|
||||
* @param size size of the array, list or string
|
||||
* @param errorMessage The message for the {@code IndexOutOfBoundsException} that is thrown if the check fails.
|
||||
*
|
||||
* @throws IllegalArgumentException Thrown, if size is negative.
|
||||
* @throws IndexOutOfBoundsException Thrown, if the index negative or greater than or equal to size
|
||||
*/
|
||||
public static void checkElementIndex(int index, int size, @Nullable String errorMessage) {
|
||||
checkArgument(size >= 0, "Size was negative.");
|
||||
if (index < 0 || index >= size) {
|
||||
throw new IndexOutOfBoundsException(String.valueOf(errorMessage) + " Index: " + index + ", Size: " + size);
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Utilities
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* A simplified formatting method. Similar to {@link String#format(String, Object...)}, but
|
||||
* with lower overhead (only String parameters, no locale, no format validation).
|
||||
*
|
||||
* <p>This method is taken quasi verbatim from the Guava Preconditions class.
|
||||
*/
|
||||
private static String format(@Nullable String template, @Nullable Object... args) {
|
||||
final int numArgs = args == null ? 0 : args.length;
|
||||
template = String.valueOf(template); // null -> "null"
|
||||
|
||||
// start substituting the arguments into the '%s' placeholders
|
||||
StringBuilder builder = new StringBuilder(template.length() + 16 * numArgs);
|
||||
int templateStart = 0;
|
||||
int i = 0;
|
||||
while (i < numArgs) {
|
||||
int placeholderStart = template.indexOf("%s", templateStart);
|
||||
if (placeholderStart == -1) {
|
||||
break;
|
||||
}
|
||||
builder.append(template.substring(templateStart, placeholderStart));
|
||||
builder.append(args[i++]);
|
||||
templateStart = placeholderStart + 2;
|
||||
}
|
||||
builder.append(template.substring(templateStart));
|
||||
|
||||
// if we run out of placeholders, append the extra args in square braces
|
||||
if (i < numArgs) {
|
||||
builder.append(" [");
|
||||
builder.append(args[i++]);
|
||||
while (i < numArgs) {
|
||||
builder.append(", ");
|
||||
builder.append(args[i++]);
|
||||
}
|
||||
builder.append(']');
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
/** Private constructor to prevent instantiation. */
|
||||
private Preconditions() {}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
/*
|
||||
* 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.zk;
|
||||
|
||||
import org.apache.curator.framework.CuratorFramework;
|
||||
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
|
||||
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
|
||||
|
||||
public abstract class AbstractListener implements TreeCacheListener {
|
||||
|
||||
@Override
|
||||
public final void childEvent(final CuratorFramework client, final TreeCacheEvent event) throws Exception {
|
||||
String path = null == event.getData() ? "" : event.getData().getPath();
|
||||
if (path.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
dataChanged(client, event, path);
|
||||
}
|
||||
|
||||
protected abstract void dataChanged(final CuratorFramework client, final TreeCacheEvent event, final String path);
|
||||
}
|
@ -47,98 +47,15 @@ import static org.apache.dolphinscheduler.common.Constants.*;
|
||||
/**
|
||||
* abstract zookeeper client
|
||||
*/
|
||||
public abstract class AbstractZKClient {
|
||||
public abstract class AbstractZKClient extends ZookeeperCachedOperator{
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(AbstractZKClient.class);
|
||||
|
||||
/**
|
||||
* load configuration file
|
||||
*/
|
||||
protected static Configuration conf;
|
||||
|
||||
protected CuratorFramework zkClient = null;
|
||||
|
||||
/**
|
||||
* server stop or not
|
||||
*/
|
||||
protected IStoppable stoppable = null;
|
||||
|
||||
|
||||
static {
|
||||
try {
|
||||
conf = new PropertiesConfiguration(Constants.ZOOKEEPER_PROPERTIES_PATH);
|
||||
}catch (ConfigurationException e){
|
||||
logger.error("load configuration failed : " + e.getMessage(),e);
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public AbstractZKClient() {
|
||||
|
||||
// retry strategy
|
||||
RetryPolicy retryPolicy = new ExponentialBackoffRetry(
|
||||
conf.getInt(Constants.ZOOKEEPER_RETRY_SLEEP),
|
||||
conf.getInt(Constants.ZOOKEEPER_RETRY_MAXTIME));
|
||||
|
||||
try{
|
||||
// crate zookeeper client
|
||||
zkClient = CuratorFrameworkFactory.builder()
|
||||
.connectString(getZookeeperQuorum())
|
||||
.retryPolicy(retryPolicy)
|
||||
.sessionTimeoutMs(1000 * conf.getInt(Constants.ZOOKEEPER_SESSION_TIMEOUT))
|
||||
.connectionTimeoutMs(1000 * conf.getInt(Constants.ZOOKEEPER_CONNECTION_TIMEOUT))
|
||||
.build();
|
||||
|
||||
zkClient.start();
|
||||
initStateLister();
|
||||
|
||||
}catch(Exception e){
|
||||
logger.error("create zookeeper connect failed : " + e.getMessage(),e);
|
||||
System.exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* register status monitoring events for zookeeper clients
|
||||
*/
|
||||
public void initStateLister(){
|
||||
if(zkClient == null) {
|
||||
return;
|
||||
}
|
||||
// add ConnectionStateListener monitoring zookeeper connection state
|
||||
ConnectionStateListener csLister = new ConnectionStateListener() {
|
||||
|
||||
@Override
|
||||
public void stateChanged(CuratorFramework client, ConnectionState newState) {
|
||||
logger.info("state changed , current state : " + newState.name());
|
||||
/**
|
||||
* probably session expired
|
||||
*/
|
||||
if(newState == ConnectionState.LOST){
|
||||
// if lost , then exit
|
||||
logger.info("current zookeepr connection state : connection lost ");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
zkClient.getConnectionStateListenable().addListener(csLister);
|
||||
}
|
||||
|
||||
|
||||
public void start() {
|
||||
zkClient.start();
|
||||
logger.info("zookeeper start ...");
|
||||
}
|
||||
|
||||
public void close() {
|
||||
zkClient.getZookeeperClient().close();
|
||||
zkClient.close();
|
||||
logger.info("zookeeper close ...");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* heartbeat for zookeeper
|
||||
* @param znode zookeeper node
|
||||
@ -328,18 +245,8 @@ public abstract class AbstractZKClient {
|
||||
*
|
||||
* @return zookeeper quorum
|
||||
*/
|
||||
public static String getZookeeperQuorum(){
|
||||
StringBuilder sb = new StringBuilder();
|
||||
String[] zookeeperParamslist = conf.getStringArray(Constants.ZOOKEEPER_QUORUM);
|
||||
for (String param : zookeeperParamslist) {
|
||||
sb.append(param).append(Constants.COMMA);
|
||||
}
|
||||
|
||||
if(sb.length() > 0){
|
||||
sb.deleteCharAt(sb.length() - 1);
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
public String getZookeeperQuorum(){
|
||||
return getZookeeperConfig().getServerList();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -420,7 +327,7 @@ public abstract class AbstractZKClient {
|
||||
* @return get worker node parent path
|
||||
*/
|
||||
protected String getWorkerZNodeParentPath(){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_WORKERS);
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_WORKERS;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -428,7 +335,7 @@ public abstract class AbstractZKClient {
|
||||
* @return get master node parent path
|
||||
*/
|
||||
protected String getMasterZNodeParentPath(){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_MASTERS);
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_MASTERS;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -436,7 +343,15 @@ public abstract class AbstractZKClient {
|
||||
* @return get master lock path
|
||||
*/
|
||||
public String getMasterLockPath(){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_MASTERS);
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_MASTERS;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return get master lock path
|
||||
*/
|
||||
public String getWorkerLockPath(){
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_WORKERS;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -464,7 +379,7 @@ public abstract class AbstractZKClient {
|
||||
* @return get dead server node parent path
|
||||
*/
|
||||
protected String getDeadZNodeParentPath(){
|
||||
return conf.getString(ZOOKEEPER_DOLPHINSCHEDULER_DEAD_SERVERS);
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_DEAD_SERVERS;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -472,7 +387,7 @@ public abstract class AbstractZKClient {
|
||||
* @return get master start up lock path
|
||||
*/
|
||||
public String getMasterStartUpLockPath(){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_STARTUP_MASTERS);
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_STARTUP_MASTERS;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -480,7 +395,7 @@ public abstract class AbstractZKClient {
|
||||
* @return get master failover lock path
|
||||
*/
|
||||
public String getMasterFailoverLockPath(){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_MASTERS);
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_MASTERS;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -488,7 +403,7 @@ public abstract class AbstractZKClient {
|
||||
* @return get worker failover lock path
|
||||
*/
|
||||
public String getWorkerFailoverLockPath(){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_WORKERS);
|
||||
return getZookeeperConfig().getDsRoot() + Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_FAILOVER_WORKERS;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -546,7 +461,7 @@ public abstract class AbstractZKClient {
|
||||
if (serverHost.equals(OSUtils.getHost())) {
|
||||
logger.error("{} server({}) of myself dead , stopping...",
|
||||
zkNodeType.toString(), serverHost);
|
||||
stoppable.stop(String.format(" {} server {} of myself dead , stopping...",
|
||||
stoppable.stop(String.format(" %s server %s of myself dead , stopping...",
|
||||
zkNodeType.toString(), serverHost));
|
||||
return true;
|
||||
}
|
||||
|
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* 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.zk;
|
||||
|
||||
import org.apache.curator.ensemble.EnsembleProvider;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* default conf provider
|
||||
*/
|
||||
public class DefaultEnsembleProvider implements EnsembleProvider {
|
||||
|
||||
private final String serverList;
|
||||
|
||||
public DefaultEnsembleProvider(String serverList){
|
||||
this.serverList = serverList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() throws Exception {
|
||||
//NOP
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getConnectionString() {
|
||||
return serverList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
//NOP
|
||||
}
|
||||
}
|
@ -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.common.zk;
|
||||
|
||||
import org.apache.curator.framework.recipes.cache.ChildData;
|
||||
import org.apache.curator.framework.recipes.cache.TreeCache;
|
||||
import org.apache.curator.framework.recipes.cache.TreeCacheListener;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import static org.apache.dolphinscheduler.common.utils.Preconditions.*;
|
||||
import static org.apache.dolphinscheduler.common.utils.Preconditions.checkNotNull;
|
||||
|
||||
@Component
|
||||
public class ZookeeperCachedOperator extends ZookeeperOperator {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ZookeeperCachedOperator.class);
|
||||
|
||||
//kay is zk path, value is TreeCache
|
||||
private ConcurrentHashMap<String, TreeCache> allCaches = new ConcurrentHashMap<>();
|
||||
|
||||
/**
|
||||
* @param cachePath zk path
|
||||
* @param listener operator
|
||||
*/
|
||||
public void registerListener(final String cachePath, final TreeCacheListener listener) {
|
||||
TreeCache newCache = new TreeCache(zkClient, cachePath);
|
||||
logger.info("add listener to zk path: {}", cachePath);
|
||||
try {
|
||||
newCache.start();
|
||||
} catch (Exception e) {
|
||||
logger.error("add listener to zk path: {} failed", cachePath);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
newCache.getListenable().addListener(listener);
|
||||
|
||||
allCaches.put(cachePath, newCache);
|
||||
}
|
||||
|
||||
public String getFromCache(final String cachePath, final String key) {
|
||||
ChildData resultInCache = allCaches.get(checkNotNull(cachePath)).getCurrentData(key);
|
||||
if (null != resultInCache) {
|
||||
return null == resultInCache.getData() ? null : new String(resultInCache.getData(), StandardCharsets.UTF_8);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public TreeCache getTreeCache(final String cachePath) {
|
||||
return allCaches.get(checkNotNull(cachePath));
|
||||
}
|
||||
|
||||
public void close() {
|
||||
|
||||
allCaches.forEach((path, cache) -> {
|
||||
cache.close();
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException ignore) {
|
||||
}
|
||||
});
|
||||
super.close();
|
||||
}
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
/*
|
||||
* 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.zk;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* zookeeper conf
|
||||
*/
|
||||
@Component
|
||||
@PropertySource("classpath:zookeeper.properties")
|
||||
public class ZookeeperConfig {
|
||||
|
||||
//zk connect config
|
||||
@Value("${zookeeper.quorum}")
|
||||
private String serverList;
|
||||
|
||||
@Value("${zookeeper.retry.base.sleep:100}")
|
||||
private int baseSleepTimeMs;
|
||||
|
||||
@Value("${zookeeper.retry.max.sleep:30000}")
|
||||
private int maxSleepMs;
|
||||
|
||||
@Value("${zookeeper.retry.maxtime:10}")
|
||||
private int maxRetries;
|
||||
|
||||
@Value("${zookeeper.session.timeout:60000}")
|
||||
private int sessionTimeoutMs;
|
||||
|
||||
@Value("${zookeeper.connection.timeout:30000}")
|
||||
private int connectionTimeoutMs;
|
||||
|
||||
@Value("${zookeeper.connection.digest: }")
|
||||
private String digest;
|
||||
|
||||
@Value("${zookeeper.dolphinscheduler.root:/dolphinscheduler}")
|
||||
private String dsRoot;
|
||||
|
||||
public String getServerList() {
|
||||
return serverList;
|
||||
}
|
||||
|
||||
public void setServerList(String serverList) {
|
||||
this.serverList = serverList;
|
||||
}
|
||||
|
||||
public int getBaseSleepTimeMs() {
|
||||
return baseSleepTimeMs;
|
||||
}
|
||||
|
||||
public void setBaseSleepTimeMs(int baseSleepTimeMs) {
|
||||
this.baseSleepTimeMs = baseSleepTimeMs;
|
||||
}
|
||||
|
||||
public int getMaxSleepMs() {
|
||||
return maxSleepMs;
|
||||
}
|
||||
|
||||
public void setMaxSleepMs(int maxSleepMs) {
|
||||
this.maxSleepMs = maxSleepMs;
|
||||
}
|
||||
|
||||
public int getMaxRetries() {
|
||||
return maxRetries;
|
||||
}
|
||||
|
||||
public void setMaxRetries(int maxRetries) {
|
||||
this.maxRetries = maxRetries;
|
||||
}
|
||||
|
||||
public int getSessionTimeoutMs() {
|
||||
return sessionTimeoutMs;
|
||||
}
|
||||
|
||||
public void setSessionTimeoutMs(int sessionTimeoutMs) {
|
||||
this.sessionTimeoutMs = sessionTimeoutMs;
|
||||
}
|
||||
|
||||
public int getConnectionTimeoutMs() {
|
||||
return connectionTimeoutMs;
|
||||
}
|
||||
|
||||
public void setConnectionTimeoutMs(int connectionTimeoutMs) {
|
||||
this.connectionTimeoutMs = connectionTimeoutMs;
|
||||
}
|
||||
|
||||
public String getDigest() {
|
||||
return digest;
|
||||
}
|
||||
|
||||
public void setDigest(String digest) {
|
||||
this.digest = digest;
|
||||
}
|
||||
|
||||
public String getDsRoot() {
|
||||
return dsRoot;
|
||||
}
|
||||
|
||||
public void setDsRoot(String dsRoot) {
|
||||
this.dsRoot = dsRoot;
|
||||
}
|
||||
}
|
@ -0,0 +1,232 @@
|
||||
/*
|
||||
* 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.zk;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.curator.framework.CuratorFramework;
|
||||
import org.apache.curator.framework.CuratorFrameworkFactory;
|
||||
import org.apache.curator.framework.api.ACLProvider;
|
||||
import org.apache.curator.framework.state.ConnectionState;
|
||||
import org.apache.curator.retry.ExponentialBackoffRetry;
|
||||
import org.apache.curator.utils.CloseableUtils;
|
||||
import org.apache.zookeeper.CreateMode;
|
||||
import org.apache.zookeeper.KeeperException;
|
||||
import org.apache.zookeeper.ZooDefs;
|
||||
import org.apache.zookeeper.data.ACL;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
import static org.apache.dolphinscheduler.common.utils.Preconditions.*;
|
||||
import static org.apache.dolphinscheduler.common.utils.Preconditions.checkNotNull;
|
||||
|
||||
/**
|
||||
* zk base operator
|
||||
*/
|
||||
@Component
|
||||
public class ZookeeperOperator implements InitializingBean {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(ZookeeperOperator.class);
|
||||
|
||||
@Autowired
|
||||
private ZookeeperConfig zookeeperConfig;
|
||||
|
||||
protected CuratorFramework zkClient;
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
this.zkClient = buildClient();
|
||||
initStateLister();
|
||||
//init();
|
||||
}
|
||||
|
||||
//for subclass
|
||||
//protected void init(){}
|
||||
|
||||
public void initStateLister() {
|
||||
checkNotNull(zkClient);
|
||||
|
||||
zkClient.getConnectionStateListenable().addListener((client, newState) -> {
|
||||
if(newState == ConnectionState.LOST){
|
||||
logger.error("connection lost from zookeeper");
|
||||
} else if(newState == ConnectionState.RECONNECTED){
|
||||
logger.info("reconnected to zookeeper");
|
||||
} else if(newState == ConnectionState.SUSPENDED){
|
||||
logger.warn("connection SUSPENDED to zookeeper");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private CuratorFramework buildClient() {
|
||||
logger.info("zookeeper registry center init, server lists is: {}.", zookeeperConfig.getServerList());
|
||||
|
||||
CuratorFrameworkFactory.Builder builder = CuratorFrameworkFactory.builder().ensembleProvider(new DefaultEnsembleProvider(checkNotNull(zookeeperConfig.getServerList(),"zookeeper quorum can't be null")))
|
||||
.retryPolicy(new ExponentialBackoffRetry(zookeeperConfig.getBaseSleepTimeMs(), zookeeperConfig.getMaxRetries(), zookeeperConfig.getMaxSleepMs()));
|
||||
|
||||
//these has default value
|
||||
if (0 != zookeeperConfig.getSessionTimeoutMs()) {
|
||||
builder.sessionTimeoutMs(zookeeperConfig.getSessionTimeoutMs());
|
||||
}
|
||||
if (0 != zookeeperConfig.getConnectionTimeoutMs()) {
|
||||
builder.connectionTimeoutMs(zookeeperConfig.getConnectionTimeoutMs());
|
||||
}
|
||||
if (StringUtils.isNotBlank(zookeeperConfig.getDigest())) {
|
||||
builder.authorization("digest", zookeeperConfig.getDigest().getBytes(StandardCharsets.UTF_8)).aclProvider(new ACLProvider() {
|
||||
|
||||
@Override
|
||||
public List<ACL> getDefaultAcl() {
|
||||
return ZooDefs.Ids.CREATOR_ALL_ACL;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ACL> getAclForPath(final String path) {
|
||||
return ZooDefs.Ids.CREATOR_ALL_ACL;
|
||||
}
|
||||
});
|
||||
}
|
||||
zkClient = builder.build();
|
||||
zkClient.start();
|
||||
try {
|
||||
zkClient.blockUntilConnected();
|
||||
} catch (final Exception ex) {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
return zkClient;
|
||||
}
|
||||
|
||||
public String get(final String key) {
|
||||
try {
|
||||
return new String(zkClient.getData().forPath(key), StandardCharsets.UTF_8);
|
||||
} catch (Exception ex) {
|
||||
logger.error("get key : {}", key, ex);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<String> getChildrenKeys(final String key) {
|
||||
List<String> values;
|
||||
try {
|
||||
values = zkClient.getChildren().forPath(key);
|
||||
if (CollectionUtils.isEmpty(values)) {
|
||||
logger.warn("getChildrenKeys key : {} is empty", key);
|
||||
}
|
||||
return values;
|
||||
} catch (InterruptedException ex) {
|
||||
logger.error("getChildrenKeys key : {} InterruptedException", key);
|
||||
throw new IllegalStateException(ex);
|
||||
} catch (Exception ex) {
|
||||
logger.error("getChildrenKeys key : {}", key, ex);
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isExisted(final String key) {
|
||||
try {
|
||||
return zkClient.checkExists().forPath(key) != null;
|
||||
} catch (Exception ex) {
|
||||
logger.error("isExisted key : {}", key, ex);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void persist(final String key, final String value) {
|
||||
try {
|
||||
if (!isExisted(key)) {
|
||||
zkClient.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT).forPath(key, value.getBytes(StandardCharsets.UTF_8));
|
||||
} else {
|
||||
update(key, value);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
logger.error("persist key : {} , value : {}", key, value, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void update(final String key, final String value) {
|
||||
try {
|
||||
zkClient.inTransaction().check().forPath(key).and().setData().forPath(key, value.getBytes(StandardCharsets.UTF_8)).and().commit();
|
||||
} catch (Exception ex) {
|
||||
logger.error("update key : {} , value : {}", key, value, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void persistEphemeral(final String key, final String value) {
|
||||
try {
|
||||
if (isExisted(key)) {
|
||||
try {
|
||||
zkClient.delete().deletingChildrenIfNeeded().forPath(key);
|
||||
} catch (KeeperException.NoNodeException ignore) {
|
||||
//NOP
|
||||
}
|
||||
}
|
||||
zkClient.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(key, value.getBytes(StandardCharsets.UTF_8));
|
||||
} catch (final Exception ex) {
|
||||
logger.error("persistEphemeral key : {} , value : {}", key, value, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void persistEphemeral(String key, String value, boolean overwrite) {
|
||||
try {
|
||||
if (overwrite) {
|
||||
persistEphemeral(key, value);
|
||||
} else {
|
||||
if (!isExisted(key)) {
|
||||
zkClient.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(key, value.getBytes(StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
} catch (final Exception ex) {
|
||||
logger.error("persistEphemeral key : {} , value : {}, overwrite : {}", key, value, overwrite, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void persistEphemeralSequential(final String key, String value) {
|
||||
try {
|
||||
zkClient.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL_SEQUENTIAL).forPath(key, value.getBytes(StandardCharsets.UTF_8));
|
||||
} catch (final Exception ex) {
|
||||
logger.error("persistEphemeralSequential key : {}", key, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public void remove(final String key) {
|
||||
try {
|
||||
if (isExisted(key)) {
|
||||
zkClient.delete().deletingChildrenIfNeeded().forPath(key);
|
||||
}
|
||||
} catch (KeeperException.NoNodeException ignore) {
|
||||
//NOP
|
||||
} catch (final Exception ex) {
|
||||
logger.error("remove key : {}", key, ex);
|
||||
}
|
||||
}
|
||||
|
||||
public CuratorFramework getZkClient() {
|
||||
return zkClient;
|
||||
}
|
||||
|
||||
public ZookeeperConfig getZookeeperConfig() {
|
||||
return zookeeperConfig;
|
||||
}
|
||||
|
||||
public void close() {
|
||||
CloseableUtils.closeQuietly(zkClient);
|
||||
}
|
||||
}
|
@ -22,21 +22,22 @@ zookeeper.quorum=localhost:2181
|
||||
zookeeper.dolphinscheduler.root=/dolphinscheduler
|
||||
|
||||
#zookeeper server dirctory
|
||||
zookeeper.dolphinscheduler.dead.servers=/dolphinscheduler/dead-servers
|
||||
zookeeper.dolphinscheduler.masters=/dolphinscheduler/masters
|
||||
zookeeper.dolphinscheduler.workers=/dolphinscheduler/workers
|
||||
#zookeeper.dolphinscheduler.dead.servers=/dolphinscheduler/dead-servers
|
||||
#zookeeper.dolphinscheduler.masters=/dolphinscheduler/masters
|
||||
#zookeeper.dolphinscheduler.workers=/dolphinscheduler/workers
|
||||
|
||||
#zookeeper lock dirctory
|
||||
zookeeper.dolphinscheduler.lock.masters=/dolphinscheduler/lock/masters
|
||||
zookeeper.dolphinscheduler.lock.workers=/dolphinscheduler/lock/workers
|
||||
#zookeeper.dolphinscheduler.lock.masters=/dolphinscheduler/lock/masters
|
||||
#zookeeper.dolphinscheduler.lock.workers=/dolphinscheduler/lock/workers
|
||||
|
||||
#dolphinscheduler failover directory
|
||||
zookeeper.dolphinscheduler.lock.failover.masters=/dolphinscheduler/lock/failover/masters
|
||||
zookeeper.dolphinscheduler.lock.failover.workers=/dolphinscheduler/lock/failover/workers
|
||||
zookeeper.dolphinscheduler.lock.failover.startup.masters=/dolphinscheduler/lock/failover/startup-masters
|
||||
#zookeeper.dolphinscheduler.lock.failover.masters=/dolphinscheduler/lock/failover/masters
|
||||
#zookeeper.dolphinscheduler.lock.failover.workers=/dolphinscheduler/lock/failover/workers
|
||||
#zookeeper.dolphinscheduler.lock.failover.startup.masters=/dolphinscheduler/lock/failover/startup-masters
|
||||
|
||||
#dolphinscheduler failover directory
|
||||
zookeeper.session.timeout=300
|
||||
zookeeper.connection.timeout=300
|
||||
zookeeper.retry.sleep=1000
|
||||
zookeeper.retry.base.sleep=100
|
||||
zookeeper.retry.max.sleep=30000
|
||||
zookeeper.retry.maxtime=5
|
@ -0,0 +1,130 @@
|
||||
/*
|
||||
* 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.utils;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import org.apache.commons.lang.time.DateUtils;
|
||||
import org.apache.dolphinscheduler.common.enums.CommandType;
|
||||
import org.apache.dolphinscheduler.common.enums.DataType;
|
||||
import org.apache.dolphinscheduler.common.enums.Direct;
|
||||
import org.apache.dolphinscheduler.common.process.Property;
|
||||
import org.apache.dolphinscheduler.common.utils.placeholder.PlaceholderUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import java.util.*;
|
||||
import static org.apache.dolphinscheduler.common.Constants.PARAMETER_FORMAT_TIME;
|
||||
import static org.apache.dolphinscheduler.common.utils.placeholder.TimePlaceholderUtils.replacePlaceholders;
|
||||
|
||||
|
||||
public class ParameterUtilsTest {
|
||||
public static final Logger logger = LoggerFactory.getLogger(ParameterUtilsTest.class);
|
||||
|
||||
/**
|
||||
* Test convertParameterPlaceholders
|
||||
*/
|
||||
@Test
|
||||
public void testConvertParameterPlaceholders() throws Exception {
|
||||
// parameterString,parameterMap is null
|
||||
Assert.assertNull(ParameterUtils.convertParameterPlaceholders(null, null));
|
||||
|
||||
// parameterString is null,parameterMap is not null
|
||||
Map<String, String> parameterMap = new HashMap<String,String>();
|
||||
parameterMap.put("testParameter","testParameter");
|
||||
Assert.assertNull(ParameterUtils.convertParameterPlaceholders(null, parameterMap));
|
||||
|
||||
// parameterString、parameterMap is not null
|
||||
String parameterString = "test_parameter";
|
||||
Assert.assertEquals(parameterString, ParameterUtils.convertParameterPlaceholders(parameterString, parameterMap));
|
||||
|
||||
//replace variable ${} form
|
||||
parameterMap.put("testParameter2","${testParameter}");
|
||||
Assert.assertEquals(parameterString,PlaceholderUtils.replacePlaceholders(parameterString, parameterMap, true));
|
||||
|
||||
// replace time $[...] form, eg. $[yyyyMMdd]
|
||||
Date cronTime = new Date();
|
||||
Assert.assertEquals(parameterString, replacePlaceholders(parameterString, cronTime, true));
|
||||
|
||||
// replace time $[...] form, eg. $[yyyyMMdd]
|
||||
Date cronTimeStr = DateUtils.parseDate("20191220145900", new String[]{PARAMETER_FORMAT_TIME});
|
||||
Assert.assertEquals(parameterString, replacePlaceholders(parameterString, cronTimeStr, true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test curingGlobalParams
|
||||
*/
|
||||
@Test
|
||||
public void testCuringGlobalParams() throws Exception {
|
||||
//define globalMap
|
||||
Map<String, String> globalParamMap = new HashMap<>();
|
||||
globalParamMap.put("globalParams1","Params1");
|
||||
|
||||
//define globalParamList
|
||||
List<Property> globalParamList = new ArrayList<>();
|
||||
|
||||
//define scheduleTime
|
||||
Date scheduleTime = DateUtils.parseDate("20191220145900", new String[]{PARAMETER_FORMAT_TIME});
|
||||
|
||||
//test globalParamList is null
|
||||
String result = ParameterUtils.curingGlobalParams(globalParamMap, globalParamList, CommandType.START_CURRENT_TASK_PROCESS, scheduleTime);
|
||||
Assert.assertNull(result);
|
||||
Assert.assertNull(ParameterUtils.curingGlobalParams(null,null,CommandType.START_CURRENT_TASK_PROCESS,null));
|
||||
Assert.assertNull(ParameterUtils.curingGlobalParams(globalParamMap,null,CommandType.START_CURRENT_TASK_PROCESS,scheduleTime));
|
||||
|
||||
//test globalParamList is not null
|
||||
Property property=new Property("testGlobalParam", Direct.IN, DataType.VARCHAR,"testGlobalParam");
|
||||
globalParamList.add(property);
|
||||
|
||||
String result2 = ParameterUtils.curingGlobalParams(null,globalParamList,CommandType.START_CURRENT_TASK_PROCESS,scheduleTime);
|
||||
Assert.assertEquals(result2, JSONObject.toJSONString(globalParamList));
|
||||
|
||||
String result3 = ParameterUtils.curingGlobalParams(globalParamMap,globalParamList,CommandType.START_CURRENT_TASK_PROCESS,null);
|
||||
Assert.assertEquals(result3, JSONObject.toJSONString(globalParamList));
|
||||
|
||||
String result4 = ParameterUtils.curingGlobalParams(globalParamMap, globalParamList, CommandType.START_CURRENT_TASK_PROCESS, scheduleTime);
|
||||
Assert.assertEquals(result4, JSONObject.toJSONString(globalParamList));
|
||||
|
||||
//test var $ startsWith
|
||||
globalParamMap.put("bizDate","${system.biz.date}");
|
||||
globalParamMap.put("b1zCurdate","${system.biz.curdate}");
|
||||
|
||||
|
||||
Property property2=new Property("testParamList1", Direct.IN, DataType.VARCHAR,"testParamList");
|
||||
Property property3=new Property("testParamList2", Direct.IN, DataType.VARCHAR,"{testParamList1}");
|
||||
Property property4=new Property("testParamList3", Direct.IN, DataType.VARCHAR,"${b1zCurdate}");
|
||||
|
||||
globalParamList.add(property2);
|
||||
globalParamList.add(property3);
|
||||
globalParamList.add(property4);
|
||||
|
||||
String result5 = ParameterUtils.curingGlobalParams(globalParamMap, globalParamList, CommandType.START_CURRENT_TASK_PROCESS, scheduleTime);
|
||||
Assert.assertEquals(result5,JSONUtils.toJsonString(globalParamList));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test handleEscapes
|
||||
*/
|
||||
@Test
|
||||
public void testHandleEscapes() throws Exception {
|
||||
Assert.assertNull(ParameterUtils.handleEscapes(null));
|
||||
Assert.assertEquals("",ParameterUtils.handleEscapes(""));
|
||||
Assert.assertEquals("test Parameter",ParameterUtils.handleEscapes("test Parameter"));
|
||||
Assert.assertEquals("////%test////%Parameter",ParameterUtils.handleEscapes("%test%Parameter"));
|
||||
}
|
||||
|
||||
}
|
@ -19,12 +19,12 @@
|
||||
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
|
||||
# postgre
|
||||
spring.datasource.driver-class-name=org.postgresql.Driver
|
||||
spring.datasource.url=jdbc:postgresql://192.168.xx.xx:5432/dolphinscheduler
|
||||
spring.datasource.url=jdbc:postgresql://localhost:5432/dolphinscheduler
|
||||
# mysql
|
||||
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
|
||||
#spring.datasource.url=jdbc:mysql://192.168.xx.xx:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8
|
||||
spring.datasource.username=xx
|
||||
spring.datasource.password=xx
|
||||
spring.datasource.username=test
|
||||
spring.datasource.password=test
|
||||
|
||||
# connection configuration
|
||||
spring.datasource.initialSize=5
|
||||
|
@ -101,6 +101,333 @@
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>nginx</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>dolphinscheduler-nginx</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/dolphinscheduler-nginx.xml</descriptor>
|
||||
</descriptors>
|
||||
<appendAssemblyId>true</appendAssemblyId>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
<execution>
|
||||
<id>src</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<descriptors>
|
||||
<descriptor>src/main/assembly/dolphinscheduler-src.xml</descriptor>
|
||||
</descriptors>
|
||||
<appendAssemblyId>true</appendAssemblyId>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>jar-no-fork</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>rpmbuild</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/lib</outputDirectory>
|
||||
<overWriteReleases>false</overWriteReleases>
|
||||
<overWriteSnapshots>false</overWriteSnapshots>
|
||||
<overWriteIfNewer>true</overWriteIfNewer>
|
||||
<excludeScope>provided</excludeScope>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-dependencies</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>rpm-maven-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>attached-rpm</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
|
||||
<configuration>
|
||||
<name>apache-dolphinscheduler-incubating</name>
|
||||
<release>1</release>
|
||||
<distribution>apache dolphinscheduler incubating rpm</distribution>
|
||||
<group>apache</group>
|
||||
<packager>dolphinscheduler</packager>
|
||||
<!-- <version>${project.version}</version> -->
|
||||
<prefix>/opt/soft</prefix>
|
||||
|
||||
<defineStatements>
|
||||
<!-- disable compile python when rpm build -->
|
||||
<defineStatement>__os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')</defineStatement>
|
||||
</defineStatements>
|
||||
<mappings>
|
||||
<mapping>
|
||||
<directory>/opt/soft/${project.build.finalName}/conf</directory>
|
||||
<filemode>755</filemode>
|
||||
<username>root</username>
|
||||
<groupname>root</groupname>
|
||||
<sources>
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-alert/src/main/resources
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
<include>**/*.ftl</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-common/src/main/resources
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-dao/src/main/resources
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
<include>**/*.yml</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-api/src/main/resources
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-server/src/main/resources
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../script
|
||||
</location>
|
||||
<includes>
|
||||
<include>config/*.*</include>
|
||||
<include>env/*.*</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
|
||||
</sources>
|
||||
</mapping>
|
||||
<mapping>
|
||||
<directory>/opt/soft/${project.build.finalName}/lib</directory>
|
||||
<filemode>755</filemode>
|
||||
<username>root</username>
|
||||
<groupname>root</groupname>
|
||||
|
||||
<sources>
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-dist/target/lib
|
||||
</location>
|
||||
<includes>
|
||||
<include>*.*</include>
|
||||
</includes>
|
||||
<excludes>
|
||||
<exclude>servlet-api-*.jar</exclude>
|
||||
<exclude>slf4j-log4j12-${slf4j.log4j12.version}.jar</exclude>
|
||||
</excludes>
|
||||
</source>
|
||||
</sources>
|
||||
</mapping>
|
||||
<mapping>
|
||||
<directory>/opt/soft/${project.build.finalName}/bin</directory>
|
||||
<filemode>755</filemode>
|
||||
<username>root</username>
|
||||
<groupname>root</groupname>
|
||||
<sources>
|
||||
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../script
|
||||
</location>
|
||||
<includes>
|
||||
<include>start-all.sh</include>
|
||||
<include>stop-all.sh</include>
|
||||
<include>dolphinscheduler-daemon.sh</include>
|
||||
</includes>
|
||||
</source>
|
||||
</sources>
|
||||
</mapping>
|
||||
<mapping>
|
||||
<directory>/opt/soft/${project.build.finalName}</directory>
|
||||
<filemode>755</filemode>
|
||||
<username>root</username>
|
||||
<groupname>root</groupname>
|
||||
<sources>
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../
|
||||
</location>
|
||||
<includes>
|
||||
<include>*.sh</include>
|
||||
<include>*.py</include>
|
||||
<include>DISCLAIMER</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-ui
|
||||
</location>
|
||||
<includes>
|
||||
<include>install-dolphinscheduler-ui.sh</include>
|
||||
</includes>
|
||||
</source>
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/release-docs
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
</sources>
|
||||
</mapping>
|
||||
<mapping>
|
||||
<directory>/opt/soft/${project.build.finalName}/dist</directory>
|
||||
<filemode>755</filemode>
|
||||
<username>root</username>
|
||||
<groupname>root</groupname>
|
||||
<sources>
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../dolphinscheduler-ui/dist
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
</source>
|
||||
</sources>
|
||||
</mapping>
|
||||
<mapping>
|
||||
<directory>/opt/soft/${project.build.finalName}/sql</directory>
|
||||
<filemode>755</filemode>
|
||||
<username>root</username>
|
||||
<groupname>root</groupname>
|
||||
<sources>
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../sql
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
</source>
|
||||
</sources>
|
||||
</mapping>
|
||||
|
||||
<mapping>
|
||||
<directory>/opt/soft/${project.build.finalName}/script</directory>
|
||||
<filemode>755</filemode>
|
||||
<username>root</username>
|
||||
<groupname>root</groupname>
|
||||
<sources>
|
||||
<source>
|
||||
<location>
|
||||
${basedir}/../script
|
||||
</location>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
</source>
|
||||
|
||||
</sources>
|
||||
</mapping>
|
||||
</mappings>
|
||||
|
||||
<preinstallScriptlet>
|
||||
<script>mkdir -p /opt/soft</script>
|
||||
</preinstallScriptlet>
|
||||
<postremoveScriptlet>
|
||||
<script>rm -rf /opt/soft/apache-dolphinscheduler-incubating-${project.version}</script>
|
||||
</postremoveScriptlet>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
</profiles>
|
||||
|
||||
|
||||
|
@ -505,21 +505,23 @@ The text of each license is also included at licenses/ui-licenses/LICENSE-[proje
|
||||
========================================
|
||||
MIT licenses
|
||||
========================================
|
||||
vue 2.5.17: https://github.com/vuejs/vue MIT
|
||||
jquery 1.12.4: https://github.com/jquery/jquery MIT
|
||||
vue-router 2.7.0: https://github.com/vuejs/vue-router MIT
|
||||
vuex 3.0.0: https://github.com/vuejs/vuex MIT
|
||||
ans-UI 1.1.7: https://github.com/analysys/ans-ui MIT
|
||||
axios 0.16.2: https://github.com/axios/axios MIT
|
||||
bootstrap 3.3.7: https://github.com/twbs/bootstrap MIT
|
||||
canvg 1.5.1: https://github.com/canvg/canvg MIT
|
||||
clipboard 2.0.1: https://github.com/zenorocha/clipboard.js MIT
|
||||
codemirror 5.43.0: https://github.com/codemirror/CodeMirror MIT
|
||||
dayjs 1.7.8: https://github.com/iamkun/dayjs MIT
|
||||
html2canvas 0.5.0-beta4: https://github.com/niklasvh/html2canvas MIT
|
||||
lodash 4.17.11: https://github.com/lodash/lodash MIT
|
||||
vuex-router-sync 4.1.2: https://github.com/vuejs/vuex-router-sync MIT
|
||||
ans-UI 0.0.22: https://github.com/analysys/ans-ui MIT
|
||||
axios 0.16.2: https://github.com/axios/axios MIT
|
||||
jquery 3.3.1: https://github.com/jquery/jquery MIT
|
||||
jquery-ui 1.12.1: https://github.com/jquery/jquery-ui MIT
|
||||
js-cookie 2.2.1: https://github.com/js-cookie/js-cookie MIT
|
||||
jsplumb 2.8.6: https://github.com/jsplumb/jsplumb MIT and GPLv2
|
||||
lodash 4.17.11: https://github.com/lodash/lodash MIT
|
||||
vue 2.5.17: https://github.com/vuejs/vue MIT
|
||||
vue-router 2.7.0: https://github.com/vuejs/vue-router MIT
|
||||
vuex 3.0.0: https://github.com/vuejs/vuex MIT
|
||||
vuex-router-sync 4.1.2: https://github.com/vuejs/vuex-router-sync MIT
|
||||
|
||||
========================================
|
||||
Apache 2.0 licenses
|
||||
|
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2014-present Matt Zabriskie
|
||||
Copyright (c) 2014 Matt Zabriskie
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -1,7 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2011-2019 Twitter, Inc.
|
||||
Copyright (c) 2011-2019 The Bootstrap Authors
|
||||
Copyright (c) 2011-2016 Twitter, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -1,21 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
Copyright (c) 2010-2011 Gabe Lerner (gabelerner@gmail.com) - http://code.google.com/p/canvg/
|
||||
|
||||
Copyright (c) 2010 - present Gabe Lerner (gabelerner@gmail.com) - https://github.com/canvg/canvg
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
@ -1,19 +1,26 @@
|
||||
BSD-3-Clause License
|
||||
Copyright (c) 2010-2016, Michael Bostock
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* The name Michael Bostock may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
||||
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018-present, iamkun
|
||||
Copyright (c) 2018 iamkun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -1,19 +1,201 @@
|
||||
Apache-2.0 License
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
1. Definitions.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
"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,21 +1,36 @@
|
||||
MIT License
|
||||
Copyright JS Foundation and other contributors, https://js.foundation/
|
||||
|
||||
Copyright (c) 2016-present
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals. For exact contribution history, see the revision history
|
||||
available at https://github.com/jquery/jquery
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
The following license applies to all parts of this software except as
|
||||
documented below:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
====
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
====
|
||||
|
||||
All files located in the node_modules and external directories are
|
||||
externally maintained libraries used by this software which have their
|
||||
own licenses; we recommend you read them, as their terms may differ from
|
||||
the terms above.
|
@ -0,0 +1,43 @@
|
||||
Copyright jQuery Foundation and other contributors, https://jquery.org/
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals. For exact contribution history, see the revision history
|
||||
available at https://github.com/jquery/jquery-ui
|
||||
|
||||
The following license applies to all parts of this software except as
|
||||
documented below:
|
||||
|
||||
====
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
====
|
||||
|
||||
Copyright and related rights for sample code are waived via CC0. Sample
|
||||
code is defined as all source code contained within the demos directory.
|
||||
|
||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
====
|
||||
|
||||
All files located in the node_modules and external directories are
|
||||
externally maintained libraries used by this software which have their
|
||||
own licenses; we recommend you read them, as their terms may differ from
|
||||
the terms above.
|
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Copyright 2018 Klaus Hartl, Fagner Brack, GitHub Contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -302,4 +302,4 @@ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
@ -1,6 +1,3 @@
|
||||
|
||||
The MIT License
|
||||
|
||||
Copyright JS Foundation and other contributors <https://js.foundation/>
|
||||
|
||||
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||
|
@ -1,4 +1,4 @@
|
||||
MIT License
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-present, Yuxi (Evan) You
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2013-present Evan You
|
||||
Copyright (c) 2013-2016 Evan You
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@ -9,13 +9,13 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -1,6 +1,6 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018-2019 Evan You
|
||||
Copyright (c) 2015-2016 Evan You
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -97,23 +97,8 @@
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-common/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-common/src/main/resources/bin</directory>
|
||||
<includes>
|
||||
<include>*.*</include>
|
||||
</includes>
|
||||
<directoryMode>755</directoryMode>
|
||||
<outputDirectory>bin</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-dao/src/main/resources</directory>
|
||||
<includes>
|
||||
|
@ -0,0 +1,236 @@
|
||||
<!--
|
||||
~ 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.
|
||||
-->
|
||||
|
||||
<assembly
|
||||
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||
<id>dolphinscheduler-nginx</id>
|
||||
<formats>
|
||||
<format>tar.gz</format>
|
||||
</formats>
|
||||
<includeBaseDirectory>true</includeBaseDirectory>
|
||||
<baseDirectory>${project.build.finalName}-dolphinscheduler-bin</baseDirectory>
|
||||
|
||||
<fileSets>
|
||||
<!--alert start-->
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-alert/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
<include>**/*.ftl</include>
|
||||
</includes>
|
||||
<outputDirectory>./conf</outputDirectory>
|
||||
</fileSet>
|
||||
<!--alert end-->
|
||||
|
||||
<!--api start-->
|
||||
<fileSet>
|
||||
<directory>src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-common/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-common/src/main/resources/bin</directory>
|
||||
<includes>
|
||||
<include>*.*</include>
|
||||
</includes>
|
||||
<directoryMode>755</directoryMode>
|
||||
<outputDirectory>bin</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-dao/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-api/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<!--api end-->
|
||||
|
||||
<!--server start-->
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-server/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-common/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-common/src/main/resources/bin</directory>
|
||||
<includes>
|
||||
<include>*.*</include>
|
||||
</includes>
|
||||
<directoryMode>755</directoryMode>
|
||||
<outputDirectory>bin</outputDirectory>
|
||||
</fileSet>
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-dao/src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*.properties</include>
|
||||
<include>**/*.xml</include>
|
||||
<include>**/*.json</include>
|
||||
<include>**/*.yml</include>
|
||||
</includes>
|
||||
<outputDirectory>conf</outputDirectory>
|
||||
</fileSet>
|
||||
<!--server end-->
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-server/target/dolphinscheduler-server-${project.version}</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-api/target/dolphinscheduler-api-${project.version}</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-alert/target/dolphinscheduler-alert-${project.version}</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-ui/dist</directory>
|
||||
<includes>
|
||||
<include>**/*.*</include>
|
||||
</includes>
|
||||
<outputDirectory>./ui/dist</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../dolphinscheduler-ui</directory>
|
||||
<includes>
|
||||
<include>install-dolphinscheduler-ui.sh</include>
|
||||
</includes>
|
||||
<outputDirectory>./ui</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../sql</directory>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
<outputDirectory>./sql</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../script</directory>
|
||||
<includes>
|
||||
<include>*.*</include>
|
||||
</includes>
|
||||
<outputDirectory>./script</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../script</directory>
|
||||
<includes>
|
||||
<include>config/*.*</include>
|
||||
<include>env/*.*</include>
|
||||
</includes>
|
||||
<outputDirectory>./conf</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/../script</directory>
|
||||
<includes>
|
||||
<include>start-all.sh</include>
|
||||
<include>stop-all.sh</include>
|
||||
<include>dolphinscheduler-daemon.sh</include>
|
||||
</includes>
|
||||
<outputDirectory>./bin</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/.././</directory>
|
||||
<includes>
|
||||
<include>*.sh</include>
|
||||
<include>*.py</include>
|
||||
<include>DISCLAIMER</include>
|
||||
</includes>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
<fileSet>
|
||||
<directory>${basedir}/release-docs</directory>
|
||||
<useDefaultExcludes>true</useDefaultExcludes>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
<outputDirectory>.</outputDirectory>
|
||||
</fileSet>
|
||||
|
||||
</fileSets>
|
||||
|
||||
<dependencySets>
|
||||
<dependencySet>
|
||||
<outputDirectory>lib</outputDirectory>
|
||||
<useProjectArtifact>true</useProjectArtifact>
|
||||
<excludes>
|
||||
<exclude>javax.servlet:servlet-api</exclude>
|
||||
<exclude>org.eclipse.jetty.aggregate:jetty-all</exclude>
|
||||
<exclude>org.slf4j:slf4j-log4j12</exclude>
|
||||
</excludes>
|
||||
</dependencySet>
|
||||
</dependencySets>
|
||||
</assembly>
|
@ -35,6 +35,8 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
@ -56,6 +58,7 @@ public class MasterServer implements IStoppable {
|
||||
/**
|
||||
* zk master client
|
||||
*/
|
||||
@Autowired
|
||||
private ZKMasterClient zkMasterClient = null;
|
||||
|
||||
/**
|
||||
@ -95,8 +98,7 @@ public class MasterServer implements IStoppable {
|
||||
* @param args arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(MasterServer.class, args);
|
||||
|
||||
new SpringApplicationBuilder(MasterServer.class).web(WebApplicationType.NONE).run(args);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -104,11 +106,10 @@ public class MasterServer implements IStoppable {
|
||||
*/
|
||||
@PostConstruct
|
||||
public void run(){
|
||||
zkMasterClient.init();
|
||||
|
||||
masterSchedulerService = ThreadUtils.newDaemonSingleThreadExecutor("Master-Scheduler-Thread");
|
||||
|
||||
zkMasterClient = ZKMasterClient.getZKMasterClient(processDao);
|
||||
|
||||
heartbeatMasterService = ThreadUtils.newDaemonThreadScheduledExecutor("Master-Main-Thread",Constants.defaulMasterHeartbeatThreadNum);
|
||||
|
||||
// heartbeat thread implement
|
||||
|
@ -114,30 +114,29 @@ public class MasterBaseTaskExecThread implements Callable<Boolean> {
|
||||
Integer commitRetryInterval = masterConfig.getMasterTaskCommitInterval();
|
||||
|
||||
int retryTimes = 1;
|
||||
boolean taskDBFlag = false;
|
||||
boolean taskQueueFlag = false;
|
||||
boolean submitDB = false;
|
||||
boolean submitQueue = false;
|
||||
TaskInstance task = null;
|
||||
while (true){
|
||||
while (retryTimes <= commitRetryTimes){
|
||||
try {
|
||||
if(!taskDBFlag){
|
||||
if(!submitDB){
|
||||
// submit task to db
|
||||
task = processDao.submitTask(taskInstance, processInstance);
|
||||
if(task != null && task.getId() != 0){
|
||||
taskDBFlag = true;
|
||||
submitDB = true;
|
||||
}
|
||||
}
|
||||
if(taskDBFlag && !taskQueueFlag){
|
||||
if(submitDB && !submitQueue){
|
||||
// submit task to queue
|
||||
taskQueueFlag = processDao.submitTaskToQueue(task);
|
||||
submitQueue = processDao.submitTaskToQueue(task);
|
||||
}
|
||||
if(taskDBFlag && taskQueueFlag){
|
||||
if(submitDB && submitQueue){
|
||||
return task;
|
||||
}
|
||||
if(!taskDBFlag){
|
||||
logger.error("task commit to db failed , task has already retry {} times, please check the database", retryTimes);
|
||||
}else if(!taskQueueFlag){
|
||||
logger.error("task commit to queue failed , task has already retry {} times, please check the database", retryTimes);
|
||||
|
||||
if(!submitDB){
|
||||
logger.error("task commit to db failed , taskId {} has already retry {} times, please check the database", taskInstance.getId(), retryTimes);
|
||||
}else if(!submitQueue){
|
||||
logger.error("task commit to queue failed , taskId {} has already retry {} times, please check the queue", taskInstance.getId(), retryTimes);
|
||||
}
|
||||
Thread.sleep(commitRetryInterval);
|
||||
} catch (Exception e) {
|
||||
@ -145,6 +144,7 @@ public class MasterBaseTaskExecThread implements Callable<Boolean> {
|
||||
}
|
||||
retryTimes += 1;
|
||||
}
|
||||
return task;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -74,6 +74,10 @@ public class MasterTaskExecThread extends MasterBaseTaskExecThread {
|
||||
public Boolean submitWaitComplete() {
|
||||
Boolean result = false;
|
||||
this.taskInstance = submit();
|
||||
if(this.taskInstance == null){
|
||||
logger.error("submit task instance to mysql and queue failed , please check and fix it");
|
||||
return result;
|
||||
}
|
||||
if(!this.taskInstance.getState().typeIsFinished()) {
|
||||
result = waitTaskQuit();
|
||||
}
|
||||
|
@ -72,7 +72,6 @@ public class SubProcessTaskExecThread extends MasterBaseTaskExecThread {
|
||||
this.taskInstance.setState(ExecutionStatus.KILL);
|
||||
}else{
|
||||
this.taskInstance.setState(subProcessInstance.getState());
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
taskInstance.setEndTime(new Date());
|
||||
|
@ -0,0 +1,126 @@
|
||||
/*
|
||||
* 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.server.monitor;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* abstract server monitor and auto restart server
|
||||
*/
|
||||
@Component
|
||||
public abstract class AbstractMonitor implements Monitor {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(AbstractMonitor.class);
|
||||
|
||||
|
||||
@Autowired
|
||||
private RunConfig runConfig;
|
||||
|
||||
/**
|
||||
* monitor server and restart
|
||||
*/
|
||||
@Override
|
||||
public void monitor(String masterPath,String workerPath,Integer port,String installPath) {
|
||||
try {
|
||||
restartServer(masterPath,port,installPath);
|
||||
restartServer(workerPath,port,installPath);
|
||||
}catch (Exception e){
|
||||
logger.error("server start up error",e);
|
||||
}
|
||||
}
|
||||
|
||||
private void restartServer(String path,Integer port,String installPath) throws Exception{
|
||||
|
||||
String type = path.split("/")[2];
|
||||
String serverName = null;
|
||||
String nodes = null;
|
||||
if ("masters".equals(type)){
|
||||
serverName = "master-server";
|
||||
nodes = runConfig.getMasters();
|
||||
}else if ("workers".equals(type)){
|
||||
serverName = "worker-server";
|
||||
nodes = runConfig.getWorkers();
|
||||
}
|
||||
|
||||
Map<String, String> activeNodeMap = getActiveNodesByPath(path);
|
||||
|
||||
Set<String> needRestartServer = getNeedRestartServer(getRunConfigServer(nodes),
|
||||
activeNodeMap.keySet());
|
||||
|
||||
for (String node : needRestartServer){
|
||||
// os.system('ssh -p ' + ssh_port + ' ' + self.get_ip_by_hostname(master) + ' sh ' + install_path + '/bin/dolphinscheduler-daemon.sh start master-server')
|
||||
String runCmd = "ssh -p " + port + " " + node + " sh " + installPath + "/bin/dolphinscheduler-daemon.sh start " + serverName;
|
||||
Runtime.getRuntime().exec(runCmd);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get need restart server
|
||||
* @param deployedNodes deployedNodes
|
||||
* @param activeNodes activeNodes
|
||||
* @return need restart server
|
||||
*/
|
||||
private Set<String> getNeedRestartServer(Set<String> deployedNodes,Set<String> activeNodes){
|
||||
if (CollectionUtils.isEmpty(activeNodes)){
|
||||
return deployedNodes;
|
||||
}
|
||||
|
||||
Set<String> result = new HashSet<>();
|
||||
|
||||
result.addAll(deployedNodes);
|
||||
result.removeAll(activeNodes);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* run config masters/workers
|
||||
* @return master set/worker set
|
||||
*/
|
||||
private Set<String> getRunConfigServer(String nodes){
|
||||
Set<String> nodeSet = new HashSet();
|
||||
|
||||
|
||||
if (StringUtils.isEmpty(nodes)){
|
||||
return null;
|
||||
}
|
||||
|
||||
String[] nodeArr = nodes.split(",");
|
||||
|
||||
for (String node : nodeArr){
|
||||
nodeSet.add(node);
|
||||
}
|
||||
|
||||
return nodeSet;
|
||||
}
|
||||
|
||||
/**
|
||||
* get active nodes by path
|
||||
* @param path path
|
||||
* @return active nodes
|
||||
*/
|
||||
protected abstract Map<String,String> getActiveNodesByPath(String path);
|
||||
}
|
@ -14,4 +14,15 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.dolphinscheduler.server.monitor;
|
||||
|
||||
/**
|
||||
* server monitor and auto restart server
|
||||
*/
|
||||
public interface Monitor {
|
||||
|
||||
/**
|
||||
* monitor server and restart
|
||||
*/
|
||||
void monitor(String masterPath, String workerPath, Integer port, String installPath);
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* 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.server.monitor;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
/**
|
||||
* monitor server
|
||||
*/
|
||||
@ComponentScan("org.apache.dolphinscheduler")
|
||||
public class MonitorServer implements CommandLineRunner {
|
||||
|
||||
private static Integer ARGS_LENGTH = 4;
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(MonitorServer.class);
|
||||
|
||||
/**
|
||||
* monitor
|
||||
*/
|
||||
@Autowired
|
||||
private Monitor monitor;
|
||||
|
||||
|
||||
|
||||
public static void main(String[] args) throws Exception{
|
||||
|
||||
new SpringApplicationBuilder(MonitorServer.class).web(WebApplicationType.NONE).run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
if (args.length != ARGS_LENGTH){
|
||||
logger.error("Usage: <masterPath> <workerPath> <port> <installPath>");
|
||||
return;
|
||||
}
|
||||
|
||||
String masterPath = args[0];
|
||||
String workerPath = args[1];
|
||||
Integer port = Integer.parseInt(args[2]);
|
||||
String installPath = args[3];
|
||||
monitor.monitor(masterPath,workerPath,port,installPath);
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
/*
|
||||
* 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.server.monitor;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.PropertySource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* zookeeper conf
|
||||
*/
|
||||
@Component
|
||||
@PropertySource("classpath:config/run_config.conf")
|
||||
public class RunConfig {
|
||||
|
||||
//zk connect config
|
||||
@Value("${masters}")
|
||||
private String masters;
|
||||
|
||||
@Value("${workers}")
|
||||
private String workers;
|
||||
|
||||
@Value("${alertServer}")
|
||||
private String alertServer;
|
||||
|
||||
@Value("${apiServers}")
|
||||
private String apiServers;
|
||||
|
||||
@Value("${sshPort}")
|
||||
private String sshPort;
|
||||
|
||||
public String getMasters() {
|
||||
return masters;
|
||||
}
|
||||
|
||||
public void setMasters(String masters) {
|
||||
this.masters = masters;
|
||||
}
|
||||
|
||||
public String getWorkers() {
|
||||
return workers;
|
||||
}
|
||||
|
||||
public void setWorkers(String workers) {
|
||||
this.workers = workers;
|
||||
}
|
||||
|
||||
public String getAlertServer() {
|
||||
return alertServer;
|
||||
}
|
||||
|
||||
public void setAlertServer(String alertServer) {
|
||||
this.alertServer = alertServer;
|
||||
}
|
||||
|
||||
public String getApiServers() {
|
||||
return apiServers;
|
||||
}
|
||||
|
||||
public void setApiServers(String apiServers) {
|
||||
this.apiServers = apiServers;
|
||||
}
|
||||
|
||||
public String getSshPort() {
|
||||
return sshPort;
|
||||
}
|
||||
|
||||
public void setSshPort(String sshPort) {
|
||||
this.sshPort = sshPort;
|
||||
}
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* 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.server.monitor;
|
||||
|
||||
import org.apache.dolphinscheduler.common.zk.ZookeeperOperator;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* zk monitor server impl
|
||||
*/
|
||||
@Component
|
||||
public class ZKMonitorImpl extends AbstractMonitor {
|
||||
|
||||
/**
|
||||
* zookeeper operator
|
||||
*/
|
||||
@Autowired
|
||||
private ZookeeperOperator zookeeperOperator;
|
||||
|
||||
|
||||
/**
|
||||
* get active nodes map by path
|
||||
* @param path path
|
||||
* @return active nodes map
|
||||
*/
|
||||
@Override
|
||||
protected Map<String,String> getActiveNodesByPath(String path) {
|
||||
|
||||
Map<String,String> maps = new HashMap<>();
|
||||
|
||||
List<String> childrenList = zookeeperOperator.getChildrenKeys(path);
|
||||
|
||||
if (childrenList == null){
|
||||
return maps;
|
||||
}
|
||||
|
||||
for (String child : childrenList){
|
||||
maps.put(child.split("_")[0],child);
|
||||
}
|
||||
|
||||
return maps;
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.server.utils;
|
||||
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.common.enums.ProgramType;
|
||||
import org.apache.dolphinscheduler.common.process.ResourceInfo;
|
||||
import org.apache.dolphinscheduler.common.task.flink.FlinkParameters;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -44,9 +45,11 @@ public class FlinkArgsUtils {
|
||||
*/
|
||||
public static List<String> buildArgs(FlinkParameters param) {
|
||||
List<String> args = new ArrayList<>();
|
||||
|
||||
String deployMode = "cluster";
|
||||
if (StringUtils.isNotEmpty(param.getDeployMode())) {
|
||||
deployMode = param.getDeployMode();
|
||||
String tmpDeployMode = param.getDeployMode();
|
||||
if (StringUtils.isNotEmpty(tmpDeployMode)) {
|
||||
deployMode = tmpDeployMode;
|
||||
|
||||
}
|
||||
if (!"local".equals(deployMode)) {
|
||||
@ -54,68 +57,70 @@ public class FlinkArgsUtils {
|
||||
|
||||
args.add(Constants.FLINK_YARN_CLUSTER); //yarn-cluster
|
||||
|
||||
|
||||
if (param.getSlot() != 0) {
|
||||
int slot = param.getSlot();
|
||||
if (slot != 0) {
|
||||
args.add(Constants.FLINK_YARN_SLOT);
|
||||
args.add(String.format("%d", param.getSlot())); //-ys
|
||||
args.add(String.format("%d", slot)); //-ys
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(param.getAppName())) { //-ynm
|
||||
String appName = param.getAppName();
|
||||
if (StringUtils.isNotEmpty(appName)) { //-ynm
|
||||
args.add(Constants.FLINK_APP_NAME);
|
||||
args.add(param.getAppName());
|
||||
args.add(appName);
|
||||
}
|
||||
|
||||
if (param.getTaskManager() != 0) { //-yn
|
||||
int taskManager = param.getTaskManager();
|
||||
if (taskManager != 0) { //-yn
|
||||
args.add(Constants.FLINK_TASK_MANAGE);
|
||||
args.add(String.format("%d", param.getTaskManager()));
|
||||
args.add(String.format("%d", taskManager));
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(param.getJobManagerMemory())) {
|
||||
String jobManagerMemory = param.getJobManagerMemory();
|
||||
if (StringUtils.isNotEmpty(jobManagerMemory)) {
|
||||
args.add(Constants.FLINK_JOB_MANAGE_MEM);
|
||||
args.add(param.getJobManagerMemory()); //-yjm
|
||||
args.add(jobManagerMemory); //-yjm
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(param.getTaskManagerMemory())) { // -ytm
|
||||
String taskManagerMemory = param.getTaskManagerMemory();
|
||||
if (StringUtils.isNotEmpty(taskManagerMemory)) { // -ytm
|
||||
args.add(Constants.FLINK_TASK_MANAGE_MEM);
|
||||
args.add(param.getTaskManagerMemory());
|
||||
args.add(taskManagerMemory);
|
||||
}
|
||||
|
||||
args.add(Constants.FLINK_detach); //-d
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (param.getProgramType() != null) {
|
||||
if (param.getProgramType() != ProgramType.PYTHON) {
|
||||
if (StringUtils.isNotEmpty(param.getMainClass())) {
|
||||
args.add(Constants.FLINK_MAIN_CLASS); //-c
|
||||
args.add(param.getMainClass()); //main class
|
||||
}
|
||||
}
|
||||
ProgramType programType = param.getProgramType();
|
||||
String mainClass = param.getMainClass();
|
||||
if (programType != null && programType != ProgramType.PYTHON && StringUtils.isNotEmpty(mainClass)) {
|
||||
args.add(Constants.FLINK_MAIN_CLASS); //-c
|
||||
args.add(param.getMainClass()); //main class
|
||||
}
|
||||
|
||||
if (param.getMainJar() != null) {
|
||||
args.add(param.getMainJar().getRes());
|
||||
ResourceInfo mainJar = param.getMainJar();
|
||||
if (mainJar != null) {
|
||||
args.add(mainJar.getRes());
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(param.getMainArgs())) {
|
||||
args.add(param.getMainArgs());
|
||||
String mainArgs = param.getMainArgs();
|
||||
if (StringUtils.isNotEmpty(mainArgs)) {
|
||||
args.add(mainArgs);
|
||||
}
|
||||
|
||||
// --files --conf --libjar ...
|
||||
if (StringUtils.isNotEmpty(param.getOthers())) {
|
||||
String others = param.getOthers();
|
||||
if (!others.contains("--qu")) {
|
||||
if (StringUtils.isNotEmpty(param.getQueue()) && !deployMode.equals("local")) {
|
||||
args.add(Constants.FLINK_QUEUE);
|
||||
args.add(param.getQueue());
|
||||
}
|
||||
String others = param.getOthers();
|
||||
String queue = param.getQueue();
|
||||
if (StringUtils.isNotEmpty(others)) {
|
||||
|
||||
if (!others.contains(Constants.FLINK_QUEUE) && StringUtils.isNotEmpty(queue) && !deployMode.equals("local")) {
|
||||
args.add(Constants.FLINK_QUEUE);
|
||||
args.add(param.getQueue());
|
||||
}
|
||||
args.add(param.getOthers());
|
||||
} else if (StringUtils.isNotEmpty(param.getQueue()) && !deployMode.equals("local")) {
|
||||
args.add(others);
|
||||
} else if (StringUtils.isNotEmpty(queue) && !deployMode.equals("local")) {
|
||||
args.add(Constants.FLINK_QUEUE);
|
||||
args.add(param.getQueue());
|
||||
|
||||
}
|
||||
|
||||
return args;
|
||||
|
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* 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.server.utils;
|
||||
|
||||
import org.apache.dolphinscheduler.common.zk.ZookeeperOperator;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
@ComponentScan("org.apache.dolphinscheduler")
|
||||
public class RemoveZKNode implements CommandLineRunner {
|
||||
|
||||
private static Integer ARGS_LENGTH = 1;
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(RemoveZKNode.class);
|
||||
|
||||
|
||||
/**
|
||||
* zookeeper operator
|
||||
*/
|
||||
@Autowired
|
||||
private ZookeeperOperator zookeeperOperator;
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
new SpringApplicationBuilder(RemoveZKNode.class).web(WebApplicationType.NONE).run(args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
|
||||
if (args.length != ARGS_LENGTH){
|
||||
logger.error("Usage: <node>");
|
||||
return;
|
||||
}
|
||||
|
||||
zookeeperOperator.remove(args[0]);
|
||||
zookeeperOperator.close();
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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.server.utils;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
|
||||
/**
|
||||
* sensitive log Util
|
||||
*/
|
||||
public class SensitiveLogUtil {
|
||||
|
||||
/**
|
||||
* @param dataSourcePwd data source password
|
||||
* @return String
|
||||
*/
|
||||
public static String maskDataSourcePwd(String dataSourcePwd){
|
||||
|
||||
if (StringUtils.isNotEmpty(dataSourcePwd)) {
|
||||
dataSourcePwd = Constants.PASSWORD_DEFAULT;
|
||||
}
|
||||
return dataSourcePwd;
|
||||
}
|
||||
|
||||
}
|
@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.server.utils;
|
||||
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.common.enums.ProgramType;
|
||||
import org.apache.dolphinscheduler.common.process.ResourceInfo;
|
||||
import org.apache.dolphinscheduler.common.task.spark.SparkParameters;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
|
||||
@ -53,63 +54,69 @@ public class SparkArgsUtils {
|
||||
|
||||
args.add(param.getDeployMode());
|
||||
|
||||
if(param.getProgramType() !=null ){
|
||||
if(param.getProgramType()!=ProgramType.PYTHON){
|
||||
if (StringUtils.isNotEmpty(param.getMainClass())) {
|
||||
args.add(Constants.MAIN_CLASS);
|
||||
args.add(param.getMainClass());
|
||||
}
|
||||
}
|
||||
ProgramType type = param.getProgramType();
|
||||
String mainClass = param.getMainClass();
|
||||
if(type != null && type != ProgramType.PYTHON && StringUtils.isNotEmpty(mainClass)){
|
||||
args.add(Constants.MAIN_CLASS);
|
||||
args.add(mainClass);
|
||||
}
|
||||
|
||||
|
||||
if (param.getDriverCores() != 0) {
|
||||
int driverCores = param.getDriverCores();
|
||||
if (driverCores != 0) {
|
||||
args.add(Constants.DRIVER_CORES);
|
||||
args.add(String.format("%d", param.getDriverCores()));
|
||||
args.add(String.format("%d", driverCores));
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(param.getDriverMemory())) {
|
||||
String driverMemory = param.getDriverMemory();
|
||||
if (StringUtils.isNotEmpty(driverMemory)) {
|
||||
args.add(Constants.DRIVER_MEMORY);
|
||||
args.add(param.getDriverMemory());
|
||||
args.add(driverMemory);
|
||||
}
|
||||
|
||||
if (param.getNumExecutors() != 0) {
|
||||
int numExecutors = param.getNumExecutors();
|
||||
if (numExecutors != 0) {
|
||||
args.add(Constants.NUM_EXECUTORS);
|
||||
args.add(String.format("%d", param.getNumExecutors()));
|
||||
args.add(String.format("%d", numExecutors));
|
||||
}
|
||||
|
||||
if (param.getExecutorCores() != 0) {
|
||||
int executorCores = param.getExecutorCores();
|
||||
if (executorCores != 0) {
|
||||
args.add(Constants.EXECUTOR_CORES);
|
||||
args.add(String.format("%d", param.getExecutorCores()));
|
||||
args.add(String.format("%d", executorCores));
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(param.getExecutorMemory())) {
|
||||
String executorMemory = param.getExecutorMemory();
|
||||
if (StringUtils.isNotEmpty(executorMemory)) {
|
||||
args.add(Constants.EXECUTOR_MEMORY);
|
||||
args.add(param.getExecutorMemory());
|
||||
args.add(executorMemory);
|
||||
}
|
||||
|
||||
// --files --conf --libjar ...
|
||||
if (StringUtils.isNotEmpty(param.getOthers())) {
|
||||
String others = param.getOthers();
|
||||
if(!others.contains("--queue")){
|
||||
if (StringUtils.isNotEmpty(param.getQueue())) {
|
||||
args.add(Constants.SPARK_QUEUE);
|
||||
args.add(param.getQueue());
|
||||
}
|
||||
String others = param.getOthers();
|
||||
String queue = param.getQueue();
|
||||
if (StringUtils.isNotEmpty(others)) {
|
||||
|
||||
if(!others.contains(Constants.SPARK_QUEUE) && StringUtils.isNotEmpty(queue)){
|
||||
args.add(Constants.SPARK_QUEUE);
|
||||
args.add(queue);
|
||||
}
|
||||
args.add(param.getOthers());
|
||||
}else if (StringUtils.isNotEmpty(param.getQueue())) {
|
||||
|
||||
args.add(others);
|
||||
|
||||
}else if (StringUtils.isNotEmpty(queue)) {
|
||||
args.add(Constants.SPARK_QUEUE);
|
||||
args.add(param.getQueue());
|
||||
args.add(queue);
|
||||
|
||||
}
|
||||
|
||||
if (param.getMainJar() != null) {
|
||||
args.add(param.getMainJar().getRes());
|
||||
ResourceInfo mainJar = param.getMainJar();
|
||||
if (mainJar != null) {
|
||||
args.add(mainJar.getRes());
|
||||
}
|
||||
|
||||
if (StringUtils.isNotEmpty(param.getMainArgs())) {
|
||||
args.add(param.getMainArgs());
|
||||
String mainArgs = param.getMainArgs();
|
||||
if (StringUtils.isNotEmpty(mainArgs)) {
|
||||
args.add(mainArgs);
|
||||
}
|
||||
|
||||
return args;
|
||||
|
@ -42,7 +42,8 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.builder.SpringApplicationBuilder;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
@ -67,6 +68,7 @@ public class WorkerServer implements IStoppable {
|
||||
/**
|
||||
* zk worker client
|
||||
*/
|
||||
@Autowired
|
||||
private ZKWorkerClient zkWorkerClient = null;
|
||||
|
||||
|
||||
@ -127,7 +129,7 @@ public class WorkerServer implements IStoppable {
|
||||
* @param args arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(WorkerServer.class,args);
|
||||
new SpringApplicationBuilder(WorkerServer.class).web(WebApplicationType.NONE).run(args);
|
||||
}
|
||||
|
||||
|
||||
@ -136,8 +138,7 @@ public class WorkerServer implements IStoppable {
|
||||
*/
|
||||
@PostConstruct
|
||||
public void run(){
|
||||
|
||||
zkWorkerClient = ZKWorkerClient.getZKWorkerClient();
|
||||
zkWorkerClient.init();
|
||||
|
||||
this.taskQueue = TaskQueueFactory.getTaskQueueInstance();
|
||||
|
||||
|
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* 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.server.worker.log;
|
||||
|
||||
|
||||
import ch.qos.logback.classic.pattern.MessageConverter;
|
||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.server.utils.SensitiveLogUtil;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* sensitive data log converter
|
||||
*/
|
||||
@Slf4j
|
||||
public class SensitiveDataConverter extends MessageConverter {
|
||||
|
||||
/**
|
||||
* password pattern
|
||||
*/
|
||||
private final Pattern pwdPattern = Pattern.compile(Constants.DATASOURCE_PASSWORD_REGEX);
|
||||
|
||||
|
||||
@Override
|
||||
public String convert(ILoggingEvent event) {
|
||||
|
||||
// get original log
|
||||
String requestLogMsg = event.getFormattedMessage();
|
||||
|
||||
// desensitization log
|
||||
return convertMsg(requestLogMsg);
|
||||
}
|
||||
|
||||
/**
|
||||
* deal with sensitive log
|
||||
*
|
||||
* @param oriLogMsg original log
|
||||
*/
|
||||
private String convertMsg(final String oriLogMsg) {
|
||||
|
||||
String tempLogMsg = oriLogMsg;
|
||||
|
||||
if (StringUtils.isNotEmpty(tempLogMsg)) {
|
||||
tempLogMsg = passwordHandler(pwdPattern, tempLogMsg);
|
||||
}
|
||||
return tempLogMsg;
|
||||
}
|
||||
|
||||
/**
|
||||
* password regex
|
||||
*
|
||||
* @param logMsg original log
|
||||
*/
|
||||
private String passwordHandler(Pattern pwdPattern, String logMsg) {
|
||||
|
||||
Matcher matcher = pwdPattern.matcher(logMsg);
|
||||
|
||||
StringBuffer sb = new StringBuffer(logMsg.length());
|
||||
|
||||
while (matcher.find()) {
|
||||
|
||||
String password = matcher.group();
|
||||
|
||||
String maskPassword = SensitiveLogUtil.maskDataSourcePwd(password);
|
||||
|
||||
matcher.appendReplacement(sb, maskPassword);
|
||||
}
|
||||
matcher.appendTail(sb);
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -16,10 +16,12 @@
|
||||
*/
|
||||
package org.apache.dolphinscheduler.server.zk;
|
||||
|
||||
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.common.enums.ExecutionStatus;
|
||||
import org.apache.dolphinscheduler.common.enums.ZKNodeType;
|
||||
import org.apache.dolphinscheduler.common.model.Server;
|
||||
import org.apache.dolphinscheduler.common.zk.AbstractListener;
|
||||
import org.apache.dolphinscheduler.common.zk.AbstractZKClient;
|
||||
import org.apache.dolphinscheduler.dao.AlertDao;
|
||||
import org.apache.dolphinscheduler.dao.DaoFactory;
|
||||
@ -36,6 +38,8 @@ import org.apache.curator.framework.recipes.locks.InterProcessMutex;
|
||||
import org.apache.curator.utils.ThreadUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -47,6 +51,7 @@ import java.util.concurrent.ThreadFactory;
|
||||
*
|
||||
* single instance
|
||||
*/
|
||||
@Component
|
||||
public class ZKMasterClient extends AbstractZKClient {
|
||||
|
||||
/**
|
||||
@ -71,53 +76,14 @@ public class ZKMasterClient extends AbstractZKClient {
|
||||
/**
|
||||
* flow database access
|
||||
*/
|
||||
@Autowired
|
||||
private ProcessDao processDao;
|
||||
|
||||
/**
|
||||
* zkMasterClient
|
||||
*/
|
||||
private static ZKMasterClient zkMasterClient = null;
|
||||
|
||||
/**
|
||||
* master path children cache
|
||||
*/
|
||||
private PathChildrenCache masterPathChildrenCache;
|
||||
|
||||
/**
|
||||
* worker path children cache
|
||||
*/
|
||||
private PathChildrenCache workerPathChildrenCache;
|
||||
|
||||
/**
|
||||
* constructor
|
||||
*
|
||||
* @param processDao process dao
|
||||
*/
|
||||
private ZKMasterClient(ProcessDao processDao){
|
||||
this.processDao = processDao;
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* default constructor
|
||||
*/
|
||||
private ZKMasterClient(){}
|
||||
|
||||
/**
|
||||
* get zkMasterClient
|
||||
*
|
||||
* @param processDao process dao
|
||||
* @return ZKMasterClient zookeeper master client
|
||||
*/
|
||||
public static synchronized ZKMasterClient getZKMasterClient(ProcessDao processDao){
|
||||
if(zkMasterClient == null){
|
||||
zkMasterClient = new ZKMasterClient(processDao);
|
||||
}
|
||||
zkMasterClient.processDao = processDao;
|
||||
|
||||
return zkMasterClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* init
|
||||
*/
|
||||
@ -157,22 +123,6 @@ public class ZKMasterClient extends AbstractZKClient {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(){
|
||||
try {
|
||||
if(masterPathChildrenCache != null){
|
||||
masterPathChildrenCache.close();
|
||||
}
|
||||
if(workerPathChildrenCache != null){
|
||||
workerPathChildrenCache.close();
|
||||
}
|
||||
super.close();
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* init dao
|
||||
@ -209,41 +159,29 @@ public class ZKMasterClient extends AbstractZKClient {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* monitor master
|
||||
*/
|
||||
public void listenerMaster(){
|
||||
masterPathChildrenCache = new PathChildrenCache(zkClient,
|
||||
getZNodeParentPath(ZKNodeType.MASTER), true ,defaultThreadFactory);
|
||||
|
||||
try {
|
||||
masterPathChildrenCache.start();
|
||||
masterPathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
|
||||
@Override
|
||||
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
|
||||
switch (event.getType()) {
|
||||
case CHILD_ADDED:
|
||||
logger.info("master node added : {}",event.getData().getPath());
|
||||
break;
|
||||
case CHILD_REMOVED:
|
||||
String path = event.getData().getPath();
|
||||
String serverHost = getHostByEventDataPath(path);
|
||||
if(checkServerSelfDead(serverHost, ZKNodeType.MASTER)){
|
||||
return;
|
||||
}
|
||||
removeZKNodePath(path, ZKNodeType.MASTER, true);
|
||||
break;
|
||||
case CHILD_UPDATED:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
registerListener(getZNodeParentPath(ZKNodeType.MASTER), new AbstractListener() {
|
||||
@Override
|
||||
protected void dataChanged(CuratorFramework client, TreeCacheEvent event, String path) {
|
||||
switch (event.getType()) {
|
||||
case NODE_ADDED:
|
||||
logger.info("master node added : {}", path);
|
||||
break;
|
||||
case NODE_REMOVED:
|
||||
String serverHost = getHostByEventDataPath(path);
|
||||
if (checkServerSelfDead(serverHost, ZKNodeType.MASTER)) {
|
||||
return;
|
||||
}
|
||||
removeZKNodePath(path, ZKNodeType.MASTER, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
}catch (Exception e){
|
||||
logger.error("monitor master failed : " + e.getMessage(),e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@ -338,30 +276,22 @@ public class ZKMasterClient extends AbstractZKClient {
|
||||
* monitor worker
|
||||
*/
|
||||
public void listenerWorker(){
|
||||
workerPathChildrenCache = new PathChildrenCache(zkClient,
|
||||
getZNodeParentPath(ZKNodeType.WORKER),true ,defaultThreadFactory);
|
||||
try {
|
||||
workerPathChildrenCache.start();
|
||||
workerPathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
|
||||
@Override
|
||||
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) {
|
||||
switch (event.getType()) {
|
||||
case CHILD_ADDED:
|
||||
logger.info("node added : {}" ,event.getData().getPath());
|
||||
break;
|
||||
case CHILD_REMOVED:
|
||||
String path = event.getData().getPath();
|
||||
logger.info("node deleted : {}",event.getData().getPath());
|
||||
removeZKNodePath(path, ZKNodeType.WORKER, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
registerListener(getZNodeParentPath(ZKNodeType.WORKER), new AbstractListener() {
|
||||
@Override
|
||||
protected void dataChanged(CuratorFramework client, TreeCacheEvent event, String path) {
|
||||
switch (event.getType()) {
|
||||
case NODE_ADDED:
|
||||
logger.info("worker node added : {}", path);
|
||||
break;
|
||||
case NODE_REMOVED:
|
||||
logger.info("worker node deleted : {}", path);
|
||||
removeZKNodePath(path, ZKNodeType.WORKER, true);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
}catch (Exception e){
|
||||
logger.error("listener worker failed : " + e.getMessage(),e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
@ -16,8 +16,10 @@
|
||||
*/
|
||||
package org.apache.dolphinscheduler.server.zk;
|
||||
|
||||
import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.common.enums.ZKNodeType;
|
||||
import org.apache.dolphinscheduler.common.zk.AbstractListener;
|
||||
import org.apache.dolphinscheduler.common.zk.AbstractZKClient;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.curator.framework.CuratorFramework;
|
||||
@ -27,6 +29,7 @@ import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
|
||||
import org.apache.curator.utils.ThreadUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.concurrent.ThreadFactory;
|
||||
|
||||
@ -35,6 +38,7 @@ import java.util.concurrent.ThreadFactory;
|
||||
* zookeeper worker client
|
||||
* single instance
|
||||
*/
|
||||
@Component
|
||||
public class ZKWorkerClient extends AbstractZKClient {
|
||||
|
||||
/**
|
||||
@ -42,11 +46,6 @@ public class ZKWorkerClient extends AbstractZKClient {
|
||||
*/
|
||||
private static final Logger logger = LoggerFactory.getLogger(ZKWorkerClient.class);
|
||||
|
||||
/**
|
||||
* thread factory
|
||||
*/
|
||||
private static final ThreadFactory defaultThreadFactory = ThreadUtils.newGenericThreadFactory("Worker-Main-Thread");
|
||||
|
||||
|
||||
/**
|
||||
* worker znode
|
||||
@ -54,24 +53,10 @@ public class ZKWorkerClient extends AbstractZKClient {
|
||||
private String workerZNode = null;
|
||||
|
||||
|
||||
/**
|
||||
* zookeeper worker client
|
||||
*/
|
||||
private static ZKWorkerClient zkWorkerClient = null;
|
||||
|
||||
/**
|
||||
* worker path children cache
|
||||
*/
|
||||
private PathChildrenCache workerPathChildrenCache;
|
||||
|
||||
private ZKWorkerClient(){
|
||||
init();
|
||||
}
|
||||
|
||||
/**
|
||||
* init
|
||||
*/
|
||||
private void init(){
|
||||
public void init(){
|
||||
|
||||
// init system znode
|
||||
this.initSystemZNode();
|
||||
@ -83,31 +68,6 @@ public class ZKWorkerClient extends AbstractZKClient {
|
||||
this.registWorker();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close(){
|
||||
try {
|
||||
if(workerPathChildrenCache != null){
|
||||
workerPathChildrenCache.close();
|
||||
}
|
||||
super.close();
|
||||
} catch (Exception ignore) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get zookeeper worker client
|
||||
*
|
||||
* @return ZKWorkerClient
|
||||
*/
|
||||
public static synchronized ZKWorkerClient getZKWorkerClient(){
|
||||
if(zkWorkerClient == null){
|
||||
zkWorkerClient = new ZKWorkerClient();
|
||||
}
|
||||
return zkWorkerClient;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* register worker
|
||||
*/
|
||||
@ -128,34 +88,25 @@ public class ZKWorkerClient extends AbstractZKClient {
|
||||
* monitor worker
|
||||
*/
|
||||
private void listenerWorker(){
|
||||
workerPathChildrenCache = new PathChildrenCache(zkClient, getZNodeParentPath(ZKNodeType.WORKER), true, defaultThreadFactory);
|
||||
try {
|
||||
workerPathChildrenCache.start();
|
||||
workerPathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {
|
||||
@Override
|
||||
public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {
|
||||
switch (event.getType()) {
|
||||
case CHILD_ADDED:
|
||||
logger.info("node added : {}" ,event.getData().getPath());
|
||||
break;
|
||||
case CHILD_REMOVED:
|
||||
String path = event.getData().getPath();
|
||||
//find myself dead
|
||||
String serverHost = getHostByEventDataPath(path);
|
||||
if(checkServerSelfDead(serverHost, ZKNodeType.WORKER)){
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case CHILD_UPDATED:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
registerListener(getZNodeParentPath(ZKNodeType.WORKER), new AbstractListener() {
|
||||
@Override
|
||||
protected void dataChanged(CuratorFramework client, TreeCacheEvent event, String path) {
|
||||
switch (event.getType()) {
|
||||
case NODE_ADDED:
|
||||
logger.info("worker node added : {}", path);
|
||||
break;
|
||||
case NODE_REMOVED:
|
||||
//find myself dead
|
||||
String serverHost = getHostByEventDataPath(path);
|
||||
if(checkServerSelfDead(serverHost, ZKNodeType.WORKER)){
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
});
|
||||
}catch (Exception e){
|
||||
logger.error("monitor worker failed : " + e.getMessage(),e);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@ -167,13 +118,4 @@ public class ZKWorkerClient extends AbstractZKClient {
|
||||
return workerZNode;
|
||||
}
|
||||
|
||||
/**
|
||||
* get worker lock path
|
||||
* @return worker lock path
|
||||
*/
|
||||
public String getWorkerLockPath(){
|
||||
return conf.getString(Constants.ZOOKEEPER_DOLPHINSCHEDULER_LOCK_WORKERS);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -15,7 +15,4 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
logging.config=classpath:master_logback.xml
|
||||
|
||||
# server port
|
||||
server.port=5566
|
||||
logging.config=classpath:master_logback.xml
|
@ -16,6 +16,3 @@
|
||||
#
|
||||
|
||||
logging.config=classpath:worker_logback.xml
|
||||
|
||||
# server port
|
||||
server.port=7788
|
||||
|
@ -18,6 +18,8 @@
|
||||
|
||||
<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
|
||||
<configuration scan="true" scanPeriod="120 seconds">
|
||||
<conversionRule conversionWord="msg"
|
||||
converterClass="org.apache.dolphinscheduler.server.worker.log.SensitiveDataConverter"/>
|
||||
<property name="log.base" value="logs"/>
|
||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
@ -31,7 +33,7 @@
|
||||
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
|
||||
<level>INFO</level>
|
||||
</filter>
|
||||
<filter class="org.apache.dolphinscheduler.server.worker.log.TaskLogFilter"></filter>
|
||||
<filter class="org.apache.dolphinscheduler.server.worker.log.TaskLogFilter"/>
|
||||
<Discriminator class="org.apache.dolphinscheduler.server.worker.log.TaskLogDiscriminator">
|
||||
<key>taskAppId</key>
|
||||
<logBase>${log.base}</logBase>
|
||||
|
@ -0,0 +1,131 @@
|
||||
/*
|
||||
* 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.server.utils;
|
||||
|
||||
import org.apache.dolphinscheduler.common.enums.ProgramType;
|
||||
import org.apache.dolphinscheduler.common.process.ResourceInfo;
|
||||
import org.apache.dolphinscheduler.common.task.flink.FlinkParameters;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertSame;
|
||||
|
||||
/**
|
||||
* Test FlinkArgsUtils
|
||||
*/
|
||||
public class FlinkArgsUtilsTest {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(FlinkArgsUtilsTest.class);
|
||||
|
||||
public String mode = "cluster";
|
||||
public int slot = 2;
|
||||
public String appName = "testFlink";
|
||||
public int taskManager = 4;
|
||||
public String taskManagerMemory = "2G";
|
||||
public String jobManagerMemory = "4G";
|
||||
public ProgramType programType = ProgramType.JAVA;
|
||||
public String mainClass = "com.test";
|
||||
public ResourceInfo mainJar = null;
|
||||
public String mainArgs = "testArgs";
|
||||
public String queue = "queue1";
|
||||
public String others = "--input file:///home";
|
||||
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
|
||||
ResourceInfo main = new ResourceInfo();
|
||||
main.setRes("testflink-1.0.0-SNAPSHOT.jar");
|
||||
mainJar = main;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test buildArgs
|
||||
*/
|
||||
@Test
|
||||
public void testBuildArgs() {
|
||||
|
||||
//Define params
|
||||
FlinkParameters param = new FlinkParameters();
|
||||
param.setDeployMode(mode);
|
||||
param.setMainClass(mainClass);
|
||||
param.setAppName(appName);
|
||||
param.setSlot(slot);
|
||||
param.setTaskManager(taskManager);
|
||||
param.setJobManagerMemory(jobManagerMemory);
|
||||
param.setTaskManagerMemory(taskManagerMemory);
|
||||
param.setMainJar(mainJar);
|
||||
param.setProgramType(programType);
|
||||
param.setMainArgs(mainArgs);
|
||||
param.setQueue(queue);
|
||||
param.setOthers(others);
|
||||
|
||||
//Invoke buildArgs
|
||||
List<String> result = FlinkArgsUtils.buildArgs(param);
|
||||
for (String s : result) {
|
||||
logger.info(s);
|
||||
}
|
||||
|
||||
//Expected values and order
|
||||
assertEquals(result.size(),20);
|
||||
|
||||
assertEquals(result.get(0),"-m");
|
||||
assertEquals(result.get(1),"yarn-cluster");
|
||||
|
||||
assertEquals(result.get(2),"-ys");
|
||||
assertSame(Integer.valueOf(result.get(3)),slot);
|
||||
|
||||
assertEquals(result.get(4),"-ynm");
|
||||
assertEquals(result.get(5),appName);
|
||||
|
||||
assertEquals(result.get(6),"-yn");
|
||||
assertSame(Integer.valueOf(result.get(7)),taskManager);
|
||||
|
||||
assertEquals(result.get(8),"-yjm");
|
||||
assertEquals(result.get(9),jobManagerMemory);
|
||||
|
||||
assertEquals(result.get(10),"-ytm");
|
||||
assertEquals(result.get(11),taskManagerMemory);
|
||||
|
||||
assertEquals(result.get(12),"-d");
|
||||
|
||||
assertEquals(result.get(13),"-c");
|
||||
assertEquals(result.get(14),mainClass);
|
||||
|
||||
assertEquals(result.get(15),mainJar.getRes());
|
||||
assertEquals(result.get(16),mainArgs);
|
||||
|
||||
assertEquals(result.get(17),"--qu");
|
||||
assertEquals(result.get(18),queue);
|
||||
|
||||
assertEquals(result.get(19),others);
|
||||
|
||||
//Others param without --qu
|
||||
FlinkParameters param1 = new FlinkParameters();
|
||||
param1.setQueue(queue);
|
||||
param1.setDeployMode(mode);
|
||||
result = FlinkArgsUtils.buildArgs(param1);
|
||||
assertEquals(result.size(),5);
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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.server.utils;
|
||||
|
||||
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class SensitiveLogUtilTest {
|
||||
|
||||
@Test
|
||||
public void testMaskDataSourcePwd() {
|
||||
|
||||
String password = "123456";
|
||||
String emptyPassword = "";
|
||||
|
||||
Assert.assertEquals(Constants.PASSWORD_DEFAULT, SensitiveLogUtil.maskDataSourcePwd(password));
|
||||
Assert.assertEquals("", SensitiveLogUtil.maskDataSourcePwd(emptyPassword));
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
/*
|
||||
* 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.server.utils;
|
||||
|
||||
import org.apache.dolphinscheduler.common.enums.ProgramType;
|
||||
import org.apache.dolphinscheduler.common.process.ResourceInfo;
|
||||
import org.apache.dolphinscheduler.common.task.spark.SparkParameters;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertSame;
|
||||
|
||||
/**
|
||||
* Test SparkArgsUtils
|
||||
*/
|
||||
public class SparkArgsUtilsTest {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(SparkArgsUtilsTest.class);
|
||||
|
||||
public String mode = "cluster";
|
||||
public String mainClass = "com.test";
|
||||
public ResourceInfo mainJar = null;
|
||||
public String mainArgs = "partitions=2";
|
||||
public String driverMemory = "2G";
|
||||
public String executorMemory = "4G";
|
||||
public ProgramType programType = ProgramType.JAVA;
|
||||
public int driverCores = 2;
|
||||
public int executorCores = 6;
|
||||
public String sparkVersion = "SPARK1";
|
||||
public int numExecutors = 4;
|
||||
public String queue = "queue1";
|
||||
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
|
||||
ResourceInfo main = new ResourceInfo();
|
||||
main.setRes("testspark-1.0.0-SNAPSHOT.jar");
|
||||
mainJar = main;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test buildArgs
|
||||
*/
|
||||
@Test
|
||||
public void testBuildArgs() {
|
||||
|
||||
//Define params
|
||||
SparkParameters param = new SparkParameters();
|
||||
param.setDeployMode(mode);
|
||||
param.setMainClass(mainClass);
|
||||
param.setDriverCores(driverCores);
|
||||
param.setDriverMemory(driverMemory);
|
||||
param.setExecutorCores(executorCores);
|
||||
param.setExecutorMemory(executorMemory);
|
||||
param.setMainJar(mainJar);
|
||||
param.setNumExecutors(numExecutors);
|
||||
param.setProgramType(programType);
|
||||
param.setSparkVersion(sparkVersion);
|
||||
param.setMainArgs(mainArgs);
|
||||
param.setQueue(queue);
|
||||
|
||||
//Invoke buildArgs
|
||||
List<String> result = SparkArgsUtils.buildArgs(param);
|
||||
for (String s : result) {
|
||||
logger.info(s);
|
||||
}
|
||||
|
||||
//Expected values and order
|
||||
assertEquals(result.size(),20);
|
||||
|
||||
assertEquals(result.get(0),"--master");
|
||||
assertEquals(result.get(1),"yarn");
|
||||
|
||||
assertEquals(result.get(2),"--deploy-mode");
|
||||
assertEquals(result.get(3),mode);
|
||||
|
||||
assertEquals(result.get(4),"--class");
|
||||
assertEquals(result.get(5),mainClass);
|
||||
|
||||
assertEquals(result.get(6),"--driver-cores");
|
||||
assertSame(Integer.valueOf(result.get(7)),driverCores);
|
||||
|
||||
assertEquals(result.get(8),"--driver-memory");
|
||||
assertEquals(result.get(9),driverMemory);
|
||||
|
||||
assertEquals(result.get(10),"--num-executors");
|
||||
assertSame(Integer.valueOf(result.get(11)),numExecutors);
|
||||
|
||||
assertEquals(result.get(12),"--executor-cores");
|
||||
assertSame(Integer.valueOf(result.get(13)),executorCores);
|
||||
|
||||
assertEquals(result.get(14),"--executor-memory");
|
||||
assertEquals(result.get(15),executorMemory);
|
||||
|
||||
assertEquals(result.get(16),"--queue");
|
||||
assertEquals(result.get(17),queue);
|
||||
assertEquals(result.get(18),mainJar.getRes());
|
||||
assertEquals(result.get(19),mainArgs);
|
||||
|
||||
//Others param without --queue
|
||||
SparkParameters param1 = new SparkParameters();
|
||||
param1.setOthers("--files xxx/hive-site.xml");
|
||||
param1.setQueue(queue);
|
||||
result = SparkArgsUtils.buildArgs(param1);
|
||||
assertEquals(result.size(),7);
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* 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.server.worker.log;
|
||||
|
||||
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.server.utils.SensitiveLogUtil;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class SensitiveDataConverterTest {
|
||||
|
||||
private final Logger logger = LoggerFactory.getLogger(SensitiveDataConverterTest.class);
|
||||
|
||||
/**
|
||||
* password pattern
|
||||
*/
|
||||
private final Pattern pwdPattern = Pattern.compile(Constants.DATASOURCE_PASSWORD_REGEX);
|
||||
|
||||
|
||||
/**
|
||||
* mask sensitive logMsg - sql task datasource password
|
||||
*/
|
||||
@Test
|
||||
public void testPwdLogMsgConverter() {
|
||||
|
||||
String logMsg = "{\"address\":\"jdbc:mysql://192.168.xx.xx:3306\"," +
|
||||
"\"database\":\"carbond\"," +
|
||||
"\"jdbcUrl\":\"jdbc:mysql://192.168.xx.xx:3306/ods\"," +
|
||||
"\"user\":\"view\"," +
|
||||
"\"password\":\"view1\"}";
|
||||
|
||||
String maskLogMsg = "{\"address\":\"jdbc:mysql://192.168.xx.xx:3306\"," +
|
||||
"\"database\":\"carbond\"," +
|
||||
"\"jdbcUrl\":\"jdbc:mysql://192.168.xx.xx:3306/ods\"," +
|
||||
"\"user\":\"view\"," +
|
||||
"\"password\":\"******\"}";
|
||||
|
||||
|
||||
logger.info("parameter : {}", logMsg);
|
||||
logger.info("parameter : {}", passwordHandler(pwdPattern, logMsg));
|
||||
|
||||
Assert.assertNotEquals(logMsg, passwordHandler(pwdPattern, logMsg));
|
||||
Assert.assertEquals(maskLogMsg, passwordHandler(pwdPattern, logMsg));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* password regex test
|
||||
*
|
||||
* @param logMsg original log
|
||||
*/
|
||||
private static String passwordHandler(Pattern pattern, String logMsg) {
|
||||
|
||||
Matcher matcher = pattern.matcher(logMsg);
|
||||
|
||||
StringBuffer sb = new StringBuffer(logMsg.length());
|
||||
|
||||
while (matcher.find()) {
|
||||
|
||||
String password = matcher.group();
|
||||
|
||||
String maskPassword = SensitiveLogUtil.maskDataSourcePwd(password);
|
||||
|
||||
matcher.appendReplacement(sb, maskPassword);
|
||||
}
|
||||
matcher.appendTail(sb);
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -202,28 +202,15 @@ const baseConfig = {
|
||||
],
|
||||
alias: {
|
||||
'@': resolve('src/js'),
|
||||
'~': resolve('src/lib')
|
||||
'~': resolve('src/lib'),
|
||||
'jquery':'jquery/dist/jquery.min.js',
|
||||
'jquery-ui': 'jquery-ui'
|
||||
},
|
||||
extensions: ['.js', 'json', '.vue', '.scss']
|
||||
},
|
||||
externals: {
|
||||
'vue': 'Vue',
|
||||
'vuex': 'Vuex',
|
||||
'vue-router': 'VueRouter',
|
||||
'jquery': '$',
|
||||
'lodash': '_',
|
||||
'bootstrap': 'bootstrap',
|
||||
'd3': 'd3',
|
||||
'canvg': 'canvg',
|
||||
'html2canvas': 'html2canvas',
|
||||
'./jsplumb': 'jsPlumb',
|
||||
'./highlight.js': 'highlight.js',
|
||||
'./clipboard': 'clipboard',
|
||||
'./codemirror': 'CodeMirror'
|
||||
},
|
||||
plugins: [
|
||||
new VueLoaderPlugin(),
|
||||
new webpack.ProvidePlugin({ vue: 'Vue', _: 'lodash' }),
|
||||
new webpack.ProvidePlugin({ vue: 'Vue', _: 'lodash',jQuery:"jquery/dist/jquery.min.js",$:"jquery/dist/jquery.min.js" }),
|
||||
new webpack.DefinePlugin({
|
||||
PUBLIC_PATH: JSON.stringify(process.env.PUBLIC_PATH ? process.env.PUBLIC_PATH : '')
|
||||
}),
|
||||
|
@ -1,14 +1,14 @@
|
||||
{
|
||||
"name": "dolphinscheduler",
|
||||
"name": "dolphinscheduler-ui-frontend",
|
||||
"version": "1.0.0",
|
||||
"description": "dolphinscheduler",
|
||||
"author": "gongzijian <gongzijian@analysys.com.cn>",
|
||||
"description": "A vue.js project",
|
||||
"author": "DolphinScheduler",
|
||||
"scripts": {
|
||||
"build": "npm run clean && cross-env NODE_ENV=production webpack --config ./build/webpack.config.prod.js && cp -rf src/3rdcss dist && cp -rf src/3rdjs dist",
|
||||
"build": "npm run clean && cross-env NODE_ENV=production webpack --config ./build/webpack.config.prod.js",
|
||||
"dev": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.config.dev.js",
|
||||
"clean": "rimraf dist",
|
||||
"start": "npm run dev",
|
||||
"build:release": "npm run clean && cross-env NODE_ENV=production PUBLIC_PATH=/dolphinscheduler/ui webpack --config ./build/webpack.config.release.js && cp -rf src/3rdcss dist && cp -rf src/3rdjs dist"
|
||||
"build:release": "npm run clean && cross-env NODE_ENV=production PUBLIC_PATH=/dolphinscheduler/ui webpack --config ./build/webpack.config.release.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"ans-ui": "1.1.7",
|
||||
@ -19,15 +19,17 @@
|
||||
"codemirror": "^5.43.0",
|
||||
"d3": "^3.5.17",
|
||||
"dayjs": "^1.7.8",
|
||||
"echarts": "^4.1.0",
|
||||
"echarts": "4.1.0",
|
||||
"html2canvas": "^0.5.0-beta4",
|
||||
"jquery": "1.12.4",
|
||||
"jquery": "3.3.1",
|
||||
"jquery-ui": "^1.12.1",
|
||||
"js-cookie": "^2.2.1",
|
||||
"jsplumb": "^2.8.6",
|
||||
"lodash": "^4.17.11",
|
||||
"vue": "^2.5.17",
|
||||
"vue-router": "2.7.0",
|
||||
"vuex": "^3.0.0",
|
||||
"vuex-router-sync": "^4.1.2"
|
||||
"vuex-router-sync": "^5.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^9.1.0",
|
||||
|
@ -32,55 +32,120 @@
|
||||
<node.version>v12.12.0</node.version>
|
||||
<npm.version>6.11.3</npm.version>
|
||||
</properties>
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>release</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.github.eirslett</groupId>
|
||||
<artifactId>frontend-maven-plugin</artifactId>
|
||||
<version>${frontend-maven-plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>install node and npm</id>
|
||||
<goals>
|
||||
<goal>install-node-and-npm</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<nodeVersion>${node.version}</nodeVersion>
|
||||
<npmVersion>${npm.version}</npmVersion>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install node-sass --unsafe-perm</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<arguments>install node-sass --unsafe-perm</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<arguments>install</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm run build:release</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<arguments>run build:release</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
<profile>
|
||||
<id>nginx</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.github.eirslett</groupId>
|
||||
<artifactId>frontend-maven-plugin</artifactId>
|
||||
<version>${frontend-maven-plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>install node and npm</id>
|
||||
<goals>
|
||||
<goal>install-node-and-npm</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<nodeVersion>${node.version}</nodeVersion>
|
||||
<npmVersion>${npm.version}</npmVersion>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install node-sass --unsafe-perm</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<arguments>install node-sass --unsafe-perm</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<arguments>install</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm run build</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<arguments>run build</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
</build>
|
||||
</profile>
|
||||
|
||||
|
||||
</profiles>
|
||||
|
||||
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.github.eirslett</groupId>
|
||||
<artifactId>frontend-maven-plugin</artifactId>
|
||||
<version>${frontend-maven-plugin.version}</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>install node and npm</id>
|
||||
<goals>
|
||||
<goal>install-node-and-npm</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<nodeVersion>${node.version}</nodeVersion>
|
||||
<npmVersion>${npm.version}</npmVersion>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install node-sass --unsafe-perm</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<arguments>install node-sass --unsafe-perm</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm install</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<phase>generate-resources</phase>
|
||||
<configuration>
|
||||
<arguments>install</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>npm run build:release</id>
|
||||
<goals>
|
||||
<goal>npm</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<arguments>run build:release</arguments>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user