d4bed3e5c7
* fix bug * updata UI * 0.3.2 ### Added - [Files] Files can now be selected multiple files and downloaded, deleted, moved, etc. - [Apps] Support to modify the application opening address.([#204](https://github.com/IceWhaleTech/CasaOS/issues/204)) ### Changed - [Apps] Hide the display of non-essential environment variables in the application. - [System] Network, disk, cpu, memory, etc. information is modified to be pushed via socket. - [System] Optimize opening speed.([#214](https://github.com/IceWhaleTech/CasaOS/issues/214)) ### Fixed - [System] Fixed the problem that sync data cannot submit the device ID ([#68](https://github.com/IceWhaleTech/CasaOS/issues/68)) - [Files] Fixed the code editor center alignment display problem.([#210](https://github.com/IceWhaleTech/CasaOS/issues/210)) - [Files] Fixed the problem of wrong name when downloading files.([#240](https://github.com/IceWhaleTech/CasaOS/issues/240)) - [System] Fixed the network display as a negative number problem.([#224](https://github.com/IceWhaleTech/CasaOS/issues/224)) * Modify log help class * Fix some bugs in 0.3.2 * Solve the operation file queue problem * Exclude web folders * update UI
215 lines
4.8 KiB
Go
215 lines
4.8 KiB
Go
package service
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/IceWhaleTech/CasaOS/model"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
|
command2 "github.com/IceWhaleTech/CasaOS/pkg/utils/command"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/oasis_err"
|
|
"github.com/shirou/gopsutil/v3/cpu"
|
|
"github.com/shirou/gopsutil/v3/disk"
|
|
"github.com/shirou/gopsutil/v3/host"
|
|
)
|
|
|
|
//系统信息
|
|
type ZiMaService interface {
|
|
GetDiskInfo() *disk.UsageStat
|
|
|
|
GetNetState(name string) string
|
|
GetSysInfo() host.InfoStat
|
|
GetDirPath(path string) []model.Path
|
|
GetDirPathOne(path string) (m model.Path)
|
|
MkdirAll(path string) (int, error)
|
|
CreateFile(path string) (int, error)
|
|
RenameFile(oldF, newF string) (int, error)
|
|
GetCpuInfo() []cpu.InfoStat
|
|
GetDeviceTree() string
|
|
}
|
|
|
|
var NetArray [][]model.IOCountersStat
|
|
|
|
type zima struct {
|
|
}
|
|
|
|
//cpu详情
|
|
func (c *zima) GetCpuInfo() []cpu.InfoStat {
|
|
info, _ := cpu.Info()
|
|
return info
|
|
}
|
|
|
|
//获取硬盘详情
|
|
func (c *zima) GetDiskInfo() *disk.UsageStat {
|
|
path := "/"
|
|
if runtime.GOOS == "windows" {
|
|
path = "C:"
|
|
}
|
|
diskInfo, _ := disk.Usage(path)
|
|
diskInfo.UsedPercent, _ = strconv.ParseFloat(fmt.Sprintf("%.1f", diskInfo.UsedPercent), 64)
|
|
diskInfo.InodesUsedPercent, _ = strconv.ParseFloat(fmt.Sprintf("%.1f", diskInfo.InodesUsedPercent), 64)
|
|
return diskInfo
|
|
}
|
|
|
|
//获取硬盘目录
|
|
func (c *zima) GetDirPath(path string) []model.Path {
|
|
if path == "/DATA" {
|
|
sysType := runtime.GOOS
|
|
if sysType == "windows" {
|
|
path = "C:\\CasaOS\\DATA"
|
|
}
|
|
if sysType == "darwin" {
|
|
path = "./CasaOS/DATA"
|
|
}
|
|
|
|
}
|
|
|
|
ls, _ := ioutil.ReadDir(path)
|
|
dirs := []model.Path{}
|
|
if len(path) > 0 {
|
|
for _, l := range ls {
|
|
filePath := filepath.Join(path, l.Name())
|
|
link, err := filepath.EvalSymlinks(filePath)
|
|
if err != nil {
|
|
link = filePath
|
|
}
|
|
temp := model.Path{Name: l.Name(), Path: filePath, IsDir: l.IsDir(), Date: l.ModTime(), Size: l.Size()}
|
|
if filePath != link {
|
|
file, _ := os.Stat(link)
|
|
temp.IsDir = file.IsDir()
|
|
}
|
|
dirs = append(dirs, temp)
|
|
}
|
|
} else {
|
|
dirs = append(dirs, model.Path{Name: "DATA", Path: "/DATA/", IsDir: true, Date: time.Now()})
|
|
}
|
|
return dirs
|
|
}
|
|
|
|
func (c *zima) GetDirPathOne(path string) (m model.Path) {
|
|
|
|
f, err := os.Stat(path)
|
|
|
|
if err != nil {
|
|
return
|
|
}
|
|
m.IsDir = f.IsDir()
|
|
m.Name = f.Name()
|
|
m.Path = path
|
|
m.Size = f.Size()
|
|
m.Date = f.ModTime()
|
|
return
|
|
}
|
|
|
|
//获取系统信息
|
|
func (c *zima) GetSysInfo() host.InfoStat {
|
|
info, _ := host.Info()
|
|
return *info
|
|
}
|
|
|
|
func (c *zima) GetDeviceTree() string {
|
|
return command2.ExecResultStr("source " + config.AppInfo.ProjectPath + "/shell/helper.sh ;GetDeviceTree")
|
|
}
|
|
|
|
//shell脚本参数 { 网卡名称 }
|
|
func (c *zima) GetNetState(name string) string {
|
|
return command2.ExecResultStr("source " + config.AppInfo.ProjectPath + "/shell/helper.sh ;CatNetCardState " + name)
|
|
}
|
|
|
|
//mkdir
|
|
func (c *zima) MkdirAll(path string) (int, error) {
|
|
_, err := os.Stat(path)
|
|
if err == nil {
|
|
return oasis_err.DIR_ALREADY_EXISTS, nil
|
|
} else {
|
|
if os.IsNotExist(err) {
|
|
os.MkdirAll(path, os.ModePerm)
|
|
return oasis_err.SUCCESS, nil
|
|
} else if strings.Contains(err.Error(), ": not a directory") {
|
|
return oasis_err.FILE_OR_DIR_EXISTS, err
|
|
}
|
|
}
|
|
return oasis_err.ERROR, err
|
|
}
|
|
|
|
//create
|
|
func (c *zima) CreateFile(path string) (int, error) {
|
|
_, err := os.Stat(path)
|
|
if err == nil {
|
|
return oasis_err.FILE_OR_DIR_EXISTS, nil
|
|
} else {
|
|
if os.IsNotExist(err) {
|
|
file.CreateFile(path)
|
|
return oasis_err.SUCCESS, nil
|
|
}
|
|
}
|
|
return oasis_err.ERROR, err
|
|
}
|
|
|
|
//修改文件
|
|
func (c *zima) RenameFile(oldF, newF string) (int, error) {
|
|
|
|
_, err := os.Stat(newF)
|
|
if err == nil {
|
|
return oasis_err.DIR_ALREADY_EXISTS, nil
|
|
} else {
|
|
if os.IsNotExist(err) {
|
|
err := os.Rename(oldF, newF)
|
|
if err != nil {
|
|
return oasis_err.ERROR, err
|
|
}
|
|
return oasis_err.SUCCESS, nil
|
|
}
|
|
}
|
|
return oasis_err.ERROR, err
|
|
}
|
|
|
|
//获取zima服务
|
|
func NewZiMaService() ZiMaService {
|
|
return &zima{}
|
|
}
|
|
|
|
// func LoopNet() {
|
|
// netList := MyService.ZiMa().GetNetInfo()
|
|
|
|
// nets := MyService.ZiMa().GetNet(true)
|
|
// num := 0
|
|
// for i := 0; i < len(netList); i++ {
|
|
|
|
// for _, netCardName := range nets {
|
|
|
|
// if netList[i].Name == netCardName {
|
|
// var netArray []model.IOCountersStat
|
|
// if len(NetArray) < (num + 1) {
|
|
// netArray = []model.IOCountersStat{}
|
|
// } else {
|
|
// netArray = NetArray[num]
|
|
// }
|
|
// item := *(*model.IOCountersStat)(unsafe.Pointer(&netList[i]))
|
|
// item.State = strings.TrimSpace(MyService.ZiMa().GetNetState(netList[i].Name))
|
|
// item.Time = time.Now().Unix()
|
|
|
|
// if len(netArray) >= 60 {
|
|
// netArray = netArray[1:]
|
|
// }
|
|
// netArray = append(netArray, item)
|
|
// if len(NetArray) < (num + 1) {
|
|
// NetArray = append(NetArray, []model.IOCountersStat{})
|
|
// }
|
|
|
|
// NetArray[num] = netArray
|
|
|
|
// num++
|
|
// break
|
|
// }
|
|
// }
|
|
|
|
// }
|
|
// }
|