Project

General

Profile

Bug #949 » test.cpp

//My C++ class - Mamadou Babaei, 08/12/2011 04:02 PM

 
#include <list>
#include <map>
#include <Wt/Chart/WCartesianChart>
#include <Wt/WApplication>
#include <Wt/WBreak>
#include <Wt/WContainerWidget>
#include <Wt/WGridLayout>
#include <Wt/WStandardItemModel>
#include <Wt/WText>
#include <Wt/WTimer>
#include <Wt/WWidget>
#include "tmsysmonsmgeneralinfo.hpp"
#include "base.hpp"
#include "basewidget.hpp"
#include "cgienv.hpp"
#include "cgiroot.hpp"
#include "div.hpp"
#include "remoteapiwrapper.hpp"

using namespace std;
using namespace Wt;
using namespace Wt::Chart;
using namespace ControlConference;

TMSysMonSMGeneralInfo::TMSysMonSMGeneralInfo(CgiRoot *cgi) : BaseWidget(cgi) {
this->clear();
this->addWidget(Layout());

Init();
}

TMSysMonSMGeneralInfo::~TMSysMonSMGeneralInfo() {
}

WWidget *TMSysMonSMGeneralInfo::Layout() {
Div *root = new Div("TMSysMonSMGeneralInfo");

// CPU Model
modelCpuUsage = new WStandardItemModel(60, 7, this);
modelCpuUsage->setHeaderData(0, WString("User CPU"));
modelCpuUsage->setHeaderData(1, WString("Kernel CPU"));
modelCpuUsage->setHeaderData(2, WString("IOWait CPU"));
modelCpuUsage->setHeaderData(3, WString("Swap CPU"));
modelCpuUsage->setHeaderData(4, WString("Nice CPU"));
modelCpuUsage->setHeaderData(5, WString("Idle CPU"));
modelCpuUsage->setHeaderData(6, WString("-"));

// Mem Model
modelMemUsage = new WStandardItemModel(60, 9, this);
modelMemUsage->setHeaderData(0, WString("Total Memory"));
modelMemUsage->setHeaderData(1, WString("Used Memory"));
modelMemUsage->setHeaderData(2, WString("Cache Memory"));
modelMemUsage->setHeaderData(3, WString("Free Memory"));
modelMemUsage->setHeaderData(4, WString("Swap Total"));
modelMemUsage->setHeaderData(5, WString("Swap Used"));
modelMemUsage->setHeaderData(6, WString("Swap Free"));
modelMemUsage->setHeaderData(7, WString("Total VM Usage"));
modelMemUsage->setHeaderData(8, WString("-"));


Div *dvSysMon = new Div(root, "dvSysMon");
WGridLayout *dvSysMonLayout = new WGridLayout(dvSysMon);

// Machine Info
Div *dvSysMonCell00 = new Div("dvSysMonCell00");
txtMachineNodeName = new WText(dvSysMonCell00);
new WBreak(dvSysMonCell00);
txtMachineUptime = new WText(dvSysMonCell00);
new WBreak(dvSysMonCell00);
new WBreak(dvSysMonCell00);


// CPU Graph
Div *dvSysMonCell01 = new Div("dvSysMonCell01");
WCartesianChart *chartCpuUsage = new WCartesianChart(dvSysMonCell01);
chartCpuUsage->setBackground(gray);
chartCpuUsage->setModel(modelCpuUsage);
chartCpuUsage->setXSeriesColumn(6);
chartCpuUsage->setLegendEnabled(true);
chartCpuUsage->setLegendLocation(LegendOutside, Right, AlignMiddle);

chartCpuUsage->setType(ScatterPlot);
chartCpuUsage->axis(XAxis).setScale(LinearScale);
chartCpuUsage->axis(YAxis).setScale(LinearScale);

chartCpuUsage->setPlotAreaPadding(120, Right);
chartCpuUsage->setPlotAreaPadding(30, Top | Bottom);

for (int i = 0; i < 6; ++i) {
WDataSeries s(i, CurveSeries);
s.setShadow(WShadow(3, 3, WColor(0, 0, 0, 127), 3));
chartCpuUsage->addSeries(s);
}

chartCpuUsage->resize(600, 330);

chartCpuUsage->setMargin(10, Top | Bottom);
chartCpuUsage->setMargin(WLength::Auto, Left | Right);


Div *dvSysMonCell10 = new Div("dvSysMonCell10");


// Mem Graph
Div *dvSysMonCell11 = new Div("dvSysMonCell11");
WCartesianChart *chartMemUsage = new WCartesianChart(dvSysMonCell11);
chartMemUsage->setBackground(gray);
chartMemUsage->setModel(modelMemUsage);
chartMemUsage->setXSeriesColumn(8);
chartMemUsage->setLegendEnabled(true);
chartMemUsage->setLegendLocation(LegendOutside, Right, AlignMiddle);

chartMemUsage->setType(ScatterPlot);
chartMemUsage->axis(XAxis).setScale(LinearScale);
chartMemUsage->axis(YAxis).setScale(LinearScale);

chartMemUsage->setPlotAreaPadding(120, Right);
chartMemUsage->setPlotAreaPadding(30, Top | Bottom);

for (int i = 0; i < 8; ++i) {
WDataSeries s(i, CurveSeries);
s.setShadow(WShadow(3, 3, WColor(0, 0, 0, 127), 3));
chartMemUsage->addSeries(s);
}

chartMemUsage->resize(600, 330);

chartMemUsage->setMargin(10, Top | Bottom);
chartMemUsage->setMargin(WLength::Auto, Left | Right);


dvSysMonLayout->addWidget(dvSysMonCell00, 0, 0);
dvSysMonLayout->addWidget(dvSysMonCell01, 0, 1);
dvSysMonLayout->addWidget(dvSysMonCell10, 1, 0);
dvSysMonLayout->addWidget(dvSysMonCell11, 1, 1);

dvSysMonLayout->setVerticalSpacing(11);
dvSysMon->resize(WLength::Auto, WLength::Auto);
dvSysMon->setLayout(dvSysMonLayout);

return root;
}

