XRootD
Loading...
Searching...
No Matches
XrdHttpMon Class Reference

#include <XrdHttpMon.hh>

Collaboration diagram for XrdHttpMon:

Classes

struct  HttpInfo

Public Types

enum  StatusCodes {
  sc_100 ,
  sc_200 ,
  sc_201 ,
  sc_202 ,
  sc_206 ,
  sc_207 ,
  sc_302 ,
  sc_307 ,
  sc_400 ,
  sc_401 ,
  sc_403 ,
  sc_404 ,
  sc_405 ,
  sc_409 ,
  sc_416 ,
  sc_423 ,
  sc_500 ,
  sc_502 ,
  sc_504 ,
  sc_507 ,
  sc_UNKNOWN ,
  sc_Count
}

Static Public Member Functions

static void Initialize (XrdSysLogger *logP, XrdXrootdGStream *gStream, XrdMonRoll *mrollP)
static bool IsInitialized ()
static void Record (XrdHttpReq &req, int code)
static void * Start (void *)

Detailed Description

Definition at line 13 of file XrdHttpMon.hh.


Class Documentation

◆ XrdHttpMon::HttpInfo

struct XrdHttpMon::HttpInfo

Definition at line 44 of file XrdHttpMon.hh.

Collaboration diagram for XrdHttpMon::HttpInfo:
Class Members
RAtomic_uint64_t count {0}
RAtomic_uint64_t duration_us {0}
RAtomic_uint64_t error_network {0}
RAtomic_uint64_t error_xrootd {0}
RAtomic_uint64_t success {0}

Member Enumeration Documentation

◆ StatusCodes

Enumerator
sc_100 
sc_200 
sc_201 
sc_202 
sc_206 
sc_207 
sc_302 
sc_307 
sc_400 
sc_401 
sc_403 
sc_404 
sc_405 
sc_409 
sc_416 
sc_423 
sc_500 
sc_502 
sc_504 
sc_507 
sc_UNKNOWN 
sc_Count 

Definition at line 18 of file XrdHttpMon.hh.

Member Function Documentation

◆ Initialize()

void XrdHttpMon::Initialize ( XrdSysLogger * logP,
XrdXrootdGStream * gStream,
XrdMonRoll * mrollP )
static

Definition at line 74 of file XrdHttpMon.cc.

74 {
75 eDest.logger(logP);
76 XrdHttpMon::gStream = gStream;
77 XrdHttpMon::mrollP = mrollP;
78
79 if (gStream != nullptr){
80 hasGStream = true;
81 flushPeriod = std::chrono::seconds(gStream->GetAutoFlush());
82 }
83
84 if (mrollP != nullptr) {
85 hasMonRoll = true;
86 mrollP->Register(XrdMonRoll::AddOn, "http_plugin", statsSchema);
87 }
88
89 isInitialized = true;
90}
static XrdSysError eDest(0,"crypto_")
XrdSysLogger * logger(XrdSysLogger *lp=0)

References XrdMonRoll::AddOn, and eDest.

◆ IsInitialized()

bool XrdHttpMon::IsInitialized ( )
inlinestatic

Definition at line 56 of file XrdHttpMon.hh.

56{ return isInitialized; }

◆ Record()

void XrdHttpMon::Record ( XrdHttpReq & req,
int code )
static

Definition at line 106 of file XrdHttpMon.cc.

107{
108 // Early return if monitoring is not enabled.
109 if (!isInitialized) return;
110
111 // Only record once we have a "final" (>= 200) response code. 100-Continue is interim.
112 if (code < 200) return;
113
114 std::chrono::steady_clock::duration duration{};
115 if (hasGStream) {
116 const auto now = std::chrono::steady_clock::now();
117 duration = now - req.startTime;
118 }
119
120 StatusCodes statusCode = ToStatusCode(code);
121 XrdHttpMonState st = req.monState;
122
123 if (req.request >= XrdHttpReq::ReqType::rtCount || req.request < 0) {
124 eDest.Emsg("Record", "ERROR: Record called with invalid request type");
125 return;
126 }
127
128 switch (st) {
130 RecordGStreamCount(req.request, statusCode);
131 RecordMonRollVerb(req.request);
133 return;
134
136 RecordGStreamSuccess(req.request, statusCode, duration);
137 RecordMonRollStatus(statusCode);
139 return;
140
142 RecordGStreamErrNet(req.request, statusCode, duration);
143 RecordMonRollStatus(statusCode);
145 return;
146
148 RecordGStreamErrProt(req.request, statusCode, duration);
149 RecordMonRollStatus(statusCode);
151 return;
152
154 eDest.Emsg("Record", "ERROR: Record called after state was set to DONE");
155 return;
156 }
157}
XrdHttpMonState
ReqType request
The request we got.
std::chrono::steady_clock::time_point startTime
XrdHttpMonState monState
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)

References ACTIVE, DONE, eDest, ERR_NET, ERR_PROT, XrdHttpReq::monState, NEW, XrdHttpReq::request, XrdHttpReq::rtCount, and XrdHttpReq::startTime.

◆ Start()

void * XrdHttpMon::Start ( void * )
static

Definition at line 99 of file XrdHttpMon.cc.

99 {
100 while (true) {
101 std::this_thread::sleep_for(flushPeriod);
102 Report();
103 }
104}

The documentation for this class was generated from the following files: