diff --git a/.github/workflows/check-pr-files.yml b/.github/workflows/check-pr-files.yml index fc9e7929d..b0a3c1c50 100644 --- a/.github/workflows/check-pr-files.yml +++ b/.github/workflows/check-pr-files.yml @@ -12,7 +12,7 @@ jobs: name: Prevent file change with: githubToken: ${{ secrets.GITHUB_TOKEN }} - pattern: ^(?!.*_ee\/.*$)(?!.*_ee\.go$)(?!.*_ee_test\.go$)(?!.*_rel\.go$)(?!.*_rel_test\.go$)(?!go\.mod$)(?!go\.sum$)(?!\.github\/workflows\/check-pr-files\.yml$)(?!vendor\/.*)(?!.*_qa\.go$).* + pattern: ^(?!.*_ee\/.*$)(?!.*_ee\.go$)(?!.*_ee_test\.go$)(?!.*_rel\.go$)(?!.*_rel_test\.go$)(?!go\.mod$)(?!go\.sum$)(?!\.github\/workflows\/check-pr-files\.yml$)(?!vendor\/.*)(?!.*_qa\.go$)(?!.*\.xml$).* trustedAuthors: xalvarez # 禁止actions自动提交commit diff --git a/sqle/api/app.go b/sqle/api/app.go index afbd1c8ee..0452bfba5 100644 --- a/sqle/api/app.go +++ b/sqle/api/app.go @@ -448,6 +448,7 @@ func StartApi(net *gracenet.Net, exitChan chan struct{}, config *config.SqleOpti // 知识库 Knowledge Base v1Router.GET("/knowledge_bases", v1.GetKnowledgeBaseList) v1Router.GET("/knowledge_bases/tags", v1.GetKnowledgeBaseTagList) + v1Router.GET("/knowledge_bases/graph", v1.GetKnowledgeGraph) //rule v1Router.GET("/rules", v1.GetRules) diff --git a/sqle/api/controller/v1/knowledge_base.go b/sqle/api/controller/v1/knowledge_base.go index 49f088940..815cdbde7 100644 --- a/sqle/api/controller/v1/knowledge_base.go +++ b/sqle/api/controller/v1/knowledge_base.go @@ -89,15 +89,12 @@ type NodeResponse struct { ID string `json:"id"` Name string `json:"name"` Weight uint64 `json:"weight"` - Data interface{} `json:"data,omitempty"` } // EdgeResponse represents an edge in the API response type EdgeResponse struct { - FromID string `json:"from_id"` // 存储Node的ID而不是指针 - FromName string `json:"from_name"` // 方便前端显示 - ToID string `json:"to_id"` // 存储Node的ID而不是指针 - ToName string `json:"to_name"` // 方便前端显示 + FromID string `json:"from_id"` // 存储Node的ID + ToID string `json:"to_id"` // 存储Node的ID Weight uint64 `json:"weight"` // 权重 IsDirected bool `json:"is_directed"` // 是否有向 } @@ -106,11 +103,4 @@ type EdgeResponse struct { type GraphResponse struct { Nodes []*NodeResponse `json:"nodes"` // 节点集合 Edges []*EdgeResponse `json:"edges"` // 边集合 - Stats GraphStats `json:"stats"` // 添加图的统计信息 -} - -// GraphStats 包含图的统计信息 -type GraphStats struct { - TotalNodes uint64 `json:"total_nodes"` - TotalEdges uint64 `json:"total_edges"` } diff --git a/sqle/config/config.go b/sqle/config/config.go index 659d1232d..6eaceaa9c 100644 --- a/sqle/config/config.go +++ b/sqle/config/config.go @@ -41,6 +41,7 @@ type SqleOptions struct { Service SeviceOpts `yaml:"service"` OptimizationConfig OptimizationConfig `yaml:"optimization_config"` SQLRewritingConfig SQLRewritingConfig `yaml:"sql_rewriting_config"` + KnowledgeBaseTempLicense string `yaml:"knowledge_base_temp_license"` } type SeviceOpts struct { diff --git a/sqle/docs/docs.go b/sqle/docs/docs.go index fda770019..5687a5d6b 100644 --- a/sqle/docs/docs.go +++ b/sqle/docs/docs.go @@ -13573,11 +13573,7 @@ var doc = `{ "type": "object", "properties": { "from_id": { - "description": "存储Node的ID而不是指针", - "type": "string" - }, - "from_name": { - "description": "方便前端显示", + "description": "存储Node的ID", "type": "string" }, "is_directed": { @@ -13585,11 +13581,7 @@ var doc = `{ "type": "boolean" }, "to_id": { - "description": "存储Node的ID而不是指针", - "type": "string" - }, - "to_name": { - "description": "方便前端显示", + "description": "存储Node的ID", "type": "string" }, "weight": { @@ -16054,22 +16046,6 @@ var doc = `{ "items": { "$ref": "#/definitions/v1.NodeResponse" } - }, - "stats": { - "description": "添加图的统计信息", - "type": "object", - "$ref": "#/definitions/v1.GraphStats" - } - } - }, - "v1.GraphStats": { - "type": "object", - "properties": { - "total_edges": { - "type": "integer" - }, - "total_nodes": { - "type": "integer" } } }, @@ -16575,9 +16551,6 @@ var doc = `{ "v1.NodeResponse": { "type": "object", "properties": { - "data": { - "type": "object" - }, "id": { "type": "string" }, diff --git a/sqle/docs/swagger.json b/sqle/docs/swagger.json index a059e215e..58c31e754 100644 --- a/sqle/docs/swagger.json +++ b/sqle/docs/swagger.json @@ -13557,11 +13557,7 @@ "type": "object", "properties": { "from_id": { - "description": "存储Node的ID而不是指针", - "type": "string" - }, - "from_name": { - "description": "方便前端显示", + "description": "存储Node的ID", "type": "string" }, "is_directed": { @@ -13569,11 +13565,7 @@ "type": "boolean" }, "to_id": { - "description": "存储Node的ID而不是指针", - "type": "string" - }, - "to_name": { - "description": "方便前端显示", + "description": "存储Node的ID", "type": "string" }, "weight": { @@ -16038,22 +16030,6 @@ "items": { "$ref": "#/definitions/v1.NodeResponse" } - }, - "stats": { - "description": "添加图的统计信息", - "type": "object", - "$ref": "#/definitions/v1.GraphStats" - } - } - }, - "v1.GraphStats": { - "type": "object", - "properties": { - "total_edges": { - "type": "integer" - }, - "total_nodes": { - "type": "integer" } } }, @@ -16559,9 +16535,6 @@ "v1.NodeResponse": { "type": "object", "properties": { - "data": { - "type": "object" - }, "id": { "type": "string" }, diff --git a/sqle/docs/swagger.yaml b/sqle/docs/swagger.yaml index d1647715f..05e4c0a44 100644 --- a/sqle/docs/swagger.yaml +++ b/sqle/docs/swagger.yaml @@ -1367,19 +1367,13 @@ definitions: v1.EdgeResponse: properties: from_id: - description: 存储Node的ID而不是指针 - type: string - from_name: - description: 方便前端显示 + description: 存储Node的ID type: string is_directed: description: 是否有向 type: boolean to_id: - description: 存储Node的ID而不是指针 - type: string - to_name: - description: 方便前端显示 + description: 存储Node的ID type: string weight: description: 权重 @@ -3078,17 +3072,6 @@ definitions: items: $ref: '#/definitions/v1.NodeResponse' type: array - stats: - $ref: '#/definitions/v1.GraphStats' - description: 添加图的统计信息 - type: object - type: object - v1.GraphStats: - properties: - total_edges: - type: integer - total_nodes: - type: integer type: object v1.HighPriorityConditionReq: properties: @@ -3430,8 +3413,6 @@ definitions: type: object v1.NodeResponse: properties: - data: - type: object id: type: string name: diff --git a/sqle/license/temp_knowledge_license_ce.go b/sqle/license/temp_knowledge_license_ce.go new file mode 100644 index 000000000..00545ec14 --- /dev/null +++ b/sqle/license/temp_knowledge_license_ce.go @@ -0,0 +1,10 @@ +//go:build !enterprise +// +build !enterprise + +package license + +import "fmt" + +func CheckKnowledgeBaseLicense(license string) error { + return fmt.Errorf("knowledge base license is not supported in community edition") +} diff --git a/sqle/model/knowledge_base.go b/sqle/model/knowledge_base.go index 3fe2161fa..52ad1d6ab 100644 --- a/sqle/model/knowledge_base.go +++ b/sqle/model/knowledge_base.go @@ -4,6 +4,7 @@ import () type Knowledge struct { Model + RuleName string `gorm:"type:varchar(255);default:''" json:"rule_name"` // 规则名称 Title string `gorm:"type:varchar(255);not null" json:"title"` // 标题 Description string `gorm:"type:text" json:"description"` // 描述 Content string `gorm:"type:text;index:,class:FULLTEXT" json:"content"` // 内容 diff --git a/sqle/server/support_checker.go b/sqle/server/support_checker.go index 9994e974b..d24d0e3da 100644 --- a/sqle/server/support_checker.go +++ b/sqle/server/support_checker.go @@ -3,8 +3,10 @@ package server import ( "fmt" + "github.com/actiontech/sqle/sqle/config" "github.com/actiontech/sqle/sqle/driver" driverV2 "github.com/actiontech/sqle/sqle/driver/v2" + "github.com/actiontech/sqle/sqle/license" optimization "github.com/actiontech/sqle/sqle/server/optimization/rule" ) @@ -12,6 +14,7 @@ const ( executeSqlFileMode string = "execute_sql_file_mode" sqlOptimization string = "sql_optimization" backup string = "backup" + knowledge_base string = "knowledge_base" ) type StatusChecker interface { @@ -26,6 +29,8 @@ func NewModuleStatusChecker(driverType string, moduleName string) (StatusChecker return sqlOptimizationChecker{}, nil case backup: return sqlBackupChecker{driverType: driverType}, nil + case knowledge_base: + return knowledgeBaseChecker{driverType: driverType}, nil } return nil, fmt.Errorf("no checker matched") } @@ -53,3 +58,15 @@ func (s sqlBackupChecker) CheckIsSupport() bool { svc := BackupService{} return svc.CheckIsDbTypeSupportEnableBackup(s.driverType) == nil } + +// knowledgeBaseChecker 知识库检查器 +type knowledgeBaseChecker struct { + driverType string +} + +func (s knowledgeBaseChecker) CheckIsSupport() bool { + if license.CheckKnowledgeBaseLicense(config.GetOptions().SqleOptions.KnowledgeBaseTempLicense) != nil { + return false + } + return true +}