2021-09-26 02:35:02 +00:00
|
|
|
package v1
|
|
|
|
|
|
|
|
import (
|
2021-09-27 06:17:36 +00:00
|
|
|
"github.com/IceWhaleTech/CasaOS/model"
|
|
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/oasis_err"
|
|
|
|
"github.com/IceWhaleTech/CasaOS/service"
|
2021-09-26 02:35:02 +00:00
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/shirou/gopsutil/v3/disk"
|
|
|
|
"net/http"
|
|
|
|
"strconv"
|
|
|
|
)
|
|
|
|
|
|
|
|
// @Summary 获取磁盘列表
|
|
|
|
// @Produce application/json
|
|
|
|
// @Accept application/json
|
|
|
|
// @Tags disk
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Success 200 {string} string "ok"
|
|
|
|
// @Router /disk/list [get]
|
|
|
|
func GetPlugInDisk(c *gin.Context) {
|
|
|
|
|
|
|
|
//ls := service.MyService.Disk().GetPlugInDisk()
|
|
|
|
//fmt.Println(ls)
|
|
|
|
//dd, _ := disk.Partitions(true)
|
|
|
|
//fmt.Println(dd)
|
|
|
|
//
|
|
|
|
//dir, err := ioutil.ReadDir("/sys/block")
|
|
|
|
//if err != nil {
|
|
|
|
// panic(err)
|
|
|
|
//}
|
|
|
|
//
|
|
|
|
//files := make([]string, 0)
|
|
|
|
//
|
|
|
|
////fmt.Println(regexp.MatchString("sd[a-z]*[0-9]", "sda"))
|
|
|
|
//
|
|
|
|
//for _, f := range dir {
|
|
|
|
// if match, _ := regexp.MatchString("sd[a-z]", f.Name()); match {
|
|
|
|
// files = append(files, f.Name())
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
//fmt.Println(files)
|
|
|
|
//filess := make([]string, 0)
|
|
|
|
//for _, file := range files {
|
|
|
|
// dirs, _ := ioutil.ReadDir("/sys/block/" + file)
|
|
|
|
//
|
|
|
|
// for _, f := range dirs {
|
|
|
|
// if match, _ := regexp.MatchString("sd[a-z]*[0-9]", f.Name()); match {
|
|
|
|
// filess = append(filess, f.Name())
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
//fmt.Println(filess)
|
|
|
|
//
|
|
|
|
//for _, s := range filess {
|
|
|
|
// fmt.Println(disk.Usage("/dev/" + s))
|
|
|
|
//}
|
|
|
|
|
|
|
|
lst := service.MyService.Disk().LSBLK()
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.SUCCESS, Message: oasis_err.GetMsg(oasis_err.SUCCESS), Data: lst})
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary 获取磁盘列表
|
|
|
|
// @Produce application/json
|
|
|
|
// @Accept application/json
|
|
|
|
// @Tags disk
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Success 200 {string} string "ok"
|
|
|
|
// @Router /disk/lists [get]
|
|
|
|
func GetPlugInDisks(c *gin.Context) {
|
|
|
|
|
|
|
|
list := service.MyService.Disk().LSBLK()
|
|
|
|
var result []*disk.UsageStat
|
|
|
|
for _, item := range list {
|
|
|
|
result = append(result, service.MyService.Disk().GetDiskInfoByPath(item.Path))
|
|
|
|
}
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.SUCCESS, Message: oasis_err.GetMsg(oasis_err.SUCCESS), Data: result})
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary 磁盘详情
|
|
|
|
// @Produce application/json
|
|
|
|
// @Accept application/json
|
|
|
|
// @Tags disk
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Param path query string true "要获取的磁盘详情 例如/dev/sda"
|
|
|
|
// @Success 200 {string} string "ok"
|
|
|
|
// @Router /disk/info [get]
|
|
|
|
func GetDiskInfo(c *gin.Context) {
|
|
|
|
path := c.Query("path")
|
|
|
|
if len(path) == 0 {
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.INVALID_PARAMS, Message: oasis_err.GetMsg(oasis_err.INVALID_PARAMS)})
|
|
|
|
}
|
|
|
|
m := service.MyService.Disk().GetDiskInfo(path)
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.SUCCESS, Message: oasis_err.GetMsg(oasis_err.SUCCESS), Data: m})
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary 磁盘详情
|
|
|
|
// @Produce application/json
|
|
|
|
// @Accept multipart/form-data
|
|
|
|
// @Tags disk
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Param path formData string true "磁盘路径 例如/dev/sda1"
|
|
|
|
// @Success 200 {string} string "ok"
|
|
|
|
// @Router /disk/format [post]
|
|
|
|
func FormatDisk(c *gin.Context) {
|
|
|
|
path := c.PostForm("path")
|
|
|
|
|
|
|
|
t := c.PostForm("type")
|
|
|
|
|
|
|
|
if len(path) == 0 || len(t) == 0 {
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.INVALID_PARAMS, Message: oasis_err.GetMsg(oasis_err.INVALID_PARAMS)})
|
|
|
|
}
|
|
|
|
|
|
|
|
//删除挂载点
|
|
|
|
service.MyService.Disk().UmountPointAndRemoveDir(path)
|
|
|
|
|
|
|
|
//格式化磁盘
|
|
|
|
service.MyService.Disk().FormatDisk(path, t)
|
|
|
|
|
|
|
|
//重新挂载
|
|
|
|
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.SUCCESS, Message: oasis_err.GetMsg(oasis_err.SUCCESS)})
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary 获取支持的格式
|
|
|
|
// @Produce application/json
|
|
|
|
// @Accept application/json
|
|
|
|
// @Tags disk
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Success 200 {string} string "ok"
|
|
|
|
// @Router /disk/type [get]
|
|
|
|
func FormatDiskType(c *gin.Context) {
|
|
|
|
var strArr = [4]string{"fat32", "ntfs", "ext4", "exfat"}
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.SUCCESS, Message: oasis_err.GetMsg(oasis_err.SUCCESS), Data: strArr})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary 删除分区
|
|
|
|
// @Produce application/json
|
|
|
|
// @Accept multipart/form-data
|
|
|
|
// @Tags disk
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Param path formData string true "磁盘路径 例如/dev/sda1"
|
|
|
|
// @Success 200 {string} string "ok"
|
|
|
|
// @Router /disk/delpart [delete]
|
|
|
|
func RemovePartition(c *gin.Context) {
|
|
|
|
path := c.PostForm("path")
|
|
|
|
|
|
|
|
if len(path) == 0 {
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.INVALID_PARAMS, Message: oasis_err.GetMsg(oasis_err.INVALID_PARAMS)})
|
|
|
|
}
|
|
|
|
var p = path[:len(path)-1]
|
|
|
|
var n = path[len(path)-1:]
|
|
|
|
service.MyService.Disk().DelPartition(p, n)
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.SUCCESS, Message: oasis_err.GetMsg(oasis_err.SUCCESS)})
|
|
|
|
}
|
|
|
|
|
|
|
|
// @Summary 添加分区
|
|
|
|
// @Produce application/json
|
|
|
|
// @Accept multipart/form-data
|
|
|
|
// @Tags disk
|
|
|
|
// @Security ApiKeyAuth
|
|
|
|
// @Param path formData string true "磁盘路径 例如/dev/sda"
|
|
|
|
// @Param size formData string true "需要分区容量大小(MB)"
|
|
|
|
// @Param num formData string true "磁盘符号"
|
|
|
|
// @Success 200 {string} string "ok"
|
|
|
|
// @Router /disk/addpart [post]
|
|
|
|
func AddPartition(c *gin.Context) {
|
|
|
|
path := c.PostForm("path")
|
|
|
|
size, _ := strconv.Atoi(c.DefaultPostForm("size", "0"))
|
|
|
|
num := c.DefaultPostForm("num", "9")
|
|
|
|
if len(path) == 0 {
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.INVALID_PARAMS, Message: oasis_err.GetMsg(oasis_err.INVALID_PARAMS)})
|
|
|
|
}
|
|
|
|
|
|
|
|
//size*1024*1024/512
|
|
|
|
service.MyService.Disk().AddPartition(path, num, uint64(size*1024*2))
|
|
|
|
c.JSON(http.StatusOK, model.Result{Success: oasis_err.SUCCESS, Message: oasis_err.GetMsg(oasis_err.SUCCESS)})
|
|
|
|
}
|