private void VerifyServerFruInformation(ref bool allPassed, BladeHealthResponse bladeHealth, int bladeId, XmlReader bladehealthInfo)
        {
            allPassed &= ChassisManagerTestHelper.IsTrue(!string.IsNullOrWhiteSpace(bladeHealth.serialNumber), string.Format("Serial number is not empty for blade# {0}", bladeHealth.bladeNumber));

            //string serialNumber = ConfigurationManager.AppSettings[bladeId.ToString()];
            //allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.serialNumber == serialNumber, string.Format("Received SerialNumber for blade# {0} is {1} was expecting {2}", bladeHealth.bladeNumber, bladeHealth.serialNumber, serialNumber));

            bladehealthInfo.ReadToFollowing("hardwareVersion");
            string propertyValue = bladehealthInfo.ReadElementContentAsString();
            allPassed &= ChassisManagerTestHelper.IsTrue(propertyValue == bladeHealth.hardwareVersion, string.Format("Received hardware version for blade# {0}", bladeHealth.bladeNumber));
        }
        /// <summary>
        /// Returns Blade Information including Blade Type, and State Information, Processor information, Memory information
        /// PCie information and Hard Disk information (JBOD only)
        /// </summary>
        /// <returns></returns>
        public Contracts.BladeHealthResponse GetBladeHealth(int bladeId, bool cpuInfo = false, bool memInfo = false, bool diskInfo = false,
            bool pcieInfo = false, bool sensorInfo = false, bool tempInfo = false, bool fruInfo = false)
        {
            Tracer.WriteInfo("Received GetBladeHealth({0})", bladeId);
            Tracer.WriteUserLog("Invoked GetBladeHealth({0})", bladeId);
            BladeHealthResponse response = new BladeHealthResponse();
            response.bladeNumber = bladeId;
            response.completionCode = Contracts.CompletionCode.Unknown;
            response.statusDescription = String.Empty;

            Contracts.ChassisResponse varResponse = ValidateRequest("GetBladeHealth", bladeId);
            if (varResponse.completionCode != Contracts.CompletionCode.Success)
            {
                response.completionCode = varResponse.completionCode;
                response.statusDescription = varResponse.statusDescription;
                return response;
            }

            // Initialize BladeShellResponse object
            BladeShellResponse shellResp = new BladeShellResponse();
            shellResp.bladeNumber = bladeId;

            // If all options are false (default values), then return everything except sensor info.
            // Since the sensor info takes a long time to read, don't read it unless the user explicitly requests it.
            if (!cpuInfo && !memInfo && !diskInfo && !pcieInfo && !sensorInfo && !tempInfo && !fruInfo)
            {
                cpuInfo = memInfo = diskInfo = pcieInfo = tempInfo = fruInfo = true;
            }

            try
            {
                // proc, mem, disk, me, temp, power, fru, pcie, misc
                HardwareStatus hardwareStatus = WcsBladeFacade.GetHardwareInfo((byte)bladeId, cpuInfo, memInfo,
                    diskInfo, false, tempInfo, false, fruInfo, pcieInfo, sensorInfo);

                Type hwType = hardwareStatus.GetType();

                response.completionCode =
                    ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)hardwareStatus.CompletionCode);

                if (hardwareStatus.CompletionCode != (byte)CompletionCode.Success)
                {
                    Tracer.WriteError("GetBladeHealth: Hardware status command failed with completion code: {0:X}", hardwareStatus.CompletionCode);
                }
                else
                {
                    if (hardwareStatus.CompletionCode != (byte)Contracts.CompletionCode.Success)
                    {
                        shellResp.completionCode = Contracts.CompletionCode.Failure;
                        shellResp.statusDescription = Contracts.CompletionCode.Failure + ": Internal Error";
                    }
                    else
                    {
                        shellResp.completionCode = Contracts.CompletionCode.Success;
                    }

                    if (hwType == typeof(ComputeStatus))
                    {
                        ComputeStatus hwResponse = (ComputeStatus)hardwareStatus;

                        shellResp.completionCode = Contracts.CompletionCode.Success;
                        shellResp.bladeNumber = bladeId;
                        shellResp.bladeState = FunctionValidityChecker.CheckBladeStateValidity((byte)bladeId).PowerStatus.ToString();
                        shellResp.bladeType = hwResponse.BladeType;

                        // generate processor info
                        response.processorInfo = new List<ProcessorInfo>();
                        // populate processor info if required
                        if (cpuInfo)
                            foreach (KeyValuePair<byte, Ipmi.ProcessorInfo> instance in hwResponse.ProcInfo)
                            {
                                if (instance.Value.CompletionCode == (byte)CompletionCode.Success)
                                    response.processorInfo.Add(new ProcessorInfo(Contracts.CompletionCode.Success, instance.Key, instance.Value.ProcessorType.ToString(),
                                        instance.Value.ProcessorState.ToString(), instance.Value.Frequency));
                                else
                                    response.processorInfo.Add(new ProcessorInfo(
                                        ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)instance.Value.CompletionCode)));

                            }

                        // generate memory info
                        response.memoryInfo = new List<MemoryInfo>();
                        // populate memory info if required
                        if (memInfo)
                        {
                            foreach (KeyValuePair<byte, Ipmi.MemoryInfo> instance in hwResponse.MemInfo)
                            {
                                if (instance.Value.CompletionCode == (byte)CompletionCode.Success)
                                {
                                    if (instance.Value.Status == Ipmi.MemoryStatus.NotPresent)
                                    {
                                        response.memoryInfo.Add(new MemoryInfo(Contracts.CompletionCode.Success, instance.Key,
                                        instance.Value.Status.ToString(), instance.Value.Speed, instance.Value.MemorySize,
                                        instance.Value.Status.ToString(), instance.Value.Status.ToString()));
                                    }
                                    else
                                    {
                                        response.memoryInfo.Add(new MemoryInfo(Contracts.CompletionCode.Success, instance.Key,
                                            instance.Value.MemoryType.ToString(), instance.Value.Speed, instance.Value.MemorySize,
                                            instance.Value.Voltage, instance.Value.Status.ToString()));
                                    }
                                }
                                else
                                    response.memoryInfo.Add(new MemoryInfo(
                                        ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)instance.Value.CompletionCode)));
                            }
                        }

                        // initialize PcieInfo
                        response.pcieInfo = new List<PCIeInfo>();
                        // populate PcieInfo if required.
                        if (pcieInfo)
                        {
                            foreach (KeyValuePair<byte, Ipmi.PCIeInfo> instance in hwResponse.PcieInfo)
                            {
                                if (instance.Value.CompletionCode == (byte)CompletionCode.Success)
                                    response.pcieInfo.Add(new PCIeInfo(Contracts.CompletionCode.Success, instance.Key, instance.Value.CardState.ToString(),
                                        instance.Value.VendorId, instance.Value.DeviceId, instance.Value.SubsystemId));
                                else
                                    response.pcieInfo.Add(new PCIeInfo(
                                        ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)instance.Value.CompletionCode)));
                            }

                        }

                        // initialize disk info
                        response.sensors = new List<SensorInfo>();
                        // add hardware sensor info if required.
                        if (sensorInfo)
                        {
                            foreach (HardwareSensor sensor in hwResponse.HardwareSdr)
                            {
                                if (sensor.Sdr.CompletionCode == (byte)CompletionCode.Success)
                                    response.sensors.Add(new SensorInfo(Contracts.CompletionCode.Success, sensor.Sdr.SensorNumber, sensor.Sdr.SensorType.ToString(), sensor.Sdr.EntityId.ToString(),
                                        sensor.Sdr.EntityInstance.ToString(), sensor.Sdr.EntityType.ToString(), sensor.Reading.Reading.ToString(), sensor.Reading.EventDescription, sensor.Sdr.Description));
                                else
                                    response.sensors.Add(new SensorInfo(
                                        ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)sensor.Sdr.CompletionCode)));
                            }

                        }
                        // add temp sensor info if required.
                        if (tempInfo)
                        {
                            foreach (HardwareSensor sensor in hwResponse.TempSensors)
                            {
                                if (sensor.Sdr.CompletionCode == (byte)CompletionCode.Success)
                                    response.sensors.Add(new SensorInfo(Contracts.CompletionCode.Success, sensor.Sdr.SensorNumber, sensor.Sdr.SensorType.ToString(), sensor.Sdr.EntityId.ToString(),
                                        sensor.Sdr.EntityInstance.ToString(), sensor.Sdr.EntityType.ToString(), sensor.Reading.Reading.ToString(), sensor.Reading.EventDescription, sensor.Sdr.Description));
                                else
                                    response.sensors.Add(new SensorInfo(
                                        ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)sensor.Sdr.CompletionCode)));
                            }

                        }
                        // append fru info if required
                        AppendFruInfo(ref response, hwResponse, fruInfo);
                    }
                    else if (hwType == typeof(JbodStatus))
                    {
                        JbodStatus hwResponse = (JbodStatus)hardwareStatus;

                        shellResp.bladeNumber = bladeId;
                        shellResp.bladeState = FunctionValidityChecker.CheckBladeStateValidity((byte)bladeId).PowerStatus.ToString();
                        shellResp.bladeType = hwResponse.BladeType;
                        if (diskInfo)
                        {
                            if (hwResponse.CompletionCode == (byte)CompletionCode.Success)
                            {
                                response.jbodDiskInfo = new JbodDiskStatus(Contracts.CompletionCode.Success, hwResponse.DiskStatus.Channel,
                                    hwResponse.DiskStatus.DiskCount);
                                response.jbodDiskInfo.diskInfo = new List<DiskInfo>();
                                foreach (KeyValuePair<byte, Ipmi.DiskStatus> instance in hwResponse.DiskStatus.DiskState)
                                {
                                    response.jbodDiskInfo.diskInfo.Add(new DiskInfo(Contracts.CompletionCode.Success, instance.Key, instance.Value.ToString()));
                                }
                            }
                            else
                            {
                                response.jbodDiskInfo = new JbodDiskStatus(ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)hwResponse.CompletionCode));
                            }
                        }

                        if (tempInfo)
                        {
                            if (hwResponse.DiskInfo.CompletionCode == (byte)CompletionCode.Success)
                                response.jbodInfo = new JbodInfo(Contracts.CompletionCode.Success, hwResponse.DiskInfo.Unit.ToString(),
                                    hwResponse.DiskInfo.Reading);
                            else
                                response.jbodInfo = new JbodInfo(ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)hwResponse.DiskInfo.CompletionCode));
                        }
                        // append fru info if required
                        AppendFruInfo(ref response, hwResponse, fruInfo);
                    }
                    else if (hwType == typeof(UnknownBlade))
                    {
                        UnknownBlade hwResponse = (UnknownBlade)hardwareStatus;
                        // return errored response.

                        shellResp.bladeNumber = bladeId;
                        shellResp.bladeState = FunctionValidityChecker.CheckBladeStateValidity((byte)bladeId).PowerStatus.ToString();
                        shellResp.bladeType = hwResponse.BladeType;

                        // append fru info if required
                        AppendFruInfo(ref response, hwResponse, false);
                    }
                    response.bladeShell = shellResp;
                }
            }
            catch (Exception ex)
            {
                response.completionCode = Contracts.CompletionCode.Failure;
                response.statusDescription = response.completionCode.ToString() + ": " + ex.Message;
                Tracer.WriteError("Exception while processing Hardware Status of Blade {0}: {1}", bladeId, ex);
            }
            return response;
        }
        private void VerifySensorInformation(ref bool allPassed, BladeHealthResponse bladeHealth)
        {
            allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.sensors != null, string.Format("Received sensor Info for blade# {0}", bladeHealth.bladeNumber));

            allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.sensors.Aggregate(true, (b, info) => b & CompletionCode.Success == info.completionCode),
                string.Format("Received all sensors information for blade# {0}", bladeHealth.bladeNumber));
        }
 private void VerifyServerDiskInfo(ref bool allPassed, BladeHealthResponse bladeHealth)
 {
     allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.jbodInfo == null, string.Format("Received null jbodInfo for blade# {0}", bladeHealth.bladeNumber));
     allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.jbodDiskInfo == null, string.Format("Received null jbodDiskInfo for blade# {0}", bladeHealth.bladeNumber));
 }
        private void VerifyPCIeInformation(ref bool allPassed, BladeHealthResponse bladeHealth, XmlReader bladehealthInfo)
        {
            string propertyValue;

            allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.pcieInfo != null, string.Format("Received PCIe Info for blade# {0}", bladeHealth.bladeNumber));
            allPassed &= ChassisManagerTestHelper.AreEqual(Convert.ToInt32(ConfigurationManager.AppSettings["PCIeCount"]), bladeHealth.pcieInfo.Count, "PCIe's count check");

            foreach (PCIeInfo serverPCIeInfo in bladeHealth.pcieInfo)
            {
                allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, serverPCIeInfo.completionCode,
                    string.Format("Received CompletionCode success for Server PCIe Information for blade:PCIeNumber {0}:{1}", bladeHealth.bladeNumber, serverPCIeInfo.pcieNumber));

                bladehealthInfo.ReadToFollowing("vendorId");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverPCIeInfo.vendorId,
                    string.Format("Received PCIe VendorId for blade:PCIeNumber {0}:{1}", bladeHealth.bladeNumber, serverPCIeInfo.pcieNumber));

                bladehealthInfo.ReadToFollowing("deviceId");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverPCIeInfo.deviceId,
                    string.Format("Received PCIe DeviceId for blade:PCIeNumber {0}:{1}", bladeHealth.bladeNumber, serverPCIeInfo.pcieNumber));

                bladehealthInfo.ReadToFollowing("subSystemId");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverPCIeInfo.subSystemId,
                    string.Format("Received SubsystemId for blade:PCIeNumber {0}:{1}", bladeHealth.bladeNumber, serverPCIeInfo.pcieNumber));

                bladehealthInfo.ReadToFollowing("status");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverPCIeInfo.status,
                    string.Format("Received PCIe status for blade:PCIeNumber {0}:{1}", bladeHealth.bladeNumber, serverPCIeInfo.pcieNumber));
            }
        }
        private void VerifyProcessorInformation(ref bool allPassed, BladeHealthResponse bladeHealth, XmlReader bladehealthInfo)
        {
            string propertyValue;

            allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.processorInfo != null, string.Format("Received processor Info for blade# {0}", bladeHealth.bladeNumber));
            allPassed &= ChassisManagerTestHelper.AreEqual(Convert.ToInt32(ConfigurationManager.AppSettings["ProcessorCount"]), bladeHealth.processorInfo.Count, "Processor's count check");

            foreach (ProcessorInfo serverProcInfo in bladeHealth.processorInfo)
            {
                allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, serverProcInfo.completionCode,
                    string.Format("Received CompletionCode success for Server Processor Information for blade# {0}", bladeHealth.bladeNumber));

                bladehealthInfo.ReadToFollowing("procType");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverProcInfo.procType, string.Format("Received Server Processor Type for blade:procId {0}:{1}", bladeHealth.bladeNumber, serverProcInfo.procId));

                bladehealthInfo.ReadToFollowing("state");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverProcInfo.state, string.Format("Received Server Processor state for blade:procId {0}:{1}", bladeHealth.bladeNumber, serverProcInfo.procId));

                bladehealthInfo.ReadToFollowing("frequency");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverProcInfo.frequency,
                    string.Format("Received Server Processor Frequency for blade:procId {0}:{1}", bladeHealth.bladeNumber, serverProcInfo.procId));
            }
        }
        private void VerifyMemoryInformation(ref bool allPassed, BladeHealthResponse bladeHealth, XmlReader bladehealthInfo)
        {
            string propertyValue;

            allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.memoryInfo != null, string.Format("Received memory Info for blade# {0}", bladeHealth.bladeNumber));
            allPassed &= ChassisManagerTestHelper.AreEqual(Convert.ToInt32(ConfigurationManager.AppSettings["DIMMsCount"]), bladeHealth.memoryInfo.Count, "DIMMs count check");

            foreach (MemoryInfo serverDimmInfo in bladeHealth.memoryInfo)
            {
                allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, serverDimmInfo.completionCode, string.Format("Received CompletionCode success for Server DIMM Information for blade# {0}", bladeHealth.bladeNumber));

                bladehealthInfo.ReadToFollowing("dimmType");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverDimmInfo.dimmType, string.Format("Received DIMM Type for blade:DIMM {0}:{1}", bladeHealth.bladeNumber, serverDimmInfo.dimm));

                bladehealthInfo.ReadToFollowing("status");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverDimmInfo.status, string.Format("Received DIMM Status for blade:DIMM {0}:{1}", bladeHealth.bladeNumber, serverDimmInfo.dimm));

                bladehealthInfo.ReadToFollowing("speed");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverDimmInfo.speed, string.Format("Received DIMM speed for blade:DIMM {0}:{1}", bladeHealth.bladeNumber, serverDimmInfo.dimm));

                bladehealthInfo.ReadToFollowing("size");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverDimmInfo.size, string.Format("Received DIMM size for blade:DIMM {0}:{1}", bladeHealth.bladeNumber, serverDimmInfo.dimm));

                bladehealthInfo.ReadToFollowing("memVoltage");
                propertyValue = bladehealthInfo.ReadElementContentAsString();
                allPassed &= ChassisManagerTestHelper.AreEqual(propertyValue, serverDimmInfo.memVoltage, string.Format("Received DIMM memVoltage for blade:DIMM {0}:{1}", bladeHealth.bladeNumber, serverDimmInfo.dimm));
            }
        }
 private void VerifyFruInformationEmpty(ref bool allPassed, BladeHealthResponse bladeHealth)
 {
     allPassed &= ChassisManagerTestHelper.IsTrue(string.IsNullOrWhiteSpace(bladeHealth.serialNumber), string.Format("Serial number is empty for blade# {0}", bladeHealth.bladeNumber));
     allPassed &= ChassisManagerTestHelper.IsTrue(string.IsNullOrWhiteSpace(bladeHealth.hardwareVersion), string.Format("HardWare Version is empty for blade# {0}", bladeHealth.bladeNumber));
 }
 private void VerifyBladeShellInformation(ref bool allPassed, BladeHealthResponse bladeHealth)
 {
     allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, bladeHealth.completionCode, string.Format("Received response with completion code success for blade# {0}", bladeHealth.bladeNumber));
     allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth.bladeShell != null, string.Format("Received bladeshell for blade# {0}", bladeHealth.bladeNumber));
     allPassed &= ChassisManagerTestHelper.AreEqual(CompletionCode.Success, bladeHealth.bladeShell.completionCode, string.Format("Received blade shell information for blade# {0}", bladeHealth.bladeNumber));
     allPassed &= ChassisManagerTestHelper.AreEqual(CmConstants.HealthyBladeState, bladeHealth.bladeShell.bladeState, string.Format("The blade is in healthy state bladeId# {0}", bladeHealth.bladeNumber));
 }
        private bool GetServerHealth(bool allPassed, BladeHealthResponse bladeHealth, int bladeId)
        {
            allPassed &= ChassisManagerTestHelper.IsTrue(bladeHealth != null, string.Format("Received bladehealth for blade# {0}", bladeHealth.bladeNumber));

            this.VerifyBladeShellInformation(ref allPassed, bladeHealth);

            XmlReader bladehealthInfo = XmlReader.Create(this.skuDefinitionFile);

            // verify server blade information
            if (bladeHealth.bladeShell.bladeType.Equals(CmConstants.ServerBladeType))
            {
                this.VerifyServerFruInformation(ref allPassed, bladeHealth, bladeId, bladehealthInfo);

                this.VerifyProcessorInformation(ref allPassed, bladeHealth, bladehealthInfo);

                this.VerifyMemoryInformation(ref allPassed, bladeHealth, bladehealthInfo);

                this.VerifyPCIeInformation(ref allPassed, bladeHealth, bladehealthInfo);

                this.VerifySensorInformation(ref allPassed, bladeHealth);

                this.VerifyServerDiskInfo(ref allPassed, bladeHealth);
            }

            return allPassed;
        }
