|
#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
|
|
}
|
|
|