Hi ,
I am working on real time performance statistics using vmware VI SDK. What I am getting using the vmware vi sdk is only the average value .Could any one of u let me know how do i get the latest, minimum and maximum value for CPU, Disk ,Memory etc using vmware vi sdk service. Please find below my code which i am using to get the real time data:
private void printEntityCounters(String entityType)
{
if (_ServiceContent == null)
{
_bConnection = false;
Connect();
}
Debug.Assert(_ServiceContent != null);
// Get Performance Manager
ManagedObjectReference pmRef = _ServiceContent.perfManager;
// Get supported perf counters in the system
PerfCounterInfo[] cInfo = (PerfCounterInfo[])getObjectProperty(pmRef, "perfCounter");
// PerfInterval[] cInfo = (PerfInterval[])getObjectProperty(pmRef, "historicalInterval");
ArrayList vmCpuCounters = new ArrayList();
int index = 0;
for (int i = 0; i < cInfo.Length; ++i)
{
if ("disk".Equals(cInfo[i].groupInfo.key))
{
vmCpuCounters.Add(cInfo[i]);
index++;
}
}
Hashtable usageCounter = new Hashtable();
while (index > 0)
{
//int index = 0;
for (IEnumerator it = vmCpuCounters.GetEnumerator(); it.MoveNext(); )
{
PerfCounterInfo pcInfo = (PerfCounterInfo)it.Current;
Console.WriteLine(index + " - " + pcInfo.nameInfo.label);
PerfCounterInfo pcInfo1 = (PerfCounterInfo)vmCpuCounters[--index];
usageCounter.Add((pcInfo1.key), pcInfo1);
//index--;
}
}
ManagedObjectReference vmmor = null;
_svcRef = new ManagedObjectReference();
_svcRef.type = "ServiceInstance";
_svcRef.Value = "ServiceInstance";
ArrayList morlist = GetDecendentMoRefs(null, entityType);
Boolean continueDataCol = true;
while (continueDataCol)
{
DateTime curTime = VS.CurrentTime(_svcRef);
DateTime beginTime = curTime.Subtract(new TimeSpan(0, 0, 20));
DateTime endTime = curTime;//.Subtract(new TimeSpan(1, 0, 0));//.Add(new TimeSpan(0, 5, 0));
if (morlist != null && morlist.Count > 0)
{
for (int j = 0; j < morlist.Count; j++)
{
vmmor = (ManagedObjectReference)((object[])morlist[j])[0];
ObjectContent[] vmname = GetObjectProperties(vmmor, new string[] { "name" });
PerfMetricId[] aMetrics = VS.QueryAvailablePerfMetric(pmRef, vmmor, beginTime, true, endTime, true, 20, true);
ArrayList mMetrics = new ArrayList();
if (aMetrics != null && aMetrics.Length != 0)
{
for (int index1 = 0; index1 < aMetrics.Length; index1++)
{
if (usageCounter.ContainsKey(aMetrics[index1].counterId))
{
mMetrics.Add(aMetrics[index1]);
}
}
}
else
{
Console.WriteLine("Virtual Machine " + vmname[0].propSet[0].val + " is not running");
}
FileStream filestream1 = new FileStream(PerformanceFile, FileMode.Append, FileAccess.Write, FileShare.Read);
StreamWriter SWW1 = new StreamWriter(filestream1);
SWW1.Write(SWW1.NewLine);
SWW1.Write("TimeStamp\t\tObject\tMeasurements\t\t\tUnits\t\tAverage\n");
SWW1.Write(SWW1.NewLine);
SWW1.Close();
filestream1.Close();
Console.WriteLine();
Console.WriteLine("Time\tObject\tMeasurements\t\tUnits\t\tAverage\n");
for (int count = 0; count < mMetrics.Count; count++)
{
PerfMetricId[] metricIds = (new PerfMetricId[] { (PerfMetricId)mMetrics[count] });
PerfQuerySpec qSpec = new PerfQuerySpec();
qSpec.entity = vmmor;
qSpec.maxSample = 3;
qSpec.maxSampleSpecified = true;
qSpec.metricId = metricIds;
qSpec.intervalId = 20;
qSpec.intervalIdSpecified = true;
qSpec.startTime = beginTime;
qSpec.startTimeSpecified = true;
qSpec.endTime = endTime;
qSpec.endTimeSpecified = true;
PerfQuerySpec[] qSpecs = new PerfQuerySpec[] ;
//Boolean continueDataCol = true;
//while (continueDataCol)
//{
PerfEntityMetricBase[] pValues = VS.QueryPerf(pmRef, qSpecs);
if (pValues.Length == 0)
{
Console.WriteLine("Virtual Machine " + vmname[0].propSet[0].val + " is not running");
}
else
{
//PerfSampleInfo[] infos = ((PerfEntityMetric)pValues[0]).sampleInfo;
//Console.WriteLine("Sample time range: " + infos[0].timestamp.TimeOfDay.ToString() + " read every" + infos[0].interval + " seconds");
for (int i = 0; i < pValues.Length; ++i)
{
PerfMetricSeries[] vals = ((PerfEntityMetric)pValues[i]).value;
PerfSampleInfo[] infos = ((PerfEntityMetric)pValues[i]).sampleInfo;
Console.WriteLine("Sample time range: " + infos[i].timestamp.TimeOfDay.ToString() + " read every" + infos[i].interval + " seconds");
for (int vi = 0; vi < vals.Length; vi++)
{
PerfCounterInfo pci = (PerfCounterInfo)usageCounter[vals[http://vi].id.counterId|http://vi].id.counterId];
//if (pci != null)
//Console.WriteLine(pci.nameInfo.label + "-" + pci.unitInfo.summary);
if (vals[vi].GetType().Name.Equals("PerfMetricIntSeries"))
{
PerfMetricIntSeries val = (PerfMetricIntSeries)vals[vi];
long[] longs = val.value;
for (int k = 0; k < longs.Length; ++k)
{
Console.WriteLine(infos[i].timestamp.TimeOfDay.ToString()+ "\t"+ val.id.instance + "\t" + pci.nameInfo.label + "\t\t" + pci.unitInfo.summary + "\t\t" + longs[k] + " ");
FileStream filestream2 = new FileStream(PerformanceFile, FileMode.Append, FileAccess.Write, FileShare.Read);
StreamWriter SWW2 = new StreamWriter(filestream2);
//SWW2.Write(infos[i].timestamp.TimeOfDay.ToString());
SWW2.Write(infos[i].timestamp.TimeOfDay.ToString() + "\t\t"+ val.id.instance + "\t" + pci.nameInfo.label + "\t\t\t" + pci.unitInfo.summary + "\t\t" + longs[k] + " ");
SWW2.Write(SWW2.NewLine);
SWW2.Close();
filestream2.Close(); ;
}