コード例 #1
0
        public async Task <AssetPowerStateDto> GetPowerStateAsync(Guid assetId)
        {
            var asset = await _assetService.GetAssetAsync(assetId);

            if (asset.Model.MountType == "blade")
            {
                return(GetBladePowerStatus(asset));
            }

            var pduPorts = asset.PowerPorts
                           .Where(o => o.PduPort != null)
                           .GroupBy(o => o.PduPort.Pdu.ToString())
                           .ToDictionary(d => d.Key,
                                         d => d.Select(o => o.PduPort.Number)
                                         .ToList());

            var powerStates = new List <AssetPowerPortStateDto>();

            foreach (var kvp in pduPorts)
            {
                var response = await Client.GetAsync(
                    $"/pdu.php?pdu={kvp.Key}");

                response.EnsureSuccessStatusCode();
                var parsedResponse = ParseResponse(await response.Content.ReadAsStringAsync());
                var states         = kvp.Value.Select(n => new AssetPowerPortStateDto()
                {
                    Port   = kvp.Key + n,
                    Status = (PowerState)Enum.Parse(typeof(PowerState), parsedResponse[n], true)
                });
                powerStates.AddRange(states);
            }
            var ret = new AssetPowerStateDto()
            {
                Id         = assetId,
                PowerPorts = powerStates
            };

            return(ret);
        }
コード例 #2
0
        public async Task <AssetPowerStateDto> UpdatePowerStateAsync(Guid assetId, PowerAction state)
        {
            var asset = await _assetService.GetAssetAsync(assetId);

            if (asset.Model.MountType == "blade")
            {
                return(await SetBladePowerStatus(asset, state));
            }

            var pduPorts = asset.PowerPorts
                           .Where(o => o.PduPort != null)
                           .GroupBy(o => o.PduPort.Pdu.ToString())
                           .ToDictionary(d => d.Key,
                                         d => d.Select(o => o.PduPort.Number)
                                         .ToList());
            var powerStates = new List <AssetPowerPortStateDto>();

            foreach (var kvp in pduPorts)
            {
                // data is pdu: (hpdu-rtp1-A01L) (rack address + pdunumber + (LorR)
                // port: number
                // v: on, off
                foreach (var port in kvp.Value)
                {
                    var requestData = new Dictionary <String, String>
                    {
                        { "pdu", kvp.Key },
                        { "port", port.ToString() },
                        { "v", state.ToString().ToLower() }
                    };

                    if (state.ToString().ToLower().Equals("cycle"))
                    {
                        requestData.Remove("v");
                        requestData.Add("v", "off");
                        var d = new FormUrlEncodedContent(requestData);
                        var r = await Client.PostAsync("/power.php", d);

                        await Task.Delay(2000);

                        // Two seconds after sending the power off signal, send power on
                        requestData.Remove("v");
                        requestData.Add("v", "on");
                    }

                    var data     = new FormUrlEncodedContent(requestData);
                    var response = await Client.PostAsync("/power.php", data);

                    Console.WriteLine(response);

                    // Translate the action that was taken on the asset into a current power state
                    var powerState = PowerState.Off;
                    if (state == PowerAction.On || state == PowerAction.Cycle)
                    {
                        powerState = PowerState.On;
                    }

                    var powerPortState = new AssetPowerPortStateDto()
                    {
                        Port   = kvp.Key.ToString(),
                        Status = powerState
                    };

                    powerStates.Add(powerPortState);
                }
            }
            var ret = new AssetPowerStateDto()
            {
                Id         = assetId,
                PowerPorts = powerStates
            };

            //GetChassisPower();
            return(ret);
        }