22#include "TBufferFile.h"
33#include <QElapsedTimer>
34#include <QApplication>
36#include <QInputDialog>
55 QByteArray res =
fHReply->readAll();
64 printf(
"QHttpProxy::httpHReqError %d %s\n", code,
fHReply ?
fHReply->errorString().toLatin1().constData() :
"---");
93#if QT_VERSION < QT_VERSION_CHECK(5,15,0)
99 QObject::connect(
fHReply, &QNetworkReply::sslErrors, [
this](
const QList<QSslError> &errors) {
fHReply->ignoreSslErrors(errors); });
101 QSslConfiguration cfg =
fHReply->sslConfiguration();
102 cfg.setProtocol(QSsl::AnyProtocol);
103 fHReply->setSslConfiguration(cfg);
108 if (
fProxy->fUserName.Length()>0) {
109 auth->setUser(
fProxy->fUserName.Data());
110 auth->setPassword(
fProxy->fPassword.Data());
116 QInputDialog::getText(
nullptr, tr(
"Authentication required"),
117 tr(
"User name:"), QLineEdit::Normal,
121 QInputDialog::getText(
nullptr, tr(
"Authentication required"),
122 tr(
"User password:"), QLineEdit::Password,
126 fProxy->fUserName = user_name.toLatin1().constData();
127 fProxy->fPassword = passwd.toLatin1().constData();
129 auth->setUser(user_name);
130 auth->setPassword(passwd);
135 if (!kind || (*kind == 0))
return nullptr;
136 if (strncmp(kind,
"ROOT.", 5) != 0)
return nullptr;
137 if (strcmp(kind+5,
"TGo4AnalysisWebStatus") == 0)
138 return "TGo4AnalysisStatus";
157 const char *_name =
fProxy->fXML->GetAttr(
fNode,
"_realname");
158 if (!_name) _name =
fProxy->fXML->GetAttr(
fNode,
"_name");
163 const char *_kind =
fProxy->fXML->GetAttr(
fNode,
"_kind");
170 if (
fKind==3)
return TGraph::Class();
171 if (
fKind==4)
return gROOT->GetClass(
"TGo4ParameterStatus");
172 if (
fKind==5)
return gROOT->GetClass(
"TTree");
173 if (
fKind==6)
return gROOT->GetClass(
"TGo4AnalysisStatus");
174 if (
fKind==7)
return gROOT->GetClass(
"TList");
175 if (
fKind==8)
return gROOT->GetClass(
"TGo4HistogramStatus");
186 if (
fKind==3)
return "TGraph";
187 if (
fKind==4)
return "TGo4ParameterStatus";
188 if (
fKind==6)
return "TGo4AnalysisStatus";
189 if (
fKind==7)
return "TList";
190 if (
fKind==8)
return "TGo4HistogramStatus";
194 return clname ? clname :
"TObject";
203 printf(
"TGo4HttpAccess fail to get class %s for object %s\n",
GetObjectClassName(), path);
207 if (obj_cl->GetBaseClassOffset(TObject::Class()) != 0) {
208 printf(
"TGo4HttpAccess cannot used class %s not derived from TObject\n",
GetObjectClassName());
215 TString url =
fProxy->fNodeName;
219 case 0: url.Append(
"/h.xml?compact");
break;
220 case 1: url.Append(
"/root.bin.gz");
break;
221 case 2: url.Append(
"/get.xml");
break;
222 case 3: url.Append(
"/get.xml.gz?history=100&compact");
break;
223 case 4: url.Append(
"/exe.bin.gz?method=CreateStatus&_destroy_result_");
break;
224 case 5: url.Append(
"/exe.bin.gz?method=CreateSampleTree&sample=0&_destroy_result_");
break;
225 case 6: url.Append(
"/exe.bin.gz?method=CreateStatus&_destroy_result_");
break;
226 case 7: url.Append(
"/exe.bin.gz?method=Select&max=10000");
break;
227 case 8: url.Form(
"%s/Control/go4_sniffer/exe.bin.gz?method=CreateItemStatus&_destroy_result_&itemname=\"%s\"",
fProxy->fNodeName.Data(),
fUrlPath.Data());
break;
228 default: url.Append(
"/root.bin.gz");
break;
232 if (url.Index(
"?") != kNPOS) url.Append(
"&");
else url.Append(
"?");
236 fReply =
fProxy->fComm.qnam.get(QNetworkRequest(QUrl(url.Data())));
239#if QT_VERSION < QT_VERSION_CHECK(5,15,0)
246 printf(
"TGo4HttpAccess::AssignObjectTo Request URL %s\n", url.Data());
259 QByteArray res =
fReply->readAll();
264 printf(
"TGo4HttpAccess::httpFinished Get reply size %ld\n", (
long) res.size());
267 if (
fUrlPath ==
"Status/Ratemeter") {
268 Bool_t conn = res.size() > 0;
271 if (!conn &&
fProxy->CheckShutdown())
return;
274 if (
fProxy->fConnected != conn)
fProxy->UpdateHierarchy(kFALSE);
276 fProxy->fConnected = conn;
280 if (res.size() == 0) {
282 printf(
"TGo4HttpAccess::httpFinished error with %s\n",
fUrlPath.Data());
288 TXMLEngine *xml =
fProxy->fXML;
290 XMLDocPointer_t doc = xml->ParseString(res.data());
294 XMLNodePointer_t top = xml->GetChild(xml->DocGetRootElement(doc));
296 xml->FreeAllAttr(
fNode);
298 XMLAttrPointer_t attr = xml->GetFirstAttr(top);
300 xml->NewAttr(
fNode,
nullptr, xml->GetAttrName(attr), xml->GetAttrValue(attr));
301 attr = xml->GetNextAttr(attr);
304 XMLNodePointer_t chld;
305 while ((chld = xml->GetChild(top)) !=
nullptr) {
306 xml->UnlinkNode(chld);
307 xml->AddChild(
fNode, chld);
316 TObject *obj =
nullptr;
319 TXMLEngine* xml =
fProxy->fXML;
321 XMLDocPointer_t doc = xml->ParseString(res.data());
324 XMLNodePointer_t top = xml->DocGetRootElement(doc);
326 const char *_kind = xml->GetAttr(top,
"_kind");
327 const char *_name = xml->GetAttr(top,
"_name");
328 const char *_title = xml->GetAttr(top,
"_title");
329 const char *xtitle = xml->GetAttr(top,
"xtitle");
330 const char *ytitle = xml->GetAttr(top,
"ytitle");
331 const char *xlabels = xml->GetAttr(top,
"xlabels");
332 const char *ylabels = xml->GetAttr(top,
"ylabels");
334 if (strcmp(_kind,
"ROOT.TH1D") == 0) {
335 Int_t nbins = xml->GetIntAttr(top,
"nbins");
336 Int_t left = TString(xml->GetAttr(top,
"left")).Atof();
337 Int_t right = TString(xml->GetAttr(top,
"right")).Atof();
338 TH1D* h1 =
new TH1D(_name, _title, nbins, left, right);
339 h1->SetDirectory(
nullptr);
340 const char *bins = xml->GetAttr(top,
"bins") + 1;
341 for (
int n =-3; n<nbins+2; n++) {
342 const char *separ = strpbrk(bins,
",]");
343 if (!separ) { printf(
"Error parsing histogram bins\n");
break; }
345 Double_t v = TString(bins, separ-bins).Atof();
346 h1->SetBinContent(n, v);
353 Int_t nbins1 = xml->GetIntAttr(top,
"nbins1");
354 Int_t left1 = TString(xml->GetAttr(top,
"left1")).Atof();
355 Int_t right1 = TString(xml->GetAttr(top,
"right1")).Atof();
356 Int_t nbins2 = xml->GetIntAttr(top,
"nbins2");
357 Int_t left2 = TString(xml->GetAttr(top,
"left2")).Atof();
358 Int_t right2 = TString(xml->GetAttr(top,
"right2")).Atof();
359 TH2D* h2 =
new TH2D(_name, _title, nbins1, left1, right1, nbins2, left2, right2);
360 h2->SetDirectory(
nullptr);
361 const char *bins = xml->GetAttr(top,
"bins") + 1;
362 for (
int n =-6; n<(nbins1+2)*(nbins2+2); n++) {
363 const char *separ = strpbrk(bins,
",]");
364 if (!separ) { printf(
"Error parsing histogram bins\n");
break; }
366 Double_t v = TString(bins, separ-bins).Atof();
367 h2->SetBinContent(n % (nbins1 + 2), n / (nbins1 + 2), v);
377 ((TH1 *)obj)->GetXaxis()->SetTitle(xtitle);
379 ((TH1 *)obj)->GetYaxis()->SetTitle(ytitle);
381 TObjArray *arr = TString(xlabels).Tokenize(
",");
382 for (
int n = 0; n <= (arr ? arr->GetLast() : -1); n++)
383 ((TH1 *)obj)->GetXaxis()->SetBinLabel(1 + n, arr->At(n)->GetName());
387 TObjArray *arr = TString(ylabels).Tokenize(
",");
388 for (
int n = 0; n <= (arr ? arr->GetLast() : -1); n++)
389 ((TH1 *)obj)->GetYaxis()->SetBinLabel(1 + n, arr->At(n)->GetName());
399 TXMLEngine* xml =
fProxy->fXML;
401 XMLDocPointer_t doc = xml->ParseString(res.data());
404 XMLNodePointer_t top = xml->DocGetRootElement(doc);
406 XMLNodePointer_t chld = top;
409 if (xml->GetAttr(chld,
"value") && xml->GetAttr(chld,
"time")) cnt++;
410 chld = (chld==top) ? xml->GetChild(top) : xml->GetNext(chld);
413 TGraph *gr =
new TGraph(cnt);
414 gr->SetName(xml->GetAttr(top,
"_name"));
415 gr->SetTitle(TString::Format(
"%s ratemeter", xml->GetAttr(top,
"_name")).Data());
420 const char *time = xml->GetAttr(chld,
"time");
421 const char *value = xml->GetAttr(chld,
"value");
423 QDateTime tm = QDateTime::fromString(time, Qt::ISODate);
424 gr->SetPoint(i, tm.toMSecsSinceEpoch()/1000, TString(value).Atof());
427 chld = (chld==top) ? xml->GetChild(top) : xml->GetNext(chld);
433 gr->GetXaxis()->SetTimeDisplay(1);
434 gr->GetXaxis()->SetTimeFormat(
"%H:%M:%S%F1970-01-01 00:00:00");
439 if (gDebug > 2) printf(
"TGo4HttpAccess::httpFinished Reconstruct object class %s\n", obj_cl ? obj_cl->GetName() :
"---");
441 if (!obj_cl || (obj_cl->GetBaseClassOffset(TObject::Class()) != 0))
return;
443 obj = (TObject *) obj_cl->New();
449 TBufferFile buf(TBuffer::kRead, res.size(), res.data(), kFALSE);
450 buf.MapObject(obj, obj_cl);
455 if (obj->IsA() == TGo4Ratemeter::Class())
459 fProxy->SetAnalysisReady(kTRUE);
497 if (!
fChild)
return kFALSE;
499 if (
fXML->HasAttr(
fChild,
"_hidden"))
continue;
514 if (strcmp(flagname,
"IsRemote") == 0)
return 1;
516 if (strcmp(flagname,
"IsDeleteProtect") == 0)
517 return fXML->HasAttr(
fChild,
"_can_delete") ? 0 : 1;
519 if (strcmp(flagname,
"IsResetProtect") == 0)
520 return fXML->HasAttr(
fChild,
"_no_reset") ? 1 : 0;
522 if (strcmp(flagname,
"_numargs") == 0) {
523 const char *_numargs =
fXML->GetAttr(
fChild,
"_numargs");
524 return !_numargs ? -1 : TString(_numargs).Atoi();
540 const char *real =
fXML->GetAttr(
fChild,
"_realname");
541 return real? real :
fXML->GetAttr(
fChild,
"_name");
555 const char *_kind =
fXML->GetAttr(
fChild,
"_kind");
558 const char *drawfunc =
fXML->GetAttr(
fChild,
"_drawfunc");
572 const char *_kind =
fXML->GetAttr(
fChild,
"_kind");
575 if (_kind && !strcmp(_kind,
"rate") &&
fXML->HasAttr(
fChild,
"_history"))
return "TGraph";
576 return isfolder() ?
"TFolder" :
nullptr;
596 fXML =
new TXMLEngine;
642 if (!curr || !name || !*name)
return curr;
644 const char *slash = strchr(name,
'/');
645 bool doagain =
false;
648 size_t len = !slash ? strlen(name) : (slash - name);
650 XMLNodePointer_t chld =
fXML->GetChild(curr);
652 const char *_name =
fXML->GetAttr(chld,
"_realname");
653 if (!_name) _name =
fXML->GetAttr(chld,
"_name");
655 if (_name && (strlen(_name) == len) && (strncmp(_name, name, len) == 0))
656 return FindItem(slash ? slash+1 :
nullptr, chld);
658 chld =
fXML->GetNext(chld);
662 doagain = slash !=
nullptr;
663 if (slash) slash = strchr(slash+1,
'/');
672 if (!item)
return TString(
"");
678 while (item != root) {
679 const char *_name =
fXML->GetAttr(item,
"_name");
680 if (!_name)
return TString(
"");
682 res = TString(_name) +
"/" + res;
686 item =
fXML->GetParent(item);
687 if (!item)
return TString(
"");
696 if (res.size() == 0)
return;
697 XMLDocPointer_t doc =
fXML->ParseString(res.data());
716 const char *analname =
fXML->GetAttr(
FindItem(
""),
"_analysis_name");
742 if (
fComm.fHReply)
return kTRUE;
744 TString req =
fNodeName +
"/h.xml?compact";
746 fComm.StartRequest(req.Data());
748 if (!sync)
return kTRUE;
754 while (t.elapsed() < 5000) {
755 if (!
fComm.fHReply)
break;
756 QApplication::processEvents();
769 XMLNodePointer_t item =
FindItem(name);
771 if (!item)
return nullptr;
773 const char *_kind =
fXML->GetAttr(item,
"_kind");
777 if (!strcmp(_kind,
"rate") &&
fXML->HasAttr(item,
"_history"))
779 else if (
fXML->HasAttr(item,
"_dabc_hist"))
781 else if (
fXML->HasAttr(item,
"_more"))
784 return std::make_unique<TGo4HttpAccess>(
this, item, kind);
822 return fXML->HasAttr(
FindItem(
""),
"_has_produce_multi");
828 XMLNodePointer_t item =
FindItem(
"");
829 if (!item)
return kFALSE;
831 const char *_kind =
fXML->GetAttr(item,
"_kind");
832 const char *_title =
fXML->GetAttr(item,
"_title");
834 if (!_kind || !_title)
return kFALSE;
836 return !strcmp(_kind,
"ROOT.Session") && !strcmp(_title,
"GO4 analysis");
841 XMLNodePointer_t item =
FindItem(
"");
842 if (!item)
return dflt;
844 const char *username =
fXML->GetAttr(item,
"_username");
845 if (!username)
return dflt;
847 return strcmp(username, expects) == 0;
884 PostObject(
"Control/Analysis/exe.bin?method=ApplyStatus&status", status, 2);
902 TString foldername, objectname;
905 objectname = TString(
"\"") + objectname + TString(
"\"");
907 SubmitCommand(
"Control/CmdClearObject", -1, objectname.Data());
912 TString foldername, objectname;
915 objectname = TString(
"\"") + objectname + TString(
"\"");
917 SubmitCommand(
"Control/CmdDeleteObject", -1, objectname.Data());
924 SubmitURL(TString::Format(
"Control/Analysis/exe.json?method=ExecuteLine&cmd=\"%s\"", line));
950 if (gDebug > 1) printf(
"Submit URL %s\n", url.Data());
952 QNetworkReply *netReply =
fComm.qnam.get(QNetworkRequest(QUrl(url.Data())));
954 QSslConfiguration cfg = netReply->sslConfiguration();
955 cfg.setProtocol(QSsl::AnyProtocol);
956 netReply->setSslConfiguration(cfg);
959 QObject::connect(netReply, &QNetworkReply::finished, netReply, &QNetworkReply::deleteLater);
964 QElapsedTimer myTimer;
966 while (!netReply->isFinished()) {
967 loop.processEvents(QEventLoop::AllEvents,100);
968 if (myTimer.elapsed() > waitres*1000)
break;
971 netReply->deleteLater();
972 return netReply->isFinished();
984 while (iter.
next()) {
985 if (iter.
getflag(
"_numargs") < 0)
continue;
994 XMLNodePointer_t item =
FindItem(name);
995 if (!item)
return -1;
997 const char *_numargs =
fXML->GetAttr(item,
"_numargs");
998 if (!_numargs)
return 0;
1000 return TString(_numargs).Atoi();
1006 url.Append(
"/cmd.json");
1007 if (arg1 && *arg1) {
1008 url.Append(
"?arg1=");
1010 if (arg2 && *arg2) {
1011 url.Append(
"&arg2=");
1013 if (arg3 && *arg3) {
1014 url.Append(
"&arg3=");
1027 TBufferFile *sbuf =
new TBufferFile(TBuffer::kWrite, 100000);
1028 sbuf->MapObject(obj);
1029 obj->Streamer(*sbuf);
1031 QByteArray postData;
1032 postData.append(sbuf->Buffer(), sbuf->Length());
1039 url.Append(
"=_post_object_&");
1040 if (destroy_after) url.Append(
"_destroy_post_&");
1041 url.Append(
"_post_class_=");
1042 url.Append(obj->ClassName());
1046 QNetworkRequest req(QUrl(url.Data()));
1048 QNetworkReply *netReply =
fComm.qnam.post(req, postData);
1050 QSslConfiguration cfg = netReply->sslConfiguration();
1051 cfg.setProtocol(QSsl::AnyProtocol);
1052 netReply->setSslConfiguration(cfg);
1055 QObject::connect(netReply, &QNetworkReply::finished, netReply, &QNetworkReply::deleteLater);
1060 QElapsedTimer myTimer;
1062 while (!netReply->isFinished()) {
1063 loop.processEvents(QEventLoop::AllEvents,100);
1064 if (myTimer.elapsed() > waitres*1000)
break;
1067 netReply->deleteLater();
1068 return netReply->isFinished();
1076 Bool_t destr = kTRUE;
1078 if (*objectname == 0) {
1079 url.Append(
"Control/go4_sniffer/exe.bin?method=AddAnalysisObject&obj");
1082 url.Append(objectname);
1083 url.Append(
"/exe.bin?method=");
1085 if (obj->InheritsFrom(TGo4Condition::Class())) {
1086 url.Append(
"UpdateFrom&counts=kFALSE&cond");
1088 url.Append(
"SetStatus&status");
1092 return PostObject(url.Data(), obj, 2, destr);
1110 if (res.size() <= 0) {
1127 printf(
"TGo4HttpProxy:: get reply on multi.bin request with %ld bytes\n", (
long) res.size());
1131 for (
int n = 0; n < 3; n++) {
1132 unsigned char *ptr = (
unsigned char *)res.data() + pos;
1133 unsigned len = ((unsigned) ptr[0]) |
1134 (((
unsigned) ptr[1]) << 8) |
1135 (((unsigned) ptr[2]) << 16) |
1136 (((
unsigned) ptr[3]) << 24);
1140 if (len > (
unsigned) res.size()) {
1141 printf(
"Error decoding multi.bin buffer\n");
1145 if (gDebug>2) printf(
"Decoding portion of %d bytes\n", len);
1147 TClass *obj_cl = n == 0 ? TGo4Ratemeter::Class() : TList::Class();
1148 TObject *obj = (TObject*) obj_cl->New();
1150 TBufferFile buf(TBuffer::kRead, len, ptr, kFALSE);
1151 buf.MapObject(obj, obj_cl);
1157 TList *curr = subslot ?
dynamic_cast<TList *
> (subslot->
GetAssignedObject()) :
nullptr;
1158 TList *next =
dynamic_cast<TList *
> (obj);
1159 if (curr && curr->First() && next && next->First()) {
1160 if (strcmp(curr->First()->GetName(), next->First()->GetName()) == 0) {
1183 if (pos != res.size())
1184 printf(
"Decoding fails %d != %ld bytes\n", pos, (
long) res.size());
1194 req.Append(
"Ratemeter/root.bin\n");
1196 req.Append(
"Msg/exe.bin?method=Select&max=10000");
1198 TList *curr = subslot ?
dynamic_cast<TList *
> (subslot->
GetAssignedObject()) :
nullptr;
1199 if (curr && curr->First()) {
1201 req.Append(curr->First()->GetName());
1206 req.Append(
"Log/exe.bin?method=Select&max=10000");
1208 curr = subslot ?
dynamic_cast<TList *
> (subslot->
GetAssignedObject()) :
nullptr;
1209 if (curr && curr->First()) {
1211 req.Append(curr->First()->GetName());
1216 QByteArray postData;
1217 postData.append(req.Data(), req.Length());
1218 if (gDebug>2) printf(
"Sending multi.bin request\n%s", req.Data());
1221 url.Append(
"/Status/multi.bin.gz?number=3");
1223 fRegularReq =
fComm.qnam.post(QNetworkRequest(QUrl(url.Data())), postData);
1225 QSslConfiguration cfg =
fRegularReq->sslConfiguration();
1226 cfg.setProtocol(QSsl::AnyProtocol);
1268 if (curr && curr->First()) {
1270 arg += curr->First()->GetName();
1282 if (curr && curr->First()) {
1284 arg += curr->First()->GetName();
1294 const char *cutcond,
1297 TString tfoldername, tobjectname;
1300 TString hfoldername, hobjectname;
1304 path.Form(
"Control/go4_sniffer/exe.json?method=RemoteTreeDraw&histoname=\"%s\"&treename=\"%s\"&varexpr=\"%s\"&cutexpr=\"%s\"",
1305 hobjectname.Data(), tobjectname.Data(), varexp, cutcond);
1312 if (!itemname || !tgtslot)
return nullptr;
1314 XMLNodePointer_t item =
FindItem(itemname);
1315 if (!item)
return nullptr;
1319 const char *_objkind =
fXML->GetAttr(item,
"_kind");
1320 if (_objkind && ((strstr(_objkind,
"ROOT.TH1") == _objkind) || (strstr(_objkind,
"ROOT.TH2") == _objkind) ||
1321 (strstr(_objkind,
"ROOT.TH3") == _objkind)))
1336 TString url = evname;
1337 url.Append(
"/exe.bin?method=");
1338 url.Append(astree ?
"ShowSampleTree" :
"PrintEvent");
1354 url.Form(
"Events/%s/exe.bin?method=SetPrintEvent&num=%d&sid=%d&longw=%d&hexw=%d&dataw=%d",
1355 evname, evnumber, subid, islong ? 1 : 0, ishex ? 1 : 0, ishex ? 0 : 1);
1361 unsigned reset_bits = 0, set_bits = 0;
1363 TString opt = flags;
1369 TString url(fullpath);
1370 url.Append(
"/exe.bin?method=");
1372 if (reset_bits != 0)
SubmitURL(url + TString::Format(
"ResetBit&f=%u",reset_bits));
1373 if (set_bits != 0)
SubmitURL(url + TString::Format(
"SetBit&f=%u&prototype=UInt_t",set_bits));
1378 SubmitURL(TString(fullpath)+
"/exe.bin?method=Print");
1383 SubmitURL(TString::Format(
"Control/Analysis/exe.bin?method=LoadStatus&fname=%s", fname));
1388 SubmitURL(TString::Format(
"Control/Analysis/exe.bin?method=SaveStatus&fname=%s", fname));
1395 SubmitURL(TString::Format(
"Control/Analysis/exe.bin?method=WriteAutoSave&fname=%s&overwrite=%s&complevel=%d", fname, overwrite ?
"kTRUE" :
"kFALSE", complevel));
const char * GetHttpRootClassName(const char *kind)
void httpHReqError(QNetworkReply::NetworkError)
TGo4HttpProxy * fProxy
used only to receive hierarchy
void authenticationRequiredSlot(QNetworkReply *, QAuthenticator *)
QHttpProxy(TGo4HttpProxy *p)
friend class TGo4HttpProxy
void StartRequest(const char *url)
void regularRequestFinished()
QNetworkReply * fHReply
central manager of network requests
QNetworkAccessManager qnam
void DoObjectAssignement(TGo4ObjectManager *rcv, const char *path, TObject *obj, Bool_t owner)
Int_t AssignObjectToSlot(TGo4Slot *slot)
Made for convenience - extracts OM and slot path and calls AssignObjectTo method.
Status of the analysis instance.
TGo4ObjectManager * fReceiver
TGo4HttpAccess(TGo4HttpProxy *proxy, XMLNodePointer_t node, Int_t kind=1, const char *extra_arg=nullptr)
Int_t AssignObjectTo(TGo4ObjectManager *rcv, const char *path) override
Have to assign object to provided receiver.
TClass * GetObjectClass() const override
const char * GetObjectClassName() const override
void httpError(QNetworkReply::NetworkError)
const char * GetObjectName() const override
TGo4HttpLevelIter(TXMLEngine *xml, XMLNodePointer_t item)
const char * info() override
Bool_t isfolder() override
TGo4LevelIter * subiterator() override
Int_t sizeinfo() override
const char * GetClassName() override
const char * name() override
virtual ~TGo4HttpLevelIter()
Int_t getflag(const char *flagname) override
TGo4Slot * getslot() override
Here Go4/ROOT-specific functionality of HttpProxy.
TGo4LevelIter * MakeIter() override
Int_t fShutdownCnt
multiple request for rate, log and messages
XMLDocPointer_t fxHierarchy
Bool_t DelayedRefreshNamesList(Int_t delay_sec) override
QHttpProxy fComm
pointer on dabc::Hierarchy class
friend class TGo4HttpAccess
void PrintDynListEntry(const char *fullpath) override
void RemoteTreeDraw(const char *treename, const char *varexp, const char *cutcond, const char *hname) override
Bool_t SubmitCommand(const char *name, Int_t waitres=-1, const char *arg1=nullptr, const char *arg2=nullptr, const char *arg3=nullptr) override
XMLNodePointer_t FindItem(const char *name, XMLNodePointer_t curr=nullptr) const
void ProcessUpdateTimer()
Bool_t CheckUserName(const char *expects, Bool_t dflt=kFALSE) const
void StartAnalysis() override
Bool_t IsAdministrator() const override
void RemotePrintEvent(const char *evname, Int_t evnumber, Int_t subid, Bool_t ishex, Bool_t islong) override
Bool_t UpdateAnalysisObject(const char *objectname, TObject *obj) override
void ReadData(TGo4Slot *slot, TDirectory *dir) override
Bool_t IsConnected() const override
Bool_t ServerHasRestrict() const
Bool_t RequestObjectStatus(const char *objectname, TGo4Slot *tgtslot) override
void SetAccount(const char *username, const char *passwd)
void SubmitAnalysisSettings() override
void Update(TGo4Slot *slot, Bool_t strong) override
Int_t NumCommandArgs(const char *name) override
void DisconnectAnalysis(Int_t waittime=30, Bool_t servershutdown=kFALSE) override
Close connection to analysis and destroys proxy with correspondent slot.
TGo4HttpAccess * SubmitRequest(const char *itemname, Int_t kind, TGo4Slot *tgtslot, const char *extra_arg=nullptr)
Int_t fStatusCnt
counter for ratemeter updates
TString fPassword
user name and password -
void ResetDebugOutputRequests() override
Bool_t UpdateHierarchy(Bool_t sync=kTRUE)
TString MakeUrlPath(XMLNodePointer_t item)
void ProcessRegularMultiRequest(Bool_t finished=kFALSE)
void StopAnalysis() override
Bool_t IsGo4Analysis() const override
void ClearAllAnalysisObjects() override
void GetHReply(QByteArray &res)
counter during shutdown
void ExecuteLine(const char *line) override
std::unique_ptr< TGo4Access > ProvideAccess(const char *name) override
void SaveConfigFile(const char *fname) override
void WriteAutoSave(const char *fname, Int_t complevel, Bool_t overwrite) override
void RequestAnalysisSettings() override
Bool_t SubmitURL(const char *path, Int_t waitres=-1)
Bool_t CanSubmitObjects() const override
Bool_t HasSublevels() const override
QNetworkReply * fRegularReq
true if connected
Bool_t IsViewer() const override
Bool_t PostObject(const char *prefix, TObject *obj, Int_t waitres=-1, Bool_t destroy_after=kTRUE)
const char * GetContainedObjectInfo() override
void ClearAnalysisObject(const char *fullpath) override
Bool_t CheckShutdown(Bool_t force=kFALSE)
void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs) override
void RemoveObjectFromAnalysis(const char *fullpath) override
void Initialize(TGo4Slot *slot) override
Bool_t fbAnalysisRunning
counter for debug output updates
void RequestEventStatus(const char *evname, Bool_t astree, TGo4Slot *tgtslot) override
const char * GetUserName() const override
void LoadConfigFile(const char *fname) override
Bool_t RefreshNamesList() override
Int_t fDebugCnt
counter for status messages updates
TString FindCommand(const char *name) override
Bool_t NamesListReceived() const override
void ChageObjectProtection(const char *fullpath, const char *flags) override
void CloseAnalysisSettings() override
Bool_t Connect(const char *nodename)
Bool_t next(Bool_t goesinto=kTRUE)
const char * getfullname()
Int_t getflag(const char *flagname)
static TClass * GetClass(const char *classname, Bool_t load=kFALSE)
Class containing event counter and ratemeter services.
const char * GetContainedObjectInfo() override
TString fNodeName
0 - not launched, 1 - external shell, 2 - in qt shell
virtual const char * GetServerName() const
TString fInfoStr
name of remote node
TGo4ServerProxy()
contained object info
TGo4Slot * DebugOutputSlot()
TGo4Slot * RatemeterSlot()
void Initialize(TGo4Slot *slot) override
TGo4Slot * SettingsSlot()
void SetAnalysisSettingsReady(Bool_t on=kTRUE)
void SetProxy(TGo4Proxy *cont)
static void ProduceFolderAndName(const char *fullname, TString &foldername, TString &objectname)
Bool_t AssignObject(TObject *obj, Bool_t owner)
TObject * GetAssignedObject()
Int_t GetAssignCnt() const