コード例 #1
0
        /// <summary>
        /// Deletes the specified appliance.
        /// </summary>
        /// <param name="appliance">The appliance.</param>
        /// <returns>Task&lt;Result&gt;.</returns>
        public async Task <Result> Delete(FdAppliance appliance)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var obj = await this.FindByHost(appliance.HostIP);
                    var exsitObj = obj.Data;
                    if (exsitObj == null)
                    {
                        return Result.Failed(104, $"{appliance.HostIP} does not exists, delete failed.");
                    }
                    var client = new FdClient(appliance);
                    var res = await client.DeleteGivenSubscriptions(appliance.SubscribeId);
                    LogHelper.Info($"Delete Fd:DeleteGivenSubscriptions:{res.Code} {res.Message}");

                    var incrementalDiscoveryData = new IncrementalDiscoveryData();
                    incrementalDiscoveryData.Remove(exsitObj);
                    incrementalDiscoveryData.Commit(MGroup.Instance);
                    return Result.Done();
                }
                catch (Exception e)
                {
                    return Result.Failed(100, $"Internal error caused by {e.Message}", e);
                }
            }));
        }
コード例 #2
0
        public async Task <Result> Update(FdAppliance appliance, bool isUpdateCredential)
        {
            try
            {
                var validateResult = Validate(appliance, true, isUpdateCredential);
                if (!validateResult.Success)
                {
                    return(validateResult);
                }

                if (isUpdateCredential)//修改了密码
                {
                    using (var client = new FdClient(appliance))
                    {
                        var result = await client.TestCredential();

                        if (!result.Success)
                        {
                            return(result);
                        }
                    }
                }
                else
                {
                    var oldFdObj = await FdApplianceConnector.Instance.FindByHost(appliance.HostIP);

                    if (oldFdObj.Data == null)
                    {
                        return(Result.Failed(104, $"FusionDirector {appliance.HostIP} can not find."));
                    }
                    var oldFd = GetModelFromMpObject(oldFdObj.Data);
                    if (oldFd.Port != appliance.Port) //修改了端口
                    {
                        appliance.LoginPd = oldFd.LoginPd;
                        using (var client = new FdClient(appliance))
                        {
                            var result = await client.TestCredential();

                            if (!result.Success)
                            {
                                return(result);
                            }
                        }
                    }
                }

                var updateResult = await FdApplianceConnector.Instance.Update(appliance, isUpdateCredential);

                if (updateResult.Success)
                {
                    await this.LoadAll();
                }
                return(updateResult);
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "Update");
                return(Result.Failed(100, "Update", ex));
            }
        }
コード例 #3
0
        internal async Task <Result> Add(FdAppliance appliance)
        {
            try
            {
                var validateResult = Validate(appliance, false, false);
                if (!validateResult.Success)
                {
                    return(validateResult);
                }
                using (var client = new FdClient(appliance))
                {
                    var result = await client.TestCredential();

                    if (!result.Success)
                    {
                        return(result);
                    }

                    var addResult = await FdApplianceConnector.Instance.Add(appliance);

                    if (addResult.Success)
                    {
                        await this.LoadAll();
                    }
                    return(addResult);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "Add");
                return(Result.Failed(100, "Add", ex));
            }
        }
