Reply to Message

View discussion in a popup

Replying to:
Kagome
Enthusiast
Enthusiast

VcPerformanceManager and its query

Hello, i trie to get the Energy-Information from  an single ESXi Host via the PerformanceManager. (see attached picture)

I used Onyx Proxy to get the Informations which classes are used there.

I used as basic this example: https://communities.vmware.com/thread/419294 and modified a little bit to a single query.

This is my code of a Scriptable Task (Input to this Scriptable Task is a single Host (VC:HostSystem) named: host) :

var currentTime = System.getCurrentTime();

// reduce 15 Minutes

var startTime = currentTime - (900 * 1000);

var myEndDate = new Date();

myEndDate.setTime(currentTime);

var myStartDate = new Date();

myStartDate.setTime(startTime);

// https://communities.vmware.com/thread/419294

var myQuery = new Array();

myQuery[0] = new VcPerfQuerySpec();

myQuery[0].startTime = myStartDate;

myQuery[0].endTime = myEndDate;

myQuery[0].format = VcPerfFormat.normal;

myQuery[0].entity = host.reference;

myQuery[0].intervalId = 20;

myQuery[0].metricId = host.sdkConnection.perfManager.queryAvailablePerfMetric(host.reference,null,null,20);

/* Return Type: VcPerfEntityMetricBase[] -> Base type for the various VcPerfEntityMetric encodings. */

var result = host.sdkConnection.perfManager.queryPerf(myQuery);

for(var i in result)

{   

    var perfMetricSeries = result[i].value; //VcPerfMetricSeries[]

    var perfSampleInfo = result[i].sampleInfo; //VcPerfSampleInfo[]

    for(var j in perfSampleInfo)

    {

        //System.log(j+"->"+perfSampleInfo[j].timestamp);

    }

    var y = 0;

    for(var k in perfMetricSeries)

    {

        if(host.sdkConnection.perfManager.perfCounter[perfMetricSeries[k].id.counterId] != null)

        {

            var labelInfo = host.sdkConnection.perfManager.perfCounter[perfMetricSeries[k].id.counterId].nameInfo.label

            var groupInfo = host.sdkConnection.perfManager.perfCounter[perfMetricSeries[k].id.counterId].groupInfo.label;

            var unitInfo = host.sdkConnection.perfManager.perfCounter[perfMetricSeries[k].id.counterId].unitInfo.label;           

            if(unitInfo == "Joule")

            {

                // this was a try to find which Group / Label has "Joule" as unit

                //System.log("Group: "+groupInfo+ " - "+ labelInfo);

            }

            if(groupInfo == "Power")

            {

                // this wa a test to see what is in the group "Power"

                // System.log("Label: " +labelInfo +" - "+ unitInfo);

            }

            if(perfMetricSeries[k].id.counterId == 314)

            {

                // CounterID 314 was displayed in Onyx Proxy

                System.log("314!!!! Group: "+groupInfo+ " - "+ labelInfo +" - "+ unitInfo);

            }           

            if(groupInfo == "Power" && labelInfo == "Host Power Capacity Provisioned" && unitInfo =="Percent")

            {

                System.log("Power -> Host Power Capacity Provisioned -> Percent")

                var m = 0;

                for(var z in perfMetricSeries[k].value)

                {

                    if(perfMetricSeries[k].value[z] != 0 && perfMetricSeries[k].value[z]!= "0")

                    {

                        System.log(m+"->"+perfMetricSeries[k].value[z]);

                        m++;

                    }

                }               

            }

            if(groupInfo == "Power" && labelInfo == "Energy usage" && unitInfo =="Joule")

            {

                System.log("Power -> Energy usage -> Joule")

                // System.log(y + "-> Power");

                y++;

                var m = 0;

                for(var z in perfMetricSeries[k].value)

                {

                    if(perfMetricSeries[k].value[z] != 0 && perfMetricSeries[k].value[z]!= "0")

                    {

                        System.log(m+"->"+perfMetricSeries[k].value[z]);

                        m++;

                        // System.log(perfSampleInfo[k].timestamp[z]);

                    }

                }               

            }

            if(groupInfo == "System" && labelInfo == "Resource memory zero" && unitInfo =="KB")

            {

                System.log("System - Resource memory zero - KB")               

                var m = 0;

                for(var z in perfMetricSeries[k].value)

                {

                    if(perfMetricSeries[k].value[z] != 0 && perfMetricSeries[k].value[z]!= "0")

                    {

                        System.log(m +"->"+perfMetricSeries[k].value[z]);

                        m++;

                    }

                }               

            }           

        }               

    }

}

After now hours of testing I have a few Questions:

If you have a value of the Type VCPerfCounterInfo.unitInfo "Percent" (https://www.vmware.com/support/orchestrator/doc/vco_vsphere55_api/html/VcPerfCounterInfo.html#key )  why is that somewhere around 10 000 000 ? In my case the "Host Power Capacity Provisioned" was between 9 700 000 and 9 900 000.

groupInfo == "Power" && labelInfo == "Energy usage" && unitInfo =="Joule"

This was my first try because i exspected that the informations i'm looking for are storred here - but it is a static value about 1975. I think it is the power of the two 1000 watt PowerSupplys of the host. Correct?

groupInfo == "System" && labelInfo == "Resource memory zero" && unitInfo =="KB"

Well, Onyx displayed correct that this are the values I were looking in the vCenter chart - what has "Resource memory zero" to do with the energy that the host is using? Are that real datas or only calculated?

Reply
0 Kudos