23
THttpServer for ROOT Bertrand Bellenot , CERN Sergey Linev, GSI Darmstadt 28.02.2014

THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

Embed Size (px)

Citation preview

Page 1: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

THttpServer for ROOT

Bertrand Bellenot, CERNSergey Linev, GSI Darmstadt

28.02.2014

Page 2: THttpServer for ROOT Bertrand Bellenot, CERN Sergey 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

Page 3: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 4: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 5: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 5

hsimple.C in web browser

Page 6: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 7: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 8: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 9: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 10: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 11: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 12: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 13: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

Backup slides

28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 13

Page 14: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 15: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 16: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 17: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

28.02.2014 B.Bellenot, S.Linev, THttpServer for ROOT 17

Go4ExampleSimple in web browser

Page 18: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 19: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 20: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 21: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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>

Page 22: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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

Page 23: THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014

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>