コード例 #4
0
        /// <summary>
        /// Updates the specified appliance.
        /// </summary>
        /// <param name="appliance">The appliance.</param>
        /// <param name="isUpdateCredential">是否修改了密码</param>
        /// <returns>Result.</returns>
        public async Task <Result> Update(FdAppliance appliance, bool isUpdateCredential)
        {
            return(await Task.Run(async() =>
            {
                try
                {
                    var obj = await this.FindByHost(appliance.HostIP);
                    var exsitObj = obj.Data;
                    if (exsitObj == null)
                    {
                        return Result.Failed(104, $"Fd {appliance.HostIP} can not find.");
                    }
                    var incrementalDiscoveryData = new IncrementalDiscoveryData();

                    var props = this.FdApplianceClass.PropertyCollection;
                    exsitObj[props["AliasName"]].Value = appliance.AliasName;
                    exsitObj[props["Port"]].Value = appliance.Port;
                    exsitObj[props["LastModifyTime"]].Value = appliance.LastModifyTime;

                    if (isUpdateCredential)
                    {
                        try
                        {
                            var eventAccount = exsitObj[props["EventUserName"]].Value as string;
                            var eventPd = exsitObj[props["EventPd"]].Value as string;
                            if (eventAccount != appliance.EventUserName || eventPd != appliance.EventPd)
                            {
                                using (var client = new FdClient(appliance))
                                {
                                    var res = await client.DeleteGivenSubscriptions(appliance.SubscribeId);
                                    LogHelper.Info($"Update Fd:DeleteGivenSubscriptions:{res.Code} {res.Message}");
                                    // 取消订阅后重置订阅状态
                                    exsitObj[props["SubscribeId"]].Value = string.Empty;
                                    exsitObj[props["SubscribeStatus"]].Value = string.Empty;
                                    exsitObj[props["LatestSubscribeInfo"]].Value = string.Empty;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            LogHelper.Error("DeleteSubscriptions Faild", ex);
                        }
                        exsitObj[props["LoginAccount"]].Value = appliance.LoginAccount;
                        exsitObj[props["LoginPd"]].Value = RijndaelManagedCrypto.Instance.EncryptForCs(appliance.LoginPd);
                        exsitObj[props["EventUserName"]].Value = appliance.EventUserName;
                        exsitObj[props["EventPd"]].Value = RijndaelManagedCrypto.Instance.EncryptForCs(appliance.EventPd);
                    }

                    incrementalDiscoveryData.Add(exsitObj);
                    incrementalDiscoveryData.Overwrite(MGroup.Instance);

                    return Result.Done();
                }
                catch (Exception e)
                {
                    return Result.Failed(100, $"Internal error caused by {e.Message}", e);
                }
            }));
        }
コード例 #5
0
        public async Task <Result <List <FdAppliance> > > LoadAll()
        {
            try
            {
                var getListResult = await FdApplianceConnector.Instance.All();

                if (!getListResult.Success)
                {
                    LogHelper.Error(getListResult.Cause, getListResult.Message);
                    return(Result <List <FdAppliance> > .Failed(getListResult.Code, getListResult.Message, getListResult.Cause));
                }
                this.AllItems = getListResult.Data.Select(x => GetModelFromMpObject(x)).ToList();

                OnFilteredItemsChanged(this.AllItems);

                foreach (var appliance in this.AllItems)
                {
                    if (PingFd(appliance.HostIP))
                    {
                        appliance.LatestConnectInfo = "success";
                        appliance.LatestStatus      = Constants.FdConnectionStatus.ONLINE;
                    }
                    else
                    {
                        appliance.DirectorVersion   = string.Empty;
                        appliance.LatestConnectInfo = "Can not connect the remote server.";
                        appliance.LatestStatus      = Constants.FdConnectionStatus.FAILED;
                        LogHelper.Info("Can not connect the remote server.", $"PingFd Error:");
                    }
                    try
                    {
                        using (var client = new FdClient(appliance))
                        {
                            var result = await client.GetApplianceVersion();

                            appliance.DirectorVersion = result.CurrentVersion;
                        }
                    }
                    catch (Exception e)
                    {
                        appliance.DirectorVersion = string.Empty;
                        LogHelper.Error(e, $"GetApplianceVersion Error:");
                    }
                }

                OnFilteredItemsChanged(this.AllItems);
                return(Result <List <FdAppliance> > .Done(this.AllItems));
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "LoadAll");
                return(Result <List <FdAppliance> > .Failed("LoadAll", ex));
            }
        }
コード例 #6
0
        internal async Task <Result> Test(FdAppliance appliance, bool isUpdate, bool isUpdateCredential)
        {
            try
            {
                var validateResult = Validate(appliance, isUpdate, isUpdateCredential);
                if (!validateResult.Success)
                {
                    return(validateResult);
                }

                var client = new FdClient(appliance);
                return(await client.TestCredential());
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex, "Test");
                return(Result.Failed(100, "Test", ex));
            }
        }