Merge branch 'json_split' of https://github.com/apache/incubator-dolphinscheduler into json-split
# Conflicts: # dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessInstanceService.java # dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessInstance.java
This commit is contained in:
commit
59a542d68f
|
|
@ -4,15 +4,9 @@
|
|||
.zip
|
||||
.gz
|
||||
.DS_Store
|
||||
.idea
|
||||
.idea/
|
||||
.idea/*
|
||||
.target
|
||||
.target/
|
||||
**/**/target/**
|
||||
target/*
|
||||
*/target
|
||||
*/target/*
|
||||
.idea/
|
||||
target/
|
||||
.settings
|
||||
.nbproject
|
||||
.classpath
|
||||
|
|
@ -28,123 +22,23 @@ node_modules
|
|||
npm-debug.log
|
||||
.vscode
|
||||
logs/*
|
||||
.mvn/
|
||||
.www
|
||||
t.*
|
||||
.factorypath
|
||||
Chart.lock
|
||||
yarn.lock
|
||||
package-lock.json
|
||||
config.gypi
|
||||
test/coverage
|
||||
/docs/zh_CN/介绍
|
||||
/docs/zh_CN/贡献代码.md
|
||||
/dolphinscheduler-common/src/main/resources/zookeeper.properties
|
||||
dolphinscheduler-common/src/main/resources/zookeeper.properties
|
||||
dolphinscheduler-dao/src/main/resources/dao/data_source.properties
|
||||
dolphinscheduler-alert/logs/
|
||||
dolphinscheduler-alert/src/main/resources/alert.properties_bak
|
||||
dolphinscheduler-alert/src/main/resources/logback.xml
|
||||
dolphinscheduler-server/src/main/resources/logback.xml
|
||||
dolphinscheduler-ui/dist
|
||||
dolphinscheduler-ui/node
|
||||
dolphinscheduler-ui/dist/css/common.16ac5d9.css
|
||||
dolphinscheduler-ui/dist/css/home/index.b444b91.css
|
||||
dolphinscheduler-ui/dist/css/login/index.5866c64.css
|
||||
dolphinscheduler-ui/dist/js/0.ac94e5d.js
|
||||
dolphinscheduler-ui/dist/js/0.ac94e5d.js.map
|
||||
dolphinscheduler-ui/dist/js/1.0b043a3.js
|
||||
dolphinscheduler-ui/dist/js/1.0b043a3.js.map
|
||||
dolphinscheduler-ui/dist/js/10.1bce3dc.js
|
||||
dolphinscheduler-ui/dist/js/10.1bce3dc.js.map
|
||||
dolphinscheduler-ui/dist/js/11.79f04d8.js
|
||||
dolphinscheduler-ui/dist/js/11.79f04d8.js.map
|
||||
dolphinscheduler-ui/dist/js/12.420daa5.js
|
||||
dolphinscheduler-ui/dist/js/12.420daa5.js.map
|
||||
dolphinscheduler-ui/dist/js/13.e5bae1c.js
|
||||
dolphinscheduler-ui/dist/js/13.e5bae1c.js.map
|
||||
dolphinscheduler-ui/dist/js/14.f2a0dca.js
|
||||
dolphinscheduler-ui/dist/js/14.f2a0dca.js.map
|
||||
dolphinscheduler-ui/dist/js/15.45373e8.js
|
||||
dolphinscheduler-ui/dist/js/15.45373e8.js.map
|
||||
dolphinscheduler-ui/dist/js/16.fecb0fc.js
|
||||
dolphinscheduler-ui/dist/js/16.fecb0fc.js.map
|
||||
dolphinscheduler-ui/dist/js/17.84be279.js
|
||||
dolphinscheduler-ui/dist/js/17.84be279.js.map
|
||||
dolphinscheduler-ui/dist/js/18.307ea70.js
|
||||
dolphinscheduler-ui/dist/js/18.307ea70.js.map
|
||||
dolphinscheduler-ui/dist/js/19.144db9c.js
|
||||
dolphinscheduler-ui/dist/js/19.144db9c.js.map
|
||||
dolphinscheduler-ui/dist/js/2.8b4ef29.js
|
||||
dolphinscheduler-ui/dist/js/2.8b4ef29.js.map
|
||||
dolphinscheduler-ui/dist/js/20.4c527e9.js
|
||||
dolphinscheduler-ui/dist/js/20.4c527e9.js.map
|
||||
dolphinscheduler-ui/dist/js/21.831b2a2.js
|
||||
dolphinscheduler-ui/dist/js/21.831b2a2.js.map
|
||||
dolphinscheduler-ui/dist/js/22.2b4bb2a.js
|
||||
dolphinscheduler-ui/dist/js/22.2b4bb2a.js.map
|
||||
dolphinscheduler-ui/dist/js/23.81467ef.js
|
||||
dolphinscheduler-ui/dist/js/23.81467ef.js.map
|
||||
dolphinscheduler-ui/dist/js/24.54a00e4.js
|
||||
dolphinscheduler-ui/dist/js/24.54a00e4.js.map
|
||||
dolphinscheduler-ui/dist/js/25.8d7bd36.js
|
||||
dolphinscheduler-ui/dist/js/25.8d7bd36.js.map
|
||||
dolphinscheduler-ui/dist/js/26.2ec5e78.js
|
||||
dolphinscheduler-ui/dist/js/26.2ec5e78.js.map
|
||||
dolphinscheduler-ui/dist/js/27.3ab48c2.js
|
||||
dolphinscheduler-ui/dist/js/27.3ab48c2.js.map
|
||||
dolphinscheduler-ui/dist/js/28.363088a.js
|
||||
dolphinscheduler-ui/dist/js/28.363088a.js.map
|
||||
dolphinscheduler-ui/dist/js/29.6c5853a.js
|
||||
dolphinscheduler-ui/dist/js/29.6c5853a.js.map
|
||||
dolphinscheduler-ui/dist/js/3.a0edb5b.js
|
||||
dolphinscheduler-ui/dist/js/3.a0edb5b.js.map
|
||||
dolphinscheduler-ui/dist/js/30.940fdd3.js
|
||||
dolphinscheduler-ui/dist/js/30.940fdd3.js.map
|
||||
dolphinscheduler-ui/dist/js/31.168a460.js
|
||||
dolphinscheduler-ui/dist/js/31.168a460.js.map
|
||||
dolphinscheduler-ui/dist/js/32.8df6594.js
|
||||
dolphinscheduler-ui/dist/js/32.8df6594.js.map
|
||||
dolphinscheduler-ui/dist/js/33.4480bbe.js
|
||||
dolphinscheduler-ui/dist/js/33.4480bbe.js.map
|
||||
dolphinscheduler-ui/dist/js/34.b407fe1.js
|
||||
dolphinscheduler-ui/dist/js/34.b407fe1.js.map
|
||||
dolphinscheduler-ui/dist/js/35.f340b0a.js
|
||||
dolphinscheduler-ui/dist/js/35.f340b0a.js.map
|
||||
dolphinscheduler-ui/dist/js/36.8880c2d.js
|
||||
dolphinscheduler-ui/dist/js/36.8880c2d.js.map
|
||||
dolphinscheduler-ui/dist/js/37.ea2a25d.js
|
||||
dolphinscheduler-ui/dist/js/37.ea2a25d.js.map
|
||||
dolphinscheduler-ui/dist/js/38.98a59ee.js
|
||||
dolphinscheduler-ui/dist/js/38.98a59ee.js.map
|
||||
dolphinscheduler-ui/dist/js/39.a5e958a.js
|
||||
dolphinscheduler-ui/dist/js/39.a5e958a.js.map
|
||||
dolphinscheduler-ui/dist/js/4.4ca44db.js
|
||||
dolphinscheduler-ui/dist/js/4.4ca44db.js.map
|
||||
dolphinscheduler-ui/dist/js/40.e187b1e.js
|
||||
dolphinscheduler-ui/dist/js/40.e187b1e.js.map
|
||||
dolphinscheduler-ui/dist/js/41.0e89182.js
|
||||
dolphinscheduler-ui/dist/js/41.0e89182.js.map
|
||||
dolphinscheduler-ui/dist/js/42.341047c.js
|
||||
dolphinscheduler-ui/dist/js/42.341047c.js.map
|
||||
dolphinscheduler-ui/dist/js/43.27b8228.js
|
||||
dolphinscheduler-ui/dist/js/43.27b8228.js.map
|
||||
dolphinscheduler-ui/dist/js/44.e8869bc.js
|
||||
dolphinscheduler-ui/dist/js/44.e8869bc.js.map
|
||||
dolphinscheduler-ui/dist/js/45.8d54901.js
|
||||
dolphinscheduler-ui/dist/js/45.8d54901.js.map
|
||||
dolphinscheduler-ui/dist/js/5.e1ed7f3.js
|
||||
dolphinscheduler-ui/dist/js/5.e1ed7f3.js.map
|
||||
dolphinscheduler-ui/dist/js/6.241ba07.js
|
||||
dolphinscheduler-ui/dist/js/6.241ba07.js.map
|
||||
dolphinscheduler-ui/dist/js/7.ab2e297.js
|
||||
dolphinscheduler-ui/dist/js/7.ab2e297.js.map
|
||||
dolphinscheduler-ui/dist/js/8.83ff814.js
|
||||
dolphinscheduler-ui/dist/js/8.83ff814.js.map
|
||||
dolphinscheduler-ui/dist/js/9.39cb29f.js
|
||||
dolphinscheduler-ui/dist/js/9.39cb29f.js.map
|
||||
dolphinscheduler-ui/dist/js/common.733e342.js
|
||||
dolphinscheduler-ui/dist/js/common.733e342.js.map
|
||||
dolphinscheduler-ui/dist/js/home/index.78a5d12.js
|
||||
dolphinscheduler-ui/dist/js/home/index.78a5d12.js.map
|
||||
dolphinscheduler-ui/dist/js/login/index.291b8e3.js
|
||||
dolphinscheduler-ui/dist/js/login/index.291b8e3.js.map
|
||||
dolphinscheduler-ui/dist/lib/external/
|
||||
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/taskInstance/index.vue
|
||||
/dolphinscheduler-dao/src/main/resources/dao/data_source.properties
|
||||
|
||||
docker/build/apache-dolphinscheduler*
|
||||
|
|
|
|||
|
|
@ -1,25 +0,0 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
dependencies:
|
||||
- name: postgresql
|
||||
version: 8.x.x
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
condition: postgresql.enabled
|
||||
- name: zookeeper
|
||||
version: 5.x.x
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
condition: redis.enabled
|
||||
|
|
@ -1,25 +0,0 @@
|
|||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
dependencies:
|
||||
- name: postgresql
|
||||
version: 8.x.x
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
condition: postgresql.enabled
|
||||
- name: zookeeper
|
||||
version: 5.x.x
|
||||
repository: https://charts.bitnami.com/bitnami
|
||||
condition: redis.enabled
|
||||
|
|
@ -43,6 +43,11 @@ public class PropertyUtils {
|
|||
|
||||
private static final Properties properties = new Properties();
|
||||
|
||||
/**
|
||||
* init properties
|
||||
*/
|
||||
private static final PropertyUtils propertyUtils = new PropertyUtils();
|
||||
|
||||
private PropertyUtils() {
|
||||
init();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,7 @@
|
|||
#eg : Alert Server Listener port
|
||||
|
||||
#alert.plugin.dir config the Alert Plugin dir . AlertServer while find and load the Alert Plugin Jar from this dir when deploy and start AlertServer on the server .
|
||||
#eg :
|
||||
alert.plugin.dir=/opt/soft/spi/lib/plugin/alert
|
||||
#eg :alert.plugin.dir=/opt/soft/spi/lib/plugin/alert
|
||||
|
||||
#maven.local.repository=/Users/gaojun/Documents/jianguoyun/localRepository
|
||||
|
||||
|
|
|
|||
|
|
@ -17,13 +17,18 @@
|
|||
|
||||
package org.apache.dolphinscheduler.alert.utils;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import org.apache.dolphinscheduler.common.enums.ZKNodeType;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Test PropertyUtils
|
||||
* and the resource path is src/test/resources/alert.properties.
|
||||
|
|
@ -196,19 +201,19 @@ public class PropertyUtilsTest {
|
|||
public void testGetEnum() {
|
||||
|
||||
//Expected MASTER
|
||||
ZKNodeType zkNodeType = PropertyUtils.getEnum("test.server.enum1", ZKNodeType.class,ZKNodeType.WORKER);
|
||||
ZKNodeType zkNodeType = PropertyUtils.getEnum("test.server.enum1", ZKNodeType.class, ZKNodeType.WORKER);
|
||||
assertEquals(ZKNodeType.MASTER, zkNodeType);
|
||||
|
||||
//Expected DEAD_SERVER
|
||||
zkNodeType = PropertyUtils.getEnum("test.server.enum2", ZKNodeType.class,ZKNodeType.WORKER);
|
||||
zkNodeType = PropertyUtils.getEnum("test.server.enum2", ZKNodeType.class, ZKNodeType.WORKER);
|
||||
assertEquals(ZKNodeType.DEAD_SERVER, zkNodeType);
|
||||
|
||||
//If key is null, then return defaultval
|
||||
zkNodeType = PropertyUtils.getEnum(null, ZKNodeType.class,ZKNodeType.WORKER);
|
||||
zkNodeType = PropertyUtils.getEnum(null, ZKNodeType.class, ZKNodeType.WORKER);
|
||||
assertEquals(ZKNodeType.WORKER, zkNodeType);
|
||||
|
||||
//If the value doesn't define in enum ,it will log the error and return -1
|
||||
zkNodeType = PropertyUtils.getEnum("test.server.enum3", ZKNodeType.class,ZKNodeType.WORKER);
|
||||
zkNodeType = PropertyUtils.getEnum("test.server.enum3", ZKNodeType.class, ZKNodeType.WORKER);
|
||||
assertEquals(ZKNodeType.WORKER, zkNodeType);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,17 +17,20 @@
|
|||
|
||||
package org.apache.dolphinscheduler.api.configuration;
|
||||
|
||||
import org.apache.dolphinscheduler.api.interceptor.LocaleChangeInterceptor;
|
||||
import org.apache.dolphinscheduler.api.interceptor.LoginHandlerInterceptor;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.cors.CorsConfiguration;
|
||||
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
|
||||
import org.springframework.web.filter.CorsFilter;
|
||||
import org.springframework.web.servlet.LocaleResolver;
|
||||
import org.springframework.web.servlet.config.annotation.*;
|
||||
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
|
||||
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
|
||||
/**
|
||||
* application configuration
|
||||
*/
|
||||
|
|
@ -39,7 +42,17 @@ public class AppConfiguration implements WebMvcConfigurer {
|
|||
public static final String REGISTER_PATH_PATTERN = "/users/register";
|
||||
public static final String PATH_PATTERN = "/**";
|
||||
public static final String LOCALE_LANGUAGE_COOKIE = "language";
|
||||
public static final int COOKIE_MAX_AGE = 3600;
|
||||
|
||||
@Bean
|
||||
public CorsFilter corsFilter() {
|
||||
CorsConfiguration config = new CorsConfiguration();
|
||||
config.addAllowedOrigin("*");
|
||||
config.addAllowedMethod("*");
|
||||
config.addAllowedHeader("*");
|
||||
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
|
||||
configSource.registerCorsConfiguration(PATH_PATTERN, config);
|
||||
return new CorsFilter(configSource);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LoginHandlerInterceptor loginInterceptor() {
|
||||
|
|
@ -56,16 +69,14 @@ public class AppConfiguration implements WebMvcConfigurer {
|
|||
localeResolver.setCookieName(LOCALE_LANGUAGE_COOKIE);
|
||||
// set default locale
|
||||
localeResolver.setDefaultLocale(Locale.US);
|
||||
// set cookie max age
|
||||
localeResolver.setCookieMaxAge(COOKIE_MAX_AGE);
|
||||
// set language tag compliant
|
||||
localeResolver.setLanguageTagCompliant(false);
|
||||
return localeResolver;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LocaleChangeInterceptor localeChangeInterceptor() {
|
||||
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
|
||||
lci.setParamName("language");
|
||||
return lci;
|
||||
return new LocaleChangeInterceptor();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -94,11 +105,6 @@ public class AppConfiguration implements WebMvcConfigurer {
|
|||
registry.addViewController("/").setViewName("forward:/ui/index.html");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
registry.addMapping(PATH_PATTERN).allowedOrigins("*").allowedMethods("*");
|
||||
}
|
||||
|
||||
/**
|
||||
* Turn off suffix-based content negotiation
|
||||
*
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ import org.apache.dolphinscheduler.api.service.ProcessDefinitionService;
|
|||
import org.apache.dolphinscheduler.api.service.ProcessDefinitionVersionService;
|
||||
import org.apache.dolphinscheduler.api.utils.Result;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
import org.apache.dolphinscheduler.common.enums.ReleaseState;
|
||||
import org.apache.dolphinscheduler.common.utils.ParameterUtils;
|
||||
import org.apache.dolphinscheduler.common.utils.StringUtils;
|
||||
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
|
||||
|
|
@ -239,7 +240,7 @@ public class ProcessDefinitionController extends BaseController {
|
|||
@ApiImplicitParam(name = "locations", value = "PROCESS_DEFINITION_LOCATIONS", required = true, type = "String"),
|
||||
@ApiImplicitParam(name = "connects", value = "PROCESS_DEFINITION_CONNECTS", required = true, type = "String"),
|
||||
@ApiImplicitParam(name = "description", value = "PROCESS_DEFINITION_DESC", required = false, type = "String"),
|
||||
@ApiImplicitParam(name = "releaseState", value = "RELEASE_PROCESS_DEFINITION_NOTES", required = false, dataType = "Int", example = "0")
|
||||
@ApiImplicitParam(name = "releaseState", value = "RELEASE_PROCESS_DEFINITION_NOTES", required = false, dataType = "ReleaseState")
|
||||
})
|
||||
@PostMapping(value = "/update")
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
|
|
@ -252,7 +253,7 @@ public class ProcessDefinitionController extends BaseController {
|
|||
@RequestParam(value = "locations", required = false) String locations,
|
||||
@RequestParam(value = "connects", required = false) String connects,
|
||||
@RequestParam(value = "description", required = false) String description,
|
||||
@RequestParam(value = "releaseState", required = false, defaultValue = "0") int releaseState) {
|
||||
@RequestParam(value = "releaseState", required = false, defaultValue = "OFFLINE") ReleaseState releaseState) {
|
||||
|
||||
logger.info("login user {}, update process define, project name: {}, process define name: {}, "
|
||||
+ "process_definition_json: {}, desc: {}, locations:{}, connects:{}",
|
||||
|
|
@ -260,12 +261,12 @@ public class ProcessDefinitionController extends BaseController {
|
|||
Map<String, Object> result = processDefinitionService.updateProcessDefinition(loginUser, projectName, id, name,
|
||||
processDefinitionJson, description, locations, connects);
|
||||
// If the update fails, the result will be returned directly
|
||||
Status status = (Status) result.get("status");
|
||||
if (status.getCode() != 0) {
|
||||
if (result.get(Constants.STATUS) != Status.SUCCESS) {
|
||||
return returnDataList(result);
|
||||
}
|
||||
|
||||
// Judge whether to go online after editing,0 means offline, 1 means online
|
||||
if (releaseState == 1) {
|
||||
if (releaseState == ReleaseState.ONLINE) {
|
||||
result = processDefinitionService.releaseProcessDefinition(loginUser, projectName, id, releaseState);
|
||||
}
|
||||
return returnDataList(result);
|
||||
|
|
@ -367,7 +368,7 @@ public class ProcessDefinitionController extends BaseController {
|
|||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", required = true, type = "String"),
|
||||
@ApiImplicitParam(name = "processId", value = "PROCESS_DEFINITION_ID", required = true, dataType = "Int", example = "100"),
|
||||
@ApiImplicitParam(name = "releaseState", value = "PROCESS_DEFINITION_CONNECTS", required = true, dataType = "Int", example = "100"),
|
||||
@ApiImplicitParam(name = "releaseState", value = "PROCESS_DEFINITION_CONNECTS", required = true, dataType = "ReleaseState"),
|
||||
})
|
||||
@PostMapping(value = "/release")
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
|
|
@ -375,7 +376,7 @@ public class ProcessDefinitionController extends BaseController {
|
|||
public Result releaseProcessDefinition(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
|
||||
@ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
|
||||
@RequestParam(value = "processId", required = true) int processId,
|
||||
@RequestParam(value = "releaseState", required = true) int releaseState) {
|
||||
@RequestParam(value = "releaseState", required = true) ReleaseState releaseState) {
|
||||
|
||||
logger.info("login user {}, release process definition, project name: {}, release state: {}",
|
||||
loginUser.getUserName(), projectName, releaseState);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* 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.interceptor;
|
||||
|
||||
import org.apache.dolphinscheduler.api.service.BaseService;
|
||||
import org.apache.dolphinscheduler.common.Constants;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.context.i18n.LocaleContextHolder;
|
||||
import org.springframework.lang.Nullable;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
|
||||
|
||||
public class LocaleChangeInterceptor extends HandlerInterceptorAdapter {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
Cookie cookie = BaseService.getCookie(request, Constants.LOCALE_LANGUAGE);
|
||||
if (cookie != null) {
|
||||
// Proceed in cookie
|
||||
return true;
|
||||
}
|
||||
// Proceed in header
|
||||
String newLocale = request.getHeader(Constants.LOCALE_LANGUAGE);
|
||||
if (newLocale != null) {
|
||||
LocaleContextHolder.setLocale(parseLocaleValue(newLocale));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected Locale parseLocaleValue(String localeValue) {
|
||||
return StringUtils.parseLocale(localeValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
package org.apache.dolphinscheduler.api.service;
|
||||
|
||||
import org.apache.dolphinscheduler.common.enums.ReleaseState;
|
||||
import org.apache.dolphinscheduler.dao.entity.ProcessData;
|
||||
import org.apache.dolphinscheduler.dao.entity.User;
|
||||
|
||||
|
|
@ -190,7 +191,7 @@ public interface ProcessDefinitionService {
|
|||
Map<String, Object> releaseProcessDefinition(User loginUser,
|
||||
String projectName,
|
||||
int id,
|
||||
int releaseState);
|
||||
ReleaseState releaseState);
|
||||
|
||||
/**
|
||||
* batch export process definition by ids
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ public class UsersService extends BaseService {
|
|||
String queue,
|
||||
int state) throws Exception {
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
Map<String, Object> result = new HashMap<>(5);
|
||||
|
||||
//check all user params
|
||||
String msg = this.checkUserParams(userName, userPassword, email, phone);
|
||||
|
|
@ -773,7 +773,7 @@ public class UsersService extends BaseService {
|
|||
* @return user list
|
||||
*/
|
||||
public Map<String, Object> queryAllGeneralUsers(User loginUser) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
Map<String, Object> result = new HashMap<>(5);
|
||||
//only admin can operate
|
||||
if (check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)) {
|
||||
return result;
|
||||
|
|
@ -794,7 +794,7 @@ public class UsersService extends BaseService {
|
|||
* @return user list
|
||||
*/
|
||||
public Map<String, Object> queryUserList(User loginUser) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
Map<String, Object> result = new HashMap<>(5);
|
||||
//only admin can operate
|
||||
if (check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)) {
|
||||
return result;
|
||||
|
|
@ -838,7 +838,7 @@ public class UsersService extends BaseService {
|
|||
*/
|
||||
public Map<String, Object> unauthorizedUser(User loginUser, Integer alertgroupId) {
|
||||
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
Map<String, Object> result = new HashMap<>(5);
|
||||
//only admin can operate
|
||||
if (check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)) {
|
||||
return result;
|
||||
|
|
@ -874,7 +874,7 @@ public class UsersService extends BaseService {
|
|||
* @return authorized result code
|
||||
*/
|
||||
public Map<String, Object> authorizedUser(User loginUser, Integer alertgroupId) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
Map<String, Object> result = new HashMap<>(5);
|
||||
//only admin can operate
|
||||
if (check(result, !isAdmin(loginUser), Status.USER_NO_OPERATION_PERM)) {
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -583,7 +583,7 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
|
|||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = RuntimeException.class)
|
||||
public Map<String, Object> releaseProcessDefinition(User loginUser, String projectName, int id, int releaseState) {
|
||||
public Map<String, Object> releaseProcessDefinition(User loginUser, String projectName, int id, ReleaseState releaseState) {
|
||||
HashMap<String, Object> result = new HashMap<>();
|
||||
Project project = projectMapper.queryByName(projectName);
|
||||
|
||||
|
|
@ -593,17 +593,15 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
|
|||
return checkResult;
|
||||
}
|
||||
|
||||
ReleaseState state = ReleaseState.getEnum(releaseState);
|
||||
|
||||
// check state
|
||||
if (null == state) {
|
||||
if (null == releaseState) {
|
||||
putMsg(result, Status.REQUEST_PARAMS_NOT_VALID_ERROR, RELEASESTATE);
|
||||
return result;
|
||||
}
|
||||
|
||||
ProcessDefinition processDefinition = processDefineMapper.selectById(id);
|
||||
|
||||
switch (state) {
|
||||
switch (releaseState) {
|
||||
case ONLINE:
|
||||
// To check resources whether they are already cancel authorized or deleted
|
||||
String resourceIds = processDefinition.getResourceIds();
|
||||
|
|
@ -619,11 +617,11 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
|
|||
}
|
||||
}
|
||||
|
||||
processDefinition.setReleaseState(state);
|
||||
processDefinition.setReleaseState(releaseState);
|
||||
processDefineMapper.updateById(processDefinition);
|
||||
break;
|
||||
case OFFLINE:
|
||||
processDefinition.setReleaseState(state);
|
||||
processDefinition.setReleaseState(releaseState);
|
||||
processDefineMapper.updateById(processDefinition);
|
||||
List<Schedule> scheduleList = scheduleMapper.selectAllByProcessDefineArray(
|
||||
new int[]{processDefinition.getId()}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ import org.apache.dolphinscheduler.common.Constants;
|
|||
import org.apache.dolphinscheduler.common.enums.UserType;
|
||||
import org.apache.dolphinscheduler.common.utils.SnowFlakeUtils;
|
||||
import org.apache.dolphinscheduler.common.utils.SnowFlakeUtils.SnowFlakeException;
|
||||
import org.apache.dolphinscheduler.common.utils.CollectionUtils;
|
||||
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
|
||||
import org.apache.dolphinscheduler.dao.entity.Project;
|
||||
import org.apache.dolphinscheduler.dao.entity.ProjectUser;
|
||||
|
|
@ -450,21 +451,13 @@ public class ProjectServiceImpl extends BaseService implements ProjectService {
|
|||
*/
|
||||
public Map<String, Object> queryAllProjectList() {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
List<Project> projects = projectMapper.selectList(null);
|
||||
List<ProcessDefinition> processDefinitions = processDefinitionMapper.selectList(null);
|
||||
if (projects != null) {
|
||||
Set<Integer> set = new HashSet<>();
|
||||
for (ProcessDefinition processDefinition : processDefinitions) {
|
||||
set.add(processDefinition.getProjectId());
|
||||
}
|
||||
List<Project> tempDeletelist = new ArrayList<>();
|
||||
for (Project project : projects) {
|
||||
if (!set.contains(project.getId())) {
|
||||
tempDeletelist.add(project);
|
||||
}
|
||||
}
|
||||
projects.removeAll(tempDeletelist);
|
||||
List<Project> projects = new ArrayList<>();
|
||||
|
||||
List<Integer> projectIds = processDefinitionMapper.listProjectIds();
|
||||
if (CollectionUtils.isNotEmpty(projectIds)) {
|
||||
projects = projectMapper.selectBatchIds(projectIds);
|
||||
}
|
||||
|
||||
result.put(Constants.DATA_LIST, projects);
|
||||
putMsg(result, Status.SUCCESS);
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -142,7 +142,6 @@ public class ProcessDefinitionControllerTest {
|
|||
String description = "desc test";
|
||||
String connects = "[]";
|
||||
int id = 1;
|
||||
int releaseState = 0;
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
putMsg(result, Status.SUCCESS);
|
||||
result.put("processDefinitionId", 1);
|
||||
|
|
@ -151,7 +150,7 @@ public class ProcessDefinitionControllerTest {
|
|||
description, locations, connects)).thenReturn(result);
|
||||
|
||||
Result response = processDefinitionController.updateProcessDefinition(user, projectName, name, id, json,
|
||||
locations, connects, description,releaseState);
|
||||
locations, connects, description,ReleaseState.OFFLINE);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue());
|
||||
}
|
||||
|
||||
|
|
@ -162,8 +161,8 @@ public class ProcessDefinitionControllerTest {
|
|||
Map<String, Object> result = new HashMap<>();
|
||||
putMsg(result, Status.SUCCESS);
|
||||
|
||||
Mockito.when(processDefinitionService.releaseProcessDefinition(user, projectName, id, ReleaseState.OFFLINE.ordinal())).thenReturn(result);
|
||||
Result response = processDefinitionController.releaseProcessDefinition(user, projectName, id, ReleaseState.OFFLINE.ordinal());
|
||||
Mockito.when(processDefinitionService.releaseProcessDefinition(user, projectName, id, ReleaseState.OFFLINE)).thenReturn(result);
|
||||
Result response = processDefinitionController.releaseProcessDefinition(user, projectName, id, ReleaseState.OFFLINE);
|
||||
Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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.api.interceptor;
|
||||
|
||||
import org.apache.dolphinscheduler.api.ApiApplicationServer;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = ApiApplicationServer.class)
|
||||
public class LocaleChangeInterceptorTest {
|
||||
|
||||
@Autowired
|
||||
LocaleChangeInterceptor interceptor;
|
||||
|
||||
@Test
|
||||
public void testPreHandle() {
|
||||
HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
|
||||
HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
|
||||
// test no language
|
||||
Assert.assertTrue(interceptor.preHandle(request, response, null));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -592,14 +592,14 @@ public class ProcessDefinitionServiceTest {
|
|||
putMsg(result, Status.PROJECT_NOT_FOUNT, projectName);
|
||||
Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result);
|
||||
Map<String, Object> map = processDefinitionService.releaseProcessDefinition(loginUser, "project_test1",
|
||||
6, ReleaseState.OFFLINE.getCode());
|
||||
6, ReleaseState.OFFLINE);
|
||||
Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
|
||||
|
||||
// project check auth success, processs definition online
|
||||
putMsg(result, Status.SUCCESS, projectName);
|
||||
Mockito.when(processDefineMapper.selectById(46)).thenReturn(getProcessDefinition());
|
||||
Map<String, Object> onlineRes = processDefinitionService.releaseProcessDefinition(
|
||||
loginUser, "project_test1", 46, ReleaseState.ONLINE.getCode());
|
||||
loginUser, "project_test1", 46, ReleaseState.ONLINE);
|
||||
Assert.assertEquals(Status.SUCCESS, onlineRes.get(Constants.STATUS));
|
||||
|
||||
// project check auth success, processs definition online
|
||||
|
|
@ -608,12 +608,12 @@ public class ProcessDefinitionServiceTest {
|
|||
Mockito.when(processDefineMapper.selectById(46)).thenReturn(processDefinition1);
|
||||
Mockito.when(processService.getUserById(1)).thenReturn(loginUser);
|
||||
Map<String, Object> onlineWithResourceRes = processDefinitionService.releaseProcessDefinition(
|
||||
loginUser, "project_test1", 46, ReleaseState.ONLINE.getCode());
|
||||
loginUser, "project_test1", 46, ReleaseState.ONLINE);
|
||||
Assert.assertEquals(Status.SUCCESS, onlineWithResourceRes.get(Constants.STATUS));
|
||||
|
||||
// release error code
|
||||
Map<String, Object> failRes = processDefinitionService.releaseProcessDefinition(
|
||||
loginUser, "project_test1", 46, 2);
|
||||
loginUser, "project_test1", 46, ReleaseState.getEnum(2));
|
||||
Assert.assertEquals(Status.REQUEST_PARAMS_NOT_VALID_ERROR, failRes.get(Constants.STATUS));
|
||||
|
||||
//FIXME has function exit code 1 when exception
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.apache.dolphinscheduler.dao.mapper.ProjectMapper;
|
|||
import org.apache.dolphinscheduler.dao.mapper.ProjectUserMapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -319,9 +320,8 @@ public class ProjectServiceTest {
|
|||
|
||||
@Test
|
||||
public void testQueryAllProjectList() {
|
||||
|
||||
Mockito.when(projectMapper.selectList(null)).thenReturn(getList());
|
||||
Mockito.when(processDefinitionMapper.selectList(null)).thenReturn(getProcessDefinitions());
|
||||
Mockito.when(processDefinitionMapper.listProjectIds()).thenReturn(getProjectIds());
|
||||
Mockito.when(projectMapper.selectBatchIds(getProjectIds())).thenReturn(getList());
|
||||
|
||||
Map<String, Object> result = projectService.queryAllProjectList();
|
||||
logger.info(result.toString());
|
||||
|
|
@ -387,6 +387,11 @@ public class ProjectServiceTest {
|
|||
return list;
|
||||
}
|
||||
|
||||
private List<Integer> getProjectIds() {
|
||||
return Collections.singletonList(1);
|
||||
}
|
||||
|
||||
|
||||
private String getDesc() {
|
||||
return "projectUserMapper.deleteProjectRelation(projectId,userId)projectUserMappe"
|
||||
+ ".deleteProjectRelation(projectId,userId)projectUserMappe"
|
||||
|
|
|
|||
|
|
@ -906,6 +906,11 @@ public final class Constants {
|
|||
|
||||
public static final String PASSWORD_DEFAULT = "******";
|
||||
|
||||
/**
|
||||
* locale
|
||||
*/
|
||||
public static final String LOCALE_LANGUAGE = "language";
|
||||
|
||||
/**
|
||||
* driver
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -294,7 +294,11 @@ public class JSONUtils {
|
|||
|
||||
public static ObjectNode parseObject(String text) {
|
||||
try {
|
||||
return (ObjectNode) objectMapper.readTree(text);
|
||||
if (text.isEmpty()) {
|
||||
return parseObject(text, ObjectNode.class);
|
||||
} else {
|
||||
return (ObjectNode) objectMapper.readTree(text);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("String json deserialization exception.", e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import org.apache.dolphinscheduler.common.shell.ShellExecutor;
|
|||
|
||||
import org.apache.commons.configuration.Configuration;
|
||||
|
||||
import java.lang.management.OperatingSystemMXBean;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
|
|
@ -130,11 +131,17 @@ public class OSUtils {
|
|||
* @return load average
|
||||
*/
|
||||
public static double loadAverage() {
|
||||
double loadAverage = hal.getProcessor().getSystemLoadAverage();
|
||||
if (Double.isNaN(loadAverage)) {
|
||||
return NEGATIVE_ONE;
|
||||
double loadAverage;
|
||||
try {
|
||||
OperatingSystemMXBean osBean = ManagementFactory.getPlatformMXBean(OperatingSystemMXBean.class);
|
||||
loadAverage = osBean.getSystemLoadAverage();
|
||||
} catch (Exception e) {
|
||||
logger.error("get operation system load average exception, try another method ", e);
|
||||
loadAverage = hal.getProcessor().getSystemLoadAverage();
|
||||
if (Double.isNaN(loadAverage)) {
|
||||
return NEGATIVE_ONE;
|
||||
}
|
||||
}
|
||||
|
||||
DecimalFormat df = new DecimalFormat(TWO_DECIMAL);
|
||||
df.setRoundingMode(RoundingMode.HALF_UP);
|
||||
return Double.parseDouble(df.format(loadAverage));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* 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.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* hive conf utils test
|
||||
*/
|
||||
public class HiveConfUtilsTest {
|
||||
|
||||
/**
|
||||
* test is hive conf var
|
||||
*/
|
||||
@Test
|
||||
public void testIsHiveConfVar() {
|
||||
|
||||
String conf = "hive.exec.script.wrapper=123";
|
||||
boolean hiveConfVar = HiveConfUtils.isHiveConfVar(conf);
|
||||
Assert.assertTrue(hiveConfVar);
|
||||
|
||||
conf = "hive.test.v1=v1";
|
||||
hiveConfVar = HiveConfUtils.isHiveConfVar(conf);
|
||||
Assert.assertFalse(hiveConfVar);
|
||||
|
||||
conf = "tez.queue.name=tezQueue";
|
||||
hiveConfVar = HiveConfUtils.isHiveConfVar(conf);
|
||||
Assert.assertTrue(hiveConfVar);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* 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.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* hive conf utils test
|
||||
*/
|
||||
public class HiveConfUtilsTest {
|
||||
|
||||
/**
|
||||
* test is hive conf var
|
||||
*/
|
||||
@Test
|
||||
public void testIsHiveConfVar() {
|
||||
|
||||
String conf = "hive.exec.script.wrapper=123";
|
||||
boolean hiveConfVar = HiveConfUtils.isHiveConfVar(conf);
|
||||
Assert.assertTrue(hiveConfVar);
|
||||
|
||||
conf = "hive.test.v1=v1";
|
||||
hiveConfVar = HiveConfUtils.isHiveConfVar(conf);
|
||||
Assert.assertFalse(hiveConfVar);
|
||||
|
||||
conf = "tez.queue.name=tezQueue";
|
||||
hiveConfVar = HiveConfUtils.isHiveConfVar(conf);
|
||||
Assert.assertTrue(hiveConfVar);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -138,4 +138,10 @@ public interface ProcessDefinitionMapper extends BaseMapper<ProcessDefinition> {
|
|||
* @param version version
|
||||
*/
|
||||
void updateVersionByProcessDefinitionId(@Param("processDefinitionId") int processDefinitionId, @Param("version") long version);
|
||||
|
||||
/**
|
||||
* list all project ids
|
||||
* @return project ids list
|
||||
*/
|
||||
List<Integer> listProjectIds();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,6 +128,12 @@
|
|||
WHERE user_id = #{userId} and release_state = 1 and resource_ids is not null and resource_ids != ''
|
||||
</select>
|
||||
|
||||
<select id="listProjectIds" resultType="java.lang.Integer">
|
||||
SELECT DISTINCT(project_id) as project_id
|
||||
FROM t_ds_process_definition
|
||||
</select>
|
||||
|
||||
|
||||
<update id="updateVersionByProcessDefinitionId">
|
||||
update t_ds_process_definition
|
||||
set version = #{version}
|
||||
|
|
|
|||
|
|
@ -366,4 +366,12 @@ public class ProcessDefinitionMapperTest {
|
|||
ProcessDefinition processDefinition1 = processDefinitionMapper.selectById(processDefinition.getId());
|
||||
Assert.assertEquals(expectedVersion, processDefinition1.getVersion());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void listProjectIds() {
|
||||
ProcessDefinition processDefinition = insertOne();
|
||||
List<Integer> projectIds = processDefinitionMapper.listProjectIds();
|
||||
Assert.assertNotNull(projectIds);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -286,10 +286,10 @@ The text of each license is also included at licenses/LICENSE-[project].txt.
|
|||
httpclient 4.4.1: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient/4.4.1, Apache 2.0
|
||||
httpcore 4.4.1: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore/4.4.1, Apache 2.0
|
||||
httpmime 4.5.7: https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime/4.5.7, Apache 2.0
|
||||
jackson-annotations 2.9.10: https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.9.10, Apache 2.0
|
||||
jackson-core 2.9.10: https://github.com/FasterXML/jackson-core, Apache 2.0
|
||||
jackson-annotations 2.10.5: https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.10.5, Apache 2.0
|
||||
jackson-core 2.10.5: https://github.com/FasterXML/jackson-core, Apache 2.0
|
||||
jackson-core-asl 1.9.13: https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-core-asl/1.9.13, Apache 2.0
|
||||
jackson-databind 2.9.10: https://github.com/FasterXML/jackson-databind, Apache 2.0
|
||||
jackson-databind 2.10.5: https://github.com/FasterXML/jackson-databind, Apache 2.0
|
||||
jackson-datatype-jdk8 2.9.10: https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/2.9.10, Apache 2.0
|
||||
jackson-datatype-jsr310 2.9.10: https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.9.10, Apache 2.0
|
||||
jackson-jaxrs 1.9.13: https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-jaxrs/1.9.13, Apache 2.0 and LGPL 2.1
|
||||
|
|
|
|||
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018 xaboy
|
||||
|
||||
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.
|
||||
|
|
@ -27,11 +27,11 @@ import ch.qos.logback.core.FileAppender;
|
|||
/**
|
||||
* Task log appender
|
||||
*/
|
||||
public class TaskLogAppender extends FileAppender<ILoggingEvent>{
|
||||
public class TaskLogAppender extends FileAppender<ILoggingEvent> {
|
||||
@Override
|
||||
protected void append(ILoggingEvent event) {
|
||||
Marker marker = event.getMarker();
|
||||
if (marker !=null) {
|
||||
if (marker != null) {
|
||||
if (marker.equals(FINALIZE_SESSION_MARKER)) {
|
||||
stop();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
"version": "1.0.0",
|
||||
"description": "A vue.js project",
|
||||
"author": "DolphinScheduler",
|
||||
"repository": "https://github.com/apache/incubator-dolphinscheduler",
|
||||
"license": "Apache-2.0",
|
||||
"scripts": {
|
||||
"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",
|
||||
|
|
@ -13,6 +15,7 @@
|
|||
"build:release": "npm run clean && cross-env NODE_ENV=production PUBLIC_PATH=/dolphinscheduler/ui webpack --config ./build/webpack.config.release.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@form-create/element-ui": "^1.0.18",
|
||||
"@riophae/vue-treeselect": "^0.4.0",
|
||||
"axios": "^0.16.2",
|
||||
"bootstrap": "3.3.7",
|
||||
|
|
@ -38,6 +41,7 @@
|
|||
"vuex-router-sync": "^5.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"acorn": "^7.4.1",
|
||||
"autoprefixer": "^9.1.0",
|
||||
"babel-core": "^6.25.0",
|
||||
"babel-helper-vue-jsx-merge-props": "^2.0.2",
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import 'bootstrap/dist/css/bootstrap.min.css'
|
|||
import 'bootstrap/dist/js/bootstrap.min.js'
|
||||
import 'canvg/dist/browser/canvg.min.js'
|
||||
import 'remixicon/fonts/remixicon.css'
|
||||
import formCreate from '@form-create/element-ui'
|
||||
|
||||
// Component internationalization
|
||||
const useOpt = i18n.globalScope.LOCALE === 'en_US' ? { locale: locale } : {}
|
||||
|
|
@ -46,6 +47,7 @@ i18n.globalScope.LOCALE === 'en_US' ? Vue.use(ElementUI, { locale }) : Vue.use(E
|
|||
|
||||
// Vue.use(ans)
|
||||
Vue.use(useOpt)
|
||||
Vue.use(formCreate)
|
||||
|
||||
sync(store, router)
|
||||
|
||||
|
|
|
|||
|
|
@ -55,18 +55,6 @@
|
|||
</el-input>
|
||||
</div>
|
||||
</m-list-box>
|
||||
<m-list-box>
|
||||
<div slot="text"><strong class='requiredIcon'>*</strong>{{$t('Recipient')}}</div>
|
||||
<div slot="content">
|
||||
<m-email ref="refEmail" v-model="receivers" :disabled="isDetails" :repeat-data="receiversCc"></m-email>
|
||||
</div>
|
||||
</m-list-box>
|
||||
<m-list-box>
|
||||
<div slot="text">{{$t('Cc')}}</div>
|
||||
<div slot="content">
|
||||
<m-email ref="refCc" v-model="receiversCc" :disabled="isDetails" :repeat-data="receivers"></m-email>
|
||||
</div>
|
||||
</m-list-box>
|
||||
</template>
|
||||
<m-list-box v-show="type === 'HIVE'">
|
||||
<div slot="text">{{$t('SQL Parameter')}}</div>
|
||||
|
|
@ -155,7 +143,6 @@
|
|||
import mLocalParams from './_source/localParams'
|
||||
import mStatementList from './_source/statementList'
|
||||
import disabledState from '@/module/mixin/disabledState'
|
||||
import mEmail from '@/conf/home/pages/projects/pages/definition/pages/list/_source/email'
|
||||
import codemirror from '@/conf/home/pages/resource/pages/file/pages/_source/codemirror'
|
||||
|
||||
let editor
|
||||
|
|
@ -188,10 +175,6 @@
|
|||
preStatements: [],
|
||||
// Post statements
|
||||
postStatements: [],
|
||||
// recipients
|
||||
receivers: [],
|
||||
// copy to
|
||||
receiversCc: [],
|
||||
item: '',
|
||||
scriptBoxDialog: false
|
||||
}
|
||||
|
|
@ -274,14 +257,6 @@
|
|||
this.$message.warning(`${i18n.$t('Recipient required')}`)
|
||||
return false
|
||||
}
|
||||
// receivers Subcomponent verification
|
||||
if (this.sqlType === 0 && !this.$refs.refEmail._manualEmail()) {
|
||||
return false
|
||||
}
|
||||
// receiversCc Subcomponent verification
|
||||
if (this.sqlType === 0 && !this.$refs.refCc._manualEmail()) {
|
||||
return false
|
||||
}
|
||||
// udfs Subcomponent verification Verification only if the data type is HIVE
|
||||
if (this.type === 'HIVE') {
|
||||
if (!this.$refs.refUdfs._verifUdfs()) {
|
||||
|
|
@ -312,8 +287,6 @@
|
|||
udfs: this.udfs,
|
||||
sqlType: this.sqlType,
|
||||
title: this.title,
|
||||
receivers: this.receivers.join(','),
|
||||
receiversCc: this.receiversCc.join(','),
|
||||
showType: (() => {
|
||||
/**
|
||||
* Special processing return order TABLE,ATTACHMENT
|
||||
|
|
@ -366,19 +339,6 @@
|
|||
|
||||
return editor
|
||||
},
|
||||
_getReceiver () {
|
||||
let param = {}
|
||||
let current = this.router.history.current
|
||||
if (current.name === 'projects-definition-details') {
|
||||
param.processDefinitionId = current.params.id
|
||||
} else {
|
||||
param.processInstanceId = current.params.id
|
||||
}
|
||||
this.store.dispatch('dag/getReceiver', param).then(res => {
|
||||
this.receivers = res.receivers && res.receivers.split(',') || []
|
||||
this.receiversCc = res.receiversCc && res.receiversCc.split(',') || []
|
||||
})
|
||||
},
|
||||
_cacheParams () {
|
||||
this.$emit('on-cache-params', {
|
||||
type: this.type,
|
||||
|
|
@ -387,8 +347,6 @@
|
|||
udfs: this.udfs,
|
||||
sqlType: this.sqlType,
|
||||
title: this.title,
|
||||
receivers: this.receivers.join(','),
|
||||
receiversCc: this.receiversCc.join(','),
|
||||
showType: (() => {
|
||||
let showType = this.showType
|
||||
if (showType.length === 2 && showType[0] === 'ATTACHMENT') {
|
||||
|
|
@ -419,8 +377,6 @@
|
|||
}
|
||||
if (val !== 0) {
|
||||
this.title = ''
|
||||
this.receivers = []
|
||||
this.receiversCc = []
|
||||
}
|
||||
},
|
||||
// Listening data source
|
||||
|
|
@ -455,13 +411,6 @@
|
|||
this.preStatements = o.params.preStatements || []
|
||||
this.postStatements = o.params.postStatements || []
|
||||
this.title = o.params.title || ''
|
||||
this.receivers = o.params.receivers && o.params.receivers.split(',') || []
|
||||
this.receiversCc = o.params.receiversCc && o.params.receiversCc.split(',') || []
|
||||
}
|
||||
// read tasks from cache
|
||||
if (!_.some(this.store.state.dag.cacheTasks, { id: this.createNodeId }) &&
|
||||
this.router.history.current.name !== 'definition-create') {
|
||||
this._getReceiver()
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
|
|
@ -487,8 +436,6 @@
|
|||
udfs: this.udfs,
|
||||
sqlType: this.sqlType,
|
||||
title: this.title,
|
||||
receivers: this.receivers.join(','),
|
||||
receiversCc: this.receiversCc.join(','),
|
||||
showType: (() => {
|
||||
let showType = this.showType
|
||||
if (showType.length === 2 && showType[0] === 'ATTACHMENT') {
|
||||
|
|
@ -504,6 +451,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
components: { mListBox, mDatasource, mLocalParams, mUdfs, mSqlType, mStatementList, mEmail, mScriptBox }
|
||||
components: { mListBox, mDatasource, mLocalParams, mUdfs, mSqlType, mStatementList, mScriptBox }
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -1175,8 +1175,6 @@
|
|||
}
|
||||
if (val !== 0) {
|
||||
this.title = ''
|
||||
this.receivers = []
|
||||
this.receiversCc = []
|
||||
}
|
||||
},
|
||||
// Listening data source
|
||||
|
|
|
|||
|
|
@ -27,8 +27,6 @@
|
|||
<li><span class="tab">{{$t('Worker group')}}:</span><span class="content" v-if="workerGroupList.length">{{startupParam.workerGroup}}</span></li>
|
||||
<li><span class="tab">{{$t('Notification strategy')}}:</span><span class="content">{{_rtWarningType(startupParam.warningType)}}</span></li>
|
||||
<li><span class="tab">{{$t('Notification group')}}:</span><span class="content" v-if="notifyGroupList.length">{{_rtNotifyGroupName(startupParam.warningGroupId)}}</span></li>
|
||||
<li><span class="tab">{{$t('Recipient')}}:</span><span class="content">{{startupParam.receivers || '-'}}</span></li>
|
||||
<li><span class="tab">{{$t('Cc')}}:</span><span class="content">{{startupParam.receiversCc || '-'}}</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
<div class="submit">
|
||||
<template v-if="router.history.current.name === 'projects-definition-details'">
|
||||
<div class="lint-pt">
|
||||
<el-checkbox v-model="releaseState" size="small" :false-label="0" :true-label="1">{{$t('Whether to go online the process definition')}}</el-checkbox>
|
||||
<el-checkbox v-model="releaseState" size="small" :false-label="'OFFLINE'" :true-label="'ONLINE'">{{$t('Whether to go online the process definition')}}</el-checkbox>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="router.history.current.name === 'projects-instance-details'">
|
||||
|
|
@ -112,7 +112,7 @@
|
|||
// Global custom parameters
|
||||
udpListCache: [],
|
||||
// Whether to go online the process definition
|
||||
releaseState: 1,
|
||||
releaseState: 'ONLINE',
|
||||
// Whether to update the process definition
|
||||
syncDefine: true,
|
||||
// Timeout alarm
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<m-conditions>
|
||||
<template slot="search-group">
|
||||
<div class="list">
|
||||
<el-button type="primary" size="small" @click="_ckQuery" icon="el-icon-search"></el-button>
|
||||
<el-button size="mini" @click="_ckQuery" icon="el-icon-search"></el-button>
|
||||
</div>
|
||||
<div class="list">
|
||||
<el-date-picker
|
||||
|
|
|
|||
|
|
@ -177,8 +177,6 @@
|
|||
timingDialog: false,
|
||||
timingData: {
|
||||
item: {},
|
||||
receiversD: [],
|
||||
receiversCcD: [],
|
||||
type: ''
|
||||
},
|
||||
relatedItemsDialog: false,
|
||||
|
|
@ -191,7 +189,7 @@
|
|||
pageSize: Number
|
||||
},
|
||||
methods: {
|
||||
...mapActions('dag', ['editProcessState', 'getStartCheck', 'getReceiver', 'deleteDefinition', 'batchDeleteDefinition', 'exportDefinition', 'getProcessDefinitionVersionsPage', 'copyProcess', 'switchProcessDefinitionVersion', 'deleteProcessDefinitionVersion', 'moveProcess']),
|
||||
...mapActions('dag', ['editProcessState', 'getStartCheck', 'deleteDefinition', 'batchDeleteDefinition', 'exportDefinition', 'getProcessDefinitionVersionsPage', 'copyProcess', 'switchProcessDefinitionVersion', 'deleteProcessDefinitionVersion', 'moveProcess']),
|
||||
...mapActions('security', ['getWorkerGroupsAll']),
|
||||
|
||||
selectable (row, index) {
|
||||
|
|
@ -226,30 +224,13 @@
|
|||
closeStart () {
|
||||
this.startDialog = false
|
||||
},
|
||||
/**
|
||||
* get emial
|
||||
*/
|
||||
_getReceiver (id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.getReceiver({ processDefinitionId: id }).then(res => {
|
||||
resolve({
|
||||
receivers: res.receivers && res.receivers.split(',') || [],
|
||||
receiversCc: res.receiversCc && res.receiversCc.split(',') || []
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* timing
|
||||
*/
|
||||
_timing (item) {
|
||||
this._getReceiver(item.id).then(res => {
|
||||
this.timingData.item = item
|
||||
this.timingData.receiversD = res.receivers
|
||||
this.timingData.receiversCcD = res.receiversCc
|
||||
this.timingData.type = 'timing'
|
||||
this.timingDialog = true
|
||||
})
|
||||
this.timingData.item = item
|
||||
this.timingData.type = 'timing'
|
||||
this.timingDialog = true
|
||||
},
|
||||
onUpdateTiming () {
|
||||
this._onUpdate()
|
||||
|
|
@ -295,7 +276,7 @@
|
|||
_downline (item) {
|
||||
this._upProcessState({
|
||||
processId: item.id,
|
||||
releaseState: 0
|
||||
releaseState: 'OFFLINE'
|
||||
})
|
||||
},
|
||||
/**
|
||||
|
|
@ -304,7 +285,7 @@
|
|||
_poponline (item) {
|
||||
this._upProcessState({
|
||||
processId: item.id,
|
||||
releaseState: 1
|
||||
releaseState: 'ONLINE'
|
||||
})
|
||||
},
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -99,22 +99,6 @@
|
|||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix list">
|
||||
<div class="text">
|
||||
{{$t('Recipient')}}
|
||||
</div>
|
||||
<div class="cont" style="width: 688px;">
|
||||
<m-email v-model="receivers" :repeat-data="receiversCc"></m-email>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix list">
|
||||
<div class="text">
|
||||
{{$t('Cc')}}
|
||||
</div>
|
||||
<div class="cont" style="width: 688px;">
|
||||
<m-email v-model="receiversCc" :repeat-data="receivers"></m-email>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix list">
|
||||
<div class="text">
|
||||
{{$t('Complement Data')}}
|
||||
|
|
@ -181,7 +165,6 @@
|
|||
<script>
|
||||
import _ from 'lodash'
|
||||
import dayjs from 'dayjs'
|
||||
import mEmail from './email.vue'
|
||||
import store from '@/conf/home/store'
|
||||
import { warningTypeList } from './util'
|
||||
import mPriority from '@/module/components/priority/priority'
|
||||
|
|
@ -206,8 +189,6 @@
|
|||
spinnerLoading: false,
|
||||
execType: false,
|
||||
taskDependType: 'TASK_POST',
|
||||
receivers: [],
|
||||
receiversCc: [],
|
||||
runMode: 'RUN_MODE_SERIAL',
|
||||
processInstancePriority: 'MEDIUM',
|
||||
workerGroup: 'default',
|
||||
|
|
@ -252,8 +233,6 @@
|
|||
taskDependType: this.taskDependType,
|
||||
runMode: this.runMode,
|
||||
processInstancePriority: this.processInstancePriority,
|
||||
receivers: this.receivers.join(',') || '',
|
||||
receiversCc: this.receiversCc.join(',') || '',
|
||||
workerGroup: this.workerGroup,
|
||||
startParams: !_.isEmpty(startParams) ? JSON.stringify(startParams) : ''
|
||||
}
|
||||
|
|
@ -283,12 +262,6 @@
|
|||
})
|
||||
})
|
||||
},
|
||||
_getReceiver () {
|
||||
this.store.dispatch('dag/getReceiver', { processDefinitionId: this.startData.id }).then(res => {
|
||||
this.receivers = res.receivers && res.receivers.split(',') || []
|
||||
this.receiversCc = res.receiversCc && res.receiversCc.split(',') || []
|
||||
})
|
||||
},
|
||||
_getGlobalParams () {
|
||||
this.setIsDetails(true)
|
||||
this.store.dispatch('dag/getProcessDetails', this.startData.id).then(res => {
|
||||
|
|
@ -311,8 +284,6 @@
|
|||
created () {
|
||||
this.warningType = this.warningTypeList[0].id
|
||||
this.workflowName = this.startData.name
|
||||
|
||||
this._getReceiver()
|
||||
this._getGlobalParams()
|
||||
let stateWorkerGroupsList = this.store.state.security.workerGroupsListAll || []
|
||||
if (stateWorkerGroupsList.length) {
|
||||
|
|
@ -336,7 +307,7 @@
|
|||
this.workflowName = this.startData.name
|
||||
},
|
||||
computed: {},
|
||||
components: { mEmail, mPriority, mWorkerGroups, mLocalParams }
|
||||
components: { mPriority, mWorkerGroups, mLocalParams }
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -136,22 +136,6 @@
|
|||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix list">
|
||||
<div class="text">
|
||||
{{$t('Recipient')}}
|
||||
</div>
|
||||
<div class="cont" style="width: 680px;">
|
||||
<m-email v-model="receivers" :repeat-data="receiversCc"></m-email>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix list">
|
||||
<div class="text">
|
||||
{{$t('Cc')}}
|
||||
</div>
|
||||
<div class="cont" style="width: 680px;">
|
||||
<m-email v-model="receiversCc" :repeat-data="receivers"></m-email>
|
||||
</div>
|
||||
</div>
|
||||
<div class="submit">
|
||||
<el-button type="text" size="small" @click="close()"> {{$t('Cancel')}} </el-button>
|
||||
<el-button type="primary" size="small" round :loading="spinnerLoading" @click="ok()">{{spinnerLoading ? 'Loading...' : (timingData.item.crontab ? $t('Edit') : $t('Create'))}} </el-button>
|
||||
|
|
@ -159,9 +143,7 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import i18n from '@/module/i18n'
|
||||
import mEmail from './email.vue'
|
||||
import store from '@/conf/home/store'
|
||||
import { warningTypeList } from './util'
|
||||
import { vCrontab } from '@/module/components/crontab/index'
|
||||
|
|
@ -184,8 +166,6 @@
|
|||
scheduleTime: '',
|
||||
crontab: '0 0 * * * ? *',
|
||||
cronPopover: false,
|
||||
receivers: [],
|
||||
receiversCc: [],
|
||||
i18n: i18n.globalScope.LOCALE,
|
||||
processInstancePriority: 'MEDIUM',
|
||||
workerGroup: '',
|
||||
|
|
@ -229,8 +209,6 @@
|
|||
warningType: this.warningType,
|
||||
processInstancePriority: this.processInstancePriority,
|
||||
warningGroupId: this.warningGroupId === '' ? 0 : this.warningGroupId,
|
||||
receivers: this.receivers.join(',') || '',
|
||||
receiversCc: this.receiversCc.join(',') || '',
|
||||
workerGroup: this.workerGroup
|
||||
}
|
||||
let msg = ''
|
||||
|
|
@ -337,8 +315,6 @@
|
|||
this.crontab = '0 0 * * * ? *'
|
||||
this.scheduleTime = times
|
||||
}
|
||||
this.receivers = _.cloneDeep(this.timingData.receiversD)
|
||||
this.receiversCc = _.cloneDeep(this.timingData.receiversCcD)
|
||||
},
|
||||
mounted () {
|
||||
let item = this.timingData.item
|
||||
|
|
@ -363,7 +339,7 @@
|
|||
}).catch(() => { this.warningGroupId = '' })
|
||||
}
|
||||
},
|
||||
components: { vCrontab, mEmail, mPriority, mWorkerGroups }
|
||||
components: { vCrontab, mPriority, mWorkerGroups }
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -124,16 +124,14 @@
|
|||
list: [],
|
||||
timingDialog: false,
|
||||
timingData: {
|
||||
item: {},
|
||||
receiversD: [],
|
||||
receiversCcD: []
|
||||
item: {}
|
||||
}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
},
|
||||
methods: {
|
||||
...mapActions('dag', ['getScheduleList', 'scheduleOffline', 'scheduleOnline', 'getReceiver', 'deleteTiming']),
|
||||
...mapActions('dag', ['getScheduleList', 'scheduleOffline', 'scheduleOnline', 'deleteTiming']),
|
||||
/**
|
||||
* delete
|
||||
*/
|
||||
|
|
@ -228,29 +226,12 @@
|
|||
this.$message.error(e.msg || '')
|
||||
})
|
||||
},
|
||||
/**
|
||||
* get email
|
||||
*/
|
||||
_getReceiver (id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.getReceiver({ processDefinitionId: id }).then(res => {
|
||||
resolve({
|
||||
receivers: res.receivers && res.receivers.split(',') || [],
|
||||
receiversCc: res.receiversCc && res.receiversCc.split(',') || []
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* timing
|
||||
*/
|
||||
_editTiming (item) {
|
||||
this._getReceiver(item.processDefinitionId).then(res => {
|
||||
this.timingData.item = item
|
||||
this.timingData.receiversD = res.receivers
|
||||
this.timingData.receiversCcD = res.receiversCc
|
||||
this.timingDialog = true
|
||||
})
|
||||
this.timingData.item = item
|
||||
this.timingDialog = true
|
||||
},
|
||||
onUpdateTiming () {
|
||||
this.pageNo = 1
|
||||
|
|
|
|||
|
|
@ -453,7 +453,6 @@
|
|||
_arrDelChange (v) {
|
||||
let arr = []
|
||||
arr = _.map(v, 'id')
|
||||
console.log(arr)
|
||||
this.strDelete = _.join(arr, ',')
|
||||
},
|
||||
_batchDelete () {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
<template>
|
||||
<m-popup ref="popup" :nameText="item ? $t('Edit') : $t('Create Project')" :ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
<m-popover ref="popover" :nameText="item ? $t('Edit') : $t('Create Project')" :ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
@close="_close" @ok="_ok">
|
||||
<template slot="content">
|
||||
<div class="projects-create-model">
|
||||
|
|
@ -44,13 +44,13 @@
|
|||
</m-list-box-f>
|
||||
</div>
|
||||
</template>
|
||||
</m-popup>
|
||||
</m-popover>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import i18n from '@/module/i18n'
|
||||
import store from '@/conf/home/store'
|
||||
import mPopup from '@/module/components/popup/popup'
|
||||
import mPopover from '@/module/components/popup/popover'
|
||||
import mListBoxF from '@/module/components/listBoxF/listBoxF'
|
||||
|
||||
export default {
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
param.projectId = this.item.id
|
||||
}
|
||||
|
||||
this.$refs.popup.spinnerLoading = true
|
||||
this.$refs.popover.spinnerLoading = true
|
||||
|
||||
this.store.dispatch(`projects/${this.item ? 'updateProjects' : 'createProjects'}`, param).then(res => {
|
||||
this.$emit('_onUpdate')
|
||||
|
|
@ -90,12 +90,10 @@
|
|||
type: 'success',
|
||||
offset: 70
|
||||
})
|
||||
setTimeout(() => {
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
}, 800)
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
})
|
||||
},
|
||||
_close () {
|
||||
|
|
@ -118,6 +116,6 @@
|
|||
},
|
||||
mounted () {
|
||||
},
|
||||
components: { mPopup, mListBoxF }
|
||||
components: { mPopover, mListBoxF }
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<template slot="button-group">
|
||||
<el-button size="mini" @click="_create('')">{{ $t('Create Project') }}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit') : $t('Create Project')"
|
||||
v-if="createProjectDialog"
|
||||
:visible.sync="createProjectDialog"
|
||||
width="auto">
|
||||
<m-create-project :item="item" @_onUpdate="_onUpdate" @close="_close"></m-create-project>
|
||||
|
|
|
|||
|
|
@ -15,10 +15,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
<template>
|
||||
<m-popup
|
||||
ref="popup"
|
||||
<m-popover
|
||||
ref="popover"
|
||||
:ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
:nameText="item ? $t('Edit queue') : $t('Create queue')"
|
||||
@ok="_ok"
|
||||
@close="close">
|
||||
<template slot="content">
|
||||
|
|
@ -50,13 +49,13 @@
|
|||
|
||||
</div>
|
||||
</template>
|
||||
</m-popup>
|
||||
</m-popover>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import i18n from '@/module/i18n'
|
||||
import store from '@/conf/home/store'
|
||||
import mPopup from '@/module/components/popup/popup'
|
||||
import mPopover from '@/module/components/popup/popover'
|
||||
import mListBoxF from '@/module/components/listBoxF/listBoxF'
|
||||
|
||||
export default {
|
||||
|
|
@ -90,17 +89,17 @@
|
|||
this.$emit('onUpdate')
|
||||
this.$message.success(res.msg)
|
||||
setTimeout(() => {
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
}, 800)
|
||||
}
|
||||
|
||||
let $catch = (e) => {
|
||||
this.$message.error(e.msg || '')
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
}
|
||||
|
||||
if (this.item) {
|
||||
this.$refs.popup.spinnerLoading = true
|
||||
this.$refs.popover.spinnerLoading = true
|
||||
this.store.dispatch('security/updateQueueQ', param).then(res => {
|
||||
$then(res)
|
||||
}).catch(e => {
|
||||
|
|
@ -108,7 +107,7 @@
|
|||
})
|
||||
} else {
|
||||
this._verifyName(param).then(() => {
|
||||
this.$refs.popup.spinnerLoading = true
|
||||
this.$refs.popover.spinnerLoading = true
|
||||
this.store.dispatch('security/createQueueQ', param).then(res => {
|
||||
$then(res)
|
||||
}).catch(e => {
|
||||
|
|
@ -154,6 +153,6 @@
|
|||
mounted () {
|
||||
|
||||
},
|
||||
components: { mPopup, mListBoxF }
|
||||
components: { mPopover, mListBoxF }
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<template slot="button-group" v-if="isADMIN">
|
||||
<el-button size="mini" @click="_create('')">{{$t('Create queue')}}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit queue') : $t('Create queue')"
|
||||
:v-if="createQueueDialog"
|
||||
:visible.sync="createQueueDialog"
|
||||
width="auto">
|
||||
<m-create-queue :item="item" @onUpdate="onUpdate" @close="close"></m-create-queue>
|
||||
|
|
|
|||
|
|
@ -15,10 +15,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
<template>
|
||||
<m-popup
|
||||
ref="popup"
|
||||
<m-popover
|
||||
ref="popover"
|
||||
:ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
:nameText="item ? $t('Edit Tenant') : $t('Create Tenant')"
|
||||
@ok="_ok"
|
||||
@close="close">
|
||||
<template slot="content">
|
||||
|
|
@ -62,13 +61,13 @@
|
|||
</m-list-box-f>
|
||||
</div>
|
||||
</template>
|
||||
</m-popup>
|
||||
</m-popover>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import i18n from '@/module/i18n'
|
||||
import store from '@/conf/home/store'
|
||||
import mPopup from '@/module/components/popup/popup'
|
||||
import mPopover from '@/module/components/popup/popover'
|
||||
import mListBoxF from '@/module/components/listBoxF/listBoxF'
|
||||
export default {
|
||||
name: 'create-tenement',
|
||||
|
|
@ -141,16 +140,16 @@
|
|||
if (this.item) {
|
||||
param.id = this.item.id
|
||||
}
|
||||
this.$refs.popup.spinnerLoading = true
|
||||
this.$refs.popover.spinnerLoading = true
|
||||
this.store.dispatch(`security/${this.item ? 'updateQueue' : 'createQueue'}`, param).then(res => {
|
||||
this.$emit('onUpdate')
|
||||
this.$message.success(res.msg)
|
||||
setTimeout(() => {
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
}, 800)
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
})
|
||||
},
|
||||
close () {
|
||||
|
|
@ -172,6 +171,6 @@
|
|||
},
|
||||
mounted () {
|
||||
},
|
||||
components: { mPopup, mListBoxF }
|
||||
components: { mPopover, mListBoxF }
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<template slot="button-group" v-if="isADMIN">
|
||||
<el-button size="mini" @click="_create('')">{{$t('Create Tenant')}}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit Tenant') : $t('Create Tenant')"
|
||||
v-if="createTenementDialog"
|
||||
:visible.sync="createTenementDialog"
|
||||
width="auto">
|
||||
<m-create-tenement :item="item" @onUpdate="onUpdate" @close="close"></m-create-tenement>
|
||||
|
|
|
|||
|
|
@ -15,10 +15,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
<template>
|
||||
<m-popup
|
||||
ref="popup"
|
||||
<m-popover
|
||||
ref="popover"
|
||||
:ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
:nameText="item ? $t('Edit User') : $t('Create User')"
|
||||
@ok="_ok"
|
||||
@close="close">
|
||||
<template slot="content">
|
||||
|
|
@ -30,6 +29,7 @@
|
|||
type="input"
|
||||
v-model="userName"
|
||||
maxlength="60"
|
||||
size="small"
|
||||
:placeholder="$t('Please enter user name')">
|
||||
</el-input>
|
||||
</template>
|
||||
|
|
@ -40,6 +40,7 @@
|
|||
<el-input
|
||||
type="password"
|
||||
v-model="userPassword"
|
||||
size="small"
|
||||
:placeholder="$t('Please enter your password')">
|
||||
</el-input>
|
||||
</template>
|
||||
|
|
@ -80,6 +81,7 @@
|
|||
<el-input
|
||||
type="input"
|
||||
v-model="email"
|
||||
size="small"
|
||||
:placeholder="$t('Please enter email')">
|
||||
</el-input>
|
||||
</template>
|
||||
|
|
@ -90,6 +92,7 @@
|
|||
<el-input
|
||||
type="input"
|
||||
v-model="phone"
|
||||
size="small"
|
||||
:placeholder="$t('Please enter phone number')">
|
||||
</el-input>
|
||||
</template>
|
||||
|
|
@ -105,14 +108,14 @@
|
|||
</m-list-box-f>
|
||||
</div>
|
||||
</template>
|
||||
</m-popup>
|
||||
</m-popover>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import i18n from '@/module/i18n'
|
||||
import store from '@/conf/home/store'
|
||||
import router from '@/conf/home/router'
|
||||
import mPopup from '@/module/components/popup/popup'
|
||||
import mPopover from '@/module/components/popup/popover'
|
||||
import mListBoxF from '@/module/components/listBoxF/listBoxF'
|
||||
|
||||
export default {
|
||||
|
|
@ -243,7 +246,7 @@
|
|||
})
|
||||
},
|
||||
_submit () {
|
||||
this.$refs.popup.spinnerLoading = true
|
||||
this.$refs.popover.spinnerLoading = true
|
||||
|
||||
let queueCode = ''
|
||||
// get queue code
|
||||
|
|
@ -266,13 +269,13 @@
|
|||
|
||||
this.store.dispatch(`security/${this.item ? 'updateUser' : 'createUser'}`, param).then(res => {
|
||||
setTimeout(() => {
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
}, 800)
|
||||
this.$emit('onUpdate', param)
|
||||
this.$message.success(res.msg)
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
})
|
||||
},
|
||||
close () {
|
||||
|
|
@ -315,6 +318,6 @@
|
|||
mounted () {
|
||||
|
||||
},
|
||||
components: { mPopup, mListBoxF }
|
||||
components: { mPopover, mListBoxF }
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@
|
|||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
v-if="resourceDialog"
|
||||
:visible.sync="resourceDialog"
|
||||
width="auto">
|
||||
<m-resource :resourceData="resourceData" @onUpdateAuthResource="onUpdateAuthResource" @closeAuthResource="closeAuthResource"></m-resource>
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<template slot="button-group" v-if="userList.length">
|
||||
<el-button size="mini" @click="_create('')">{{$t('Create User')}}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit User') : $t('Create User')"
|
||||
v-if="createUserDialog"
|
||||
:visible.sync="createUserDialog"
|
||||
width="auto">
|
||||
<m-create-user :item="item" @onUpdate="onUpdate" @close="close"></m-create-user>
|
||||
|
|
|
|||
|
|
@ -15,10 +15,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
<template>
|
||||
<m-popup
|
||||
ref="popup"
|
||||
<m-popover
|
||||
ref="popover"
|
||||
:ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
:nameText="item ? $t('Edit alarm group') : $t('Create alarm group')"
|
||||
@ok="_ok"
|
||||
@close="close">
|
||||
<template slot="content">
|
||||
|
|
@ -36,14 +35,14 @@
|
|||
</template>
|
||||
</m-list-box-f>
|
||||
<m-list-box-f>
|
||||
<template slot="name"><strong>*</strong>{{$t('Group Type')}}</template>
|
||||
<template slot="name"><strong>*</strong>{{$t('Alarm plugin instance')}}</template>
|
||||
<template slot="content">
|
||||
<el-select v-model="groupType" size="small">
|
||||
<el-select v-model="alertInstanceIds" size="small" style="width: 100%" multiple>
|
||||
<el-option
|
||||
v-for="city in options"
|
||||
:key="city.id"
|
||||
:value="city.id"
|
||||
:label="city.code">
|
||||
v-for="items in allAlertPluginInstance"
|
||||
:key="items.id"
|
||||
:value="items.id"
|
||||
:label="items.instanceName">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
|
|
@ -61,12 +60,13 @@
|
|||
</m-list-box-f>
|
||||
</div>
|
||||
</template>
|
||||
</m-popup>
|
||||
</m-popover>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import i18n from '@/module/i18n'
|
||||
import store from '@/conf/home/store'
|
||||
import mPopup from '@/module/components/popup/popup'
|
||||
import mPopover from '@/module/components/popup/popover'
|
||||
import mListBoxF from '@/module/components/listBoxF/listBoxF'
|
||||
|
||||
export default {
|
||||
|
|
@ -75,13 +75,13 @@
|
|||
return {
|
||||
store,
|
||||
groupName: '',
|
||||
groupType: 'EMAIL',
|
||||
description: '',
|
||||
options: [{ code: `${i18n.$t('Email')}`, id: 'EMAIL' }, { code: `${i18n.$t('SMS')}`, id: 'SMS' }]
|
||||
alertInstanceIds: [],
|
||||
description: ''
|
||||
}
|
||||
},
|
||||
props: {
|
||||
item: Object
|
||||
item: Object,
|
||||
allAlertPluginInstance: Array
|
||||
},
|
||||
methods: {
|
||||
_ok () {
|
||||
|
|
@ -114,22 +114,20 @@
|
|||
_submit () {
|
||||
let param = {
|
||||
groupName: this.groupName,
|
||||
groupType: this.groupType,
|
||||
alertInstanceIds: this.alertInstanceIds.join(','),
|
||||
description: this.description
|
||||
}
|
||||
if (this.item) {
|
||||
param.id = this.item.id
|
||||
}
|
||||
this.$refs.popup.spinnerLoading = true
|
||||
this.$refs.popover.spinnerLoading = true
|
||||
this.store.dispatch(`security/${this.item ? 'updateAlertgrou' : 'createAlertgrou'}`, param).then(res => {
|
||||
this.$emit('onUpdate')
|
||||
this.$message.success(res.msg)
|
||||
setTimeout(() => {
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
}, 800)
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
this.$refs.popup.spinnerLoading = false
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
})
|
||||
},
|
||||
close () {
|
||||
|
|
@ -140,12 +138,15 @@
|
|||
created () {
|
||||
if (this.item) {
|
||||
this.groupName = this.item.groupName
|
||||
this.groupType = this.item.groupType
|
||||
let dataStrArr = this.item.alertInstanceIds.split(',')
|
||||
this.alertInstanceIds = _.map(dataStrArr, v => {
|
||||
return +v
|
||||
})
|
||||
this.description = this.item.description
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
},
|
||||
components: { mPopup, mListBoxF }
|
||||
components: { mPopover, mListBoxF }
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -20,11 +20,6 @@
|
|||
<el-table :data="list" size="mini" style="width: 100%">
|
||||
<el-table-column type="index" :label="$t('#')" width="50"></el-table-column>
|
||||
<el-table-column prop="groupName" :label="$t('Group Name')"></el-table-column>
|
||||
<el-table-column :label="$t('Group Type')" width="100">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.groupType === 'EMAIL' ? `${$t('Email')}` : `${$t('SMS')}`}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="description" :label="$t('Remarks')" width="200"></el-table-column>
|
||||
<el-table-column :label="$t('Create Time')" width="140">
|
||||
<template slot-scope="scope">
|
||||
|
|
@ -38,9 +33,6 @@
|
|||
</el-table-column>
|
||||
<el-table-column :label="$t('Operation')" width="130">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip :content="$t('Managing Users')" placement="top">
|
||||
<el-button type="primary" size="mini" icon="el-icon-user" @click="_mangeUser(scope.row, scope.$index)" circle></el-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip :content="$t('Edit')" placement="top">
|
||||
<span><el-button type="primary" size="mini" icon="el-icon-edit-outline" @click="_edit(scope.row)" circle></el-button></span>
|
||||
</el-tooltip>
|
||||
|
|
@ -53,25 +45,17 @@
|
|||
:title="$t('Delete?')"
|
||||
@onConfirm="_delete(scope.row,scope.row.id)"
|
||||
>
|
||||
<el-button type="danger" size="mini" icon="el-icon-delete" circle slot="reference" :disabled="scope.row.id==1?true: false"></el-button>
|
||||
<el-button type="danger" size="mini" icon="el-icon-delete" circle slot="reference"></el-button>
|
||||
</el-popconfirm>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<el-dialog
|
||||
:visible.sync="transferDialog"
|
||||
width="auto">
|
||||
<m-transfer :transferData="transferData" @onUpdate="onUpdate" @close="close"></m-transfer>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import i18n from '@/module/i18n'
|
||||
import { mapActions } from 'vuex'
|
||||
import mTransfer from '@/module/components/transfer/transfer'
|
||||
|
||||
export default {
|
||||
name: 'user-list',
|
||||
|
|
@ -79,14 +63,7 @@
|
|||
return {
|
||||
list: [],
|
||||
transferDialog: false,
|
||||
item: {},
|
||||
transferData: {
|
||||
sourceListPrs: [],
|
||||
targetListPrs: [],
|
||||
type: {
|
||||
name: `${i18n.$t('Managing Users')}`
|
||||
}
|
||||
}
|
||||
item: {}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
|
|
@ -95,7 +72,7 @@
|
|||
pageSize: Number
|
||||
},
|
||||
methods: {
|
||||
...mapActions('security', ['deleteAlertgrou', 'getAuthList', 'grantAuthorization']),
|
||||
...mapActions('security', ['deleteAlertgrou', 'grantAuthorization']),
|
||||
_delete (item, i) {
|
||||
this.deleteAlertgrou({
|
||||
id: item.id
|
||||
|
|
@ -109,30 +86,6 @@
|
|||
_edit (item) {
|
||||
this.$emit('on-edit', item)
|
||||
},
|
||||
_mangeUser (item, i) {
|
||||
this.getAuthList({
|
||||
id: item.id,
|
||||
type: 'user',
|
||||
category: 'users'
|
||||
}).then(data => {
|
||||
let sourceListPrs = _.map(data[0], v => {
|
||||
return {
|
||||
id: v.id,
|
||||
name: v.userName
|
||||
}
|
||||
})
|
||||
let targetListPrs = _.map(data[1], v => {
|
||||
return {
|
||||
id: v.id,
|
||||
name: v.userName
|
||||
}
|
||||
})
|
||||
this.item = item
|
||||
this.transferData.sourceListPrs = sourceListPrs
|
||||
this.transferData.targetListPrs = targetListPrs
|
||||
this.transferDialog = true
|
||||
})
|
||||
},
|
||||
onUpdate (userIds) {
|
||||
this._grantAuthorization('alert-group/grant-user', {
|
||||
userIds: userIds,
|
||||
|
|
@ -168,6 +121,6 @@
|
|||
},
|
||||
mounted () {
|
||||
},
|
||||
components: { mTransfer }
|
||||
components: {}
|
||||
}
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -21,9 +21,11 @@
|
|||
<template slot="button-group" v-if="isADMIN">
|
||||
<el-button size="mini" @click="_create('')">{{$t('Create alarm group')}}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit alarm group') : $t('Create alarm group')"
|
||||
v-if="createWarningDialog"
|
||||
:visible.sync="createWarningDialog"
|
||||
width="auto">
|
||||
<m-create-warning :item="item" @onUpdate="onUpdate" @close="close"></m-create-warning>
|
||||
<m-create-warning :item="item" :allAlertPluginInstance="allAlertPluginInstance" @onUpdate="onUpdate" @close="close"></m-create-warning>
|
||||
</el-dialog>
|
||||
</template>
|
||||
</m-conditions>
|
||||
|
|
@ -83,13 +85,14 @@
|
|||
isLeft: true,
|
||||
isADMIN: store.state.user.userInfo.userType === 'ADMIN_USER',
|
||||
createWarningDialog: false,
|
||||
item: {}
|
||||
item: {},
|
||||
allAlertPluginInstance: []
|
||||
}
|
||||
},
|
||||
mixins: [listUrlParamHandle],
|
||||
props: {},
|
||||
methods: {
|
||||
...mapActions('security', ['getAlertgroupP']),
|
||||
...mapActions('security', ['queryAlertGroupListPaging', 'queryAllAlertPluginInstance']),
|
||||
/**
|
||||
* Inquire
|
||||
*/
|
||||
|
|
@ -110,6 +113,11 @@
|
|||
this._create(item)
|
||||
},
|
||||
_create (item) {
|
||||
this.queryAllAlertPluginInstance().then(res => {
|
||||
this.allAlertPluginInstance = res
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg)
|
||||
})
|
||||
this.item = item
|
||||
this.createWarningDialog = true
|
||||
},
|
||||
|
|
@ -130,7 +138,7 @@
|
|||
this.isLeft = true
|
||||
}
|
||||
this.isLoading = !flag
|
||||
this.getAlertgroupP(this.searchParams).then(res => {
|
||||
this.queryAlertGroupListPaging(this.searchParams).then(res => {
|
||||
if (this.searchParams.pageNo > 1 && res.totalList.length === 0) {
|
||||
this.searchParams.pageNo = this.searchParams.pageNo - 1
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,197 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
<template>
|
||||
<m-popover
|
||||
ref="popover"
|
||||
:ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
@ok="_ok"
|
||||
@close="close">
|
||||
<template slot="content">
|
||||
<div class="create-warning-model">
|
||||
<m-list-box-f>
|
||||
<template slot="name"><strong>*</strong>{{$t('Alarm instance name')}}</template>
|
||||
<template slot="content">
|
||||
<el-input
|
||||
type="input"
|
||||
v-model="instanceName"
|
||||
maxlength="60"
|
||||
size="small"
|
||||
:placeholder="$t('Please enter group name')">
|
||||
</el-input>
|
||||
</template>
|
||||
</m-list-box-f>
|
||||
<m-list-box-f>
|
||||
<template slot="name"><strong>*</strong>{{$t('Select plugin')}}</template>
|
||||
<template slot="content">
|
||||
<el-select v-model="pluginDefineId" size="small" style="width: 100%" @change="changePlugin" disabled="true" v-if="item.id">
|
||||
<el-option
|
||||
v-for="items in pulginInstance"
|
||||
:key="items.id"
|
||||
:value="items.id"
|
||||
:label="items.pluginName">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-select v-model="pluginDefineId" size="small" style="width: 100%" @change="changePlugin" v-else>
|
||||
<el-option
|
||||
v-for="items in pulginInstance"
|
||||
:key="items.id"
|
||||
:value="items.id"
|
||||
:label="items.pluginName">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</m-list-box-f>
|
||||
<div class="alertForm">
|
||||
<template>
|
||||
<form-create v-model="$f" :rule="rule" :option="{submitBtn:false}" size="mini"></form-create>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</m-popover>
|
||||
</template>
|
||||
<script>
|
||||
import i18n from '@/module/i18n'
|
||||
import store from '@/conf/home/store'
|
||||
import mPopover from '@/module/components/popup/popover'
|
||||
import mListBoxF from '@/module/components/listBoxF/listBoxF'
|
||||
|
||||
export default {
|
||||
name: 'create-warning',
|
||||
data () {
|
||||
return {
|
||||
store,
|
||||
instanceName: '',
|
||||
pluginDefineId: null,
|
||||
$f: {},
|
||||
rule: []
|
||||
}
|
||||
},
|
||||
props: {
|
||||
item: Object,
|
||||
pulginInstance: Array
|
||||
},
|
||||
methods: {
|
||||
_ok () {
|
||||
if (this._verification()) {
|
||||
// The name is not verified
|
||||
if (this.item && this.item.instanceName === this.instanceName) {
|
||||
this._submit()
|
||||
return
|
||||
}
|
||||
|
||||
// Verify username
|
||||
this.store.dispatch('security/verifyName', {
|
||||
type: 'alarmInstance',
|
||||
instanceName: this.instanceName
|
||||
}).then(res => {
|
||||
this._submit()
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
})
|
||||
}
|
||||
},
|
||||
_verification () {
|
||||
// group name
|
||||
if (!this.instanceName.replace(/\s*/g, '')) {
|
||||
this.$message.warning(`${i18n.$t('Please enter group name')}`)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
// Select plugin
|
||||
changePlugin () {
|
||||
this.store.dispatch('security/getUiPluginById', {
|
||||
pluginId: this.pluginDefineId
|
||||
}).then(res => {
|
||||
this.rule = JSON.parse(res.pluginParams)
|
||||
this.rule.forEach(item => {
|
||||
if (item.title.indexOf('$t') !== -1) {
|
||||
item.title = $t(item.field)
|
||||
}
|
||||
})
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
})
|
||||
},
|
||||
_submit () {
|
||||
this.$f.rule.forEach(item => {
|
||||
item.title = item.name
|
||||
})
|
||||
let param = {
|
||||
instanceName: this.instanceName,
|
||||
pluginDefineId: this.pluginDefineId,
|
||||
pluginInstanceParams: JSON.stringify(this.$f.rule)
|
||||
}
|
||||
if (this.item) {
|
||||
param.alertPluginInstanceId = this.item.id
|
||||
param.pluginDefineId = null
|
||||
}
|
||||
this.$refs.popover.spinnerLoading = true
|
||||
this.store.dispatch(`security/${this.item ? 'updateAlertPluginInstance' : 'createAlertPluginInstance'}`, param).then(res => {
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
this.$emit('onUpdate')
|
||||
this.$message.success(res.msg)
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
this.$refs.popover.spinnerLoading = false
|
||||
})
|
||||
},
|
||||
close () {
|
||||
this.$emit('close')
|
||||
}
|
||||
},
|
||||
watch: {},
|
||||
created () {
|
||||
let pluginInstanceParams = []
|
||||
if (this.item) {
|
||||
this.instanceName = this.item.instanceName
|
||||
this.pluginDefineId = this.item.pluginDefineId
|
||||
JSON.parse(this.item.pluginInstanceParams).forEach(item => {
|
||||
if (item.title.indexOf('$t') !== -1) {
|
||||
item.title = $t(item.field)
|
||||
}
|
||||
pluginInstanceParams.push(item)
|
||||
})
|
||||
this.rule = pluginInstanceParams
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
},
|
||||
components: { mPopover, mListBoxF }
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" rel="stylesheet/scss">
|
||||
.alertForm {
|
||||
label {
|
||||
span {
|
||||
font-weight: 10!important;
|
||||
}
|
||||
}
|
||||
.el-row {
|
||||
width: 520px;
|
||||
}
|
||||
.el-form-item__label {
|
||||
width: 144px!important;
|
||||
color: #606266!important;
|
||||
}
|
||||
.el-form-item__content {
|
||||
margin-left: 144px!important;
|
||||
width: calc(100% - 162px);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
<template>
|
||||
<div class="list-model">
|
||||
<div class="table-box">
|
||||
<el-table :data="list" size="mini" style="width: 100%">
|
||||
<el-table-column type="index" :label="$t('#')" width="50"></el-table-column>
|
||||
<el-table-column prop="instanceName" :label="$t('Alarm instance name')"></el-table-column>
|
||||
<el-table-column :label="$t('Create Time')">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.createTime | formatDate}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="$t('Update Time')">
|
||||
<template slot-scope="scope">
|
||||
<span>{{scope.row.updateTime | formatDate}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="$t('Operation')" width="130">
|
||||
<template slot-scope="scope">
|
||||
<el-tooltip :content="$t('Edit')" placement="top">
|
||||
<span><el-button type="primary" size="mini" icon="el-icon-edit-outline" @click="_edit(scope.row)" circle></el-button></span>
|
||||
</el-tooltip>
|
||||
<el-tooltip :content="$t('delete')" placement="top">
|
||||
<el-popconfirm
|
||||
:confirmButtonText="$t('Confirm')"
|
||||
:cancelButtonText="$t('Cancel')"
|
||||
icon="el-icon-info"
|
||||
iconColor="red"
|
||||
:title="$t('Delete?')"
|
||||
@onConfirm="_delete(scope.row,scope.row.id)"
|
||||
>
|
||||
<el-button type="danger" size="mini" icon="el-icon-delete" circle slot="reference"></el-button>
|
||||
</el-popconfirm>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapActions } from 'vuex'
|
||||
|
||||
export default {
|
||||
name: 'user-list',
|
||||
data () {
|
||||
return {
|
||||
list: [],
|
||||
transferDialog: false,
|
||||
item: {}
|
||||
}
|
||||
},
|
||||
props: {
|
||||
alertgroupList: Array,
|
||||
pageNo: Number,
|
||||
pageSize: Number
|
||||
},
|
||||
methods: {
|
||||
...mapActions('security', ['deletAelertPluginInstance']),
|
||||
_delete (item, i) {
|
||||
this.deletAelertPluginInstance({
|
||||
id: item.id
|
||||
}).then(res => {
|
||||
this.$emit('on-update')
|
||||
this.$message.success(res.msg)
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg || '')
|
||||
})
|
||||
},
|
||||
_edit (item) {
|
||||
this.$emit('on-edit', item)
|
||||
},
|
||||
close () {
|
||||
this.transferDialog = false
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
alertgroupList (a) {
|
||||
this.list = []
|
||||
setTimeout(() => {
|
||||
this.list = a
|
||||
})
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.list = this.alertgroupList
|
||||
},
|
||||
mounted () {
|
||||
},
|
||||
components: {}
|
||||
}
|
||||
</script>
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
<template>
|
||||
<m-list-construction :title="$t('Warning instance manage')">
|
||||
<template slot="conditions">
|
||||
<m-conditions @on-conditions="_onConditions">
|
||||
<template slot="button-group" v-if="isADMIN">
|
||||
<el-button size="mini" @click="_create('')">{{$t('Create Alarm Instance')}}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit Alarm Instance') : $t('Create Alarm Instance')"
|
||||
v-if="createWarningDialog"
|
||||
:visible.sync="createWarningDialog"
|
||||
width="auto">
|
||||
<m-create-warning-instance :item="item" :pulginInstance="pulginInstance" @onUpdate="onUpdate" @close="close"></m-create-warning-instance>
|
||||
</el-dialog>
|
||||
</template>
|
||||
</m-conditions>
|
||||
</template>
|
||||
<template slot="content">
|
||||
<template v-if="alertgroupList!==null || total>0 ">
|
||||
<m-list @on-edit="_onEdit"
|
||||
@on-update="_onUpdate"
|
||||
:alertgroup-list="alertgroupList"
|
||||
:page-no="searchParams.pageNo"
|
||||
:page-size="searchParams.pageSize">
|
||||
</m-list>
|
||||
<div class="page-box">
|
||||
<el-pagination
|
||||
background
|
||||
@current-change="_page"
|
||||
@size-change="_pageSize"
|
||||
:page-size="searchParams.pageSize"
|
||||
:current-page.sync="searchParams.pageNo"
|
||||
:page-sizes="[10, 30, 50]"
|
||||
layout="sizes, prev, pager, next, jumper"
|
||||
:total="total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="alertgroupList===null && total<=0">
|
||||
<m-no-data></m-no-data>
|
||||
</template>
|
||||
<m-spin :is-spin="isLoading" :is-left="isLeft"></m-spin>
|
||||
</template>
|
||||
</m-list-construction>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
import { mapActions } from 'vuex'
|
||||
import mList from './_source/list'
|
||||
import store from '@/conf/home/store'
|
||||
import mSpin from '@/module/components/spin/spin'
|
||||
import mCreateWarningInstance from './_source/createWarningInstance'
|
||||
import mNoData from '@/module/components/noData/noData'
|
||||
import listUrlParamHandle from '@/module/mixin/listUrlParamHandle'
|
||||
import mConditions from '@/module/components/conditions/conditions'
|
||||
import mListConstruction from '@/module/components/listConstruction/listConstruction'
|
||||
|
||||
export default {
|
||||
name: 'warning-instance-index',
|
||||
data () {
|
||||
return {
|
||||
total: null,
|
||||
isLoading: false,
|
||||
alertgroupList: [],
|
||||
searchParams: {
|
||||
pageSize: 10,
|
||||
pageNo: 1,
|
||||
searchVal: ''
|
||||
},
|
||||
isLeft: true,
|
||||
isADMIN: store.state.user.userInfo.userType === 'ADMIN_USER',
|
||||
createWarningDialog: false,
|
||||
item: {},
|
||||
pulginInstance: []
|
||||
}
|
||||
},
|
||||
mixins: [listUrlParamHandle],
|
||||
props: {},
|
||||
methods: {
|
||||
...mapActions('security', ['queryAlertPluginInstanceListPaging', 'getPlugins']),
|
||||
/**
|
||||
* Inquire
|
||||
*/
|
||||
_onConditions (o) {
|
||||
this.searchParams = _.assign(this.searchParams, o)
|
||||
this.searchParams.pageNo = 1
|
||||
},
|
||||
_page (val) {
|
||||
this.searchParams.pageNo = val
|
||||
},
|
||||
_pageSize (val) {
|
||||
this.searchParams.pageSize = val
|
||||
},
|
||||
_onUpdate () {
|
||||
this._debounceGET()
|
||||
},
|
||||
_onEdit (item) {
|
||||
this._create(item)
|
||||
},
|
||||
_create (item) {
|
||||
this.getPlugins({ pluginType: 'ALERT' }).then(res => {
|
||||
this.pulginInstance = res
|
||||
}).catch(e => {
|
||||
this.$message.error(e.msg)
|
||||
})
|
||||
this.item = item
|
||||
this.createWarningDialog = true
|
||||
},
|
||||
|
||||
onUpdate () {
|
||||
this._debounceGET('false')
|
||||
this.createWarningDialog = false
|
||||
},
|
||||
|
||||
close () {
|
||||
this.createWarningDialog = false
|
||||
},
|
||||
|
||||
_getList (flag) {
|
||||
if (sessionStorage.getItem('isLeft') === 0) {
|
||||
this.isLeft = false
|
||||
} else {
|
||||
this.isLeft = true
|
||||
}
|
||||
this.isLoading = !flag
|
||||
this.queryAlertPluginInstanceListPaging(this.searchParams).then(res => {
|
||||
if (this.searchParams.pageNo > 1 && res.totalList.length === 0) {
|
||||
this.searchParams.pageNo = this.searchParams.pageNo - 1
|
||||
} else {
|
||||
this.alertgroupList = []
|
||||
this.alertgroupList = res.totalList
|
||||
this.total = res.total
|
||||
this.isLoading = false
|
||||
}
|
||||
}).catch(e => {
|
||||
this.isLoading = false
|
||||
})
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
// router
|
||||
'$route' (a) {
|
||||
// url no params get instance list
|
||||
this.searchParams.pageNo = _.isEmpty(a.query) ? 1 : a.query.pageNo
|
||||
}
|
||||
},
|
||||
created () {
|
||||
},
|
||||
mounted () {
|
||||
},
|
||||
beforeDestroy () {
|
||||
sessionStorage.setItem('isLeft', 1)
|
||||
},
|
||||
components: { mList, mListConstruction, mConditions, mSpin, mNoData, mCreateWarningInstance }
|
||||
}
|
||||
</script>
|
||||
|
|
@ -69,6 +69,8 @@
|
|||
<template slot="content">
|
||||
<el-button type="primary" size="small" round @click="_edit()" >{{$t('Edit')}}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit User') : $t('Create User')"
|
||||
v-if="createUserDialog"
|
||||
:visible.sync="createUserDialog"
|
||||
width="auto">
|
||||
<m-create-user :item="item" @onUpdate="onUpdate" @close="close"></m-create-user>
|
||||
|
|
@ -131,12 +133,10 @@
|
|||
padding-top: 30px;
|
||||
.list-box-f {
|
||||
.text {
|
||||
width: 200px;
|
||||
font-size: 14px;
|
||||
color: #888;
|
||||
}
|
||||
.cont {
|
||||
width: calc(100% - 210px);
|
||||
margin-left: 10px;
|
||||
.sp1 {
|
||||
font-size: 14px;
|
||||
|
|
|
|||
|
|
@ -15,10 +15,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
<template>
|
||||
<m-popup
|
||||
ref="popup"
|
||||
<m-popover
|
||||
ref="popover"
|
||||
:ok-text="item ? $t('Edit') : $t('Submit')"
|
||||
:nameText="item ? $t('Edit token') : $t('Create token')"
|
||||
@ok="_ok"
|
||||
@close="close">
|
||||
<template slot="content">
|
||||
|
|
@ -65,7 +64,7 @@
|
|||
</m-list-box-f>
|
||||
</div>
|
||||
</template>
|
||||
</m-popup>
|
||||
</m-popover>
|
||||
</template>
|
||||
<script>
|
||||
import _ from 'lodash'
|
||||
|
|
@ -73,7 +72,7 @@
|
|||
import i18n from '@/module/i18n'
|
||||
import store from '@/conf/home/store'
|
||||
import Permissions from '@/module/permissions'
|
||||
import mPopup from '@/module/components/popup/popup'
|
||||
import mPopover from '@/module/components/popup/popover'
|
||||
import mListBoxF from '@/module/components/listBoxF/listBoxF'
|
||||
|
||||
export default {
|
||||
|
|
@ -177,7 +176,7 @@
|
|||
},
|
||||
mounted () {
|
||||
},
|
||||
components: { mPopup, mListBoxF }
|
||||
components: { mPopover, mListBoxF }
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@
|
|||
<template slot="button-group">
|
||||
<el-button size="mini" @click="_create('')">{{$t('Create token')}}</el-button>
|
||||
<el-dialog
|
||||
:title="item ? $t('Edit token') : $t('Create token')"
|
||||
v-if="createTokenDialog"
|
||||
:visible.sync="createTokenDialog"
|
||||
width="auto">
|
||||
<m-create-token :item="item" @onUpdate="onUpdate" @close="close"></m-create-token>
|
||||
|
|
|
|||
|
|
@ -387,7 +387,8 @@ const router = new Router({
|
|||
name: 'users-manage',
|
||||
component: resolve => require(['../pages/security/pages/users/index'], resolve),
|
||||
meta: {
|
||||
title: `${i18n.$t('User Manage')}`
|
||||
title: `${i18n.$t('User Manage')}`,
|
||||
refresh_in_switched_tab: true
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -398,6 +399,14 @@ const router = new Router({
|
|||
title: `${i18n.$t('Warning group manage')}`
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/security/warning-instance',
|
||||
name: 'warning-instance-manage',
|
||||
component: resolve => require(['../pages/security/pages/warningInstance/index'], resolve),
|
||||
meta: {
|
||||
title: `${i18n.$t('Warning instance manage')}`
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/security/queue',
|
||||
name: 'queue-manage',
|
||||
|
|
|
|||
|
|
@ -807,18 +807,6 @@ export default {
|
|||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Get the mailbox list interface
|
||||
*/
|
||||
getReceiver ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.get(`projects/${state.projectName}/executors/get-receiver-cc`, payload, res => {
|
||||
resolve(res.data)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
getTaskListDefIdAll ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.get(`projects/${state.projectName}/process/get-task-list`, payload, res => {
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ export default {
|
|||
// Current project
|
||||
projectName: projectName || '',
|
||||
// Whether to go online the process definition
|
||||
releaseState: 1,
|
||||
releaseState: 'ONLINE',
|
||||
// Whether to update the process definition
|
||||
syncDefine: true,
|
||||
// tasks processList
|
||||
|
|
|
|||
|
|
@ -43,6 +43,12 @@ export default {
|
|||
groupName: payload.groupName
|
||||
},
|
||||
api: 'alert-group/verify-group-name'
|
||||
},
|
||||
alarmInstance: {
|
||||
param: {
|
||||
alertInstanceName: payload.instanceName
|
||||
},
|
||||
api: 'alert-plugin-instance/verify-alert-instance-name'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -340,9 +346,9 @@ export default {
|
|||
})
|
||||
},
|
||||
/**
|
||||
* Paging query alarm group list
|
||||
* queryAlertGroupListPaging
|
||||
*/
|
||||
getAlertgroupP ({ state }, payload) {
|
||||
queryAlertGroupListPaging ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.get('alert-group/list-paging', payload, res => {
|
||||
resolve(res.data)
|
||||
|
|
@ -351,6 +357,54 @@ export default {
|
|||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* queryAlertPluginInstanceListPaging
|
||||
*/
|
||||
queryAlertPluginInstanceListPaging ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.get('alert-plugin-instance/list-paging', payload, res => {
|
||||
resolve(res.data)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* queryUiPlugins
|
||||
*/
|
||||
getPlugins ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.post('ui-plugins/queryUiPluginsByType', payload, res => {
|
||||
resolve(res.data)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* queryUiPluginById
|
||||
*/
|
||||
getUiPluginById ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.post('ui-plugins/queryUiPluginDetailById', payload, res => {
|
||||
resolve(res.data)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* queryAll alert-plugin-instance
|
||||
*/
|
||||
queryAllAlertPluginInstance ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.post('alert-plugin-instance/queryAll', payload, res => {
|
||||
resolve(res.data)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Alarm group list
|
||||
*/
|
||||
|
|
@ -375,6 +429,30 @@ export default {
|
|||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* create alert plugin instance operation
|
||||
*/
|
||||
createAlertPluginInstance ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.post('alert-plugin-instance/create', payload, res => {
|
||||
resolve(res)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* update alert plugin instance operation
|
||||
*/
|
||||
updateAlertPluginInstance ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.get('alert-plugin-instance/update', payload, res => {
|
||||
resolve(res)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* update an alarm group.
|
||||
*/
|
||||
|
|
@ -399,6 +477,18 @@ export default {
|
|||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* delete alert plugin instance operation
|
||||
*/
|
||||
deletAelertPluginInstance ({ state }, payload) {
|
||||
return new Promise((resolve, reject) => {
|
||||
io.get('alert-plugin-instance/delete', payload, res => {
|
||||
resolve(res)
|
||||
}).catch(e => {
|
||||
reject(e)
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* Master list
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* 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.
|
||||
*/
|
||||
<template>
|
||||
<div class="popup-model">
|
||||
<div class="content-p">
|
||||
<slot name="content"></slot>
|
||||
</div>
|
||||
<div class="bottom-p">
|
||||
<el-button type="text" size="mini" round @click="close()" :disabled="disabled"> {{$t('Cancel')}} </el-button>
|
||||
<el-button type="primary" size="mini" round :loading="spinnerLoading" @click="ok()" :disabled="disabled || apDisabled">{{spinnerLoading ? 'Loading...' : okText}} </el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import i18n from '@/module/i18n'
|
||||
export default {
|
||||
name: 'popup',
|
||||
data () {
|
||||
return {
|
||||
spinnerLoading: false,
|
||||
apDisabled: false
|
||||
}
|
||||
},
|
||||
props: {
|
||||
okText: {
|
||||
type: String,
|
||||
default: `${i18n.$t('Confirm')}`
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
asynLoading: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
close () {
|
||||
this.$emit('close')
|
||||
},
|
||||
ok () {
|
||||
if (this.asynLoading) {
|
||||
this.spinnerLoading = true
|
||||
this.$emit('ok', () => {
|
||||
this.spinnerLoading = false
|
||||
})
|
||||
} else {
|
||||
this.$emit('ok')
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" rel="stylesheet/scss">
|
||||
.popup-model {
|
||||
background: #fff;
|
||||
border-radius: 3px;
|
||||
|
||||
.top-p {
|
||||
height: 70px;
|
||||
line-height: 70px;
|
||||
border-radius: 3px 3px 0 0;
|
||||
padding: 0 20px;
|
||||
>span {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
.bottom-p {
|
||||
text-align: right;
|
||||
height: 72px;
|
||||
line-height: 72px;
|
||||
border-radius: 0 0 3px 3px;
|
||||
padding: 0 20px;
|
||||
}
|
||||
.content-p {
|
||||
min-width: 520px;
|
||||
min-height: 100px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -71,7 +71,7 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
components: { }
|
||||
components: {}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -109,6 +109,15 @@ const menu = {
|
|||
icon: 'el-icon-warning',
|
||||
children: []
|
||||
},
|
||||
{
|
||||
name: `${i18n.$t('Warning instance manage')}`,
|
||||
id: 2,
|
||||
path: 'warning-instance-manage',
|
||||
isOpen: true,
|
||||
enabled: true,
|
||||
icon: 'ri-spam-fill',
|
||||
children: []
|
||||
},
|
||||
{
|
||||
name: `${i18n.$t('Worker group manage')}`,
|
||||
id: 4,
|
||||
|
|
|
|||
|
|
@ -74,8 +74,8 @@
|
|||
resourceData: Object
|
||||
},
|
||||
created () {
|
||||
let file = this.fileSourceList
|
||||
let udf = this.udfSourceList
|
||||
let file = this.resourceData.fileSourceList
|
||||
let udf = this.resourceData.udfSourceList
|
||||
this.diGuiTree(file)
|
||||
this.diGuiTree(udf)
|
||||
this.fileList = file
|
||||
|
|
@ -218,7 +218,6 @@
|
|||
delete item.children
|
||||
},
|
||||
close () {
|
||||
console.log(888)
|
||||
this.$emit('closeAuthResource')
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -184,15 +184,14 @@ export default {
|
|||
'Last heartbeat time': 'Last heartbeat time',
|
||||
'Edit Tenant': 'Edit Tenant',
|
||||
'OS Tenant Code': 'OS Tenant Code',
|
||||
Queue: 'Yarn Queue',
|
||||
'Tenant Name': 'Tenant Name',
|
||||
Queue: 'Yarn Queue',
|
||||
'Please select a queue': 'default is tenant association queue',
|
||||
'Please enter the os tenant code in English': 'Please enter the os tenant code in English',
|
||||
'Please enter os tenant code in English': 'Please enter os tenant code in English',
|
||||
'Please enter os tenant code': 'Please enter os tenant code',
|
||||
'Please enter tenant Name': 'Please enter tenant Name',
|
||||
'The os tenant code. Only letters or a combination of letters and numbers are allowed': 'The os tenant code. Only letters or a combination of letters and numbers are allowed',
|
||||
'The os tenant code cannot be all numbers': 'The os tenant code cannot be all numbers',
|
||||
'Edit User': 'Edit User',
|
||||
Tenant: 'Tenant',
|
||||
Email: 'Email',
|
||||
|
|
@ -210,9 +209,14 @@ export default {
|
|||
'Please select UDF resources directory': 'Please select UDF resources directory',
|
||||
'Edit alarm group': 'Edit alarm group',
|
||||
'Create alarm group': 'Create alarm group',
|
||||
'Create Alarm Instance': 'Create Alarm Instance',
|
||||
'Edit Alarm Instance': 'Edit Alarm Instance',
|
||||
'Group Name': 'Group Name',
|
||||
'Alarm instance name': 'Alarm instance name',
|
||||
'Select plugin': 'Select plugin',
|
||||
'Please enter group name': 'Please enter group name',
|
||||
'Group Type': 'Group Type',
|
||||
'Alarm plugin instance': 'Alarm plugin instance',
|
||||
Remarks: 'Remarks',
|
||||
SMS: 'SMS',
|
||||
'Managing Users': 'Managing Users',
|
||||
|
|
@ -370,6 +374,7 @@ export default {
|
|||
'Process definition': 'Process definition',
|
||||
'Task record': 'Task record',
|
||||
'Warning group manage': 'Warning group manage',
|
||||
'Warning instance manage': 'Warning instance manage',
|
||||
'Servers manage': 'Servers manage',
|
||||
'UDF manage': 'UDF manage',
|
||||
'Resource manage': 'Resource manage',
|
||||
|
|
|
|||
|
|
@ -209,9 +209,14 @@ export default {
|
|||
'Please select UDF resources directory': '请选择UDF资源目录',
|
||||
'Edit alarm group': '编辑告警组',
|
||||
'Create alarm group': '创建告警组',
|
||||
'Create Alarm Instance': '创建告警实例',
|
||||
'Edit Alarm Instance': '编辑告警实例',
|
||||
'Group Name': '组名称',
|
||||
'Alarm instance name': '告警实例名称',
|
||||
'Select plugin': '选择插件',
|
||||
'Please enter group name': '请输入组名称',
|
||||
'Group Type': '组类型',
|
||||
'Alarm plugin instance': '告警插件实例',
|
||||
Remarks: '备注',
|
||||
SMS: '短信',
|
||||
'Managing Users': '管理用户',
|
||||
|
|
@ -369,6 +374,7 @@ export default {
|
|||
'Process definition': '工作流定义',
|
||||
'Task record': '任务记录',
|
||||
'Warning group manage': '告警组管理',
|
||||
'Warning instance manage': '告警实例管理',
|
||||
'Servers manage': '服务管理',
|
||||
'UDF manage': 'UDF管理',
|
||||
'Resource manage': '资源管理',
|
||||
|
|
|
|||
|
|
@ -84,6 +84,10 @@ io.interceptors.request.use(
|
|||
_t: Math.random()
|
||||
})
|
||||
}
|
||||
config.headers = config.headers || {}
|
||||
const language = cookies.get('language')
|
||||
if (language) config.headers.language = language
|
||||
if (sIdCookie) config.headers.sessionId = sIdCookie
|
||||
return config
|
||||
}
|
||||
}, error => {
|
||||
|
|
|
|||
|
|
@ -359,7 +359,9 @@ body::-webkit-scrollbar-thumb {
|
|||
max-height: 200px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.el-dialog__body {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
3
pom.xml
3
pom.xml
|
|
@ -65,7 +65,7 @@
|
|||
<logback.version>1.2.3</logback.version>
|
||||
<hadoop.version>2.7.3</hadoop.version>
|
||||
<quartz.version>2.3.0</quartz.version>
|
||||
<jackson.version>2.9.10</jackson.version>
|
||||
<jackson.version>2.10.5</jackson.version>
|
||||
<mybatis-plus.version>3.2.0</mybatis-plus.version>
|
||||
<mybatis.spring.version>2.0.1</mybatis.spring.version>
|
||||
<cron.utils.version>5.0.5</cron.utils.version>
|
||||
|
|
@ -776,6 +776,7 @@
|
|||
<include>**/api/enums/StatusTest.java</include>
|
||||
<include>**/api/exceptions/ApiExceptionHandlerTest.java</include>
|
||||
<include>**/api/exceptions/ServiceExceptionTest.java</include>
|
||||
<include>**/api/interceptor/LocaleChangeInterceptorTest.java</include>
|
||||
<include>**/api/interceptor/LoginHandlerInterceptorTest.java</include>
|
||||
<include>**/api/security/impl/pwd/PasswordAuthenticatorTest.java</include>
|
||||
<include>**/api/security/impl/ldap/LdapAuthenticatorTest.java</include>
|
||||
|
|
|
|||
|
|
@ -79,10 +79,10 @@ httpclient-4.4.1.jar
|
|||
httpcore-4.4.1.jar
|
||||
httpmime-4.5.12.jar
|
||||
j2objc-annotations-1.1.jar
|
||||
jackson-annotations-2.9.10.jar
|
||||
jackson-core-2.9.10.jar
|
||||
jackson-annotations-2.10.5.jar
|
||||
jackson-core-2.10.5.jar
|
||||
jackson-core-asl-1.9.13.jar
|
||||
jackson-databind-2.9.10.jar
|
||||
jackson-databind-2.10.5.jar
|
||||
jackson-datatype-jdk8-2.9.10.jar
|
||||
jackson-datatype-jsr310-2.9.10.jar
|
||||
jackson-jaxrs-1.9.13.jar
|
||||
|
|
|
|||
Loading…
Reference in New Issue