1 / 23

THttpServer for ROOT

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 TH1, TH2, TH3, TProfile , TGraph , THStack , TCanvas

kenaz
Download Presentation

THttpServer for ROOT

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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 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 B.Bellenot, S.Linev, THttpServer for ROOT

  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 B.Bellenot, S.Linev, THttpServer for ROOT

  5. hsimple.C in web browser B.Bellenot, S.Linev, THttpServer for ROOT

  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 B.Bellenot, S.Linev, THttpServer for ROOT

  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 B.Bellenot, S.Linev, THttpServer for ROOT

  8. FastCGIsupport • 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 ROOT http FastCGI Apache http B.Bellenot, S.Linev, THttpServer for ROOT

  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/ B.Bellenot, S.Linev, THttpServer for ROOT

  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 B.Bellenot, S.Linev, THttpServer for ROOT

  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 • 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 B.Bellenot, S.Linev, THttpServer for ROOT

  12. More than web interface • One can use http protocol to communicate with any running ROOT application • From any script: wgethttp://host:654/ROOT/obj/fPar/get.txt wgethttp://host:654/ROOT/obj/fPar/set.txt?value=1 • For many cases no need for extra sockets and special protocols B.Bellenot, S.Linev, THttpServer for ROOT

  13. Backup slides B.Bellenot, S.Linev, THttpServer for ROOT

  14. Use case – HADES DABC TRB HYDRA2 Eventbuilder EvBld stream TRB hldfiles TRB Eventbuilder TRB hld TRB Eventbuilder hld TRB go4 gui TRB Eventbuilder hld TRB TRB TRB web browser B.Bellenot, S.Linev, THttpServer for ROOT

  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 B.Bellenot, S.Linev, THttpServer for ROOT

  16. Use case – HADES • Online analysis • Many processes in parallel • doing same events or different events • Histograms collector (to be done) Histograms collector HYDRA2 HYDRA2 DABC HYDRA2 Eventbuilder HYDRA2 EvBld stream HYDRA2 hldfiles B.Bellenot, S.Linev, THttpServer for ROOT

  17. Go4ExampleSimple in web browser B.Bellenot, S.Linev, THttpServer for ROOT

  18. Use case – DAQ and slow-control middleware ROOT online analysis go4 online analysis DABC beam profiles FESA http DAQ status and log information slow-control variables MBS MBS DABC EPICS B.Bellenot, S.Linev, THttpServer for ROOT

  19. Use case – several DABC nodes MBS DABC http socket MBS DABC Master FastCGI FESA http go4 onlineanalysis DABC socket http Preferable EPICS FastCGI Apache MBS DABC http ROOTanalysis socket http Optional FastCGI ROOTanalysis B.Bellenot, S.Linev, THttpServer for ROOT

  20. Alternatives to web browser web browser DABC SOAP, JSON DABC API http socket go4 gui withnative ROOT graphics console-based tools 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> B.Bellenot, S.Linev, THttpServer for ROOT

  22. How it works – item request wget http://lxg0538:8090/FESA/Test/TestRate/get.xml server item request <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> 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> B.Bellenot, S.Linev, THttpServer for ROOT

More Related