Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* 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.([IceWhaleTech#204](IceWhaleTech#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.([IceWhaleTech#214](IceWhaleTech#214))
### Fixed

- [System] Fixed the problem that sync data cannot submit the device ID ([IceWhaleTech#68](IceWhaleTech#68))
- [Files] Fixed the code editor center alignment display problem.([IceWhaleTech#210](IceWhaleTech#210))
- [Files] Fixed the problem of wrong name when downloading files.([IceWhaleTech#240](IceWhaleTech#240))
- [System] Fixed the network display as a negative number problem.([IceWhaleTech#224](IceWhaleTech#224))

* Modify log help class

* Fix some bugs in 0.3.2

* Solve the operation file queue problem

* Exclude web folders

* update UI

* add cancel file operate

* Update UI

* Merge sockets to transfer data

* Conflict Resolution
  • Loading branch information
LinkLeong authored Jun 10, 2022
1 parent c7b7a30 commit 9d47874
Show file tree
Hide file tree
Showing 19 changed files with 496 additions and 315 deletions.
11 changes: 6 additions & 5 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,12 @@ func main() {
}
err = cron2.AddFunc("0/3 * * * * *", func() {
if service.ClientCount > 0 {
route.SendNetINfoBySocket()
route.SendCPUBySocket()
route.SendMemBySocket()
route.SendDiskBySocket()
route.SendUSBBySocket()
// route.SendNetINfoBySocket()
// route.SendCPUBySocket()
// route.SendMemBySocket()
// route.SendDiskBySocket()
// route.SendUSBBySocket()
route.SendAllHardwareStatusBySocket()
}
})
if err != nil {
Expand Down
4 changes: 3 additions & 1 deletion model/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @Author: LinkLeong [email protected]
* @Date: 2022-05-20 16:27:12
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-08 15:40:33
* @LastEditTime: 2022-06-09 18:18:46
* @FilePath: /CasaOS/model/file.go
* @Description:
* @Website: https://www.casaos.io
Expand All @@ -16,6 +16,8 @@ type FileOperate struct {
TotalSize int64 `json:"total_size"`
ProcessedSize int64 `json:"processed_size"`
To string `json:"to" binding:"required"`
Style string `json:"style"`
Finished bool `json:"finished"`
}

type FileItem struct {
Expand Down
40 changes: 20 additions & 20 deletions pkg/utils/file/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ func ReadFullFile(path string) []byte {
}

// File copies a single file from src to dst
func CopyFile(src, dst string) error {
func CopyFile(src, dst, style string) error {
var err error
var srcfd *os.File
var dstfd *os.File
Expand All @@ -197,20 +197,13 @@ func CopyFile(src, dst string) error {
if !strings.HasSuffix(dst, "/") {
dst += "/"
}
dstPath := dst
dst += lastPath
for i := 0; Exists(dst); i++ {
name := strings.Split(lastPath, ".")
nameIndex := 0
if len(name) > 2 {
nameIndex = len(name) - 2
}
name[nameIndex] = name[nameIndex] + "(Copy)"
dst = dstPath
for _, v := range name {
dst += v + "."
if Exists(dst) {
if style == "skip" {
return nil
} else {
os.Remove(dst)
}
dst = strings.TrimSuffix(dst, ".")
}

if srcfd, err = os.Open(src); err != nil {
Expand Down Expand Up @@ -244,7 +237,7 @@ func GetNoDuplicateFileName(fullPath string) string {
}

// Dir copies a whole directory recursively
func CopyDir(src string, dst string) error {
func CopyDir(src string, dst string, style string) error {
var err error
var fds []os.FileInfo
var srcinfo os.FileInfo
Expand All @@ -253,16 +246,23 @@ func CopyDir(src string, dst string) error {
return err
}
if !srcinfo.IsDir() {
if err = CopyFile(src, dst); err != nil {
if err = CopyFile(src, dst, style); err != nil {
fmt.Println(err)
}
return nil
}
dstPath := dst
//dstPath := dst
lastPath := src[strings.LastIndex(src, "/")+1:]
dst += "/" + lastPath
for i := 0; Exists(dst); i++ {
dst = dstPath + "/" + lastPath + strconv.Itoa(i+1)
// for i := 0; Exists(dst); i++ {
// dst = dstPath + "/" + lastPath + strconv.Itoa(i+1)
// }
if Exists(dst) {
if style == "skip" {
return nil
} else {
os.Remove(dst)
}
}
if err = os.MkdirAll(dst, srcinfo.Mode()); err != nil {
return err
Expand All @@ -275,11 +275,11 @@ func CopyDir(src string, dst string) error {
dstfp := dst //path.Join(dst, fd.Name())

if fd.IsDir() {
if err = CopyDir(srcfp, dstfp); err != nil {
if err = CopyDir(srcfp, dstfp, style); err != nil {
fmt.Println(err)
}
} else {
if err = CopyFile(srcfp, dstfp); err != nil {
if err = CopyFile(srcfp, dstfp, style); err != nil {
fmt.Println(err)
}
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/utils/oasis_err/e.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ const (
FILE_READ_ERROR = 60002
FILE_DELETE_ERROR = 60003
DIR_NOT_EXISTS = 60004
SOURCE_DES_SAME = 60005

//shortcuts
SHORTCUTS_URL_ERROR = 70001
Expand Down Expand Up @@ -88,6 +89,7 @@ var MsgFlags = map[int]string{
FORMAT_ERROR: "Formatting failed, please check if the directory is occupied",

//
SOURCE_DES_SAME: "Source and destination cannot be the same.",
FILE_DOES_NOT_EXIST: "File does not exist",

DIR_NOT_EXISTS: "Directory does not exist",
Expand Down
132 changes: 131 additions & 1 deletion route/periodical.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @Author: LinkLeong [email protected]
* @Date: 2022-05-27 15:55:36
* @LastEditors: LinkLeong
* @LastEditTime: 2022-05-27 18:57:40
* @LastEditTime: 2022-06-10 12:17:59
* @FilePath: /CasaOS/route/periodical.go
* @Description:
* @Website: https://www.casaos.io
Expand Down Expand Up @@ -153,3 +153,133 @@ func SendUSBBySocket() {
}
service.MyService.Notify().SendUSBInfoBySocket(usb)
}

func SendAllHardwareStatusBySocket() {

netList := service.MyService.System().GetNetInfo()
newNet := []model.IOCountersStat{}
nets := service.MyService.System().GetNet(true)
for _, n := range netList {
for _, netCardName := range nets {
if n.Name == netCardName {
item := *(*model.IOCountersStat)(unsafe.Pointer(&n))
item.State = strings.TrimSpace(service.MyService.ZiMa().GetNetState(n.Name))
item.Time = time.Now().Unix()
newNet = append(newNet, item)
break
}
}
}

cpu := service.MyService.System().GetCpuPercent()
num := service.MyService.System().GetCpuCoreNum()
cpuData := make(map[string]interface{})
cpuData["percent"] = cpu
cpuData["num"] = num

list := service.MyService.Disk().LSBLK(true)

summary := model.Summary{}
healthy := true
findSystem := 0

for i := 0; i < len(list); i++ {
if len(list[i].Children) > 0 && findSystem == 0 {

for j := 0; j < len(list[i].Children); j++ {

if len(list[i].Children[j].Children) > 0 {
for _, v := range list[i].Children[j].Children {
if v.MountPoint == "/" {
s, _ := strconv.ParseUint(v.FSSize, 10, 64)
a, _ := strconv.ParseUint(v.FSAvail, 10, 64)
u, _ := strconv.ParseUint(v.FSUsed, 10, 64)
summary.Size += s
summary.Avail += a
summary.Used += u
findSystem = 1
break
}
}
} else {
if list[i].Children[j].MountPoint == "/" {
s, _ := strconv.ParseUint(list[i].Children[j].FSSize, 10, 64)
a, _ := strconv.ParseUint(list[i].Children[j].FSAvail, 10, 64)
u, _ := strconv.ParseUint(list[i].Children[j].FSUsed, 10, 64)
summary.Size += s
summary.Avail += a
summary.Used += u
findSystem = 1
break
}
}
}

}
if findSystem == 1 {
findSystem += 1
continue
}
if list[i].Tran == "sata" || list[i].Tran == "nvme" || list[i].Tran == "spi" || list[i].Tran == "sas" {
temp := service.MyService.Disk().SmartCTL(list[i].Path)
if reflect.DeepEqual(temp, model.SmartctlA{}) {
continue
}

//list[i].Temperature = temp.Temperature.Current
if !temp.SmartStatus.Passed {
healthy = false
}
if len(list[i].Children) > 0 {
for _, v := range list[i].Children {
s, _ := strconv.ParseUint(v.FSSize, 10, 64)
a, _ := strconv.ParseUint(v.FSAvail, 10, 64)
u, _ := strconv.ParseUint(v.FSUsed, 10, 64)
summary.Size += s
summary.Avail += a
summary.Used += u
}
}

}
}

summary.Health = healthy

usbList := service.MyService.Disk().LSBLK(false)
usb := []model.DriveUSB{}
for _, v := range usbList {
if v.Tran == "usb" {
temp := model.DriveUSB{}
temp.Model = v.Model
temp.Name = v.Name
temp.Size = v.Size
mountTemp := true
if len(v.Children) == 0 {
mountTemp = false
}
for _, child := range v.Children {
if len(child.MountPoint) > 0 {
avail, _ := strconv.ParseUint(child.FSAvail, 10, 64)
temp.Avail += avail
used, _ := strconv.ParseUint(child.FSUsed, 10, 64)
temp.Used += used
} else {
mountTemp = false
}
}
temp.Mount = mountTemp
usb = append(usb, temp)
}
}
memInfo := service.MyService.System().GetMemInfo()
memData := make(map[string]interface{})
memData["total"] = memInfo.Total
memData["available"] = memInfo.Available
memData["used"] = memInfo.Used
memData["free"] = memInfo.Free
memData["usedPercent"] = memInfo.UsedPercent

service.MyService.Notify().SendAllHardwareStatusBySocket(summary, usb, memData, cpuData, newNet)

}
4 changes: 2 additions & 2 deletions route/socket.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @Author: LinkLeong [email protected]
* @Date: 2022-05-23 17:18:56
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-08 16:31:24
* @LastEditTime: 2022-06-09 21:48:10
* @FilePath: /CasaOS/route/socket.go
* @Description:
* @Website: https://www.casaos.io
Expand Down Expand Up @@ -49,7 +49,7 @@ func SocketInit(msg chan notify.Message) {
go func(msg chan notify.Message) {
for v := range msg {
f.Broadcast("", v.Path, &v.Msg)
time.Sleep(time.Millisecond * 300)
time.Sleep(time.Millisecond * 100)
}

}(msg)
Expand Down
5 changes: 5 additions & 0 deletions route/v1/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,11 @@ func PostOperateFileOrDir(c *gin.Context) {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.INVALID_PARAMS, Message: oasis_err2.GetMsg(oasis_err2.INVALID_PARAMS)})
return
}
if list.To == list.Item[0].From[:strings.LastIndex(list.Item[0].From, "/")] {
c.JSON(http.StatusOK, model.Result{Success: oasis_err2.SOURCE_DES_SAME, Message: oasis_err2.GetMsg(oasis_err2.SOURCE_DES_SAME)})
return
}

var total int64 = 0
for i := 0; i < len(list.Item); i++ {

Expand Down
23 changes: 18 additions & 5 deletions service/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @Author: LinkLeong [email protected]
* @Date: 2021-12-20 14:15:46
* @LastEditors: LinkLeong
* @LastEditTime: 2022-06-08 15:46:36
* @LastEditTime: 2022-06-09 18:15:54
* @FilePath: /CasaOS/service/file.go
* @Description:
* @Website: https://www.casaos.io
Expand All @@ -21,6 +21,8 @@ import (

"github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
"github.com/IceWhaleTech/CasaOS/pkg/utils/loger"
"go.uber.org/zap"
)

var FileQueue sync.Map
Expand Down Expand Up @@ -87,26 +89,37 @@ func FileOperate(k string) {
if temp.ProcessedSize > 0 {
return
}
for _, v := range temp.Item {
for i := 0; i < len(temp.Item); i++ {
v := temp.Item[i]
if temp.Type == "move" {
lastPath := v.From[strings.LastIndex(v.From, "/")+1:]

if !file.CheckNotExist(temp.To + "/" + lastPath) {
continue
if temp.Style == "skip" {
temp.Item[i].Finished = true
continue
} else {
os.Remove(temp.To + "/" + lastPath)
}
}

err := os.Rename(v.From, temp.To+"/"+lastPath)
if err != nil {
loger.Debug("file move error", zap.Any("err", err))
continue
}
} else if temp.Type == "copy" {
err := file.CopyDir(v.From, temp.To)
err := file.CopyDir(v.From, temp.To, temp.Style)
if err != nil {
continue
}
} else {
continue
}
}

}
temp.Finished = true
FileQueue.Store(k, temp)
}

func ExecOpFile() {
Expand Down
Loading

0 comments on commit 9d47874

Please sign in to comment.