Logo ROOT   6.08/07
Reference Guide
httpcontrol.C File Reference

Detailed Description

This program demonstrates simple application control via THttpServer Two histogram are filled within endless loop.

Via published commands one can enable/disable histograms filling There are also command to clear histograms content

After macro started, open in browser with url

http://localhost:8080

Histograms will be automatically displayed and monitoring with interval 2000 ms started

#include "TH1.h"
#include "TH2.h"
#include "TRandom3.h"
#include "TSystem.h"
#include "THttpServer.h"
Bool_t bFillHist = kTRUE;
void httpcontrol()
{
// create histograms
TH1D *hpx = new TH1D("hpx","This is the px distribution",100,-4,4);
hpx->SetFillColor(48);
hpx->SetDirectory(0);
TH2D *hpxpy = new TH2D("hpxpy","py vs px",40,-4,4,40,-4,4);
hpxpy->SetDirectory(0);
// start http server
THttpServer* serv = new THttpServer("http:8080");
// One could specify location of newer version of JSROOT
// serv->SetJSROOT("https://root.cern.ch/js/latest/");
// serv->SetJSROOT("http://jsroot.gsi.de/latest/");
// register histograms
serv->Register("/", hpx);
serv->Register("/", hpxpy);
// enable monitoring and
// specify items to draw when page is opened
serv->SetItemField("/","_monitoring","5000");
serv->SetItemField("/","_layout","grid2x2");
serv->SetItemField("/","_drawitem","[hpxpy,hpx,Debug]");
serv->SetItemField("/","_drawopt","col");
// register simple start/stop commands
serv->RegisterCommand("/Start", "bFillHist=kTRUE;", "button;rootsys/icons/ed_execute.png");
serv->RegisterCommand("/Stop", "bFillHist=kFALSE;", "button;rootsys/icons/ed_interrupt.png");
// one could hide commands and let them appear only as buttons
serv->Hide("/Start");
serv->Hide("/Stop");
// register commands, invoking object methods
serv->RegisterCommand("/ResetHPX","/hpx/->Reset()", "button;rootsys/icons/ed_delete.png");
serv->RegisterCommand("/ResetHPXPY","/hpxpy/->Reset()", "button;rootsys/icons/bld_delete.png");
// create debug text element, use MathJax - works only on Firefox
serv->CreateItem("/Debug","debug output");
serv->SetItemField("/Debug", "_kind", "Text");
serv->SetItemField("/Debug", "value","\\(\\displaystyle{x+1\\over y-1}\\)");
serv->SetItemField("/Debug", "mathjax", "true");
// Fill histograms randomly
TRandom3 random;
Float_t px, py;
const Long_t kUPDATE = 1000;
Long_t cnt = 0;
while (kTRUE) {
if (bFillHist) {
random.Rannor(px,py);
hpx->Fill(px);
hpxpy->Fill(px,py);
cnt++;
} else {
gSystem->Sleep(10); // sleep minimal time
}
if ((cnt % kUPDATE==0) || !bFillHist) {
// IMPORTANT: one should regularly call ProcessEvents
// to let http server process requests
serv->SetItemField("/Debug", "value", Form("\\(\\displaystyle{x+1\\over y-1}\\) Loop:%d", cnt/kUPDATE));
if (gSystem->ProcessEvents()) break;
}
}
}
Author

Definition in file httpcontrol.C.