')
diff --git a/flask-consul/views/selfclickhouse.py b/flask-consul/views/selfclickhouse.py
new file mode 100644
index 0000000..91e74c0
--- /dev/null
+++ b/flask-consul/views/selfclickhouse.py
@@ -0,0 +1,80 @@
+import os
+from flask import Blueprint
+from flask_restful import reqparse, Resource, Api
+import sys,traceback
+sys.path.append("..")
+from units import token_auth,selfclickhouse_manager
+from werkzeug.datastructures import FileStorage
+from units import upload
+from units.config_log import *
+blueprint = Blueprint('selfclickhouse',__name__)
+api = Api(blueprint)
+
+parser = reqparse.RequestParser()
+parser.add_argument('vendor',type=str)
+parser.add_argument('account',type=str)
+parser.add_argument('region',type=str)
+parser.add_argument('group',type=str)
+parser.add_argument('name',type=str)
+parser.add_argument('ip',type=str)
+parser.add_argument('port',type=str)
+parser.add_argument('os',type=str)
+parser.add_argument('del_dict',type=dict)
+parser.add_argument('up_dict',type=dict)
+parser.add_argument('file',type=FileStorage, location="files", help="File is wrong.")
+
+class Upload(Resource):
+ @token_auth.auth.login_required
+ def post(self):
+ file = parser.parse_args().get("file")
+ try:
+ filename = file.filename
+ file_extension = os.path.splitext(filename)[1].lower()
+ try:
+ file_data = file.read()
+ if file_extension == '.xlsx':
+ return upload.read_execl(file_data,'selfclickhouse')
+ elif file_extension == '.csv':
+ return upload.read_csv(file_data,'selfclickhouse')
+ except Exception as e:
+ logger.error(f"【selfclickhouse】文件后缀名错误,请导入xlsx或csv格式,{e}\n{traceback.format_exc()}")
+ return {"code": 50000, "data": f"文件后缀名错误,请导入xlsx或csv格式!"}
+ except Exception as e:
+ logger.error(f"【selfclickhouse】导入失败,{e}\n{traceback.format_exc()}")
+ return {"code": 50000, "data": f"导入失败!"}
+
+class GetAllList(Resource):
+ @token_auth.auth.login_required
+ def get(self):
+ args = parser.parse_args()
+ return selfclickhouse_manager.get_all_list(args['vendor'],args['account'],args['region'],args['group'])
+
+class SelfclickhouseApi(Resource):
+ decorators = [token_auth.auth.login_required]
+ def get(self):
+ return selfclickhouse_manager.get_service()
+ def post(self):
+ args = parser.parse_args()
+ logger.info(f'=======\n{args}')
+ return selfclickhouse_manager.add_service(args['vendor'],args['account'],args['region'],
+ args['group'],args['name'],args['ip'],args['port'],args['os'])
+ def put(self):
+ args = parser.parse_args()
+ del_dict = args['del_dict']
+ up_dict = args['up_dict']
+ resp_del = selfclickhouse_manager.del_service(del_dict['vendor'],del_dict['account'],
+ del_dict['region'],del_dict['group'],del_dict['name'])
+ resp_add = selfclickhouse_manager.add_service(up_dict['vendor'],up_dict['account'],up_dict['region'],
+ up_dict['group'],up_dict['name'],up_dict['ip'],
+ up_dict['port'],up_dict['os'])
+ if resp_del["code"] == 20000 and resp_add["code"] == 20000:
+ return {"code": 20000, "data": f"更新成功!"}
+ else:
+ return {"code": 50000, "data": f"更新失败!"}
+ def delete(self):
+ args = parser.parse_args()
+ return selfclickhouse_manager.del_service(args['vendor'],args['account'],args['region'],args['group'],args['name'])
+
+api.add_resource(GetAllList,'/api/selfclickhouse/alllist')
+api.add_resource(SelfclickhouseApi, '/api/selfclickhouse/service')
+api.add_resource(Upload,'/api/selfclickhouse/upload')
diff --git a/flask-consul/views/selfmongodb.py b/flask-consul/views/selfmongodb.py
new file mode 100644
index 0000000..55f8b5f
--- /dev/null
+++ b/flask-consul/views/selfmongodb.py
@@ -0,0 +1,80 @@
+import os
+from flask import Blueprint
+from flask_restful import reqparse, Resource, Api
+import sys,traceback
+sys.path.append("..")
+from units import token_auth,selfmongodb_manager
+from werkzeug.datastructures import FileStorage
+from units import upload
+from units.config_log import *
+blueprint = Blueprint('selfmongodb',__name__)
+api = Api(blueprint)
+
+parser = reqparse.RequestParser()
+parser.add_argument('vendor',type=str)
+parser.add_argument('account',type=str)
+parser.add_argument('region',type=str)
+parser.add_argument('group',type=str)
+parser.add_argument('name',type=str)
+parser.add_argument('ip',type=str)
+parser.add_argument('port',type=str)
+parser.add_argument('os',type=str)
+parser.add_argument('del_dict',type=dict)
+parser.add_argument('up_dict',type=dict)
+parser.add_argument('file',type=FileStorage, location="files", help="File is wrong.")
+
+class Upload(Resource):
+ @token_auth.auth.login_required
+ def post(self):
+ file = parser.parse_args().get("file")
+ try:
+ filename = file.filename
+ file_extension = os.path.splitext(filename)[1].lower()
+ try:
+ file_data = file.read()
+ if file_extension == '.xlsx':
+ return upload.read_execl(file_data,'selfmongodb')
+ elif file_extension == '.csv':
+ return upload.read_csv(file_data,'selfmongodb')
+ except Exception as e:
+ logger.error(f"【selfmongodb】文件后缀名错误,请导入xlsx或csv格式,{e}\n{traceback.format_exc()}")
+ return {"code": 50000, "data": f"文件后缀名错误,请导入xlsx或csv格式!"}
+ except Exception as e:
+ logger.error(f"【selfmongodb】导入失败,{e}\n{traceback.format_exc()}")
+ return {"code": 50000, "data": f"导入失败!"}
+
+class GetAllList(Resource):
+ @token_auth.auth.login_required
+ def get(self):
+ args = parser.parse_args()
+ return selfmongodb_manager.get_all_list(args['vendor'],args['account'],args['region'],args['group'])
+
+class SelfmongodbApi(Resource):
+ decorators = [token_auth.auth.login_required]
+ def get(self):
+ return selfmongodb_manager.get_service()
+ def post(self):
+ args = parser.parse_args()
+ logger.info(f'=======\n{args}')
+ return selfmongodb_manager.add_service(args['vendor'],args['account'],args['region'],
+ args['group'],args['name'],args['ip'],args['port'],args['os'])
+ def put(self):
+ args = parser.parse_args()
+ del_dict = args['del_dict']
+ up_dict = args['up_dict']
+ resp_del = selfmongodb_manager.del_service(del_dict['vendor'],del_dict['account'],
+ del_dict['region'],del_dict['group'],del_dict['name'])
+ resp_add = selfmongodb_manager.add_service(up_dict['vendor'],up_dict['account'],up_dict['region'],
+ up_dict['group'],up_dict['name'],up_dict['ip'],
+ up_dict['port'],up_dict['os'])
+ if resp_del["code"] == 20000 and resp_add["code"] == 20000:
+ return {"code": 20000, "data": f"更新成功!"}
+ else:
+ return {"code": 50000, "data": f"更新失败!"}
+ def delete(self):
+ args = parser.parse_args()
+ return selfmongodb_manager.del_service(args['vendor'],args['account'],args['region'],args['group'],args['name'])
+
+api.add_resource(GetAllList,'/api/selfmongodb/alllist')
+api.add_resource(SelfmongodbApi, '/api/selfmongodb/service')
+api.add_resource(Upload,'/api/selfmongodb/upload')
diff --git a/flask-consul/views/selfpolardb.py b/flask-consul/views/selfpolardb.py
new file mode 100644
index 0000000..957fe6c
--- /dev/null
+++ b/flask-consul/views/selfpolardb.py
@@ -0,0 +1,80 @@
+import os
+from flask import Blueprint
+from flask_restful import reqparse, Resource, Api
+import sys,traceback
+sys.path.append("..")
+from units import token_auth,selfpolardb_manager
+from werkzeug.datastructures import FileStorage
+from units import upload
+from units.config_log import *
+blueprint = Blueprint('selfpolardb',__name__)
+api = Api(blueprint)
+
+parser = reqparse.RequestParser()
+parser.add_argument('vendor',type=str)
+parser.add_argument('account',type=str)
+parser.add_argument('region',type=str)
+parser.add_argument('group',type=str)
+parser.add_argument('name',type=str)
+parser.add_argument('ip',type=str)
+parser.add_argument('port',type=str)
+parser.add_argument('os',type=str)
+parser.add_argument('del_dict',type=dict)
+parser.add_argument('up_dict',type=dict)
+parser.add_argument('file',type=FileStorage, location="files", help="File is wrong.")
+
+class Upload(Resource):
+ @token_auth.auth.login_required
+ def post(self):
+ file = parser.parse_args().get("file")
+ try:
+ filename = file.filename
+ file_extension = os.path.splitext(filename)[1].lower()
+ try:
+ file_data = file.read()
+ if file_extension == '.xlsx':
+ return upload.read_execl(file_data,'selfpolardb')
+ elif file_extension == '.csv':
+ return upload.read_csv(file_data,'selfpolardb')
+ except Exception as e:
+ logger.error(f"【selfpolardb】文件后缀名错误,请导入xlsx或csv格式,{e}\n{traceback.format_exc()}")
+ return {"code": 50000, "data": f"文件后缀名错误,请导入xlsx或csv格式!"}
+ except Exception as e:
+ logger.error(f"【selfpolardb】导入失败,{e}\n{traceback.format_exc()}")
+ return {"code": 50000, "data": f"导入失败!"}
+
+class GetAllList(Resource):
+ @token_auth.auth.login_required
+ def get(self):
+ args = parser.parse_args()
+ return selfpolardb_manager.get_all_list(args['vendor'],args['account'],args['region'],args['group'])
+
+class SelfpolardbApi(Resource):
+ decorators = [token_auth.auth.login_required]
+ def get(self):
+ return selfpolardb_manager.get_service()
+ def post(self):
+ args = parser.parse_args()
+ logger.info(f'=======\n{args}')
+ return selfpolardb_manager.add_service(args['vendor'],args['account'],args['region'],
+ args['group'],args['name'],args['ip'],args['port'],args['os'])
+ def put(self):
+ args = parser.parse_args()
+ del_dict = args['del_dict']
+ up_dict = args['up_dict']
+ resp_del = selfpolardb_manager.del_service(del_dict['vendor'],del_dict['account'],
+ del_dict['region'],del_dict['group'],del_dict['name'])
+ resp_add = selfpolardb_manager.add_service(up_dict['vendor'],up_dict['account'],up_dict['region'],
+ up_dict['group'],up_dict['name'],up_dict['ip'],
+ up_dict['port'],up_dict['os'])
+ if resp_del["code"] == 20000 and resp_add["code"] == 20000:
+ return {"code": 20000, "data": f"更新成功!"}
+ else:
+ return {"code": 50000, "data": f"更新失败!"}
+ def delete(self):
+ args = parser.parse_args()
+ return selfpolardb_manager.del_service(args['vendor'],args['account'],args['region'],args['group'],args['name'])
+
+api.add_resource(GetAllList,'/api/selfpolardb/alllist')
+api.add_resource(SelfpolardbApi, '/api/selfpolardb/service')
+api.add_resource(Upload,'/api/selfpolardb/upload')
diff --git a/tools/del_consul_svc.sh b/tools/del_consul_svc.sh
new file mode 100644
index 0000000..1bb56df
--- /dev/null
+++ b/tools/del_consul_svc.sh
@@ -0,0 +1,12 @@
+# Assuming localhost, substitute with actual Consul server address.
+export CONSUL_HTTP_TOKEN=234dbcac-25df-42d3-965a-af4193474a56
+CONSUL_HOST="http://172.26.32.83:8500"
+
+# Get all instances of the service
+SERVICE_INSTANCES=$(curl -s -H "X-Consul-Token: $CONSUL_HTTP_TOKEN" "${CONSUL_HOST}/v1/catalog/service/alicloud_dreame_app_mongodb")
+
+# Extract the service IDs and deregister each
+echo "${SERVICE_INSTANCES}" | jq -r '.[].ServiceID' | while read SERVICE_ID; do
+ echo "Deregistering service instance: $SERVICE_ID"
+ curl -s -X PUT -H "X-Consul-Token: $CONSUL_HTTP_TOKEN" "${CONSUL_HOST}/v1/agent/service/deregister/${SERVICE_ID}"
+done
\ No newline at end of file
diff --git a/vue-consul/src/views/jms/index.vue b/vue-consul/src/views/jms/index.vue
index bf92309..46e243f 100644
--- a/vue-consul/src/views/jms/index.vue
+++ b/vue-consul/src/views/jms/index.vue
@@ -57,6 +57,26 @@
rdp端口:
管理用户ID:
+
+
Redis:
+ redis端口:
+ 管理用户ID:
+
+
+
Mongodb:
+ mongodb端口:
+ 管理用户ID:
+
+
+
Clickhouse:
+ clickhouse端口:
+ 管理用户ID:
+
+
+
Mysql:
+ mysql端口:
+ 管理用户ID:
+
全局特殊主机【管理用户】信息:
+
+
+
+
@@ -130,7 +154,9 @@ import { getJmsList, getJmsConfig, postJmsConfig, postJmsSwitch, postJmsSync } f
export default {
data() {
return {
- jms_config: { ver: 'V2', url: '', token: '', linuxport: '22', linuxuid: '', winport: '3389', winuid: '', custom_ecs_info: '' },
+ jms_config: { ver: 'V2', url: '', token: '', linuxport: '22', linuxuid: '', winport: '3389', winuid: '',
+ redisport: '6379', redisuid: '', mysqlport: '3306', mysqluid: '', mongodbport: '3717', mongodbuid: '',
+ clickhouseport: '9000', clickhouseuid: '', custom_ecs_info: '' },
listLoading: false,
dialogFormVisible: false,
query: { vendor: '', account: '' },
diff --git a/vue-consul/src/views/node-exporter/jobs.vue b/vue-consul/src/views/node-exporter/jobs.vue
index a36f46f..ade3adc 100644
--- a/vue-consul/src/views/node-exporter/jobs.vue
+++ b/vue-consul/src/views/node-exporter/jobs.vue
@@ -144,6 +144,9 @@
ECS
MySQL
REDIS
+ POLARDB
+ MONGODB
+ CLICKHOUSE
@@ -170,6 +173,15 @@
+
+
+
+
+
+
+
+
+