117 lines
3.2 KiB
Go
117 lines
3.2 KiB
Go
|
package service
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
|
||
|
"github.com/IceWhaleTech/CasaOS-Common/utils/logger"
|
||
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
|
||
|
"github.com/IceWhaleTech/CasaOS/pkg/utils/httper"
|
||
|
"go.uber.org/zap"
|
||
|
)
|
||
|
|
||
|
type StorageService interface {
|
||
|
MountStorage(mountPoint, fs string) error
|
||
|
UnmountStorage(mountPoint string) error
|
||
|
GetStorages() (httper.MountList, error)
|
||
|
CreateConfig(data map[string]string, name string, t string) error
|
||
|
CheckAndMountByName(name string) error
|
||
|
CheckAndMountAll() error
|
||
|
GetConfigByName(name string) (map[string]string, error)
|
||
|
DeleteConfigByName(name string) error
|
||
|
GetConfig() (httper.RemotesResult, error)
|
||
|
}
|
||
|
|
||
|
type storageStruct struct {
|
||
|
}
|
||
|
|
||
|
func (s *storageStruct) MountStorage(mountPoint, fs string) error {
|
||
|
file.IsNotExistMkDir(mountPoint)
|
||
|
return httper.Mount(mountPoint, fs)
|
||
|
}
|
||
|
func (s *storageStruct) UnmountStorage(mountPoint string) error {
|
||
|
err := httper.Unmount(mountPoint)
|
||
|
if err == nil {
|
||
|
dir, _ := ioutil.ReadDir(mountPoint)
|
||
|
|
||
|
if len(dir) == 0 {
|
||
|
file.RMDir(mountPoint)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
func (s *storageStruct) GetStorages() (httper.MountList, error) {
|
||
|
return httper.GetMountList()
|
||
|
}
|
||
|
func (s *storageStruct) CreateConfig(data map[string]string, name string, t string) error {
|
||
|
httper.CreateConfig(data, name, t)
|
||
|
return nil
|
||
|
}
|
||
|
func (s *storageStruct) CheckAndMountByName(name string) error {
|
||
|
storages, _ := MyService.Storage().GetStorages()
|
||
|
currentRemote, _ := httper.GetConfigByName(name)
|
||
|
mountPoint := currentRemote["mount_point"]
|
||
|
isMount := false
|
||
|
for _, v := range storages.MountPoints {
|
||
|
if v.MountPoint == mountPoint {
|
||
|
isMount = true
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
if !isMount {
|
||
|
return MyService.Storage().MountStorage(mountPoint, name+":")
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
func (s *storageStruct) CheckAndMountAll() error {
|
||
|
storages, err := MyService.Storage().GetStorages()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
logger.Info("when CheckAndMountAll storages", zap.Any("storages", storages))
|
||
|
section, err := httper.GetAllConfigName()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
logger.Info("when CheckAndMountAll section", zap.Any("section", section))
|
||
|
for _, v := range section.Remotes {
|
||
|
currentRemote, _ := httper.GetConfigByName(v)
|
||
|
mountPoint := currentRemote["mount_point"]
|
||
|
if len(mountPoint) == 0 {
|
||
|
continue
|
||
|
}
|
||
|
isMount := false
|
||
|
for _, v := range storages.MountPoints {
|
||
|
if v.MountPoint == mountPoint {
|
||
|
isMount = true
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
if !isMount {
|
||
|
logger.Info("when CheckAndMountAll MountStorage", zap.String("mountPoint", mountPoint), zap.String("fs", v))
|
||
|
err := MyService.Storage().MountStorage(mountPoint, v+":")
|
||
|
if err != nil {
|
||
|
logger.Error("when CheckAndMountAll then", zap.String("mountPoint", mountPoint), zap.String("fs", v), zap.Error(err))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (s *storageStruct) GetConfigByName(name string) (map[string]string, error) {
|
||
|
return httper.GetConfigByName(name)
|
||
|
}
|
||
|
func (s *storageStruct) DeleteConfigByName(name string) error {
|
||
|
return httper.DeleteConfigByName(name)
|
||
|
}
|
||
|
func (s *storageStruct) GetConfig() (httper.RemotesResult, error) {
|
||
|
section, err := httper.GetAllConfigName()
|
||
|
if err != nil {
|
||
|
return httper.RemotesResult{}, err
|
||
|
}
|
||
|
return section, nil
|
||
|
}
|
||
|
func NewStorageService() StorageService {
|
||
|
return &storageStruct{}
|
||
|
}
|