diff --git a/ui/fes.config.js b/ui/fes.config.js
index a6240b6a..b721d3be 100644
--- a/ui/fes.config.js
+++ b/ui/fes.config.js
@@ -39,7 +39,7 @@ export default {
unLogin: ['/home','/dashboard', '/'],
noauth: ['/dashboard','/home','/taskQuery', '/taskQuery/verificationDetails', '/taskQuery/ruleDetails', '/addTechniqueRule','/ruleQuery','/ruleQuery/*','/taskDetail',
'/ruleTemplateList','/ruleTemplateList/*','/myProject','/projects/*','/myProject/*','/HelpDocument','/customTechnicalRule',
- '/crossTableCheck','/verifyFailData', '/addGroupTechniqueRule', '/metricManagement', '/engineConfiguration', '/dataSourceManagement', '/'],
+ '/crossTableCheck','/verifyFailData', '/addGroupTechniqueRule', '/metricManagement', '/engineConfiguration', '/'],
admin: ['/dashboard','*']
},
// map
diff --git a/ui/i18n-config.json b/ui/i18n-config.json
index 1341183f..23cfbc90 100644
--- a/ui/i18n-config.json
+++ b/ui/i18n-config.json
@@ -732,7 +732,12 @@
"select": "请选择要模拟登录的用户",
"exitUser": "退出模拟用户",
"selectUser": "请选择用户",
- "signOut": "退出登录"
+ "signOut": "退出登录",
+ "changePassword": "修改密码",
+ "oldPassword": "旧密码",
+ "newPassword": "新密码",
+ "confirmPassword": "确认新密码",
+ "checkPassword": "新密码输入不一致"
},
"addGroupTechniqueRule": {
"newCustomRule": "单指标校验",
@@ -756,32 +761,6 @@
"executationVaribleConfigDesc": "可指定查询过滤条件,也可动态替换查询中的占位符",
"fpsFileConfigDesc": "可校验最新文件",
"sparkConfigDesc": "可指定Spark Configuration参数"
- },
- "dataSourceManagement": {
- "title": "数据源管理",
- "previous": "上一步",
- "close": "关闭",
- "finish": "完成",
- "dataSourceId": "数据源ID",
- "dataSourceName": "数据源名称",
- "dataSourceDesc": "数据源描述",
- "dataSourceType": "数据源类型",
- "addDataSource": "新增数据源",
- "editDataSource": "编辑数据源",
- "reviewDataSource": "查看数据源",
- "exportDataSourceBatch": "批量导出数据源",
- "importDataSourceBatch": "批量导入数据源",
- "expire": "过期",
- "canUse": "可用",
- "published": "已发布",
- "unPublish": "未发布",
- "canNotPublish": "不可发布",
- "testConnection": "测试连接",
- "versionsModalTitle": "新建版本列表",
- "enterDataSourceName": "请输入数据源名称",
- "enterDataSourceDesc": "请输入数据源描述",
- "enterLabels": "请输入标签",
- "rollbackComment": "从版本 {version} 回滚"
}
},
"en": {
@@ -1518,7 +1497,12 @@
"select": "Please select the user to simulate",
"exitUser": "Exit Simulated User",
"selectUser": "Please select user",
- "signOut": "Sign out"
+ "signOut": "Sign out",
+ "changePassword": "Change Password",
+ "oldPassword": "old Password",
+ "newPassword": "new Password",
+ "confirmPassword": "Confirm new password",
+ "checkPassword": "The new password input is inconsistent"
},
"addGroupTechniqueRule": {
"newCustomRule": "Single index verification",
@@ -1542,32 +1526,6 @@
"executationVaribleConfigDesc": "You can specify query filter conditions, and you can also dynamically replace placeholders in the query",
"fpsFileConfigDesc": "The latest file can be verified",
"sparkConfigDesc": "Can specify Spark Configuration parameters"
- },
- "dataSourceManagement": {
- "title": "Data Source Management",
- "previous": "Previous",
- "close": "Close",
- "finish": "Finish",
- "dataSourceId": "ID",
- "dataSourceName": "Data Source Name",
- "dataSourceDesc": "Data Source Desc",
- "dataSourceType": "Data Source Type",
- "addDataSource": "Add Data Source",
- "editDataSource": "Edit Data Source",
- "reviewDataSource": "Review Data Source",
- "exportDataSourceBatch": "Export Data Source Batch",
- "importDataSourceBatch": "Import Data Source Batch",
- "expire": "Expire",
- "canUse": "Can use",
- "published": "Published",
- "unPublish": "Un Publish",
- "canNotPublish": "Can not publish",
- "testConnection": "Connection",
- "versionsModalTitle": "Version List",
- "enterDataSourceName": "please enter name of dataSource",
- "enterDataSourceDesc": "please enter desc of dataSource",
- "enterLabels": "please enter label",
- "rollbackComment": "Rollback from {version}"
}
}
}
diff --git a/ui/src/assets/js/utils.js b/ui/src/assets/js/utils.js
index 3454ef75..5448a06e 100644
--- a/ui/src/assets/js/utils.js
+++ b/ui/src/assets/js/utils.js
@@ -363,7 +363,217 @@ const setCursorPositionInformation = (elementId, position) => {
const isNullOrUndefined = (value) => value === null || value === undefined;
+function sha256(s) {
+ var chrsz = 8;
+ var hexcase = 0;
+ function safe_add(x, y) {
+ var lsw = (x & 0xffff) + (y & 0xffff);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xffff);
+ }
+ function S(X, n) {
+ return (X >>> n) | (X << (32 - n));
+ }
+ function R(X, n) {
+ return X >>> n;
+ }
+ function Ch(x, y, z) {
+ return (x & y) ^ (~x & z);
+ }
+ function Maj(x, y, z) {
+ return (x & y) ^ (x & z) ^ (y & z);
+ }
+ function Sigma0256(x) {
+ return S(x, 2) ^ S(x, 13) ^ S(x, 22);
+ }
+ function Sigma1256(x) {
+ return S(x, 6) ^ S(x, 11) ^ S(x, 25);
+ }
+ function Gamma0256(x) {
+ return S(x, 7) ^ S(x, 18) ^ R(x, 3);
+ }
+ function Gamma1256(x) {
+ return S(x, 17) ^ S(x, 19) ^ R(x, 10);
+ }
+ function core_sha256(m, l) {
+ var K = new Array(
+ 0x428a2f98,
+ 0x71374491,
+ 0xb5c0fbcf,
+ 0xe9b5dba5,
+ 0x3956c25b,
+ 0x59f111f1,
+ 0x923f82a4,
+ 0xab1c5ed5,
+ 0xd807aa98,
+ 0x12835b01,
+ 0x243185be,
+ 0x550c7dc3,
+ 0x72be5d74,
+ 0x80deb1fe,
+ 0x9bdc06a7,
+ 0xc19bf174,
+ 0xe49b69c1,
+ 0xefbe4786,
+ 0xfc19dc6,
+ 0x240ca1cc,
+ 0x2de92c6f,
+ 0x4a7484aa,
+ 0x5cb0a9dc,
+ 0x76f988da,
+ 0x983e5152,
+ 0xa831c66d,
+ 0xb00327c8,
+ 0xbf597fc7,
+ 0xc6e00bf3,
+ 0xd5a79147,
+ 0x6ca6351,
+ 0x14292967,
+ 0x27b70a85,
+ 0x2e1b2138,
+ 0x4d2c6dfc,
+ 0x53380d13,
+ 0x650a7354,
+ 0x766a0abb,
+ 0x81c2c92e,
+ 0x92722c85,
+ 0xa2bfe8a1,
+ 0xa81a664b,
+ 0xc24b8b70,
+ 0xc76c51a3,
+ 0xd192e819,
+ 0xd6990624,
+ 0xf40e3585,
+ 0x106aa070,
+ 0x19a4c116,
+ 0x1e376c08,
+ 0x2748774c,
+ 0x34b0bcb5,
+ 0x391c0cb3,
+ 0x4ed8aa4a,
+ 0x5b9cca4f,
+ 0x682e6ff3,
+ 0x748f82ee,
+ 0x78a5636f,
+ 0x84c87814,
+ 0x8cc70208,
+ 0x90befffa,
+ 0xa4506ceb,
+ 0xbef9a3f7,
+ 0xc67178f2
+ );
+ var HASH = new Array(
+ 0x6a09e667,
+ 0xbb67ae85,
+ 0x3c6ef372,
+ 0xa54ff53a,
+ 0x510e527f,
+ 0x9b05688c,
+ 0x1f83d9ab,
+ 0x5be0cd19
+ );
+ var W = new Array(64);
+ var a, b, c, d, e, f, g, h, i, j;
+ var T1, T2;
+ m[l >> 5] |= 0x80 << (24 - (l % 32));
+ m[(((l + 64) >> 9) << 4) + 15] = l;
+ for (i = 0; i < m.length; i += 16) {
+ a = HASH[0];
+ b = HASH[1];
+ c = HASH[2];
+ d = HASH[3];
+ e = HASH[4];
+ f = HASH[5];
+ g = HASH[6];
+ h = HASH[7];
+ for (j = 0; j < 64; j++) {
+ if (j < 16) W[j] = m[j + i];
+ else
+ W[j] = safe_add(
+ safe_add(
+ safe_add(Gamma1256(W[j - 2]), W[j - 7]),
+ Gamma0256(W[j - 15])
+ ),
+ W[j - 16]
+ );
+ T1 = safe_add(
+ safe_add(
+ safe_add(
+ safe_add(h, Sigma1256(e)),
+ Ch(e, f, g)
+ ),
+ K[j]
+ ),
+ W[j]
+ );
+ T2 = safe_add(Sigma0256(a), Maj(a, b, c));
+ h = g;
+ g = f;
+ f = e;
+ e = safe_add(d, T1);
+ d = c;
+ c = b;
+ b = a;
+ a = safe_add(T1, T2);
+ }
+ HASH[0] = safe_add(a, HASH[0]);
+ HASH[1] = safe_add(b, HASH[1]);
+ HASH[2] = safe_add(c, HASH[2]);
+ HASH[3] = safe_add(d, HASH[3]);
+ HASH[4] = safe_add(e, HASH[4]);
+ HASH[5] = safe_add(f, HASH[5]);
+ HASH[6] = safe_add(g, HASH[6]);
+ HASH[7] = safe_add(h, HASH[7]);
+ }
+ return HASH;
+ }
+ function str2binb(str) {
+ var bin = Array();
+ var mask = (1 << chrsz) - 1;
+ for (var i = 0; i < str.length * chrsz; i += chrsz) {
+ bin[i >> 5] |=
+ (str.charCodeAt(i / chrsz) & mask) << (24 - (i % 32));
+ }
+ return bin;
+ }
+ function Utf8Encode(string) {
+ string = string.replace(/\r\n/g, "\n");
+ var utftext = "";
+ for (var n = 0; n < string.length; n++) {
+ var c = string.charCodeAt(n);
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ } else if (c > 127 && c < 2048) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ } else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ }
+ return utftext;
+ }
+ function binb2hex(binarray) {
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var str = "";
+ for (var i = 0; i < binarray.length * 4; i++) {
+ str +=
+ hex_tab.charAt(
+ (binarray[i >> 2] >> ((3 - (i % 4)) * 8 + 4)) & 0xf
+ ) +
+ hex_tab.charAt(
+ (binarray[i >> 2] >> ((3 - (i % 4)) * 8)) & 0xf
+ );
+ }
+ return str;
+ }
+ s = Utf8Encode(s);
+ return binb2hex(core_sha256(str2binb(s), s.length * chrsz));
+}
+
export {
+ sha256,
dateFormat,
getStaff,
forceDownload,
diff --git a/ui/src/components/fesHeader.fes b/ui/src/components/fesHeader.fes
index eb24dbfa..420e4050 100644
--- a/ui/src/components/fesHeader.fes
+++ b/ui/src/components/fesHeader.fes
@@ -21,17 +21,35 @@
- {{ $t('common.cancel') }}
+ {{ $t('common.cancel') }}
{{ $t('common.ok') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common.cancel') }}
+ {{ $t('common.ok') }}
+
+
+
-
diff --git a/ui/src/pages/dataSourceManagement/components/dataSourceForm.fes b/ui/src/pages/dataSourceManagement/components/dataSourceForm.fes
deleted file mode 100644
index 0d0df982..00000000
--- a/ui/src/pages/dataSourceManagement/components/dataSourceForm.fes
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ui/src/pages/dataSourceManagement/dataSourceApi.js b/ui/src/pages/dataSourceManagement/dataSourceApi.js
deleted file mode 100644
index 2821d0ff..00000000
--- a/ui/src/pages/dataSourceManagement/dataSourceApi.js
+++ /dev/null
@@ -1,301 +0,0 @@
-import Vue from 'vue';
-
-// 需要等待 FesApi挂载到Vue原型上才 能成功赋值给api
-let api = null;
-let app = null;
-let commonParams = {
- clusterName: '',
- proxyUser: ''
-};
-setTimeout(() => {
- api = Vue.prototype.FesApi;
- app = Vue.prototype.FesApp;
-});
-
-const getSystemNameNew = (data) => {
- return data.full_cn_name
- || data.subSystemFullCnName
- || data.subSystemId;
-};
-
-export const setCommonParams = (params) => {
- if (!params) return;
- commonParams.clusterName = params.clusterName || '';
- commonParams.proxyUser = params.proxyUser || '';
-};
-
-export const clearCommonParams = () => {
- commonParams.clusterName = '';
- commonParams.proxyUser = '';
-};
-
-// 数据源类型过滤器,只保留Enum('1', 'mysql')、Enum('5', 'tdsql')类型的数据源
-export const dataSourceTypesAcceptor = (data) => {
- if (!Array.isArray(data)) return [];
- return data.filter((item) => ['1', '5', 1, 5].includes(item.id));
-};
-
-/**
- * 获取环境列表
- * @param {String} clusterName 集群名
- * @param {String} proxyUser 代理用户
- * @return {List} 环境列表
- */
-export const getEnvs = () => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/data_source/env', commonParams, 'get').then((res) => {
- if (!Array.isArray(res.query_list)) resolve([]);
- resolve(res.query_list);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 获取集群列表
- * @return {List} 集群名称列表
- */
-export const getClusters = () => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/cluster', {}).then((res) => {
- const clusters = res.optional_clusters;
- if (!Array.isArray(clusters)) resolve([]);
- resolve(clusters);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 获取代理用户列表
- * @return {List} 代理用户列表
- */
-export const getProxyUsers = () => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/proxy_user', {}, 'get').then((res) => {
- let proxyUsers;
- if (Array.isArray(res) && res.length) {
- proxyUsers = res;
- } else {
- proxyUsers = [app.get('FesUserName')];
- }
- resolve(proxyUsers);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 获取子系统列表
- * @return {List} 子系统列表
- */
-export const getSubSystems = () => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/subSystemInfo', {}).then(res => {
- if (!Array.isArray(res)) resolve([]);
- const subSystemList = res.map((item) => {
- const cnName = getSystemNameNew(item);
- return Object.assign({}, item, {
- subSystemName: cnName,
- enName: item.subSystemName,
- cnName: cnName
- });
- });
- resolve(subSystemList);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 获取数据源类型列表
- * @param {String} clusterName 集群名
- * @param {String} proxyUser 代理用户
- * @return {List} 数据源类型列表
- */
-export const getDataSourceTypes = (acceptor) => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/data_source/types/all', commonParams, 'get').then((res) => {
- if (!Array.isArray(res.type_list)) resolve([]);
- const dataSourceTypes = acceptor instanceof Function ? acceptor(res.type_list) : res.type_list;
- resolve(dataSourceTypes);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 获取数据源列表
- * @param {String} dataSourceName 数据源名称
- * @param {String} dataSourceTypeId 数据源类型ID
- * @param {String} clusterName 集群名
- * @param {String} proxyUser 代理用户
- * @param {Number} current 当前页码
- * @param {Number} size 分页大小
- * @return {List} 数据源列表
- */
-export const getDataSources = (
- dataSourceName,
- dataSourceTypeId,
- current,
- size
-) => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/data_source/info', Object.assign({
- name: dataSourceName || '',
- typeId: dataSourceTypeId || '',
- currentPage: current || 1,
- pageSize: size || 10
- }, commonParams), 'get').then((res) => {
- if (!Array.isArray(res.query_list)) {
- resolve({
- total: 0,
- data: []
- });
- }
- resolve({
- total: res.totalPage,
- data: res.query_list
- });
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 获取数据源详情信息
- * @param {String} dataSourceId 数据源ID
- * @param {String} versionId 数据源版本ID
- * @param {String} clusterName 集群名
- * @param {String} proxyUser 代理用户
- * @return {DataSource} 数据源详情信息
- */
-export const getDataSourceDetail = (
- dataSourceId,
- versionId
-) => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/data_source/info/detail', Object.assign({
- dataSourceId: dataSourceId || '',
- versionId: versionId || ''
- }, commonParams), 'get').then((res) => {
- resolve(res.info);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 获取指定数据源的版本列表
- * @param {String} dataSourceId 数据源ID
- * @param {String} clusterName 集群名
- * @param {String} proxyUser 代理用户
- * @return {List} 数据源版本列表
- */
-export const getVersions = (dataSourceId) => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/data_source/versions', Object.assign({
- dataSourceId: dataSourceId || ''
- }, commonParams), 'get').then((res) => {
- if (!Array.isArray(res.versions)) resolve([]);
- resolve(res.versions);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 测试数据源连接
- * @param {String} urlSearchParams url查询参数,包含集群名、代理用户
- * @param {DataSource} dataSource 数据源信息
- */
-export const testConnection = (urlSearchParams, dataSource) => {
- return api.fetch(`/api/v1/projector/meta_data/data_source/connect?${urlSearchParams}`, dataSource);
-};
-
-/**
- * 过期作废数据源
- * @param {String} urlSearchParamsStr url查询参数,包含数据源ID、集群名、代理用户
- */
-export const expireDataSource = (urlSearchParamsStr) => {
- return api.fetch(`/api/v1/projector/meta_data/data_source/expire?${urlSearchParamsStr}`);
-};
-
-/**
- * 发布数据源
- * @param {String} urlSearchParamsStr url查询参数,包含数据源ID、数据源版本ID、集群名、代理用户
- */
-export const publishDataSource = (urlSearchParamsStr) => {
- return api.fetch(`/api/v1/projector/meta_data/data_source/publish?${urlSearchParamsStr}`);
-};
-
-/**
- * 更新数据源连接信息
- * @param {String} urlSearchParamsStr url查询参数,包含数据源ID、集群名、代理用户
- * @param {DataSourceConnectParams} connectParams 数据源连接信息
- * @param {String} comment 更新日志
- */
-export const updateDataSourceConnectionParams = (urlSearchParamsStr, connectParams, comment) => {
- return api.fetch(`/api/v1/projector/meta_data/data_source/param/modify?${urlSearchParamsStr}`, {
- comment: comment || '',
- connectParams: connectParams || {}
- });
-};
-
-/**
- * 获取指定数据源类型的 连接信息字段配置列表
- * @param {String} dataSourceTypeId 数据源类型ID
- * @return {List} 数据源连接信息 字段列表
- */
-export const getKeyDefines = (dataSourceTypeId) => {
- return new Promise((resolve, reject) => {
- api.fetch('/api/v1/projector/meta_data/data_source/key_define/type', Object.assign({
- keyId: dataSourceTypeId,
- }, commonParams), 'get').then((res) => {
- if (!Array.isArray(res.key_define)) resolve([]);
- resolve(res.key_define);
- }).catch((error) => {
- reject(error);
- })
- });
-};
-
-/**
- * 新增数据源
- * @param {String} urlSearchParamsStr url查询参数,包含集群名、代理用户
- * @param {Object} data 数据源信息
- */
-export const createDataSource = (urlSearchParamsStr, data = {}) => {
- return new Promise((resolve, reject) => {
- api.fetch(`/api/v1/projector/meta_data/data_source/create?${urlSearchParamsStr}`, data).then((res) => {
- const result = Object.assign({}, res, {id: res.insert_id});
- resolve(result);
- }).catch((error) => {
- reject(error);
- });
- });
-};
-
-/**
- * 更新数据源
- * @param {String} urlSearchParamsStr url查询参数,包含数据源ID、集群名、代理用户
- * @param {Object} data 数据源信息
- */
-export const updateDataSource = (urlSearchParamsStr, data = {}) => {
- return new Promise((resolve, reject) => {
- api.fetch(`/api/v1/projector/meta_data/data_source/modify?${urlSearchParamsStr}`, data).then((res) => {
- const result = Object.assign({}, res, {id: res.update_id});
- resolve(result);
- }).catch((error) => {
- reject(error);
- });
- });
-};
diff --git a/ui/src/pages/dataSourceManagement/index.fes b/ui/src/pages/dataSourceManagement/index.fes
deleted file mode 100644
index a5135085..00000000
--- a/ui/src/pages/dataSourceManagement/index.fes
+++ /dev/null
@@ -1,954 +0,0 @@
-
-
-
-
- {{ $t('dataSourceManagement.title') }}
-
-
-
-
- {{ $t('common.cluster') }}:
-
-
-
-
- |
-
-
- {{ $t('common.proxyUser') }}:
-
-
-
-
- |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ui/src/pages/dataSourceManagement/operation.fes b/ui/src/pages/dataSourceManagement/operation.fes
deleted file mode 100644
index eb12dc9f..00000000
--- a/ui/src/pages/dataSourceManagement/operation.fes
+++ /dev/null
@@ -1,100 +0,0 @@
-
-
-
-
- {{ $t('dataSourceManagement.dataSourceName') }}:
- $emit('on-search')" />
-
- |
-
-
- {{ $t('dataSourceManagement.dataSourceType') }}:
-
-
-
-
- |
-
- {{ item.text }}
- |
-
-
-
-