THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI - - PowerPoint PPT Presentation

thttpserver for root
SMART_READER_LITE
LIVE PREVIEW

THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI - - PowerPoint PPT Presentation

THttpServer for ROOT Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt 28.02.2014 JSRootIO Written on JavaScript, works in all major browsers IE, Firefox, Opera, Safari, Android, Allows to draw many kinds of ROOT objects


slide-1
SLIDE 1

THttpServer for ROOT

Bertrand Bellenot, CERN Sergey Linev, GSI Darmstadt

28.02.2014

slide-2
SLIDE 2

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

slide-3
SLIDE 3

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

slide-4
SLIDE 4

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.C root [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

slide-5
SLIDE 5

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

hsimple.C in web browser

slide-6
SLIDE 6

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

slide-7
SLIDE 7

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

slide-8
SLIDE 8

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

ROOT

http FastCGI

Apache http

slide-9
SLIDE 9

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

slide-10
SLIDE 10

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

slide-11
SLIDE 11

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

  • ne 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

slide-12
SLIDE 12

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

slide-13
SLIDE 13

Backup slides

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

slide-14
SLIDE 14

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

DABC

stream

HYDRA2

web browser go4 gui

EvBld

slide-15
SLIDE 15

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

interface

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

slide-16
SLIDE 16

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 builder

DABC

stream EvBld

hld files

HYDRA2 HYDRA2 HYDRA2 HYDRA2 HYDRA2 Histograms collector

slide-17
SLIDE 17

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

Go4ExampleSimple in web browser

slide-18
SLIDE 18

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 online analysis

http

go4 online analysis

FESA

beam profiles

DABC

DAQ status and log information

slide-19
SLIDE 19

Use case – several DABC nodes

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

MBS MBS FESA MBS

go4 online analysis

EPICS

ROOT analysis ROOT analysis

DABC DABC

http

DABC DABC Master http

socket http http socket socket FastCGI FastCGI FastCGI

Apache http

Preferable Optional

slide-20
SLIDE 20

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

Alternatives to web browser

DABC http

socket

web browser go4 gui with native ROOT graphics SOAP, JSON console-based tools DABC API

slide-21
SLIDE 21

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>

slide-22
SLIDE 22

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

How it works – item request

wget 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

slide-23
SLIDE 23

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>