void TMSysMonSMGeneralInfo::Init() {
// Filling CPU Model
map < ECPUTypes, float > cpuMap;
cpuMap[ECPUTypes_User] = 0.0;
cpuMap[ECPUTypes_Kernel] = 0.0;
cpuMap[ECPUTypes_IOWait] = 0.0;
cpuMap[ECPUTypes_Swap] = 0.0;
cpuMap[ECPUTypes_Nice] = 0.0;
cpuMap[ECPUTypes_Idle] = 0.0;

for (int i = 0; i < CPU_SEC_MAX; ++i)
cacheCpuUsage.push_back(cpuMap);


// Filling Mem Model
map < EMemTypes, float > memMap;
memMap[EMemTypes_Total] = 0.0;
memMap[EMemTypes_Used] = 0.0;
memMap[EMemTypes_Cache] = 0.0;
memMap[EMemTypes_Free] = 0.0;
memMap[EMemTypes_SwapTotal] = 0.0;
memMap[EMemTypes_SwapUsed] = 0.0;
memMap[EMemTypes_SwapFree] = 0.0;
memMap[EMemTypes_TotalVMUsage] = 0.0;

for (int i = 0; i < MEM_SEC_MAX; ++i)
cacheMemUsage.push_back(memMap);


// Init and Start Timer
Wt::WTimer *timer = new Wt::WTimer();
timer->setInterval(1000);
timer->timeout().connect(this, &TMSysMonSMGeneralInfo::RefreshSysResourceUsage);
// If I comment this line the bug goes away
timer->start();
}

void TMSysMonSMGeneralInfo::RefreshSysResourceUsage() {
// I removed all the code here to see it's effect
// As you can see
// This function has no effect on this bug
}

(4-4/8)