示例#1
0
        public async Task <ModuleConfigurationFileUploadResult> ReadConfiguration(IOperation operation, UploadedFile file)
        {
            var configuration = ModuleConfigurationUtils.Parse(operation, file);

            if (!configuration.IsValid())
            {
                throw CommonExceptions.ModuleConfigurationIsInvalid(operation);
            }

            var module = await moduleStore.GetModuleByAlias(operation, configuration.Alias);

            var result = new ModuleConfigurationFileUploadResult
            {
                FileId           = await fileStore.Find(operation, file) ?? await fileStore.Upload(operation, file),
                Alias            = configuration.Alias.ToUpper(),
                NewName          = configuration.Name,
                NewVersion       = configuration.Version,
                OperatingSystems = configuration.Instructions.Where(item => item.OperatingSystem.HasValue).Select(item => item.OperatingSystem.Value)
            };

            if (module == null)
            {
                // Module is new for the system
                result.Verdict = ModuleConfigurationVerdict.NewModule;
                return(result);
            }

            // Module had already installed but update may be required
            result.ModuleId            = module.Id;
            result.OldName             = module.Name;
            result.OldVersion          = module.Version;
            result.UserId              = module.UserId;
            result.FirstName           = module.FirstName;
            result.LastName            = module.LastName;
            result.HostId              = module.HostId;
            result.HostName            = module.HostName;
            result.HostDomain          = module.HostDomain;
            result.HostOperatingSystem = module.HostOperatingSystem;

            if (!result.OperatingSystems.Contains(module.HostOperatingSystem))
            {
                // Configuration doesn't have instructions for OS which used on current host
                result.Verdict = ModuleConfigurationVerdict.BrokenChanges;
                return(result);
            }

            if (module.Status == ModuleStatus.Run || module.Status == ModuleStatus.Stopped || module.Status == ModuleStatus.FailedToRun || module.Status == ModuleStatus.FailedToStop)
            {
                // Module in stable mode: run or stopped
                result.Verdict = GetVerdict(operation, module.Version, configuration.Version);
                return(result);
            }

            result.Verdict = ModuleConfigurationVerdict.Updating;
            return(result);
        }
 internal static ModuleConfigurationFileUploadResultModel ToModel(this ModuleConfigurationFileUploadResult entity) => new ModuleConfigurationFileUploadResultModel
 {
     ModuleId            = entity.ModuleId,
     FileId              = entity.FileId,
     Alias               = entity.Alias,
     OldName             = entity.OldName,
     NewName             = entity.NewName,
     OldVersion          = entity.OldVersion,
     NewVersion          = entity.NewVersion,
     UserId              = entity.UserId,
     FirstName           = entity.FirstName,
     LastName            = entity.LastName,
     HostId              = entity.HostId,
     HostName            = entity.HostName,
     HostDomain          = entity.HostDomain,
     HostOperatingSystem = entity.HostOperatingSystem,
     OperatingSystems    = entity.OperatingSystems,
     Verdict             = entity.Verdict
 };