From 5279b99274f336c9c45748167e325c0e5f76bc04 Mon Sep 17 00:00:00 2001 From: Leon Zhang Date: Mon, 12 Nov 2018 21:22:19 +0800 Subject: [PATCH] daily fixture 1. etc/soar.blacklist add `use ?` 2. blacklist use os.Getwd prefix 3. update doc --- common/config.go | 27 ++++++------- common/testdata/TestListReportTypes.golden | 14 +++---- doc/config.md | 2 +- doc/report_type.md | 14 +++---- etc/soar.blacklist | 1 + vendor/vendor.json | 44 +++++++++++----------- 6 files changed, 52 insertions(+), 50 deletions(-) diff --git a/common/config.go b/common/config.go index 25c7d80..da93b31 100644 --- a/common/config.go +++ b/common/config.go @@ -257,7 +257,7 @@ func parseDSN(odbc string, d *dsn) *dsn { return &dsn{Disable: true} } - // username:password@ip:port/dbname + // username:password@ip:port/database 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/dbname + // ip:port/database 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/dbname + // ip:port/database 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:password@127.0.0.1:3306/db`, }, { Name: "html", diff --git a/common/testdata/TestListReportTypes.golden b/common/testdata/TestListReportTypes.golden index 86c81bb..6216ac4 100644 --- a/common/testdata/TestListReportTypes.golden +++ b/common/testdata/TestListReportTypes.golden @@ -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:password@127.0.0.1:3306/db ``` ## html * **Description**:以HTML格式输出报表 diff --git a/doc/config.md b/doc/config.md index 5d25662..a76fbab 100644 --- a/doc/config.md +++ b/doc/config.md @@ -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: diff --git a/doc/report_type.md b/doc/report_type.md index 86c81bb..6216ac4 100644 --- a/doc/report_type.md +++ b/doc/report_type.md @@ -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:password@127.0.0.1:3306/db ``` ## html * **Description**:以HTML格式输出报表 diff --git a/etc/soar.blacklist b/etc/soar.blacklist index 270f88d..998fb9a 100644 --- a/etc/soar.blacklist +++ b/etc/soar.blacklist @@ -1,5 +1,6 @@ # 这是一个黑名单例子 ## 不评审常见的SET, SHOW, SELECT CONST等完美请求 +^use \?$ ^set.* ^show.* ^select \?$ diff --git a/vendor/vendor.json b/vendor/vendor.json index dde1666..3b27d31 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1016,68 +1016,68 @@ { "checksumSHA1": "w8FCRjH70gM6QttB9QrEh9Y1x64=", "path": "vitess.io/vitess", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "aKn1oKcY74N8TRLm3Ayt7Q4bbI4=", "path": "vitess.io/vitess/go/bytes2", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "JVCEN4UGRmg3TofIBdzZMZ3G0Ww=", "path": "vitess.io/vitess/go/hack", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "e1WJ7vCnVrlQQQlc6n/FewCDMso=", "path": "vitess.io/vitess/go/sqltypes", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "ntFIQYkBS51G6y+FEkjFW40+HOU=", "path": "vitess.io/vitess/go/vt/log", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "XozR8bmeSR5KTe/nlUJkpJY2HKI=", "path": "vitess.io/vitess/go/vt/proto/query", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "OnWsUHLDKcO3spwH0jD55SvKD24=", "path": "vitess.io/vitess/go/vt/proto/topodata", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "sBAuZ/itMR8U8qbK4yLHxkP6Cpc=", "path": "vitess.io/vitess/go/vt/proto/vtgate", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "pLWM+SPGZs3k+IhjktE/cGUlpM0=", "path": "vitess.io/vitess/go/vt/proto/vtrpc", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "3ggEFYVEhMPxyhkKhRGw3x1eZ9M=", "path": "vitess.io/vitess/go/vt/sqlparser", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" }, { "checksumSHA1": "oF4XzuOzwvj1iduX/lYqNSyY/HM=", "path": "vitess.io/vitess/go/vt/vterrors", - "revision": "b06f7c89ac5f0c632d9bc9621c70b014d91b27f9", - "revisionTime": "2018-11-09T17:11:46Z" + "revision": "782fec9ad81f5a9a5bfd40a91d04a4a20abfaa12", + "revisionTime": "2018-11-10T18:38:47Z" } ], "rootPath": "github.com/XiaoMi/soar" -- GitLab