Example #11
0
        /// <summary>
        /// command specific implementation 
        /// argVal command class member has all user-entered command argument indicators and parameter values
        /// Currently just prints all argument indicators and argument values
        /// </summary>
        internal override void commandImplementation()
        {
            BladeHealthResponse myPacket = new BladeHealthResponse();
            bool noArgSpecified = false;
            dynamic bladeId = null;

            if (!(this.argVal.ContainsKey('i')))
            {
                Console.WriteLine("No blade ID specified, please look command help");
                return;
            }

            if (!(this.argVal.ContainsKey('a') || this.argVal.ContainsKey('m') || this.argVal.ContainsKey('d') || this.argVal.ContainsKey('p')
                || this.argVal.ContainsKey('s') || this.argVal.ContainsKey('t') || this.argVal.ContainsKey('f')))
            {
                noArgSpecified = true;
            }

            try
            {
                this.argVal.TryGetValue('i', out bladeId);

                if (noArgSpecified)
                {
                    myPacket = WcsCli2CmConnectionManager.channel.GetBladeHealth((int)bladeId, true, true, true, true, true, true, true);
                }
                else
                {
                    myPacket = WcsCli2CmConnectionManager.channel.GetBladeHealth((int)bladeId, this.argVal.ContainsKey('a'), this.argVal.ContainsKey('m'),
                       this.argVal.ContainsKey('d'), this.argVal.ContainsKey('p'), this.argVal.ContainsKey('s'), this.argVal.ContainsKey('t'), this.argVal.ContainsKey('f'));
                }
            }
            catch (Exception ex)
            {
                SharedFunc.ExceptionOutput(ex);
                return;
            }

            // If service response is null display error message to user & return
            if (myPacket == null)
            {
                Console.WriteLine(WcsCliConstants.serviceResponseEmpty);
                return;
            }
            // If completion code is failure/timeout/!Success display appropriate error message and return
            if (myPacket.completionCode == Contracts.CompletionCode.Failure
                || myPacket.completionCode == Contracts.CompletionCode.Timeout
                || myPacket.completionCode != Contracts.CompletionCode.Success)
            {
                this.printErrorMessage(myPacket.completionCode);
                return;
            }

            Console.WriteLine();
            Console.WriteLine("== Blade " + bladeId + " Health Information ==");
            Console.WriteLine("Blade ID\t: " + myPacket.bladeShell.bladeNumber);
            Console.WriteLine("Blade State\t: " + myPacket.bladeShell.bladeState);
            Console.WriteLine("Blade Type\t: " + myPacket.bladeShell.bladeType);

            // Show additional information if JBOD
            if (myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeJBOD && myPacket.jbodInfo != null)
            {
                Console.WriteLine("Unit\t: " + myPacket.jbodInfo.unit);
                Console.WriteLine("Reading\t: " + myPacket.jbodInfo.reading);
            }

            // if no arguments are specified or if Processor health is requested
            if (noArgSpecified == true || this.argVal.ContainsKey('a'))
            {
                if (myPacket.processorInfo != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.cpuInfo);

                    // For each processor object in the collection, display processor health data
                    foreach (ProcessorInfo pri in myPacket.processorInfo)
                    {
                        Console.WriteLine("Processor Id\t: " + pri.procId);
                        Console.WriteLine("Processor Type\t: " + pri.procType);
                        Console.WriteLine("Processor Frequence\t: " + pri.frequency);
                        Console.WriteLine("");
                    }
                }
                else if (myPacket.processorInfo == null && myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute)
                {
                    // If blade response from service is empty display error message 
                    Console.WriteLine("Blade Processor Information: " + WcsCliConstants.serviceResponseEmpty);
                }

            }
            // if no arguments are specified or if Memory health is requested
            if (noArgSpecified == true || this.argVal.ContainsKey('m'))
            {
                if (myPacket.memoryInfo != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.memoryInfo);

                    // For each memoey info object in the collection, display Memory data
                    foreach (MemoryInfo mi in myPacket.memoryInfo)
                    {
                        Console.WriteLine("Dimm\t: " + mi.dimm);
                        Console.WriteLine("Dimm Type\t: " + mi.dimmType);
                        Console.WriteLine("Memory Voltage\t\t: " + mi.memVoltage);
                        Console.WriteLine("Size\t\t: " + mi.size);
                        Console.WriteLine("Speed\t\t: " + mi.speed);
                        Console.WriteLine("Memory Status\t\t: " + mi.status);
                        Console.WriteLine("Memory Completion code: " + mi.completionCode.ToString());
                        Console.WriteLine("");
                    }
                }
                else if (myPacket.processorInfo == null && myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute)
                {
                    // If response from service is empty display error message 
                    Console.WriteLine("Blade memory Information: " + WcsCliConstants.serviceResponseEmpty);
                }
            }
            // if no arguments are specified or if Disk health is requested
            if (noArgSpecified == true || this.argVal.ContainsKey('d'))
            {
                if (myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute && myPacket.bladeDisk != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.diskInfo);

                    // For each disk info object in the collection, display disk data
                    foreach (DiskInfo di in myPacket.bladeDisk)
                    {
                        Console.WriteLine("Disk Id\t: " + di.diskId);
                        Console.WriteLine("Disk Speed\t: " + di.diskStatus);
                        Console.WriteLine("Disk CompletionCode\t\t: " + di.completionCode.ToString());
                        Console.WriteLine("");
                    }
                }
                else if (myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeJBOD && myPacket.jbodDiskInfo != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.diskInfo);
                    Console.WriteLine("JBOD Disk Count\t: " + myPacket.jbodDiskInfo.diskCount);
                    Console.WriteLine("JBOD Disk Channel\t: " + myPacket.jbodDiskInfo.channel);
                    Console.WriteLine("Disk CompletionCode\t\t: " + myPacket.jbodDiskInfo.completionCode.ToString());
                    Console.WriteLine("");
                    foreach (DiskInfo di in myPacket.jbodDiskInfo.diskInfo)
                    {
                        Console.WriteLine("== Disk " + di.diskId + " ==");
                        Console.WriteLine("JBOD Disk ID\t: " + di.diskId);
                        Console.WriteLine("JBOD Disk Status\t: " + di.diskStatus);
                        Console.WriteLine("");
                    }
                }
                else if ((myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute && myPacket.bladeDisk == null) ||
                        (myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeJBOD && myPacket.jbodDiskInfo == null))
                {
                    // If disk response from service is empty display error message 
                    Console.WriteLine("Blade health : Disk Information: " + WcsCliConstants.serviceResponseEmpty);
                }
            }
            // if no arguments are specified or if PCIE health is requested
            if (noArgSpecified == true || this.argVal.ContainsKey('p'))
            {
                if (myPacket.pcieInfo != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.pcieInfo);

                    // For each PCIE info object in the collection, display PCIE data
                    foreach (PCIeInfo pci in myPacket.pcieInfo)
                    {
                        Console.WriteLine("PCIE Id\t: " + pci.deviceId);
                        Console.WriteLine("PCIE Number\t: " + pci.pcieNumber);
                        Console.WriteLine("PCIE Sub System Id\t\t: " + pci.subSystemId);
                        Console.WriteLine("PCIE System Id\t\t: " + pci.systemId);
                        Console.WriteLine("PCIE Vendor Id\t\t: " + pci.vendorId);
                        Console.WriteLine("PCIE Completion Code\t\t: " + pci.completionCode.ToString());
                        Console.WriteLine("");
                    }
                }
                else if (myPacket.processorInfo == null && myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute)
                {
                    // If PCIE response from service is empty display error message 
                    Console.WriteLine("Blade PCIE Information: " + WcsCliConstants.serviceResponseEmpty);
                }
            }

            // if no arguments are specified or if Sensor info is requested
            if (noArgSpecified == true || this.argVal.ContainsKey('s'))
            {
                if (myPacket.sensors != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.sensorInfo);

                    // For each Sensor info object in the collection, display Sensor data
                    foreach (SensorInfo si in myPacket.sensors)
                    {
                        Console.WriteLine("Sensor Number\t: " + si.sensorNumber);
                        Console.WriteLine("Sensor Type\t: " + si.sensorType);
                        Console.WriteLine("Sensor Reading\t\t: " + si.reading);
                        Console.WriteLine("Sensor Description\t\t: " + si.description);
                        Console.WriteLine("Sensor Entity\t\t: " + si.entity);
                        Console.WriteLine("Sensor Entity Instance\t\t: " + si.entityInstance);
                        Console.WriteLine("Sensor Status\t\t: " + si.status);
                        Console.WriteLine("Sensor CompletionCode\t\t: " + si.completionCode.ToString());
                        Console.WriteLine("");
                    }
                    Console.WriteLine("");
                }
                else if (myPacket.sensors == null && myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute)
                {
                    // If Sensor response from service is empty display error message 
                    Console.WriteLine("Blade Sensor Information: " + WcsCliConstants.serviceResponseEmpty);
                }
            }

            // if no arguments are specified or if temp Sensor info is requested
            if (noArgSpecified == true || this.argVal.ContainsKey('t'))
            {
                if (myPacket.sensors != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.tempSensorInfo);

                    // For each Sensor info object in the collection, display Sensor data
                    foreach (SensorInfo si in myPacket.sensors)
                    {
                        if (si.sensorType == WcsCliConstants.SensorTypeTemp)
                        {
                            Console.WriteLine("Sensor Number\t: " + si.sensorNumber);
                            Console.WriteLine("Sensor Type\t: " + si.sensorType);
                            Console.WriteLine("Sensor Reading\t\t: " + si.reading);
                            Console.WriteLine("Sensor Description\t\t: " + si.description);
                            Console.WriteLine("Sensor Entity\t\t: " + si.entity);
                            Console.WriteLine("Sensor Entity Instance\t\t: " + si.entityInstance);
                            Console.WriteLine("Sensor Status\t\t: " + si.status);
                            Console.WriteLine("Sensor CompletionCode\t\t: " + si.completionCode.ToString());
                            Console.WriteLine("");
                        }
                    }
                    Console.WriteLine("");
                }
                else if (myPacket.sensors == null && myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute)
                {
                    // If Sensor response from service is empty display error message 
                    Console.WriteLine("Blade Temprature Sensor Information: " + WcsCliConstants.serviceResponseEmpty);
                }
            }

            // if no arguments are specified or if FRU information is requested
            if (noArgSpecified == true || this.argVal.ContainsKey('f'))
            {
                if (myPacket != null)
                {
                    Console.WriteLine();
                    Console.WriteLine(WcsCliConstants.fruInfo);
                    Console.WriteLine("Blade Serial Number\t: " + myPacket.serialNumber);
                    Console.WriteLine("Blade Asset Tag\t: " + myPacket.assetTag);
                    Console.WriteLine("Blade Product Type\t: " + myPacket.productType);
                    Console.WriteLine("Blade Hardware Version\t: " + myPacket.hardwareVersion);
                    Console.WriteLine("");
                }
                else if (myPacket.processorInfo == null && (myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeCompute ||
                    myPacket.bladeShell.bladeType == WcsCliConstants.BladeTypeJBOD))
                {
                    // If FRU response from service is empty display error message 
                    Console.WriteLine("Blade FRU Info: " + WcsCliConstants.serviceResponseEmpty);
                }
            }
        }