Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

实例增加3个字段:是否验证服务端SSL证书、显示的数据库列表、隐藏的数据库列表 #2781

Merged
merged 28 commits into from
Sep 19, 2024

Conversation

feiazifeiazi
Copy link
Contributor

@feiazifeiazi feiazifeiazi commented Sep 2, 2024

实例增加字段。
ALTER TABLE sql_instance ADD verify_ssl tinyint(1) DEFAULT 1 COMMENT '是否验证服务端SSL证书。1:验证。0:不验证';
ALTER TABLE sql_instance ADD show_db_name_regex varchar(1024) DEFAULT '' COMMENT '显示的数据库列表正则';
ALTER TABLE sql_instance ADD denied_db_name_regex varchar(1024) DEFAULT '' COMMENT '隐藏的数据库列表正则';

允许显示的数据库列表字段使用场景:
一个数据库实例可以会部署多个系统,(当然了一个系统是有多个库)
方案1: 假如部署了3个系统,需要创建3个archery实例。至少需要在数据库建立3个帐号。
方案2:创建3个archery实例,配置显示数据库列表字段,在“SQL查询”,“SQL上线”等显示数据库列表时,将会进行筛选。

PS:此字段对于多系统不想创建多帐号共享使用数据库实例比较友好。我这边Mongo都是配置管理员帐号,5个系统共用的。 Redis更是10多个系统使用。

Copy link

codecov bot commented Sep 2, 2024

Codecov Report

Attention: Patch coverage is 96.40288% with 5 lines in your changes missing coverage. Please review.

Project coverage is 78.25%. Comparing base (b4c4827) to head (5e69682).
Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
sql/instance.py 33.33% 2 Missing ⚠️
sql_api/api_instance.py 33.33% 2 Missing ⚠️
sql/engines/mongo.py 66.66% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #2781      +/-   ##
==========================================
+ Coverage   78.19%   78.25%   +0.06%     
==========================================
  Files         123      124       +1     
  Lines       17425    17493      +68     
==========================================
+ Hits        13626    13690      +64     
- Misses       3799     3803       +4     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@LeoQuote
Copy link
Collaborator

LeoQuote commented Sep 2, 2024

这些字段都是比较正常的字段, 但是我最近是发现instance 级别的字段已经有点太多了, 有很多字段也不需要去用它来过滤什么的, 你觉得有没有可能设置一个 varchar 或者 text 字段用来存 json, 这样之后再加字段也不需要改表了.

@feiazifeiazi
Copy link
Contributor Author

这些字段都是比较正常的字段, 但是我最近是发现instance 级别的字段已经有点太多了, 有很多字段也不需要去用它来过滤什么的, 你觉得有没有可能设置一个 varchar 或者 text 字段用来存 json, 这样之后再加字段也不需要改表了.

instance 级别的字段多吗?sql_instance表也才20多个字段而已。
我们这是B端系统,不到190个字段,应该继续用方案1,性能不是问题。建议还是等实现了很多需求后看情况。

方案1:在现有表上继续加字段。
方案2:加多一个扩展属性表(1对1)。主键同sql_instance表。
方案3:加多一个扩展属性表(1对多)。 主键+key 是唯一的。
方案4: 用一个json存储,key value的数据。

@LeoQuote
Copy link
Collaborator

LeoQuote commented Sep 2, 2024

主要还是说以后加字段不用再加改表, 往里面塞就行了, 这才是真的简单, 以后加了字段也不用写改表语句, 如你所说性能不用太考虑, 一般人也不会在这里加一些太大太长的东西

嗯, json 字段也不错

@feiazifeiazi
Copy link
Contributor Author

主要还是说以后加字段不用再加改表, 往里面塞就行了, 这才是真的简单, 以后加了字段也不用写改表语句, 如你所说性能不用太考虑, 一般人也不会在这里加一些太大太长的东西

嗯, json 字段也不错

用单个字段存储后,
那前端如何输入?是显示一个个字段?
写代码时,可以直接引属性 使用的?
只是保存时用json格式吧。

@LeoQuote
Copy link
Collaborator

LeoQuote commented Sep 3, 2024

你说的也是需要考虑的事情, 你可以尝试下看看我们能不能定制 model 或者 admin 页面, 让其可以支持 json 字段的友好修改, 体验和之前也差不多.

如果要是不行的话, 那就没办法了, 只能按你之前的方案来了.

另外, 我比较建议的是, 设置两个字段, 允许显示的数据库 pattern, 不允许显示的数据库 pattern, 都采用正则的方式输入, 这样实现起来也比较简单, 不需要做逗号分隔等等.

@feiazifeiazi
Copy link
Contributor Author

feiazifeiazi commented Sep 3, 2024

你说的也是需要考虑的事情, 你可以尝试下看看我们能不能定制 model 或者 admin 页面, 让其可以支持 json 字段的友好修改, 体验和之前也差不多.

如果要是不行的话, 那就没办法了, 只能按你之前的方案来了.

另外, 我比较建议的是, 设置两个字段, 允许显示的数据库 pattern, 不允许显示的数据库 pattern, 都采用正则的方式输入, 这样实现起来也比较简单, 不需要做逗号分隔等等.

支持 json 字段的友好修改及使用比较难。

1.我故意屏蔽了正则。只让他支持*和~。 用正则是不是对运营人员来说成本高?用逗号简单。
2. 不允许显示的字段可以加加。

想了想那还是用正则吧。

@LeoQuote
Copy link
Collaborator

LeoQuote commented Sep 3, 2024

正则应该不会太难, 很多现有的配置就是用的是正则, 正则可以给管理员更多发挥空间

sql/engines/__init__.py Outdated Show resolved Hide resolved
sql/models.py Outdated Show resolved Hide resolved
@feiazifeiazi feiazifeiazi changed the title 实例增加2个字段:是否忽略证书选项和允许显示的数据库列表 实例增加3个字段:是否验证服务端SSL证书、显示的数据库列表、隐藏的数据库列表 Sep 5, 2024
sql/utils/sql_utils.py Outdated Show resolved Hide resolved
sql/engines/redis.py Outdated Show resolved Hide resolved
@LeoQuote
Copy link
Collaborator

LeoQuote commented Sep 6, 2024

单元测试建议还是加一批独立测试的, 另外调用时建议使用 named argument, 不然会看起来难以理解.

需要测到各种场景, 比如 pattern 是空字符串之类的

@feiazifeiazi
Copy link
Contributor Author

@LeoQuote 已修改。

  1. 过滤数据库改为 database列表统一出口的地方了。
  2. 过滤数据库放在sql_utils.py类里面,并添加了几个单元测试。sql_utils相关方法单元测试类 独立出来了。
  3. 已重新测试,功能正常。

sql_api/api_instance.py Outdated Show resolved Hide resolved
@LeoQuote LeoQuote merged commit 0e649e9 into hhyo:master Sep 19, 2024
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants