8 #include <sys/statfs.h>
16 #include "boost/lexical_cast.hpp"
29 #include "EventFilter/StorageManager/src/ConsumerWebPageHelper.icc"
31 #include "toolbox/net/Utils.h"
39 xdaq::ApplicationDescriptor* appDesc,
43 sharedResources_(sharedResources),
57 statReporter->getStateMachineMonitorCollection());
64 statReporter->getResourceMonitorCollection(),
65 statReporter->getThroughputMonitorCollection());
69 statReporter->getFragmentMonitorCollection());
87 statReporter->getStateMachineMonitorCollection());
111 statReporter->getStateMachineMonitorCollection());
113 addDOMforFiles(maker, body, statReporter->getFilesMonitorCollection());
127 std::string errorMsg;
151 statReporter->getStateMachineMonitorCollection());
154 statReporter->getDataSenderMonitorCollection());
159 statReporter->getDataSenderMonitorCollection());
171 const long long& uniqueRBID
180 std::ostringstream pageTitle;
181 pageTitle <<
"Resource Broker " << uniqueRBID <<
" Detail";
183 statReporter->getStateMachineMonitorCollection());
185 addResourceBrokerDetails(maker, body, uniqueRBID,
186 statReporter->getDataSenderMonitorCollection());
188 addOutputModuleStatistics(maker, body, uniqueRBID,
189 statReporter->getDataSenderMonitorCollection());
191 addFilterUnitList(maker, body, uniqueRBID,
192 statReporter->getDataSenderMonitorCollection());
194 addDOMforHyperLinks(maker, body);
210 statReporter->getStateMachineMonitorCollection());
231 statReporter->getStateMachineMonitorCollection());
245 const std::string& pageTitle,
249 std::string errorMsg;
268 std::string url = appDescriptor_->getContextDescriptor()->getURL()
269 +
"/" + appDescriptor_->getURN();
276 linkAttr[
"href" ] = url;
277 link = maker.
addNode(
"a", parent, linkAttr);
278 maker.
addText(link,
"Main web page");
282 linkAttr[
"href" ] = url +
"/storedData";
283 link = maker.
addNode(
"a", parent, linkAttr);
284 maker.
addText(link,
"Stored data web page");
288 linkAttr[
"href" ] = url +
"/rbsenderlist";
289 link = maker.
addNode(
"a", parent, linkAttr);
290 maker.
addText(link,
"RB Sender list web page");
294 linkAttr[
"href" ] = url +
"/fileStatistics";
295 link = maker.
addNode(
"a", parent, linkAttr);
296 maker.
addText(link,
"File Statistics web page");
300 linkAttr[
"href" ] = url +
"/consumerStatistics";
301 link = maker.
addNode(
"a", parent, linkAttr);
302 maker.
addText(link,
"Consumer Statistics");
306 linkAttr[
"href" ] = url +
"/dqmEventStatistics";
307 link = maker.
addNode(
"a", parent, linkAttr);
308 maker.
addText(link,
"DQM event processor statistics");
312 linkAttr[
"href" ] = url +
"/throughputStatistics";
313 link = maker.
addNode(
"a", parent, linkAttr);
314 maker.
addText(link,
"Throughput statistics");
334 halfWidthAttr[
"width" ] =
"50%";
341 addTableForResourceUsages(maker, tableDiv, rmcStats, poolUsageStats);
343 tableDiv = maker.
addNode(
"td", tableRow, halfWidthAttr);
344 addTableForDiskUsages(maker, tableDiv, rmcStats);
357 colspanAttr[
"colspan" ] =
"2";
362 maker.
addText(tableDiv,
"Resource Usage");
364 addRowsForMemoryUsage(maker, table, poolUsageStats);
365 addRowsForWorkers(maker, table, rmcStats);
366 addRowsForSataBeast(maker, table, rmcStats);
378 colspanAttr[
"colspan" ] =
"2";
381 tableLabelAttr[
"width" ] =
"54%";
384 tableValueAttr[
"width" ] =
"46%";
391 tableDiv = maker.
addNode(
"td", tableRow);
392 maker.
addText(tableDiv,
"Memory pool used (bytes)");
393 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
398 tableDiv = maker.
addNode(
"td", tableRow, colspanAttr);
399 maker.
addText(tableDiv,
"Memory pool pointer not yet available");
412 tableValueAttr[
"width" ] =
"46%";
417 maker.
addText(tableDiv,
"# CopyWorker");
418 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
422 tableRow = maker.
addNode(
"tr", table, rowAttr_);
423 tableDiv = maker.
addNode(
"td", tableRow);
424 maker.
addText(tableDiv,
"# InjectWorker");
425 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
438 tableValueAttr[
"width" ] =
"46%";
449 colspanAttr[
"colspan" ] =
"2";
451 tableRow = maker.
addNode(
"tr", table, warningAttr);
452 tableDiv = maker.
addNode(
"td", tableRow, colspanAttr);
453 maker.
addText(tableDiv,
"No SATA disks found");
459 tableRow = maker.
addNode(
"tr", table, warningAttr);
460 tableDiv = maker.
addNode(
"td", tableRow);
461 maker.
addText(tableDiv,
"SATA beast status");
462 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
476 colspanAttr[
"colspan" ] =
"2";
479 tableLabelAttr[
"width" ] =
"54%";
482 tableValueAttr[
"width" ] =
"46%";
489 maker.
addText(tableDiv,
"Disk Space Usage");
492 for (ResourceMonitorCollection::DiskUsageStatsPtrList::const_iterator
498 warningAttr[
"bgcolor" ] = alarmColors_.find( (*it)->alarmState )->second;
499 tableRow = maker.
addNode(
"tr", table, warningAttr);
500 tableDiv = maker.
addNode(
"td", tableRow);
501 maker.
addText(tableDiv, (*it)->pathName);
502 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
503 if ( (*it)->diskSize > 0 )
505 std::ostringstream tmpString;
506 tmpString << std::fixed << std::setprecision(0) <<
507 (*it)->relDiskUsage <<
"% (" <<
508 (*it)->absDiskUsage <<
" of " <<
509 (*it)->diskSize <<
" GB)";
510 maker.
addText(tableDiv, tmpString.str());
514 maker.
addText(tableDiv,
"not mounted");
531 colspanAttr[
"colspan" ] =
"4";
538 maker.
addText(tableDiv,
"Received I2O Frames");
541 tableRow = maker.
addNode(
"tr", table, rowAttr_);
542 tableDiv = maker.
addNode(
"th", tableRow);
543 maker.
addText(tableDiv,
"Parameter");
544 tableDiv = maker.
addNode(
"th", tableRow);
545 maker.
addText(tableDiv,
"Total");
546 tableDiv = maker.
addNode(
"th", tableRow);
547 maker.
addText(tableDiv,
"Events");
548 tableDiv = maker.
addNode(
"th", tableRow);
549 maker.
addText(tableDiv,
"DQM histos");
568 maker.
addText(tableDiv,
"Performance for full run");
570 maker.
addText(tableDiv,
"Recent performance for last");
572 addDurationToTableHead(maker, tableRow,
574 addDurationToTableHead(maker, tableRow,
576 addDurationToTableHead(maker, tableRow,
579 addRowForFramesReceived(maker, table, stats, dataSet);
580 addRowForBandwidth(maker, table, stats, dataSet);
581 addRowForRate(maker, table, stats, dataSet);
582 addRowForLatency(maker, table, stats, dataSet);
585 addRowForTotalVolume(maker, table, stats, dataSet);
589 addRowForMaxBandwidth(maker, table, stats, dataSet);
590 addRowForMinBandwidth(maker, table, stats, dataSet);
605 maker.
addText(tableDiv,
"Frames Received");
606 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
608 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
610 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
625 maker.
addText(tableDiv,
"Bandwidth (MB/s)");
626 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
628 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
630 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
645 maker.
addText(tableDiv,
"Rate (frames/s)");
646 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
648 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
650 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
665 maker.
addText(tableDiv,
"Latency (us/frame)");
666 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
668 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
670 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
685 maker.
addText(tableDiv,
"Total volume received (MB)");
686 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
688 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
690 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
705 maker.
addText(tableDiv,
"Maximum Bandwidth (MB/s)");
706 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
708 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
710 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
725 maker.
addText(tableDiv,
"Minimum Bandwidth (MB/s)");
726 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
728 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
730 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
756 colspanAttr[
"colspan" ] =
"6";
759 tableValueAttr[
"width" ] =
"16%";
765 maker.
addText(tableDiv,
"Storage Manager Statistics");
768 tableRow = maker.
addNode(
"tr", table, rowAttr_);
769 tableDiv = maker.
addNode(
"td", tableRow);
770 maker.
addText(tableDiv,
"Run number");
771 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
773 tableDiv = maker.
addNode(
"td", tableRow);
774 maker.
addText(tableDiv,
"Current lumi section");
775 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
777 tableDiv = maker.
addNode(
"td", tableRow);
778 maker.
addText(tableDiv,
"Last EoLS");
779 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
783 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
784 tableDiv = maker.
addNode(
"td", tableRow);
785 maker.
addText(tableDiv,
"Events received (non-unique)");
786 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
788 tableDiv = maker.
addNode(
"td", tableRow);
789 maker.
addText(tableDiv,
"Error events received");
790 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
792 tableDiv = maker.
addNode(
"td", tableRow);
793 maker.
addText(tableDiv,
"Unwanted events received");
794 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
798 tableRow = maker.
addNode(
"tr", table, rowAttr_);
799 tableDiv = maker.
addNode(
"td", tableRow);
800 maker.
addText(tableDiv,
"Last event ID");
801 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
803 tableDiv = maker.
addNode(
"td", tableRow);
804 maker.
addText(tableDiv,
"Last error event ID");
805 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
807 tableDiv = maker.
addNode(
"td", tableRow);
808 maker.
addText(tableDiv,
"Last unwanted event ID");
809 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
825 tableValueWidthAttr[
"width" ] =
"11%";
828 rowspanAttr[
"rowspan" ] =
"2";
829 rowspanAttr[
"valign" ] =
"top";
832 colspanAttr[
"colspan" ] =
"9";
835 bandwidthColspanAttr[
"colspan" ] =
"4";
841 maker.
addText(tableDiv,
"Stored Data Statistics");
844 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
845 tableDiv = maker.
addNode(
"th", tableRow, rowspanAttr);
846 maker.
addText(tableDiv,
"Stream");
847 tableDiv = maker.
addNode(
"th", tableRow, rowspanAttr);
848 maker.
addText(tableDiv,
"Fraction to disk");
849 tableDiv = maker.
addNode(
"th", tableRow, rowspanAttr);
850 maker.
addText(tableDiv,
"Files");
851 tableDiv = maker.
addNode(
"th", tableRow, rowspanAttr);
852 maker.
addText(tableDiv,
"Events");
853 tableDiv = maker.
addNode(
"th", tableRow, rowspanAttr);
854 maker.
addText(tableDiv,
"Events/s");
855 tableDiv = maker.
addNode(
"th", tableRow, rowspanAttr);
856 maker.
addText(tableDiv,
"Volume (MB)");
857 tableDiv = maker.
addNode(
"th", tableRow, bandwidthColspanAttr);
858 maker.
addText(tableDiv,
"Bandwidth (MB/s)");
860 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
861 tableDiv = maker.
addNode(
"th", tableRow, tableValueWidthAttr);
862 maker.
addText(tableDiv,
"average");
863 tableDiv = maker.
addNode(
"th", tableRow, tableValueWidthAttr);
864 maker.
addText(tableDiv,
"min");
865 tableDiv = maker.
addNode(
"th", tableRow, tableValueWidthAttr);
866 maker.
addText(tableDiv,
"max");
870 tableRow = maker.
addNode(
"tr", table, rowAttr_);
871 tableDiv = maker.
addNode(
"td", tableRow, colspanAttr);
872 maker.
addText(tableDiv,
"no streams available yet");
876 tableRow = maker.
addNode(
"tr", table, rowAttr_);
877 tableDiv = maker.
addNode(
"th", tableRow, colspanAttr);
879 std::ostringstream tmpString;
880 tmpString <<
"Mean performance for " <<
881 allStreamsVolumeStats.
getDuration().total_seconds() <<
" s";
882 maker.
addText(tableDiv, tmpString.str());
888 tableRow = maker.
addNode(
"tr", table, rowAttr_);
889 tableDiv = maker.
addNode(
"th", tableRow, colspanAttr);
891 std::ostringstream tmpString;
892 tmpString <<
"Recent performance for the last " <<
894 maker.
addText(tableDiv, tmpString.str());
910 maker.
addText(tableDiv,
"SM Configuration");
911 tableRow = maker.
addNode(
"tr", table, rowAttr_);
912 tableDiv = maker.
addNode(
"td", tableRow);
914 textareaAttr[
"rows" ] =
"10";
915 textareaAttr[
"cols" ] =
"100";
916 textareaAttr[
"scroll" ] =
"yes";
917 textareaAttr[
"readonly" ];
918 textareaAttr[
"title" ] =
"SM config";
944 tableValueAttr[
"width" ] =
"11%";
948 StreamsMonitorCollection::StreamRecordList::const_iterator
949 it = streamRecords.begin(), itEnd = streamRecords.end();
955 (*it)->fileCount.getStats(streamFileCountStats);
957 (*it)->volume.getStats(streamVolumeStats);
959 (*it)->bandwidth.getStats(streamBandwidthStats);
962 tableRow = maker.
addNode(
"tr", table, rowAttr_);
963 tableDiv = maker.
addNode(
"td", tableRow);
964 maker.
addText(tableDiv, (*it)->streamName);
965 tableDiv = maker.
addNode(
"td", tableRow);
966 maker.
addDouble(tableDiv, (*it)->fractionToDisk, 2);
967 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
969 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
971 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
973 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
975 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
977 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
979 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
983 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
984 tableDiv = maker.
addNode(
"td", tableRow);
985 maker.
addText(tableDiv,
"Total");
986 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
987 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
989 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
991 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
993 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
995 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
997 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
999 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1015 colspanAttr[
"colspan" ] =
"5";
1018 tableLabelAttr[
"align" ] =
"center";
1021 tableValueWidthAttr[
"width" ] =
"11%";
1024 tableCounterWidthAttr[
"width" ] =
"5%";
1030 maker.
addText(tableDiv,
"File Statistics (most recent first)");
1033 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
1034 tableDiv = maker.
addNode(
"th", tableRow, tableCounterWidthAttr);
1036 tableDiv = maker.
addNode(
"th", tableRow);
1037 maker.
addText(tableDiv,
"Pathname");
1038 tableDiv = maker.
addNode(
"th", tableRow, tableValueWidthAttr);
1039 maker.
addText(tableDiv,
"Events");
1040 tableDiv = maker.
addNode(
"th", tableRow, tableValueWidthAttr);
1041 maker.
addText(tableDiv,
"Size (Bytes)");
1042 tableDiv = maker.
addNode(
"th", tableRow, tableValueWidthAttr);
1043 maker.
addText(tableDiv,
"Closing reason");
1046 if (fileRecords.empty())
1048 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1049 tableDiv = maker.
addNode(
"td", tableRow, colspanAttr);
1050 maker.
addText(tableDiv,
"no files available yet");
1055 FilesMonitorCollection::FileRecordList::const_reverse_iterator
1056 it = fileRecords.rbegin(), itEnd = fileRecords.rend();
1061 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1062 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1063 maker.
addInt( tableDiv, (*it)->entryCounter );
1064 tableDiv = maker.
addNode(
"td", tableRow);
1065 maker.
addText(tableDiv, (*it)->completeFileName());
1066 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1067 maker.
addInt( tableDiv, (*it)->eventCount );
1068 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1069 maker.
addInt( tableDiv, (*it)->fileSize );
1070 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr);
1071 maker.
addText(tableDiv, (*it)->closingReason());
1084 colspanAttr[
"colspan" ] =
"21";
1090 maker.
addText(tableDiv,
"Throughput Statistics");
1093 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
1094 tableDiv = maker.
addNode(
"th", tableRow);
1095 maker.
addText(tableDiv,
"Time (UTC)");
1096 tableDiv = maker.
addNode(
"th", tableRow);
1097 maker.
addText(tableDiv,
"Memory pool usage (bytes)");
1098 tableDiv = maker.
addNode(
"th", tableRow);
1099 maker.
addText(tableDiv,
"Instantaneous Number of Fragments in Fragment Queue");
1100 tableDiv = maker.
addNode(
"th", tableRow);
1101 maker.
addText(tableDiv,
"Memory used in Fragment Queue (MB)");
1102 tableDiv = maker.
addNode(
"th", tableRow);
1103 maker.
addText(tableDiv,
"Number of Fragments Popped from Fragment Queue (Hz)");
1104 tableDiv = maker.
addNode(
"th", tableRow);
1105 maker.
addText(tableDiv,
"Data Rate Popped from Fragment Queue (MB/sec)");
1106 tableDiv = maker.
addNode(
"th", tableRow);
1107 maker.
addText(tableDiv,
"Fragment Processor Thread Busy Percentage");
1108 tableDiv = maker.
addNode(
"th", tableRow);
1109 maker.
addText(tableDiv,
"Instantaneous Number of Events in Fragment Store");
1110 tableDiv = maker.
addNode(
"th", tableRow);
1111 maker.
addText(tableDiv,
"Memory used in Fragment Store (MB)");
1112 tableDiv = maker.
addNode(
"th", tableRow);
1113 maker.
addText(tableDiv,
"Instantaneous Number of Events in Stream Queue");
1114 tableDiv = maker.
addNode(
"th", tableRow);
1115 maker.
addText(tableDiv,
"Memory used in Stream Queue (MB)");
1116 tableDiv = maker.
addNode(
"th", tableRow);
1117 maker.
addText(tableDiv,
"Number of Events Popped from Stream Queue (Hz)");
1118 tableDiv = maker.
addNode(
"th", tableRow);
1119 maker.
addText(tableDiv,
"Data Rate Popped from Stream Queue (MB/sec)");
1120 tableDiv = maker.
addNode(
"th", tableRow);
1121 maker.
addText(tableDiv,
"Disk Writer Thread Busy Percentage");
1122 tableDiv = maker.
addNode(
"th", tableRow);
1123 maker.
addText(tableDiv,
"Number of Events Written to Disk (Hz)");
1124 tableDiv = maker.
addNode(
"th", tableRow);
1125 maker.
addText(tableDiv,
"Data Rate to Disk (MB/sec)");
1126 tableDiv = maker.
addNode(
"th", tableRow);
1127 maker.
addText(tableDiv,
"Instantaneous Number of DQMEvents in DQMEvent Queue");
1128 tableDiv = maker.
addNode(
"th", tableRow);
1129 maker.
addText(tableDiv,
"Memory used in DQMEvent Queue (MB)");
1130 tableDiv = maker.
addNode(
"th", tableRow);
1131 maker.
addText(tableDiv,
"Number of DQMEvents Popped from DQMEvent Queue (Hz)");
1132 tableDiv = maker.
addNode(
"th", tableRow);
1133 maker.
addText(tableDiv,
"Data Rate Popped from DQMEvent Queue (MB/sec)");
1134 tableDiv = maker.
addNode(
"th", tableRow);
1135 maker.
addText(tableDiv,
"DQMEvent Processor Thread Busy Percentage");
1140 addRowForThroughputStatistics(maker, table, stats.
average,
true);
1142 for (ThroughputMonitorCollection::Stats::Snapshots::const_iterator
1148 addRowForThroughputStatistics(maker, table, (*it));
1151 addRowForThroughputStatistics(maker, table, stats.
average,
true);
1160 const bool isAverage
1169 tableValueAttr[
"style" ] =
"background-color: yellow;";
1170 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1171 std::ostringstream avg;
1172 avg <<
"<" << snapshot.
duration.total_seconds() <<
"s>";
1173 maker.
addText(tableDiv, avg.str());
1177 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1182 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1186 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1190 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1194 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1198 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1202 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1206 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1210 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1214 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1218 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1222 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1226 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1230 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1234 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1238 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1242 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1246 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1250 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1254 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1258 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr);
1273 addOutputModuleSummary(maker, parent, resultsList);
1274 addOutputModuleStatistics(maker, parent, resultsList);
1282 long long uniqueRBID,
1289 addOutputModuleStatistics(maker, parent, resultsList);
1301 colspanAttr[
"colspan" ] =
"7";
1307 maker.
addText(tableDiv,
"Received Data Statistics (by output module)");
1310 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
1311 tableDiv = maker.
addNode(
"th", tableRow);
1312 maker.
addText(tableDiv,
"Output Module");
1313 tableDiv = maker.
addNode(
"th", tableRow);
1314 maker.
addText(tableDiv,
"Events");
1315 tableDiv = maker.
addNode(
"th", tableRow);
1316 maker.
addText(tableDiv,
"Size (MB)");
1317 tableDiv = maker.
addNode(
"th", tableRow);
1318 maker.
addText(tableDiv,
"Size/Evt (KB)");
1319 tableDiv = maker.
addNode(
"th", tableRow);
1320 maker.
addText(tableDiv,
"RMS (KB)");
1321 tableDiv = maker.
addNode(
"th", tableRow);
1322 maker.
addText(tableDiv,
"Min (KB)");
1323 tableDiv = maker.
addNode(
"th", tableRow);
1324 maker.
addText(tableDiv,
"Max (KB)");
1326 if (resultsList.empty())
1329 messageAttr[
"align" ] =
"center";
1331 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1332 tableDiv = maker.
addNode(
"td", tableRow, messageAttr);
1333 maker.
addText(tableDiv,
"No output modules are available yet.");
1338 for (
unsigned int idx = 0; idx < resultsList.size(); ++idx)
1340 std::string outputModuleLabel = resultsList[idx]->name;
1342 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1343 tableDiv = maker.
addNode(
"td", tableRow);
1344 maker.
addText(tableDiv, outputModuleLabel);
1345 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1346 maker.
addInt( tableDiv, resultsList[idx]->eventStats.getSampleCount() );
1347 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1349 resultsList[idx]->eventStats.getValueSum()/(double)0x100000 );
1350 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1352 resultsList[idx]->eventStats.getValueAverage()/(double)0x400 );
1353 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1355 resultsList[idx]->eventStats.getValueRMS()/(double)0x400 );
1356 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1358 resultsList[idx]->eventStats.getValueMin()/(double)0x400 );
1359 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1361 resultsList[idx]->eventStats.getValueMax()/(double)0x400 );
1375 colspanAttr[
"colspan" ] =
"3";
1381 maker.
addText(tableDiv,
"Output Module Summary");
1384 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
1385 tableDiv = maker.
addNode(
"th", tableRow);
1386 maker.
addText(tableDiv,
"Name");
1387 tableDiv = maker.
addNode(
"th", tableRow);
1388 maker.
addText(tableDiv,
"ID");
1389 tableDiv = maker.
addNode(
"th", tableRow);
1390 maker.
addText(tableDiv,
"Header Size (bytes)");
1392 if (resultsList.empty())
1395 messageAttr[
"align" ] =
"center";
1397 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1398 tableDiv = maker.
addNode(
"td", tableRow, messageAttr);
1399 maker.
addText(tableDiv,
"No output modules are available yet.");
1404 for (
unsigned int idx = 0; idx < resultsList.size(); ++idx)
1406 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1407 tableDiv = maker.
addNode(
"td", tableRow);
1409 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1410 maker.
addInt( tableDiv, resultsList[idx]->
id );
1411 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1412 maker.
addInt( tableDiv, resultsList[idx]->initMsgSize );
1430 colspanAttr[
"colspan" ] =
"15";
1433 tableSuspiciousValueAttr[
"style" ] =
"background-color: yellow;";
1439 maker.
addText(tableDiv,
"Data Sender Overview");
1442 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
1443 tableDiv = maker.
addNode(
"th", tableRow);
1444 maker.
addText(tableDiv,
"Resource Broker URL");
1445 tableDiv = maker.
addNode(
"th", tableRow);
1446 maker.
addText(tableDiv,
"RB instance");
1447 tableDiv = maker.
addNode(
"th", tableRow);
1448 maker.
addText(tableDiv,
"RB TID");
1449 tableDiv = maker.
addNode(
"th", tableRow);
1450 maker.
addText(tableDiv,
"# of FUs");
1451 tableDiv = maker.
addNode(
"th", tableRow);
1452 maker.
addText(tableDiv,
"# of INIT messages");
1453 tableDiv = maker.
addNode(
"th", tableRow);
1454 maker.
addText(tableDiv,
"# of events");
1455 tableDiv = maker.
addNode(
"th", tableRow);
1456 maker.
addText(tableDiv,
"# of error events");
1457 tableDiv = maker.
addNode(
"th", tableRow);
1458 maker.
addText(tableDiv,
"# of faulty events");
1459 tableDiv = maker.
addNode(
"th", tableRow);
1460 maker.
addText(tableDiv,
"# of outstanding data discards");
1461 tableDiv = maker.
addNode(
"th", tableRow);
1462 maker.
addText(tableDiv,
"# of DQM events");
1463 tableDiv = maker.
addNode(
"th", tableRow);
1464 maker.
addText(tableDiv,
"# of faulty DQM events");
1465 tableDiv = maker.
addNode(
"th", tableRow);
1466 maker.
addText(tableDiv,
"# of outstanding DQM discards");
1467 tableDiv = maker.
addNode(
"th", tableRow);
1468 maker.
addText(tableDiv,
"# of ignored discards");
1469 tableDiv = maker.
addNode(
"th", tableRow);
1470 maker.
addText(tableDiv,
"Recent event rate (Hz)");
1471 tableDiv = maker.
addNode(
"th", tableRow);
1472 maker.
addText(tableDiv,
"Last event number received");
1474 if (rbResultsList.empty())
1477 messageAttr[
"align" ] =
"center";
1479 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1480 tableDiv = maker.
addNode(
"td", tableRow, messageAttr);
1481 maker.
addText(tableDiv,
"No data senders have registered yet.");
1486 for (
unsigned int idx = 0; idx < rbResultsList.size(); ++idx)
1488 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1490 tableDiv = maker.
addNode(
"td", tableRow);
1492 linkAttr[
"href" ] = baseURL() +
"/rbsenderdetail?id=" +
1493 boost::lexical_cast<std::string>(rbResultsList[idx]->uniqueRBID);
1495 maker.
addText(link, rbResultsList[idx]->
key.hltURL);
1497 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1498 maker.
addInt( tableDiv, rbResultsList[idx]->
key.hltInstance );
1499 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1500 maker.
addInt( tableDiv, rbResultsList[idx]->
key.hltTid );
1501 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1502 maker.
addInt( tableDiv, rbResultsList[idx]->filterUnitCount );
1503 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1504 maker.
addInt(tableDiv, rbResultsList[idx]->initMsgCount );
1505 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1506 maker.
addInt( tableDiv, rbResultsList[idx]->eventStats.getSampleCount() );
1507 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1508 maker.
addInt( tableDiv, rbResultsList[idx]->errorEventStats.getSampleCount() );
1510 if (rbResultsList[idx]->faultyEventStats.getSampleCount() != 0)
1512 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1516 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1518 maker.
addInt( tableDiv, rbResultsList[idx]->faultyEventStats.getSampleCount() );
1520 if (rbResultsList[idx]->outstandingDataDiscardCount != 0)
1522 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1526 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1528 maker.
addInt( tableDiv, rbResultsList[idx]->outstandingDataDiscardCount );
1530 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1531 maker.
addInt( tableDiv, rbResultsList[idx]->dqmEventStats.getSampleCount() );
1533 if (rbResultsList[idx]->faultyDQMEventStats.getSampleCount() != 0)
1535 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1539 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1541 maker.
addInt( tableDiv, rbResultsList[idx]->faultyDQMEventStats.getSampleCount() );
1543 if (rbResultsList[idx]->outstandingDQMDiscardCount != 0)
1545 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1549 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1551 maker.
addInt( tableDiv, rbResultsList[idx]->outstandingDQMDiscardCount );
1553 const int skippedDiscards = rbResultsList[idx]->skippedDiscardStats.getSampleCount();
1554 if (skippedDiscards != 0)
1556 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1560 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1562 maker.
addInt( tableDiv, skippedDiscards );
1564 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1565 maker.
addDouble( tableDiv, rbResultsList[idx]->eventStats.
1567 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1568 maker.
addInt( tableDiv, rbResultsList[idx]->lastEventNumber );
1578 long long uniqueRBID,
1585 if (rbResultPtr.get() == 0)
1587 maker.
addText(parent,
"The requested resource broker page is not currently available.");
1592 std::string tmpText;
1595 colspanAttr[
"colspan" ] =
"2";
1598 tableAttr[
"width" ] =
"";
1604 maker.
addText(tableDiv,
"Resource Broker Details");
1607 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
1608 tableDiv = maker.
addNode(
"th", tableRow);
1609 maker.
addText(tableDiv,
"Parameter");
1610 tableDiv = maker.
addNode(
"th", tableRow);
1611 maker.
addText(tableDiv,
"Value");
1613 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1614 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1615 maker.
addText(tableDiv,
"URL");
1616 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1618 linkAttr[
"href" ] = rbResultPtr->key.hltURL +
"/urn:xdaq-application:lid=" +
1619 boost::lexical_cast<std::string>(rbResultPtr->key.hltLocalId);
1621 maker.
addText(link, rbResultPtr->key.hltURL);
1623 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1624 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1625 maker.
addText(tableDiv,
"Class Name");
1626 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1627 maker.
addText(tableDiv, rbResultPtr->key.hltClassName);
1629 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1630 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1631 maker.
addText(tableDiv,
"Instance");
1632 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1633 maker.
addInt( tableDiv, rbResultPtr->key.hltInstance );
1635 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1636 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1637 maker.
addText(tableDiv,
"Local ID");
1638 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1639 maker.
addInt( tableDiv, rbResultPtr->key.hltLocalId );
1641 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1642 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1643 maker.
addText(tableDiv,
"Tid");
1644 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1645 maker.
addInt( tableDiv, rbResultPtr->key.hltTid );
1647 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1648 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1649 maker.
addText(tableDiv,
"INIT Message Count");
1650 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1651 maker.
addInt( tableDiv, rbResultPtr->initMsgCount );
1653 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1654 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1655 maker.
addText(tableDiv,
"Event Count");
1656 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1657 maker.
addInt( tableDiv, rbResultPtr->eventStats.getSampleCount() );
1659 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1660 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1661 maker.
addText(tableDiv,
"Error Event Count");
1662 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1663 maker.
addInt( tableDiv, rbResultPtr->errorEventStats.getSampleCount() );
1665 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1666 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1667 maker.
addText(tableDiv,
"Faulty Event Count");
1668 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1669 maker.
addInt( tableDiv, rbResultPtr->faultyEventStats.getSampleCount() );
1671 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1672 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1673 maker.
addText(tableDiv,
"Data Discard Count");
1674 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1675 maker.
addInt( tableDiv, rbResultPtr->dataDiscardStats.getSampleCount() );
1677 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1678 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1679 maker.
addText(tableDiv,
"DQM Event Count");
1680 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1681 maker.
addInt( tableDiv, rbResultPtr->dqmEventStats.getSampleCount() );
1683 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1684 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1685 maker.
addText(tableDiv,
"Faulty DQM Event Count");
1686 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1687 maker.
addInt( tableDiv, rbResultPtr->faultyDQMEventStats.getSampleCount() );
1689 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1690 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1691 maker.
addText(tableDiv,
"DQM Discard Count");
1692 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1693 maker.
addInt( tableDiv, rbResultPtr->dqmDiscardStats.getSampleCount() );
1695 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1696 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1697 maker.
addText(tableDiv,
"Ignored Discards Count");
1698 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1699 maker.
addInt( tableDiv, rbResultPtr->skippedDiscardStats.getSampleCount() );
1701 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1702 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1703 maker.
addText(tableDiv,
"Last Event Number Received");
1704 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1705 maker.
addInt( tableDiv, rbResultPtr->lastEventNumber );
1707 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1708 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1709 maker.
addText(tableDiv,
"Last Run Number Received");
1710 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1711 maker.
addInt( tableDiv, rbResultPtr->lastRunNumber );
1713 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1714 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1715 tmpDuration = rbResultPtr->eventStats.recentDuration.total_seconds();
1716 tmpText =
"Recent (" + boost::lexical_cast<std::string>(tmpDuration) +
1717 " sec) Event Rate (Hz)";
1718 maker.
addText(tableDiv, tmpText);
1719 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1720 maker.
addDouble( tableDiv, rbResultPtr->eventStats.recentSampleRate );
1722 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1723 tableDiv = maker.
addNode(
"td", tableRow, tableLabelAttr_);
1724 tmpDuration = rbResultPtr->eventStats.fullDuration.total_seconds();
1725 tmpText =
"Full (" + boost::lexical_cast<std::string>(tmpDuration) +
1726 " sec) Event Rate (Hz)";
1727 maker.
addText(tableDiv, tmpText);
1728 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1729 maker.
addDouble( tableDiv, rbResultPtr->eventStats.fullSampleRate );
1737 long long uniqueRBID,
1745 colspanAttr[
"colspan" ] =
"13";
1748 tableSuspiciousValueAttr[
"style" ] =
"background-color: yellow;";
1754 maker.
addText(tableDiv,
"Filter Units");
1757 tableRow = maker.
addNode(
"tr", table, specialRowAttr_);
1758 tableDiv = maker.
addNode(
"th", tableRow);
1759 maker.
addText(tableDiv,
"Process ID");
1760 tableDiv = maker.
addNode(
"th", tableRow);
1761 maker.
addText(tableDiv,
"# of INIT messages");
1762 tableDiv = maker.
addNode(
"th", tableRow);
1763 maker.
addText(tableDiv,
"# of events");
1764 tableDiv = maker.
addNode(
"th", tableRow);
1765 maker.
addText(tableDiv,
"# of error events");
1766 tableDiv = maker.
addNode(
"th", tableRow);
1767 maker.
addText(tableDiv,
"# of faulty events");
1768 tableDiv = maker.
addNode(
"th", tableRow);
1769 maker.
addText(tableDiv,
"# of outstanding data discards");
1770 tableDiv = maker.
addNode(
"th", tableRow);
1771 maker.
addText(tableDiv,
"# of DQM events");
1772 tableDiv = maker.
addNode(
"th", tableRow);
1773 maker.
addText(tableDiv,
"# of faulty DQM events");
1774 tableDiv = maker.
addNode(
"th", tableRow);
1775 maker.
addText(tableDiv,
"# of outstanding DQM discards");
1776 tableDiv = maker.
addNode(
"th", tableRow);
1777 maker.
addText(tableDiv,
"# of ignored discards");
1778 tableDiv = maker.
addNode(
"th", tableRow);
1779 maker.
addText(tableDiv,
"Recent event rate (Hz)");
1780 tableDiv = maker.
addNode(
"th", tableRow);
1781 maker.
addText(tableDiv,
"Last event number received");
1782 tableDiv = maker.
addNode(
"th", tableRow);
1783 maker.
addText(tableDiv,
"Last run number received");
1785 if (fuResultsList.empty())
1788 messageAttr[
"align" ] =
"center";
1790 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1791 tableDiv = maker.
addNode(
"td", tableRow, messageAttr);
1792 maker.
addText(tableDiv,
"No filter units have registered yet.");
1797 for (
unsigned int idx = 0; idx < fuResultsList.size(); ++idx)
1799 tableRow = maker.
addNode(
"tr", table, rowAttr_);
1801 tableDiv = maker.
addNode(
"td", tableRow);
1802 maker.
addInt( tableDiv, fuResultsList[idx]->
key.fuProcessId );
1803 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1804 maker.
addInt( tableDiv, fuResultsList[idx]->initMsgCount );
1805 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1806 maker.
addInt( tableDiv, fuResultsList[idx]->shortIntervalEventStats.getSampleCount() );
1807 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1808 maker.
addInt( tableDiv, fuResultsList[idx]->errorEventStats.getSampleCount() );
1810 if (fuResultsList[idx]->faultyEventStats.getSampleCount() != 0)
1812 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1816 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1818 maker.
addInt( tableDiv, fuResultsList[idx]->faultyEventStats.getSampleCount() );
1820 if (fuResultsList[idx]->outstandingDataDiscardCount != 0)
1822 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1826 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1828 maker.
addInt( tableDiv, fuResultsList[idx]->outstandingDataDiscardCount );
1830 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1831 maker.
addInt( tableDiv, fuResultsList[idx]->dqmEventStats.getSampleCount() );
1833 if (fuResultsList[idx]->faultyDQMEventStats.getSampleCount() != 0)
1835 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1839 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1841 maker.
addInt( tableDiv, fuResultsList[idx]->faultyDQMEventStats.getSampleCount() );
1843 if (fuResultsList[idx]->outstandingDQMDiscardCount != 0)
1845 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1849 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1851 maker.
addInt( tableDiv, fuResultsList[idx]->outstandingDQMDiscardCount );
1853 const int skippedDiscards = fuResultsList[idx]->skippedDiscardStats.getSampleCount();
1854 if (skippedDiscards != 0)
1856 tableDiv = maker.
addNode(
"td", tableRow, tableSuspiciousValueAttr);
1860 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1862 maker.
addInt( tableDiv, skippedDiscards );
1864 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1865 maker.
addDouble( tableDiv, fuResultsList[idx]->shortIntervalEventStats.
1867 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1868 maker.
addInt( tableDiv, fuResultsList[idx]->lastEventNumber );
1869 tableDiv = maker.
addNode(
"td", tableRow, tableValueAttr_);
1870 maker.
addInt( tableDiv, fuResultsList[idx]->lastRunNumber );
double getValueRate(DataSetType t=FULL) const
MonitoredQuantity::Stats eventFragmentSizeStats
void addOutputModuleTables(XHTMLMaker &maker, XHTMLMaker::Node *parent, DataSenderMonitorCollection const &) const
Node * addNode(const std::string &name, Node *parent, const AttrMap &attrs)
void addDOMforDQMEventStatistics(XHTMLMaker &maker, XHTMLMaker::Node *parent, DQMEventMonitorCollection const &) const
void addDouble(Node *parent, const double &value, const unsigned int &precision=2)
void addOutputModuleSummary(XHTMLMaker &maker, XHTMLMaker::Node *parent, DataSenderMonitorCollection::OutputModuleResultsList const &) const
const MonitoredQuantity & getLumiSectionsSeenMQ() const
void dqmEventWebPage(xgi::Output *) const
OutputModuleResultsList getTopLevelOutputModuleResults() const
double entriesInStreamQueue
void throughputWebPage(xgi::Output *) const
ConsumerWebPageHelper_t consumerWebPageHelper_
RBResultPtr getOneResourceBrokerResult(UniqueResourceBrokerID_t) const
void addText(Node *parent, const std::string &)
void resourceBrokerOverview(xgi::Output *) const
void addTableForResourceUsages(XHTMLMaker &maker, XHTMLMaker::Node *parent, ResourceMonitorCollection::Stats const &, MonitoredQuantity::Stats const &) const
std::string timeStampUTC(TimePoint_t)
const MonitoredQuantity & getUnwantedEventIDsReceivedMQ() const
void addRowForFramesReceived(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
double entriesInFragmentQueue
uint64_t getSampleCount(DataSetType t=FULL) const
void addOutputModuleStatistics(XHTMLMaker &maker, XHTMLMaker::Node *parent, long long uniqueRBID, DataSenderMonitorCollection const &) const
void addRowForLatency(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
void addRowForThroughputStatistics(XHTMLMaker &maker, XHTMLMaker::Node *table, const ThroughputMonitorCollection::Stats::Snapshot &, bool const isAverage=false) const
const MonitoredQuantity & getErrorEventIDsReceivedMQ() const
double streamQueueBandwidth
void addRowsForWorkers(XHTMLMaker &maker, XHTMLMaker::Node *table, ResourceMonitorCollection::Stats const &) const
boost::shared_ptr< SharedResources > SharedResourcesPtr
void getStats(Stats &stats) const
double getValueMin(DataSetType t=FULL) const
XHTMLMaker::Node * createWebPageBody(XHTMLMaker &, const std::string &pageTitle, const StateMachineMonitorCollection &) const
double getLastSampleValue() const
boost::shared_ptr< StatisticsReporter > StatisticsReporterPtr
double fragmentQueueBandwidth
int numberOfInjectWorkers
void addDOMforHyperLinks(XHTMLMaker &, XHTMLMaker::Node *parent) const
void addDOMforFiles(XHTMLMaker &maker, XHTMLMaker::Node *parent, FilesMonitorCollection const &) const
double fragmentStoreMemoryUsed
const MonitoredQuantity & getAllStreamsBandwidthMQ() const
MonitoredQuantity::Stats dqmEventFragmentSizeStats
std::string link(std::string &nm, std::string &ns)
SMWebPageHelper(xdaq::ApplicationDescriptor *, SharedResourcesPtr)
FilterUnitResultsList getFilterUnitResultsForRB(UniqueResourceBrokerID_t uniqueRBID) const
utils::Duration_t getDuration(DataSetType t=FULL) const
std::vector< StreamRecordPtr > StreamRecordList
double dqmEventProcessorBusy
double fragmentProcessorBusy
void addRowForMinBandwidth(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
void getStats(FragmentStats &stats) const
double writtenEventsBandwidth
DiskUsageStatsPtrList diskUsageStatsList
edm::serviceregistry::AllArgsMaker< DTDataMonitorInterface, DTDataIntegrityTask > maker
MonitoredQuantity::Stats allFragmentSizeStats
void addFilterUnitList(XHTMLMaker &maker, XHTMLMaker::Node *parent, long long uniqueRBID, DataSenderMonitorCollection const &) const
void getFileRecords(FileRecordList &) const
void getStats(Stats &) const
std::map< std::string, std::string > AttrMap
const MonitoredQuantity & getAllStreamsVolumeMQ() const
void addDOMforFragmentMonitor(XHTMLMaker &maker, XHTMLMaker::Node *parent, FragmentMonitorCollection const &) const
void resourceBrokerDetail(xgi::Output *, const long long &uniqueRBID) const
void addDOMforStoredData(XHTMLMaker &maker, XHTMLMaker::Node *parent, StreamsMonitorCollection const &) const
utils::Duration_t duration
void addInt(Node *parent, const int &)
double memoryUsedInFragmentQueue
double getSampleRate(DataSetType t=FULL) const
void getStats(Stats &) const
utils::TimePoint_t absoluteTime
const MonitoredQuantity & getEoLSSeenMQ() const
void storedDataWebPage(xgi::Output *) const
void addDOMforProcessedDQMEvents(XHTMLMaker &maker, XHTMLMaker::Node *parent, DQMEventMonitorCollection const &) const
void addDOMforResourceUsage(XHTMLMaker &, XHTMLMaker::Node *parent, ResourceMonitorCollection const &, ThroughputMonitorCollection const &) const
const std::string & externallyVisibleState() const
void addRowForTotalVolume(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
void addTableForDiskUsages(XHTMLMaker &maker, XHTMLMaker::Node *parent, ResourceMonitorCollection::Stats const &) const
std::string innerStateName() const
std::vector< boost::shared_ptr< OutputModuleResult > > OutputModuleResultsList
void addDOMforThroughputStatistics(XHTMLMaker &maker, XHTMLMaker::Node *parent, ThroughputMonitorCollection const &) const
const MonitoredQuantity & getEventIDsReceivedMQ() const
double memoryUsedInDQMQueue
std::vector< RBResultPtr > ResourceBrokerResultsList
double getValueMax(DataSetType t=FULL) const
void addResourceBrokerDetails(XHTMLMaker &maker, XHTMLMaker::Node *parent, long long uniqueRBID, DataSenderMonitorCollection const &) const
void addRowsForSataBeast(XHTMLMaker &maker, XHTMLMaker::Node *table, ResourceMonitorCollection::Stats const &) const
MonitoredQuantity::Stats eventFragmentBandwidthStats
SharedResourcesPtr sharedResources_
void addRowsForMemoryUsage(XHTMLMaker &maker, XHTMLMaker::Node *table, MonitoredQuantity::Stats const &) const
void addRowForBandwidth(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
boost::shared_ptr< ResourceBrokerResult > RBResultPtr
void listStreamRecordsStats(XHTMLMaker &maker, XHTMLMaker::Node *table, StreamsMonitorCollection const &, const MonitoredQuantity::DataSetType) const
void addRowForRate(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
void filesWebPage(xgi::Output *) const
void addResourceBrokerList(XHTMLMaker &maker, XHTMLMaker::Node *parent, DataSenderMonitorCollection const &) const
void getStreamRecords(StreamRecordList &) const
void consumerStatistics(xgi::Output *, const std::string &externallyVisibleState, const std::string &innerStateName, const std::string &errorMsg, boost::shared_ptr< StatisticsReporter_t >, RegistrationCollectionPtr, boost::shared_ptr< EventQueueCollection_t >, DQMEventQueueCollectionPtr) const
void addFragmentStats(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
bool streamRecordsExist() const
bool compareRBResultPtrValues(DataSenderMonitorCollection::RBResultPtr firstValue, DataSenderMonitorCollection::RBResultPtr secondValue)
void addDOMforConfigString(XHTMLMaker &maker, XHTMLMaker::Node *parent, DiskWritingParams const &) const
ResourceBrokerResultsList getAllResourceBrokerResults() const
MonitoredQuantity::Stats dqmEventFragmentBandwidthStats
boost::circular_buffer< FileRecordPtr > FileRecordList
void addRowForMaxBandwidth(XHTMLMaker &maker, XHTMLMaker::Node *table, FragmentMonitorCollection::FragmentStats const &, const MonitoredQuantity::DataSetType) const
const MonitoredQuantity & getAllStreamsFileCountMQ() const
const MonitoredQuantity & getPoolUsageMQ() const
OutputModuleResultsList getOutputModuleResultsForRB(UniqueResourceBrokerID_t uniqueRBID) const
void consumerStatistics(xgi::Output *) const
XHTMLMaker::Node * createWebPageBody(XHTMLMaker &, const std::string &pageTitle, const std::string &externallyVisibleState, const std::string &innerStateName, const std::string &errorMsg) const
std::string streamConfiguration_
MonitoredQuantity::Stats allFragmentBandwidthStats
double getValueSum(DataSetType t=FULL) const
std::vector< FUResultPtr > FilterUnitResultsList
double getSampleLatency(DataSetType t=FULL) const
double memoryUsedInStreamQueue
const MonitoredQuantity & getRunNumbersSeenMQ() const
cc *****************************************************cc the common blocks pinput and cwdidth are for input parameters cc these parameters needed to be interfaced to other program common pinput fmc
bool statusMessage(std::string &msg) const
void defaultWebPage(xgi::Output *) const
void addDOMforRunMonitor(XHTMLMaker &maker, XHTMLMaker::Node *parent, RunMonitorCollection const &) const