VirtualBox

Ignore:
Timestamp:
Oct 12, 2012 9:26:07 AM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
81354
Message:

Main/Metrics: Linux fs/disk metrics, VBoxManage filtering + minor fixes (#6345)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageMetrics.cpp

    r40358 r43629  
    3434#include <VBox/log.h>
    3535
     36#include <set>
     37#include <utility>
     38
    3639#include "VBoxManage.h"
    3740using namespace com;
     
    4144///////////////////////////////////////////////////////////////////////////////
    4245
    43 
    44 static bool isLastSlash(const char *str)
    45 {
    46     char c;
    47     while ((c = *str++))
    48     {
    49         if (c == ',')
    50             break;
    51         if (c == '/')
    52             return false;
    53     }
    54 
    55     return true;
    56 }
    57 
    58 static char *toBaseMetricNames(const char *metricList)
    59 {
    60     char *newList = (char*)RTMemAlloc(strlen(metricList) + 1);
    61     if (newList)
    62     {
    63         int cSlashes = 0;
    64         bool fSkip = false;
    65         const char *src = metricList;
    66         char c, *dst = newList;
    67         while ((c = *src++))
    68             if (c == ':')
    69                 fSkip = true;
    70             else if (c == '/' && ++cSlashes >= 2 && isLastSlash(src))
    71                 fSkip = true;
    72             else if (c == ',')
    73             {
    74                 fSkip = false;
    75                 cSlashes = 0;
    76                 *dst++ = c;
    77             }
    78             else
    79                 if (!fSkip)
    80                     *dst++ = c;
    81         *dst = 0;
    82     }
    83     return newList;
    84 }
    8546
    8647static int parseFilterParameters(int argc, char *argv[],
    8748                                 ComPtr<IVirtualBox> aVirtualBox,
    8849                                 ComSafeArrayOut(BSTR, outMetrics),
    89                                  ComSafeArrayOut(BSTR, outBaseMetrics),
    9050                                 ComSafeArrayOut(IUnknown *, outObjects))
    9151{
    9252    HRESULT rc = S_OK;
    9353    com::SafeArray<BSTR> retMetrics(1);
    94     com::SafeArray<BSTR> retBaseMetrics(1);
    9554    com::SafeIfaceArray <IUnknown> retObjects;
    9655
     
    9958    /* Metric list */
    10059    if (argc > 1)
    101     {
    10260        metricNames = argv[1];
    103         char *tmp   = toBaseMetricNames(argv[1]);
    104         if (!tmp)
    105             return VERR_NO_MEMORY;
    106         baseNames   = tmp;
    107         RTMemFree(tmp);
    108     }
    10961    else
    11062    {
     
    11365    }
    11466    metricNames.cloneTo(&retMetrics[0]);
    115     baseNames.cloneTo(&retBaseMetrics[0]);
    11667
    11768    /* Object name */
     
    14596
    14697    retMetrics.detachTo(ComSafeArrayOutArg(outMetrics));
    147     retBaseMetrics.detachTo(ComSafeArrayOutArg(outBaseMetrics));
    14898    retObjects.detachTo(ComSafeArrayOutArg(outObjects));
    14999
    150100    return rc;
     101}
     102
     103static Bstr toBaseName(Utf8Str& aFullName)
     104{
     105    char *pszRaw = aFullName.mutableRaw();
     106    char *pszSlash = strrchr(pszRaw, '/');
     107    if (pszSlash)
     108    {
     109        *pszSlash = 0;
     110        aFullName.jolt();
     111    }
     112    return Bstr(aFullName);
    151113}
    152114
     
    207169    HRESULT rc;
    208170    com::SafeArray<BSTR>          metrics;
    209     com::SafeArray<BSTR>          baseMetrics;
    210171    com::SafeIfaceArray<IUnknown> objects;
    211172
    212173    rc = parseFilterParameters(argc - 1, &argv[1], aVirtualBox,
    213174                               ComSafeArrayAsOutParam(metrics),
    214                                ComSafeArrayAsOutParam(baseMetrics),
    215175                               ComSafeArrayAsOutParam(objects));
    216176    if (FAILED(rc))
     
    258218    HRESULT rc;
    259219    com::SafeArray<BSTR>          metrics;
    260     com::SafeArray<BSTR>          baseMetrics;
    261220    com::SafeIfaceArray<IUnknown> objects;
    262221    uint32_t period = 1, samples = 1;
     
    293252    rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox,
    294253                               ComSafeArrayAsOutParam(metrics),
    295                                ComSafeArrayAsOutParam(baseMetrics),
    296254                               ComSafeArrayAsOutParam(objects));
    297255    if (FAILED(rc))
     
    322280    HRESULT rc;
    323281    com::SafeArray<BSTR>          metrics;
    324     com::SafeArray<BSTR>          baseMetrics;
    325282    com::SafeIfaceArray<IUnknown> objects;
    326283
    327284    rc = parseFilterParameters(argc - 1, &argv[1], aVirtualBox,
    328285                               ComSafeArrayAsOutParam(metrics),
    329                                ComSafeArrayAsOutParam(baseMetrics),
    330286                               ComSafeArrayAsOutParam(objects));
    331287    if (FAILED(rc))
     
    430386    HRESULT rc;
    431387    com::SafeArray<BSTR>          metrics;
    432     com::SafeArray<BSTR>          baseMetrics;
    433388    com::SafeIfaceArray<IUnknown> objects;
    434389    uint32_t period = 1, samples = 1;
     
    467422    rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox,
    468423                               ComSafeArrayAsOutParam(metrics),
    469                                ComSafeArrayAsOutParam(baseMetrics),
    470424                               ComSafeArrayAsOutParam(objects));
    471425    if (FAILED(rc))
    472426        return 1;
    473427
    474 
     428    com::SafeIfaceArray<IPerformanceMetric> metricInfo;
     429
     430    CHECK_ERROR(performanceCollector,
     431        GetMetrics(ComSafeArrayAsInParam(metrics),
     432                   ComSafeArrayAsInParam(objects),
     433                   ComSafeArrayAsOutParam(metricInfo)));
     434
     435    std::set<std::pair<ComPtr<IUnknown>,Bstr> > baseMetrics;
     436    ComPtr<IUnknown> objectFiltered;
     437    Bstr metricNameFiltered;
     438    for (i = 0; i < (int)metricInfo.size(); i++)
     439    {
     440        CHECK_ERROR(metricInfo[i], COMGETTER(Object)(objectFiltered.asOutParam()));
     441        CHECK_ERROR(metricInfo[i], COMGETTER(MetricName)(metricNameFiltered.asOutParam()));
     442        Utf8Str baseMetricName(metricNameFiltered);
     443        baseMetrics.insert(std::make_pair(objectFiltered, toBaseName(baseMetricName)));
     444    }
     445    com::SafeArray<BSTR>          baseMetricsFiltered(baseMetrics.size());
     446    com::SafeIfaceArray<IUnknown> objectsFiltered(baseMetrics.size());
     447    std::set<std::pair<ComPtr<IUnknown>,Bstr> >::iterator it;
     448    i = 0;
     449    for (it = baseMetrics.begin(); it != baseMetrics.end(); ++it)
     450    {
     451        it->first.queryInterfaceTo(&objectsFiltered[i]);
     452        Bstr(it->second).detachTo(&baseMetricsFiltered[i++]);
     453    }
    475454    com::SafeIfaceArray<IPerformanceMetric> affectedMetrics;
    476455    CHECK_ERROR(performanceCollector,
    477         SetupMetrics(ComSafeArrayAsInParam(baseMetrics),
    478                      ComSafeArrayAsInParam(objects), period, samples,
     456        SetupMetrics(ComSafeArrayAsInParam(baseMetricsFiltered),
     457                     ComSafeArrayAsInParam(objectsFiltered), period, samples,
    479458                     ComSafeArrayAsOutParam(affectedMetrics)));
    480459    if (FAILED(rc))
     
    561540    HRESULT rc;
    562541    com::SafeArray<BSTR>          metrics;
    563     com::SafeArray<BSTR>          baseMetrics;
    564542    com::SafeIfaceArray<IUnknown> objects;
    565543    bool listMatches = false;
     
    577555    rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox,
    578556                               ComSafeArrayAsOutParam(metrics),
    579                                ComSafeArrayAsOutParam(baseMetrics),
    580557                               ComSafeArrayAsOutParam(objects));
    581558    if (FAILED(rc))
     
    606583    HRESULT rc;
    607584    com::SafeArray<BSTR>          metrics;
    608     com::SafeArray<BSTR>          baseMetrics;
    609585    com::SafeIfaceArray<IUnknown> objects;
    610586    bool listMatches = false;
     
    622598    rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox,
    623599                               ComSafeArrayAsOutParam(metrics),
    624                                ComSafeArrayAsOutParam(baseMetrics),
    625600                               ComSafeArrayAsOutParam(objects));
    626601    if (FAILED(rc))
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette