Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
soar
提交
5279b992
S
soar
项目概览
Xiaomi
/
soar
大约 2 年 前同步成功
通知
467
Star
8513
Fork
1329
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
soar
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
5279b992
编写于
11月 12, 2018
作者:
martianzhang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
daily fixture
1. etc/soar.blacklist add `use ?` 2. blacklist use os.Getwd prefix 3. update doc
上级
11f1bc33
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
52 addition
and
50 deletion
+52
-50
common/config.go
common/config.go
+14
-13
common/testdata/TestListReportTypes.golden
common/testdata/TestListReportTypes.golden
+7
-7
doc/config.md
doc/config.md
+1
-1
doc/report_type.md
doc/report_type.md
+7
-7
etc/soar.blacklist
etc/soar.blacklist
+1
-0
vendor/vendor.json
vendor/vendor.json
+22
-22
未找到文件。
common/config.go
浏览文件 @
5279b992
...
...
@@ -257,7 +257,7 @@ func parseDSN(odbc string, d *dsn) *dsn {
return
&
dsn
{
Disable
:
true
}
}
// username:password@ip:port/d
bnam
e
// username:password@ip:port/d
atabas
e
l1
:=
strings
.
Split
(
odbc
,
"@"
)
if
len
(
l1
)
<
2
{
if
strings
.
HasPrefix
(
l1
[
0
],
":"
)
{
...
...
@@ -279,7 +279,7 @@ func parseDSN(odbc string, d *dsn) *dsn {
l2
:=
strings
.
TrimLeft
(
l1
[
0
],
"/"
)
schema
=
l2
}
else
{
// ip:port/d
bnam
e
// ip:port/d
atabas
e
l2
:=
strings
.
Split
(
l1
[
0
],
"/"
)
if
len
(
l2
)
==
2
{
addr
=
l2
[
0
]
...
...
@@ -297,7 +297,7 @@ func parseDSN(odbc string, d *dsn) *dsn {
}
else
{
user
=
l2
[
0
]
}
// ip:port/d
bnam
e
// ip:port/d
atabas
e
l3
:=
strings
.
Split
(
l1
[
1
],
"/"
)
if
len
(
l3
)
==
2
{
addr
=
l3
[
0
]
...
...
@@ -486,7 +486,7 @@ func readCmdFlags() error {
trace
:=
flag
.
Bool
(
"trace"
,
Config
.
Trace
,
"Trace, 开启数据采样的情况下在测试环境执行Trace"
)
explain
:=
flag
.
Bool
(
"explain"
,
Config
.
Explain
,
"Explain, 是否开启Explain执行计划分析"
)
sampling
:=
flag
.
Bool
(
"sampling"
,
Config
.
Sampling
,
"Sampling, 数据采样开关"
)
samplingStatisticTarget
:=
flag
.
Int
(
"sampling-statistic-target"
,
Config
.
SamplingStatisticTarget
,
"SamplingStatisticTarget, 数据采样因子,对应
postgres
的 default_statistics_target"
)
samplingStatisticTarget
:=
flag
.
Int
(
"sampling-statistic-target"
,
Config
.
SamplingStatisticTarget
,
"SamplingStatisticTarget, 数据采样因子,对应
PostgreSQL
的 default_statistics_target"
)
connTimeOut
:=
flag
.
Int
(
"conn-time-out"
,
Config
.
ConnTimeOut
,
"ConnTimeOut, 数据库连接超时时间,单位秒"
)
queryTimeOut
:=
flag
.
Int
(
"query-time-out"
,
Config
.
QueryTimeOut
,
"QueryTimeOut, 数据库SQL执行超时时间,单位秒"
)
delimiter
:=
flag
.
String
(
"delimiter"
,
Config
.
Delimiter
,
"Delimiter, SQL分隔符"
)
...
...
@@ -503,7 +503,7 @@ func readCmdFlags() error {
// ++++++++++++++优化建议相关++++++++++++++
ignoreRules
:=
flag
.
String
(
"ignore-rules"
,
strings
.
Join
(
Config
.
IgnoreRules
,
","
),
"IgnoreRules, 忽略的优化建议规则"
)
rewriteRules
:=
flag
.
String
(
"rewrite-rules"
,
strings
.
Join
(
Config
.
RewriteRules
,
","
),
"RewriteRules, 生效的重写规则"
)
blackList
:=
flag
.
String
(
"blacklist"
,
Config
.
BlackList
,
"
blacklist 中的 SQ L不会被评审
,可以是指纹,也可以是正则"
)
blackList
:=
flag
.
String
(
"blacklist"
,
Config
.
BlackList
,
"
指定 blacklist 配置文件的位置,文件中的 SQL 不会被评审。一行一条SQL
,可以是指纹,也可以是正则"
)
maxJoinTableCount
:=
flag
.
Int
(
"max-join-table-count"
,
Config
.
MaxJoinTableCount
,
"MaxJoinTableCount, 单条 SQL 中 JOIN 表的最大数量"
)
maxGroupByColsCount
:=
flag
.
Int
(
"max-group-by-cols-count"
,
Config
.
MaxGroupByColsCount
,
"MaxGroupByColsCount, 单条 SQL 中 GroupBy 包含列的最大数量"
)
maxDistinctCount
:=
flag
.
Int
(
"max-distinct-count"
,
Config
.
MaxDistinctCount
,
"MaxDistinctCount, 单条 SQL 中 Distinct 的最大数量"
)
...
...
@@ -595,7 +595,8 @@ func readCmdFlags() error {
if
strings
.
HasPrefix
(
*
blackList
,
"/"
)
||
*
blackList
==
""
{
Config
.
BlackList
=
*
blackList
}
else
{
Config
.
BlackList
=
BaseDir
+
"/"
+
*
blackList
pwd
,
_
:=
os
.
Getwd
()
Config
.
BlackList
=
pwd
+
"/"
+
*
blackList
}
Config
.
MaxJoinTableCount
=
*
maxJoinTableCount
Config
.
MaxGroupByColsCount
=
*
maxGroupByColsCount
...
...
@@ -743,17 +744,17 @@ var ReportTypes = []ReportType{
},
{
Name
:
"rewrite"
,
Description
:
"SQL重写功能,配合-rewrite-rules参数一起使用,可以通过-list-rewrite-rules
查看所有支持的SQL
重写规则"
,
Description
:
"SQL重写功能,配合-rewrite-rules参数一起使用,可以通过-list-rewrite-rules
查看所有支持的 SQL
重写规则"
,
Example
:
`echo "select * from film" | soar -rewrite-rules star2columns,delimiter -report-type rewrite`
,
},
{
Name
:
"ast"
,
Description
:
"输出
SQL
的抽象语法树,主要用于测试"
,
Description
:
"输出
SQL
的抽象语法树,主要用于测试"
,
Example
:
`echo "select * from film" | soar -report-type ast`
,
},
{
Name
:
"tiast"
,
Description
:
"输出
SQL的
TiDB抽象语法树,主要用于测试"
,
Description
:
"输出
SQL 的
TiDB抽象语法树,主要用于测试"
,
Example
:
`echo "select * from film" | soar -report-type tiast`
,
},
{
...
...
@@ -763,12 +764,12 @@ var ReportTypes = []ReportType{
},
{
Name
:
"md2html"
,
Description
:
"markdown
格式转html
格式小工具"
,
Description
:
"markdown
格式转 html
格式小工具"
,
Example
:
`soar -list-heuristic-rules | soar -report-type md2html > heuristic_rules.html`
,
},
{
Name
:
"explain-digest"
,
Description
:
"输入为EXPLAIN的表格,JSON
或
Vertical格式,对其进行分析,给出分析结果"
,
Description
:
"输入为EXPLAIN的表格,JSON
或
Vertical格式,对其进行分析,给出分析结果"
,
Example
:
`soar -report-type explain-digest << EOF
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
...
...
@@ -779,8 +780,8 @@ EOF`,
},
{
Name
:
"duplicate-key-checker"
,
Description
:
"对
OnlineDsn中指定的DB
进行索引重复检查"
,
Example
:
`soar -report-type duplicate-key-checker -online-dsn user:passwd@127.0.0.1:3306/db`
,
Description
:
"对
OnlineDsn 中指定的 database
进行索引重复检查"
,
Example
:
`soar -report-type duplicate-key-checker -online-dsn user:passw
or
d@127.0.0.1:3306/db`
,
},
{
Name
:
"html"
,
...
...
common/testdata/TestListReportTypes.golden
浏览文件 @
5279b992
...
...
@@ -19,7 +19,7 @@ soar -report-type lint -query test.sql
echo "select * from film" | soar
```
## rewrite
* **Description**:SQL重写功能,配合-rewrite-rules参数一起使用,可以通过-list-rewrite-rules
查看所有支持的SQL
重写规则
* **Description**:SQL重写功能,配合-rewrite-rules参数一起使用,可以通过-list-rewrite-rules
查看所有支持的 SQL
重写规则
* **Example**:
...
...
@@ -27,7 +27,7 @@ echo "select * from film" | soar
echo "select * from film" | soar -rewrite-rules star2columns,delimiter -report-type rewrite
```
## ast
* **Description**:输出
SQL
的抽象语法树,主要用于测试
* **Description**:输出
SQL
的抽象语法树,主要用于测试
* **Example**:
...
...
@@ -35,7 +35,7 @@ echo "select * from film" | soar -rewrite-rules star2columns,delimiter -report-t
echo "select * from film" | soar -report-type ast
```
## tiast
* **Description**:输出
SQL的
TiDB抽象语法树,主要用于测试
* **Description**:输出
SQL 的
TiDB抽象语法树,主要用于测试
* **Example**:
...
...
@@ -51,7 +51,7 @@ echo "select * from film" | soar -report-type tiast
echo "select * from film where language_id=1" | soar -report-type fingerprint
```
## md2html
* **Description**:markdown
格式转html
格式小工具
* **Description**:markdown
格式转 html
格式小工具
* **Example**:
...
...
@@ -59,7 +59,7 @@ echo "select * from film where language_id=1" | soar -report-type fingerprint
soar -list-heuristic-rules | soar -report-type md2html > heuristic_rules.html
```
## explain-digest
* **Description**:输入为EXPLAIN的表格,JSON
或
Vertical格式,对其进行分析,给出分析结果
* **Description**:输入为EXPLAIN的表格,JSON
或
Vertical格式,对其进行分析,给出分析结果
* **Example**:
...
...
@@ -73,12 +73,12 @@ soar -report-type explain-digest << EOF
EOF
```
## duplicate-key-checker
* **Description**:对
OnlineDsn中指定的DB
进行索引重复检查
* **Description**:对
OnlineDsn 中指定的 database
进行索引重复检查
* **Example**:
```bash
soar -report-type duplicate-key-checker -online-dsn user:passwd@127.0.0.1:3306/db
soar -report-type duplicate-key-checker -online-dsn user:passw
or
d@127.0.0.1:3306/db
```
## html
* **Description**:以HTML格式输出报表
...
...
doc/config.md
浏览文件 @
5279b992
...
...
@@ -31,7 +31,7 @@ sampling-data-factor: 100
sampling: true
# 日志级别,[0:Emergency, 1:Alert, 2:Critical, 3:Error, 4:Warning, 5:Notice, 6:Informational, 7:Debug]
log-level: 7
log-output: ${
BASE_DIR
}/soar.log
log-output: ${
your_log_dir
}/soar.log
# 优化建议输出格式
report-type: markdown
ignore-rules:
...
...
doc/report_type.md
浏览文件 @
5279b992
...
...
@@ -19,7 +19,7 @@ soar -report-type lint -query test.sql
echo
"select * from film"
| soar
```
## rewrite
*
**Description**
:SQL重写功能,配合-rewrite-rules参数一起使用,可以通过-list-rewrite-rules
查看所有支持的SQL
重写规则
*
**Description**
:SQL重写功能,配合-rewrite-rules参数一起使用,可以通过-list-rewrite-rules
查看所有支持的 SQL
重写规则
*
**Example**
:
...
...
@@ -27,7 +27,7 @@ echo "select * from film" | soar
echo
"select * from film"
| soar
-rewrite-rules
star2columns,delimiter
-report-type
rewrite
```
## ast
*
**Description**
:输出
SQL
的抽象语法树,主要用于测试
*
**Description**
:输出
SQL
的抽象语法树,主要用于测试
*
**Example**
:
...
...
@@ -35,7 +35,7 @@ echo "select * from film" | soar -rewrite-rules star2columns,delimiter -report-t
echo
"select * from film"
| soar
-report-type
ast
```
## tiast
*
**Description**
:输出
SQL的
TiDB抽象语法树,主要用于测试
*
**Description**
:输出
SQL 的
TiDB抽象语法树,主要用于测试
*
**Example**
:
...
...
@@ -51,7 +51,7 @@ echo "select * from film" | soar -report-type tiast
echo
"select * from film where language_id=1"
| soar
-report-type
fingerprint
```
## md2html
*
**Description**
:markdown
格式转html
格式小工具
*
**Description**
:markdown
格式转 html
格式小工具
*
**Example**
:
...
...
@@ -59,7 +59,7 @@ echo "select * from film where language_id=1" | soar -report-type fingerprint
soar
-list-heuristic-rules
| soar
-report-type
md2html
>
heuristic_rules.html
```
## explain-digest
*
**Description**
:输入为EXPLAIN的表格,JSON
或
Vertical格式,对其进行分析,给出分析结果
*
**Description**
:输入为EXPLAIN的表格,JSON
或
Vertical格式,对其进行分析,给出分析结果
*
**Example**
:
...
...
@@ -73,12 +73,12 @@ soar -report-type explain-digest << EOF
EOF
```
## duplicate-key-checker
*
**Description**
:对
OnlineDsn中指定的DB
进行索引重复检查
*
**Description**
:对
OnlineDsn 中指定的 database
进行索引重复检查
*
**Example**
:
```
bash
soar
-report-type
duplicate-key-checker
-online-dsn
user:passwd@127.0.0.1:3306/db
soar
-report-type
duplicate-key-checker
-online-dsn
user:passw
or
d@127.0.0.1:3306/db
```
## html
*
**Description**
:以HTML格式输出报表
...
...
etc/soar.blacklist
浏览文件 @
5279b992
# 这是一个黑名单例子
## 不评审常见的SET, SHOW, SELECT CONST等完美请求
^use \?$
^set.*
^show.*
^select \?$
...
...
vendor/vendor.json
浏览文件 @
5279b992
...
...
@@ -1016,68 +1016,68 @@
{
"checksumSHA1"
:
"w8FCRjH70gM6QttB9QrEh9Y1x64="
,
"path"
:
"vitess.io/vitess"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"aKn1oKcY74N8TRLm3Ayt7Q4bbI4="
,
"path"
:
"vitess.io/vitess/go/bytes2"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"JVCEN4UGRmg3TofIBdzZMZ3G0Ww="
,
"path"
:
"vitess.io/vitess/go/hack"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"e1WJ7vCnVrlQQQlc6n/FewCDMso="
,
"path"
:
"vitess.io/vitess/go/sqltypes"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"ntFIQYkBS51G6y+FEkjFW40+HOU="
,
"path"
:
"vitess.io/vitess/go/vt/log"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"XozR8bmeSR5KTe/nlUJkpJY2HKI="
,
"path"
:
"vitess.io/vitess/go/vt/proto/query"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"OnWsUHLDKcO3spwH0jD55SvKD24="
,
"path"
:
"vitess.io/vitess/go/vt/proto/topodata"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"sBAuZ/itMR8U8qbK4yLHxkP6Cpc="
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtgate"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"pLWM+SPGZs3k+IhjktE/cGUlpM0="
,
"path"
:
"vitess.io/vitess/go/vt/proto/vtrpc"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"3ggEFYVEhMPxyhkKhRGw3x1eZ9M="
,
"path"
:
"vitess.io/vitess/go/vt/sqlparser"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
},
{
"checksumSHA1"
:
"oF4XzuOzwvj1iduX/lYqNSyY/HM="
,
"path"
:
"vitess.io/vitess/go/vt/vterrors"
,
"revision"
:
"
b06f7c89ac5f0c632d9bc9621c70b014d91b27f9
"
,
"revisionTime"
:
"2018-11-
09T17:11:46
Z"
"revision"
:
"
782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12
"
,
"revisionTime"
:
"2018-11-
10T18:38:47
Z"
}
],
"rootPath"
:
"github.com/XiaoMi/soar"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录