diff --git a/backend/app/api/v1/databse_mysql.go b/backend/app/api/v1/databse_mysql.go index 394c88641..8522e8c06 100644 --- a/backend/app/api/v1/databse_mysql.go +++ b/backend/app/api/v1/databse_mysql.go @@ -61,3 +61,23 @@ func (b *BaseApi) DeleteMysql(c *gin.Context) { } helper.SuccessWithData(c, nil) } + +func (b *BaseApi) LoadStatus(c *gin.Context) { + data, err := mysqlService.LoadStatus("") + if err != nil { + helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err) + return + } + + helper.SuccessWithData(c, data) +} + +func (b *BaseApi) LoadConf(c *gin.Context) { + data, err := mysqlService.LoadConf("") + if err != nil { + helper.ErrorWithDetail(c, constant.CodeErrInternalServer, constant.ErrTypeInternalServer, err) + return + } + + helper.SuccessWithData(c, data) +} diff --git a/backend/app/dto/database.go b/backend/app/dto/database.go index 290a0fb34..2c3a30f36 100644 --- a/backend/app/dto/database.go +++ b/backend/app/dto/database.go @@ -22,3 +22,60 @@ type MysqlDBCreate struct { PermissionIPs string `json:"permissionIPs"` Description string `json:"description"` } + +type MysqlStatus struct { + AbortedClients string `json:"Aborted_clients"` + AbortedConnects string `json:"Aborted_connects"` + BytesReceived string `json:"Bytes_received"` + BytesSent string `json:"Bytes_sent"` + ComCommit string `json:"Com_commit"` + ComRollback string `json:"Com_rollback"` + Connections string `json:"Connections"` + CreatedTmpDiskTables string `json:"Created_tmp_disk_tables"` + CreatedTmpTables string `json:"Created_tmp_tables"` + InnodbBufferPoolPagesDirty string `json:"Innodb_buffer_pool_pages_dirty"` + InnodbBufferPoolReadRequests string `json:"Innodb_buffer_pool_read_requests"` + InnodbBufferPoolReads string `json:"Innodb_buffer_pool_reads"` + KeyReadRequests string `json:"Key_read_requests"` + KeyReads string `json:"Key_reads"` + KeyWriteEequests string `json:"Key_write_requests"` + KeyWrites string `json:"Key_writes"` + MaxUsedConnections string `json:"Max_used_connections"` + OpenTables string `json:"Open_tables"` + OpenedFiles string `json:"Opened_files"` + OpenedTables string `json:"Opened_tables"` + QcacheHits string `json:"Qcache_hits"` + QcacheInserts string `json:"Qcache_inserts"` + Questions string `json:"Questions"` + SelectFullJoin string `json:"Select_full_join"` + SelectRangeCheck string `json:"Select_range_check"` + SortMergePasses string `json:"Sort_merge_passes"` + TableLocksWaited string `json:"Table_locks_waited"` + ThreadsCached string `json:"Threads_cached"` + ThreadsConnected string `json:"Threads_connected"` + ThreadsCreated string `json:"Threads_created"` + ThreadsRunning string `json:"Threads_running"` + Uptime string `json:"Uptime"` + Run string `json:"Run"` + File string `json:"File"` + Position string `json:"Position"` +} + +type MysqlConf struct { + BinlogCachSize string `json:"binlog_cache_size"` + InnodbBufferPoolSize string `json:"innodb_buffer_pool_size"` + InnodbLogBufferSize string `json:"innodb_log_buffer_size"` + JoinBufferSize string `json:"join_buffer_size"` + KeyBufferSize string `json:"key_buffer_size"` + MaxConnections string `json:"max_connections"` + MaxHeapTableSize string `json:"max_heap_table_size"` + QueryCacheSize string `json:"query_cache_size"` + QueryCache_type string `json:"query_cache_type"` + ReadBufferSize string `json:"read_buffer_size"` + ReadRndBufferSize string `json:"read_rnd_buffer_size"` + SortBufferSize string `json:"sort_buffer_size"` + TableOpenCache string `json:"table_open_cache"` + ThreadCacheSize string `json:"thread_cache_size"` + ThreadStack string `json:"thread_stack"` + Tmp_tableSize string `json:"tmp_table_size"` +} diff --git a/backend/app/service/database_mysql.go b/backend/app/service/database_mysql.go index 4bb82bf41..1fc312c2f 100644 --- a/backend/app/service/database_mysql.go +++ b/backend/app/service/database_mysql.go @@ -1,8 +1,13 @@ package service import ( + "database/sql" + "encoding/json" + "fmt" + "github.com/1Panel-dev/1Panel/backend/app/dto" "github.com/1Panel-dev/1Panel/backend/constant" + _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/copier" "github.com/pkg/errors" ) @@ -13,6 +18,8 @@ type IMysqlService interface { SearchWithPage(search dto.SearchWithPage) (int64, interface{}, error) Create(mysqlDto dto.MysqlDBCreate) error Delete(ids []uint) error + LoadStatus(version string) (*dto.MysqlStatus, error) + LoadConf(version string) (*dto.MysqlConf, error) } func NewIMysqlService() IMysqlService { @@ -56,3 +63,63 @@ func (u *MysqlService) Delete(ids []uint) error { } return mysqlRepo.Delete(commonRepo.WithIdsIn(ids)) } + +func (u *MysqlService) LoadConf(version string) (*dto.MysqlConf, error) { + connArgs := fmt.Sprintf("%s:%s@tcp(%s:%d)/?charset=utf8", "root", "Calong@2015", "localhost", 2306) + db, err := sql.Open("mysql", connArgs) + if err != nil { + return nil, err + } + defer db.Close() + + rows, err := db.Query("show variables") + if err != nil { + return nil, err + } + variableMap := make(map[string]string) + for rows.Next() { + var variableName, variableValue string + if err := rows.Scan(&variableName, &variableValue); err != nil { + continue + } + variableMap[variableName] = variableValue + } + + var info dto.MysqlConf + arr, err := json.Marshal(variableMap) + if err != nil { + return nil, err + } + _ = json.Unmarshal(arr, &info) + return &info, nil +} + +func (u *MysqlService) LoadStatus(version string) (*dto.MysqlStatus, error) { + connArgs := fmt.Sprintf("%s:%s@tcp(%s:%d)/?charset=utf8", "root", "Calong@2015", "localhost", 2306) + db, err := sql.Open("mysql", connArgs) + if err != nil { + return nil, err + } + defer db.Close() + + rows, err := db.Query("show status") + if err != nil { + return nil, err + } + variableMap := make(map[string]string) + for rows.Next() { + var variableName, variableValue string + if err := rows.Scan(&variableName, &variableValue); err != nil { + continue + } + variableMap[variableName] = variableValue + } + + var info dto.MysqlStatus + arr, err := json.Marshal(variableMap) + if err != nil { + return nil, err + } + _ = json.Unmarshal(arr, &info) + return &info, nil +} diff --git a/backend/app/service/database_test.go b/backend/app/service/database_test.go new file mode 100644 index 000000000..e32985956 --- /dev/null +++ b/backend/app/service/database_test.go @@ -0,0 +1,44 @@ +package service + +import ( + "database/sql" + "encoding/json" + "fmt" + "testing" + + "github.com/1Panel-dev/1Panel/backend/app/dto" + _ "github.com/go-sql-driver/mysql" +) + +func TestMysql(t *testing.T) { + connArgs := fmt.Sprintf("%s:%s@tcp(%s:%d)/?charset=utf8", "root", "Calong@2015", "localhost", 2306) + db, err := sql.Open("mysql", connArgs) + if err != nil { + fmt.Println(err) + } + defer db.Close() + + rows, err := db.Query("show VARIABLES") + if err != nil { + fmt.Println(err) + } + + variableMap := make(map[string]string) + for rows.Next() { + var variableName, variableValue string + if err := rows.Scan(&variableName, &variableValue); err != nil { + fmt.Println(err) + } + variableMap[variableName] = variableValue + } + var info dto.MysqlConf + arr, err := json.Marshal(variableMap) + if err != nil { + fmt.Println(err) + } + err = json.Unmarshal(arr, &info) + if err != nil { + fmt.Println(err) + } + fmt.Println(info) +} diff --git a/backend/app/service/mysql_test.go b/backend/app/service/mysql_test.go deleted file mode 100644 index f23f27e74..000000000 --- a/backend/app/service/mysql_test.go +++ /dev/null @@ -1,34 +0,0 @@ -package service - -import ( - "context" - "database/sql" - "fmt" - "log" - "testing" - "time" - - _ "gorm.io/driver/mysql" -) - -func TestMysql(t *testing.T) { - connArgs := fmt.Sprintf("%s:%s@tcp(%s:%d)/?charset=utf8", "root", "Calong@2015", "localhost", 2306) - db, err := sql.Open("mysql", connArgs) - if err != nil { - fmt.Println(err) - } - defer db.Close() - ctx, cancelfunc := context.WithTimeout(context.Background(), 5*time.Second) - defer cancelfunc() - res, err := db.ExecContext(ctx, "CREATE DATABASE IF NOT EXISTS "+"songli") - if err != nil { - log.Printf("Error %s when creating DB\n", err) - return - } - - // res, err := db.Exec("SHOW DATABASES;") - // if err != nil { - // fmt.Println(err) - // } - fmt.Println(res) -} diff --git a/backend/router/ro_database.go b/backend/router/ro_database.go index d81236c83..bce0a2f24 100644 --- a/backend/router/ro_database.go +++ b/backend/router/ro_database.go @@ -24,5 +24,7 @@ func (s *DatabaseRouter) InitDatabaseRouter(Router *gin.RouterGroup) { withRecordRouter.POST("", baseApi.CreateMysql) withRecordRouter.POST("/del", baseApi.DeleteMysql) cmdRouter.POST("/search", baseApi.SearchMysql) + cmdRouter.GET("/conf", baseApi.LoadConf) + cmdRouter.GET("/status", baseApi.LoadStatus) } } diff --git a/frontend/src/api/interface/database.ts b/frontend/src/api/interface/database.ts index 3662c82f4..8b4965e75 100644 --- a/frontend/src/api/interface/database.ts +++ b/frontend/src/api/interface/database.ts @@ -19,4 +19,59 @@ export namespace Database { permissionIPs: string; description: string; } + export interface MysqlVariables { + binlog_cache_size: number; + innodb_buffer_pool_size: number; + innodb_log_buffer_size: number; + join_buffer_size: number; + key_buffer_size: number; + max_connections: number; + max_heap_table_size: number; + query_cache_size: number; + query_cache_type: string; + read_buffer_size: number; + read_rnd_buffer_size: number; + sort_buffer_size: number; + table_open_cache: number; + thread_cache_size: number; + thread_stack: number; + tmp_table_size: number; + } + export interface MysqlStatus { + Aborted_clients: number; + Aborted_connects: number; + Bytes_received: number; + Bytes_sent: number; + Com_commit: number; + Com_rollback: number; + Connections: number; + Created_tmp_disk_tables: number; + Created_tmp_tables: number; + Innodb_buffer_pool_pages_dirty: number; + Innodb_buffer_pool_read_requests: number; + Innodb_buffer_pool_reads: number; + Key_read_requests: number; + Key_reads: number; + Key_write_requests: number; + Key_writes: number; + Max_used_connections: number; + Open_tables: number; + Opened_files: number; + Opened_tables: number; + Qcache_hits: number; + Qcache_inserts: number; + Questions: number; + Select_full_join: number; + Select_range_check: number; + Sort_merge_passes: number; + Table_locks_waited: number; + Threads_cached: number; + Threads_connected: number; + Threads_created: number; + Threads_running: number; + Uptime: number; + Run: number; + File: string; + Position: number; + } } diff --git a/frontend/src/api/modules/database.ts b/frontend/src/api/modules/database.ts index 62796019c..4bf018b10 100644 --- a/frontend/src/api/modules/database.ts +++ b/frontend/src/api/modules/database.ts @@ -13,3 +13,10 @@ export const addMysqlDB = (params: Database.MysqlDBCreate) => { export const deleteMysqlDB = (params: { ids: number[] }) => { return http.post(`/databases/del`, params); }; + +export const loadMysqlVariables = () => { + return http.get(`/databases/conf`); +}; +export const loadMysqlStatus = () => { + return http.get(`/databases/status`); +}; diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 0e8dec325..8c943b612 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -26,6 +26,7 @@ export default { handle: '执行', expand: '展开', log: '日志', + back: '返回', saveAndEnable: '保存并启用', }, search: { @@ -159,6 +160,12 @@ export default { backupList: '备份列表', loadBackup: '导入备份', setting: '数据库设置', + remoteAccess: '远程访问', + + baseSetting: '基础设置', + confChange: '配置修改', + currentStatus: '当前状态', + runTime: '启动时间', }, container: { operatorHelper: '将对选中容器进行 {0} 操作,是否继续?', diff --git a/frontend/src/styles/common.scss b/frontend/src/styles/common.scss index 5165170bb..233a1b24a 100644 --- a/frontend/src/styles/common.scss +++ b/frontend/src/styles/common.scss @@ -123,4 +123,39 @@ transform-origin: left; width: 110%; display: inline-block; +} + +.myTable { + border-collapse: collapse; + font-size: 12px; + table-layout: fixed; +} + +.myTable td { + width: 35%; + padding: 8px; + height: 23px; + border: 1px solid #383c42; + word-wrap: break-word; +} + +.myTable td div { + margin-top: 2px +} + +.myTable th { + border: 0; + height: 30px; +} + +.myTable tr:hover { + background-color: #d9dde2; +} + +.myTable tr:first-child:hover { + background-color: transparent !important; +} + +.myTable tr td:nth-child(even) { + color: #85888e; } \ No newline at end of file diff --git a/frontend/src/views/database/mysql/index.vue b/frontend/src/views/database/mysql/index.vue index 1e384233a..8d4eda614 100644 --- a/frontend/src/views/database/mysql/index.vue +++ b/frontend/src/views/database/mysql/index.vue @@ -1,7 +1,7 @@