123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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{}
- }
|