Upload
kelley-barnett
View
220
Download
3
Embed Size (px)
Citation preview
THttpServer for ROOT
Bertrand Bellenot, CERNSergey Linev, GSI Darmstadt
28.02.2014
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 2
JSRootIO
Written on JavaScript, works in all major browsers IE, Firefox, Opera, Safari, Android, …
Allows to draw many kinds of ROOT objects TH1, TH2, TH3, TProfile, TGraph, THStack, TCanvas
Demonstrator: http://web-docs.gsi.de/~linev/JSRootIO/index_local.htm
Interactive graphics directly in the browser: changing of draw style, zooming, bins info update of statistic in stat box different context menu commands
Main aim – display objects from ROOT files PRO - no need for special code on the web server CONTRA – not possible to update data dynamically
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 3
JSRootIO for online? JSRootIO is file-based
difficult to use for online tasks not really scales for big systems
Much more benefits if will run online one would see live results from running
experiment from any place of the world
One need special web application, which can provide online data to JSRootIO
Web server for ROOT THttpServer class provides web server for
arbitrary ROOT application
In any place of ROOT macro:
root [0] .x $ROOTSYS/tutorials/hsimple.Croot [1] new THttpServer();
No any changes in ROOT framework are required
No any changes in user code are required
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 4
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 5
hsimple.C in web browser
Main classes TRootSniffer - `sniffer`for objects hierarchies in TFolder,
TFile/TDirectory, TTree, TCollection
THttpEngine – abstract class for implementing http protocol TMongoose – embeddable web server, based on
https://github.com/valenok/mongoose TFastCgi – FastCGI protocol implementation
supported by all major web servers like Apache, MS IIS, lighttpd, ...
THttpServer – central class receive http requests from engine(s) http requests processed by sniffer takes care about threads safety
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 6
THttpServer Any object can be registered in TFolder structure:
root [5] h1 = new TH1I(“h1”, “title”, 5, 0, 5); root [6] serv->Register(“folder”, h1);
Following http requests are processed: http://host:654/ROOT/h.xml
xml file with objects hierarchy, used to build tree structures in browser http://host:654/ROOT/h1/get.bin
binary zipped data, produced by object streaming http://host:654/ROOT/StreamerInfo/get.bin
binary zipped data of current streamer infos http://host:654/ROOT/h1/get.png?w=100&h=100
png image, produced from TCanvas http://host:654/ROOT/
returns generic (or user-defined) html page, shown before
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 7
FastCGI support Protocol for interfacing interactive programs with web servers Supported by all major web servers
Apache, lighttpd, MS IIS, Cherokee, Hiawatha, LiteSpeed, Kerio, Nginx, Resin, Roxen, Zeus ...
One benefits from common infrastructure user access, security, encryption, balancing, ...
Can run in parallel to HTTP server
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 8
ROOThttp
FastCGI
Apache
http
Project state Developed since mid 2013 Works with ROOT 5.14 and 6.00 Tested on Linux and Windows No external dependencies
mongoose is just two source files mongoose is GPL2, can be replaced by civetweb with
MIT license FastCGI is optional, provided by all Linux distributions
For the moment available on:https://subversion.gsi.de/dabc/http/
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 9
Current applications Integrated into DABC
DABC is DAQ framework, used in different experiments now also provides generic web interface for online software
DAQ – DABC, MBS (GSI standard DAQ) slow control – FESA (CERN/GSI accelerator control), EPICS, DIM online analysis – Go4, ROOT
Integrated with Go4 Go4 is analysis framework with QtRoot online monitoring
interface now also web interface without changing user-code
Evaluated by different groups in GSI: HADES, SuperFRS, R3B
Could be used in AMORE framework of ALICE
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 10
Possible developments Replace mongoose by ROOT TThread/TSocket classes
many parts of original mongoose code can be reused, ~1 month of work
Implement caching on the server preventing application from overload, ~1 week of work
Implement more http requests http://host:654/ROOT/h1/get.xml
convert object into xml with TBufferXML, ~1 hour of work http://host:654/ROOT/h1/get.json
stream object into JSON representation directly no need for ROOT I/O in JavaScript one need TBufferJSON class, ~2 weeks of work
http://host:654/ROOT/h1/fTitle/get.txt access to object members in simple text form mostly implemented, ~3 days of work
http://host:654/ROOT/Cmd/Reset/exe.cmd?par1=10 provide command interface via http protocol any user-defined commands with extra parameters user authentication with standard http methods
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 11
More than web interface One can use http protocol to communicate with any running
ROOT application
From any script:
wget http://host:654/ROOT/obj/fPar/get.txt
wget http://host:654/ROOT/obj/fPar/set.txt?value=1
For many cases no need for extra sockets and special protocols
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 12
Backup slides
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 13
Use case – HADES
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 14
TRB
TRB
TRB
TRB
TRB
TRB
TRB
TRB
TRB
TRB
Event builder
Event builder
Event builder
Event builder
hld files
hld
hld
hld
DABCstream HYDRA2
web browser
go4 gui
EvBld
Use case – HADES DABC as DAQ system
collects data from TRBs store HLD files deliver data to online analysis
Stream event source to connect DAQ HYDRA2 analysis gets data directly via socket
instead of temporary hld files THttpServer for analysis monitoring
no any change in HYDRA2 itself Monitor DAQ and analysis via same
interface28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 15
Use case – HADES
Online analysis Many processes in parallel
doing same events or different events Histograms collector (to be done)
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 16
Event builderDABC
streamEvBld
hld files
HYDRA2HYDRA2
HYDRA2HYDRA2
HYDRA2
Histogramscollector
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 17
Go4ExampleSimple in web browser
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 18
Use case – DAQ and slow-control middleware
DABC
MBS MBS EPICS
slow-control variables
ROOT onlineanalysis
http
go4 onlineanalysis
FESAbeam profiles
DABC
DAQ
status and log information
Use case – several DABC nodes
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 19
MBS
MBS
FESA
MBS
go4 onlineanalysis
EPICS
ROOTanalysis
ROOTanalysis
DABC
DABChttp
DABC
DABCMaster
http
socket
http
http
socket
socket
FastCGI
FastCGI
FastCGI
Apache
http
Preferable
Optional
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 20
Alternatives to web browser
DABChttp
socket
web browser
go4 gui withnative ROOT graphics
SOAP, JSON
console-based tools
DABC API
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 21
How it works – hierarchy request
wget http://lxg0538:8090/FESA/h.xml
<?xml version="1.0"?><dabc version="2" xmlns:dabc="http://dabc.gsi.de/xhtml" path="/FESA/"><FESA> <Monitor dabc:producer="dabc://lxg0538:1237/fesa_monitor"> <GetMeasVoltage dabc:history="100"/> <GetMeasCurrent dabc:history="100"/> <GetMeasWeight dabc:history="100"/> </Monitor> <Test dabc:producer="dabc://lxg0538:1237/fesa"> <BeamProfile dabc:hash="74647" dabc:kind="FESA.2D"/> <BeamRate dabc:kind="rate"/> <BeamRate2 dabc:history="100" dabc:kind="rate"/> <TestRate dabc:history="100" dabc:kind="rate"/> <StreamerInfo dabc:hash="32" dabc:kind="ROOT.TList"/> <BeamRoot dabc:hash="7464700" dabc:kind="ROOT.TH2I" dabc:master="StreamerInfo"/> <ImageRoot dabc:kind="image.png"/> </Test></FESA></dabc>
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 22
How it works – item requestwget http://lxg0538:8090/FESA/Test/TestRate/get.xml
<Reply xmlns:dabc="http://dabc.gsi.de/xhtml" itemname="/FESA/Test/TestRate" dabc:version="75177">
<get dabc:history="100" dabc:kind="rate" time="2013-09-20T12:12:43.874Z" value="96.00"/>
</Reply>
server item request
28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 23
How it works – history request
wget http://lxg0538:8090/FESA/Test/TestRate/get.xml?history=20
<Reply xmlns:dabc="http://dabc.gsi.de/xhtml" itemname="/FESA/Test/TestRate" dabc:version="75713"><get dabc:history="100" dabc:kind="rate" time="2013-09-20T12:21:39.935Z" value="32.00"> <history gap="true"> <h time="2013-09-20T12:21:19.933Z" value="112.00"/> <h time="2013-09-20T12:21:20.933Z" value="112.01"/> <h time="2013-09-20T12:21:21.933Z" value="112.02"/> <h time="2013-09-20T12:21:22.933Z" value="112.03"/> <h time="2013-09-20T12:21:23.933Z" value="116.00"/> <h time="2013-09-20T12:21:24.933Z" value="116.01"/> <h time="2013-09-20T12:21:25.933Z" value="116.02"/> <h time="2013-09-20T12:21:26.933Z" value="116.03"/> <h time="2013-09-20T12:21:27.934Z" value="20.00"/> <h time="2013-09-20T12:21:28.934Z" value="20.01"/> <h time="2013-09-20T12:21:29.934Z" value="20.02"/> <h time="2013-09-20T12:21:30.934Z" value="20.03"/> <h time="2013-09-20T12:21:31.934Z" value="24.00"/> <h time="2013-09-20T12:21:32.934Z" value="24.01"/> <h time="2013-09-20T12:21:33.934Z" value="24.02"/> <h time="2013-09-20T12:21:34.934Z" value="24.03"/> <h time="2013-09-20T12:21:35.935Z" value="28.00"/> <h time="2013-09-20T12:21:36.935Z" value="28.01"/> <h time="2013-09-20T12:21:37.935Z" value="28.02"/> <h time="2013-09-20T12:21:38.935Z" value="28.03"/> </history></get></Reply>