go语言怎么写一个静态Dashboard页面,并能够和mysql数据库中的contain表进行增删改查。页面中能够展示contain表中contain的id,contain是否在运行,最后一次更新的时间,所需要的镜像id,占用的cpu核数,占用内存大小及暴露的端口号的信息。
时间: 2024-03-28 11:37:37 浏览: 109
要实现这个功能,你需要使用Go语言的Web框架,例如Gin、Beego等,以及Go语言的MySQL数据库驱动程序。以下是一个实现静态Dashboard页面,并能够和MySQL数据库进行增删改查的示例代码:
```go
package main
import (
"database/sql"
"fmt"
"html/template"
"net/http"
"strconv"
"time"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
)
type Contain struct {
ID int
IsRunning bool
LastUpdated time.Time
ImageID string
CPU float64
Memory int
Port int
}
func main() {
// 连接MySQL数据库
db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/database")
if err != nil {
fmt.Println(err)
return
}
defer db.Close()
// 初始化Gin框架
router := gin.Default()
router.Static("/static", "./static")
router.LoadHTMLGlob("templates/*")
// 显示Dashboard页面
router.GET("/", func(c *gin.Context) {
// 查询contain表中的数据
rows, err := db.Query("SELECT id, is_running, last_updated, image_id, cpu, memory, port FROM contain")
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
defer rows.Close()
// 将查询结果存入Contain结构体切片中
var contains []Contain
for rows.Next() {
var contain Contain
err = rows.Scan(&contain.ID, &contain.IsRunning, &contain.LastUpdated, &contain.ImageID, &contain.CPU, &contain.Memory, &contain.Port)
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
contains = append(contains, contain)
}
if err = rows.Err(); err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
// 渲染Dashboard页面
c.HTML(http.StatusOK, "dashboard.html", gin.H{
"contains": contains,
})
})
// 处理添加新的contain记录的请求
router.POST("/add", func(c *gin.Context) {
// 从表单中获取contain的信息
isRunning, _ := strconv.ParseBool(c.PostForm("is_running"))
imageID := c.PostForm("image_id")
cpu, _ := strconv.ParseFloat(c.PostForm("cpu"), 64)
memory, _ := strconv.Atoi(c.PostForm("memory"))
port, _ := strconv.Atoi(c.PostForm("port"))
// 插入新的记录到contain表中
stmt, err := db.Prepare("INSERT INTO contain(is_running, last_updated, image_id, cpu, memory, port) VALUES(?, NOW(), ?, ?, ?, ?)")
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
defer stmt.Close()
_, err = stmt.Exec(isRunning, imageID, cpu, memory, port)
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
// 跳转回Dashboard页面
c.Redirect(http.StatusFound, "/")
})
// 处理修改contain记录的请求
router.POST("/edit/:id", func(c *gin.Context) {
// 从URL中获取contain的ID
id, _ := strconv.Atoi(c.Param("id"))
// 从表单中获取contain的信息
isRunning, _ := strconv.ParseBool(c.PostForm("is_running"))
imageID := c.PostForm("image_id")
cpu, _ := strconv.ParseFloat(c.PostForm("cpu"), 64)
memory, _ := strconv.Atoi(c.PostForm("memory"))
port, _ := strconv.Atoi(c.PostForm("port"))
// 更新contain表中对应ID的记录
stmt, err := db.Prepare("UPDATE contain SET is_running=?, last_updated=NOW(), image_id=?, cpu=?, memory=?, port=? WHERE id=?")
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
defer stmt.Close()
_, err = stmt.Exec(isRunning, imageID, cpu, memory, port, id)
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
// 跳转回Dashboard页面
c.Redirect(http.StatusFound, "/")
})
// 处理删除contain记录的请求
router.POST("/delete/:id", func(c *gin.Context) {
// 从URL中获取contain的ID
id, _ := strconv.Atoi(c.Param("id"))
// 删除contain表中对应ID的记录
stmt, err := db.Prepare("DELETE FROM contain WHERE id=?")
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
defer stmt.Close()
_, err = stmt.Exec(id)
if err != nil {
fmt.Println(err)
c.AbortWithError(http.StatusInternalServerError, err)
return
}
// 跳转回Dashboard页面
c.Redirect(http.StatusFound, "/")
})
// 启动Web服务器
router.Run(":8080")
}
```
在上述代码中,我们定义了一个名为Contain的结构体,用于存储contain表中的数据。我们使用SQL查询语句从MySQL数据库中查询contain表中的数据,并将查询结果存入Contain结构体切片中。然后,我们使用HTML模板渲染Dashboard页面,并将Contain结构体切片作为参数传递给HTML模板。在Dashboard页面中,我们使用表格展示Contain结构体切片中的数据,并提供添加、修改和删除contain记录的表单。当用户提交表单时,我们会使用SQL插入、更新或删除语句对MySQL数据库进行相应的操作。
阅读全文