VirtualBox

Changeset 104955 in vbox


Ignore:
Timestamp:
Jun 18, 2024 11:18:38 AM (9 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
163563
Message:

FE/Qt. bugref:10659. Implementing child class for cloud vms rows.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/activity/overview
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewModelView.cpp

    r104951 r104955  
    3333
    3434/* GUI includes: */
     35#include "UIConverter.h"
    3536#include "UICommon.h"
    3637#include "UIExtraDataDefs.h"
     
    5354#include "CSession.h"
    5455
     56
     57/*********************************************************************************************************************************
     58*   Class UIActivityOverviewAccessibleRowLocal definition.                                                                       *
     59*********************************************************************************************************************************/
     60
    5561class UIActivityOverviewAccessibleRowLocal : public UIActivityOverviewAccessibleRow
    5662{
     
    6773    virtual bool isRunning() const RT_OVERRIDE RT_FINAL;
    6874    virtual bool isCloudVM() const RT_OVERRIDE RT_FINAL;
     75    virtual QString machineStateString() const RT_OVERRIDE RT_FINAL;
    6976    void resetDebugger();
    7077    void updateCells();
     
    8289    CGuest           m_comGuest;
    8390
    84     quint64  m_uTotalRAM;
     91
    8592    quint64  m_uFreeRAM;
    8693
     
    93100
    94101};
     102
     103
     104/*********************************************************************************************************************************
     105*   Class UIActivityOverviewAccessibleRowCloud definition.                                                                       *
     106*********************************************************************************************************************************/
     107
     108/* A UIActivityOverviewItem derivation to show cloud vms in the table view: */
     109class UIActivityOverviewAccessibleRowCloud : public UIActivityOverviewAccessibleRow
     110{
     111    Q_OBJECT;
     112public:
     113    UIActivityOverviewAccessibleRowCloud(QITableView *pTableView, const QUuid &uMachineId,
     114                                         const QString &strMachineName, CCloudMachine &comCloudMachine);
     115    void updateMachineState();
     116    virtual bool isRunning() const RT_OVERRIDE RT_FINAL;
     117    virtual bool isCloudVM() const RT_OVERRIDE RT_FINAL;
     118    virtual QString machineStateString() const RT_OVERRIDE RT_FINAL;
     119    virtual void setMachineState(int iState) RT_OVERRIDE RT_FINAL;
     120
     121
     122protected:
     123
     124private slots:
     125
     126    void sltTimeout();
     127    void sltMetricNameListingComplete(QVector<QString> metricNameList);
     128    void sltMetricDataReceived(KMetricType enmMetricType,
     129                               const QVector<QString> &data, const QVector<QString> &timeStamps);
     130private:
     131
     132    void getMetricList();
     133    void resetColumData();
     134
     135    QTimer *m_pTimer;
     136    CCloudMachine m_comCloudMachine;
     137    KCloudMachineState m_enmMachineState;
     138    QVector<KMetricType> m_availableMetricTypes;
     139};
     140
     141
     142/*********************************************************************************************************************************
     143*   Class UIActivityOverviewAccessibleRowLocal implementation.                                                                   *
     144*********************************************************************************************************************************/
    95145
    96146UIActivityOverviewAccessibleRowLocal::UIActivityOverviewAccessibleRowLocal(QITableView *pTableView, const QUuid &uMachineId,
     
    98148    : UIActivityOverviewAccessibleRow(pTableView, uMachineId, strMachineName)
    99149    , m_enmMachineState(enmMachineState)
    100     , m_uTotalRAM(0)
    101150    , m_uFreeRAM(0)
    102151    , m_uNetworkDownTotal(0)
     
    244293    if (m_cells.value(enmColumnIndex, 0))
    245294        m_cells[enmColumnIndex]->setText(strText);
     295}
     296
     297QString UIActivityOverviewAccessibleRowLocal::machineStateString() const
     298{
     299    return gpConverter->toString(m_enmMachineState);
     300}
     301
     302
     303/*********************************************************************************************************************************
     304*   Class UIActivityOverviewAccessibleRowCloud implementation.                                                                   *
     305*********************************************************************************************************************************/
     306
     307UIActivityOverviewAccessibleRowCloud::UIActivityOverviewAccessibleRowCloud(QITableView *pTableView, const QUuid &uMachineId,
     308                                                                           const QString &strMachineName, CCloudMachine &comCloudMachine)
     309    : UIActivityOverviewAccessibleRow(pTableView, uMachineId, strMachineName)
     310    , m_comCloudMachine(comCloudMachine)
     311{
     312    updateMachineState();
     313    m_pTimer = new QTimer(this);
     314    if (m_pTimer)
     315    {
     316        connect(m_pTimer, &QTimer::timeout, this, &UIActivityOverviewAccessibleRowCloud::sltTimeout);
     317        m_pTimer->setInterval(60 * 1000);
     318    }
     319    resetColumData();
     320}
     321
     322void UIActivityOverviewAccessibleRowCloud::updateMachineState()
     323{
     324    if (m_comCloudMachine.isOk())
     325        setMachineState(m_comCloudMachine.GetState());
     326}
     327
     328bool UIActivityOverviewAccessibleRowCloud::isRunning() const
     329{
     330    return m_enmMachineState == KCloudMachineState_Running;
     331}
     332
     333bool UIActivityOverviewAccessibleRowCloud::isCloudVM() const
     334{
     335    return true;
     336}
     337
     338QString UIActivityOverviewAccessibleRowCloud::machineStateString() const
     339{
     340    if (!m_comCloudMachine.isOk())
     341        return QString();
     342    return gpConverter->toString(m_comCloudMachine.GetState());
     343}
     344
     345void UIActivityOverviewAccessibleRowCloud::sltTimeout()
     346{
     347    int iDataSize = 1;
     348    foreach (const KMetricType &enmMetricType, m_availableMetricTypes)
     349    {
     350        UIProgressTaskReadCloudMachineMetricData *pTask = new UIProgressTaskReadCloudMachineMetricData(this, m_comCloudMachine,
     351                                                                                                       enmMetricType, iDataSize);
     352        connect(pTask, &UIProgressTaskReadCloudMachineMetricData::sigMetricDataReceived,
     353                this, &UIActivityOverviewAccessibleRowCloud::sltMetricDataReceived);
     354        pTask->start();
     355    }
     356}
     357
     358void UIActivityOverviewAccessibleRowCloud::sltMetricDataReceived(KMetricType /*enmMetricType*/,
     359                                                        const QVector<QString> &data, const QVector<QString> &timeStamps)
     360{
     361    Q_UNUSED(timeStamps);
     362    if (data.isEmpty())
     363        return;
     364
     365    if (data[0].toFloat() < 0)
     366        return;
     367
     368    // int iDecimalCount = 2;
     369    // QLocale locale;
     370    // if (enmMetricType == KMetricType_CpuUtilization)
     371    // {
     372    //     //QString QLocale::toString(double i, char f = 'g', int prec = 6) const
     373
     374    //     // m_columnData[VMActivityOverviewColumn_CPUGuestLoad] =
     375    //     //     QString("%1%").arg(QString::number(data[0].toFloat(), 'f', iDecimalCount));
     376
     377    //     m_columnData[VMActivityOverviewColumn_CPUGuestLoad] =
     378    //         QString("%1%").arg(locale.toString(data[0].toFloat(), 'f', iDecimalCount));
     379    // }
     380    // else if (enmMetricType == KMetricType_MemoryUtilization)
     381    // {
     382    //      if (m_uTotalRAM != 0)
     383    //      {
     384    //          quint64 uUsedRAM = (quint64)data[0].toFloat() * (m_uTotalRAM / 100.f);
     385    //          m_columnData[VMActivityOverviewColumn_RAMUsedAndTotal] =
     386    //              QString("%1/%2").arg(UITranslator::formatSize(_1K * uUsedRAM, iDecimalCount)).
     387    //              arg(UITranslator::formatSize(_1K * m_uTotalRAM, iDecimalCount));
     388    //      }
     389    //      m_columnData[VMActivityOverviewColumn_RAMUsedPercentage] =
     390    //          QString("%1%").arg(QString::number(data[0].toFloat(), 'f', iDecimalCount));
     391    // }
     392    // else if (enmMetricType == KMetricType_NetworksBytesOut)
     393    //     m_columnData[VMActivityOverviewColumn_NetworkUpRate] =
     394    //         UITranslator::formatSize((quint64)data[0].toFloat(), iDecimalCount);
     395    // else if (enmMetricType == KMetricType_NetworksBytesIn)
     396    //     m_columnData[VMActivityOverviewColumn_NetworkDownRate] =
     397    //         UITranslator::formatSize((quint64)data[0].toFloat(), iDecimalCount);
     398    // else if (enmMetricType == KMetricType_DiskBytesRead)
     399    //     m_columnData[VMActivityOverviewColumn_DiskIOReadRate] =
     400    //         UITranslator::formatSize((quint64)data[0].toFloat(), iDecimalCount);
     401    // else if (enmMetricType == KMetricType_DiskBytesWritten)
     402    //     m_columnData[VMActivityOverviewColumn_DiskIOWriteRate] =
     403    //         UITranslator::formatSize((quint64)data[0].toFloat(), iDecimalCount);
     404
     405    sender()->deleteLater();
     406}
     407
     408void UIActivityOverviewAccessibleRowCloud::setMachineState(int iState)
     409{
     410    if (iState <= KCloudMachineState_Invalid || iState >= KCloudMachineState_Max)
     411        return;
     412    KCloudMachineState enmState = static_cast<KCloudMachineState>(iState);
     413    if (m_enmMachineState == enmState)
     414        return;
     415    m_enmMachineState = enmState;
     416    if (isRunning())
     417    {
     418        getMetricList();
     419        if (m_uTotalRAM == 0)
     420            m_uTotalRAM = UIMonitorCommon::determineTotalRAMAmount(m_comCloudMachine);
     421    }
     422    else
     423    {
     424        if (m_pTimer)
     425            m_pTimer->stop();
     426    }
     427}
     428
     429void UIActivityOverviewAccessibleRowCloud::resetColumData()
     430{
     431    // for (int i = (int) VMActivityOverviewColumn_CPUGuestLoad;
     432    //      i < (int)VMActivityOverviewColumn_Max; ++i)
     433    //     m_columnData[i] = UIVMActivityOverviewWidget::tr("N/A");
     434}
     435
     436void UIActivityOverviewAccessibleRowCloud::getMetricList()
     437{
     438    if (!isRunning())
     439        return;
     440    UIProgressTaskReadCloudMachineMetricList *pReadListProgressTask =
     441        new UIProgressTaskReadCloudMachineMetricList(this, m_comCloudMachine);
     442    AssertPtrReturnVoid(pReadListProgressTask);
     443    connect(pReadListProgressTask, &UIProgressTaskReadCloudMachineMetricList::sigMetricListReceived,
     444            this, &UIActivityOverviewAccessibleRowCloud::sltMetricNameListingComplete);
     445    pReadListProgressTask->start();
     446}
     447
     448void UIActivityOverviewAccessibleRowCloud::sltMetricNameListingComplete(QVector<QString> metricNameList)
     449{
     450    AssertReturnVoid(m_pTimer);
     451    m_availableMetricTypes.clear();
     452    foreach (const QString &strName, metricNameList)
     453        m_availableMetricTypes << gpConverter->fromInternalString<KMetricType>(strName);
     454
     455    if (!m_availableMetricTypes.isEmpty())
     456    {
     457        /* Dont wait 60 secs: */
     458        sltTimeout();
     459        m_pTimer->start();
     460    }
     461    else
     462    {
     463        m_pTimer->stop();
     464        resetColumData();
     465    }
     466
     467    if (sender())
     468        sender()->deleteLater();
     469
    246470}
    247471
     
    548772    }
    549773
    550     // for (int i = 0; i < (int)VMActivityOverviewColumn_Max; ++i)
    551     // {
    552     //     for (int j = 0; j < m_rows.size(); ++j)
    553     //         if (m_columnDataMaxLength.value(i, 0) < m_rows[j]->columnLength(i))
    554     //             m_columnDataMaxLength[i] = m_rows[j]->columnLength(i);
    555     // }
     774    for (int i = 0; i < (int)VMActivityOverviewColumn_Max; ++i)
     775    {
     776        for (int j = 0; j < m_rows.size(); ++j)
     777            if (m_columnDataMaxLength.value(i, 0) < m_rows[j]->columnLength(i))
     778                m_columnDataMaxLength[i] = m_rows[j]->columnLength(i);
     779    }
    556780
    557781    emit sigDataUpdate();
     
    725949    , m_uMachineId(uMachineId)
    726950    , m_strMachineName(strMachineName)
     951    , m_uTotalRAM(0)
    727952{
    728953    initCells();
     
    748973}
    749974
     975int UIActivityOverviewAccessibleRow::columnLength(int iColumnIndex) const
     976{
     977    UIActivityOverviewAccessibleCell *pCell = m_cells.value(iColumnIndex, 0);
     978    if (!pCell)
     979        return 0;
     980    return pCell->text().length();
     981}
     982
    750983UIActivityOverviewAccessibleRow::~UIActivityOverviewAccessibleRow()
    751984{
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewModelView.h

    r104951 r104955  
    144144
    145145    virtual QITableViewCell *childItem(int iIndex) const RT_OVERRIDE RT_FINAL;
    146 
     146    int columnLength(int iColumnIndex) const;
    147147    QString cellText(int iColumn) const;
     148    virtual QString machineStateString() const = 0;
    148149
    149150protected:
     
    154155
    155156    QString m_strMachineName;
     157    quint64  m_uTotalRAM;
    156158private:
    157159
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