#include "XrdFileCloseReporterGratia.h"
#include "XrdFileCloseReporterGratia.c7"
#include "XrdFile.h"
#include "XrdUser.h"
#include "XrdServer.h"
#include "Glasses/ZLog.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <cerrno>
ClassImp(XrdFileCloseReporterGratia);
void XrdFileCloseReporterGratia::_init()
{
mUdpHost = "localhost";
mUdpPort = 4242;
}
XrdFileCloseReporterGratia::XrdFileCloseReporterGratia(const Text_t* n, const Text_t* t) :
XrdFileCloseReporter(n, t),
mReporterSocket(0)
{
_init();
}
XrdFileCloseReporterGratia::~XrdFileCloseReporterGratia()
{}
void XrdFileCloseReporterGratia::ReportLoopInit()
{
static const Exc_t _eh("XrdFileCloseReporterGratia::ReportLoopInit ");
mLastUidBase = mLastUidInner = 0;
mSAddr = new struct sockaddr;
{
struct addrinfo *result;
struct addrinfo hints;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
hints.ai_flags = AI_NUMERICSERV;
int error = getaddrinfo(mUdpHost, TString::Format("%hu", mUdpPort), &hints, &result);
if (error != 0)
throw _eh + "getaddrinfo failed: " + gai_strerror(error);
memcpy(mSAddr, result->ai_addr, sizeof(struct sockaddr));
freeaddrinfo(result);
}
if ((mReporterSocket = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
throw _eh + "socket failed: " + strerror(errno);
}
namespace
{
Long64_t dtoll (Double_t x) { return static_cast<Long64_t>(x); }
Double_t dmtod (Double_t x) { return 1024.0 * 1024.0 * x; }
Long64_t dmtoll(Double_t x) { return dtoll(dmtod(x)); }
}
void XrdFileCloseReporterGratia::ReportFileClosed(FileUserServer& fus)
{
static const Exc_t _eh("XrdFileCloseReporterGratia::ReportFileClosed ");
XrdFile *file = fus.fFile;
XrdUser *user = fus.fUser;
XrdServer *server = fus.fServer;
TString msg("#begin\n");
{
GLensReadHolder _flck(file);
Long64_t unique_id = 1000ll * file->RefCloseTime().ToMiliSec();
if (unique_id == mLastUidBase)
{
unique_id = mLastUidBase + ++mLastUidInner;
if (mLastUidInner >= 1000ll)
{
ZLog::Helper log(*mLog, ZLog::L_Warning, _eh);
log.Form("Inner counter for unique-id overflowed for file='%s'.", file->GetName());
return;
}
}
else
{
mLastUidBase = unique_id;
mLastUidInner = 0;
}
const SRange &RS = file->RefReadStats();
const SRange &RSS = file->RefSingleReadStats();
const SRange &RSV = file->RefVecReadStats();
const SRange &RSVC = file->RefVecReadCntStats();
const SRange &WS = file->RefWriteStats();
msg += TString::Format
("unique_id=xrd-%lld\n"
"file_lfn=%s\nfile_size=%lld\nstart_time=%llu\nend_time=%llu\n"
"read_bytes=%lld\nread_operations=%llu\nread_min=%lld\nread_max=%lld\nread_average=%f\nread_sigma=%f\n"
"read_single_bytes=%lld\nread_single_operations=%llu\nread_single_min=%lld\nread_single_max=%lld\nread_single_average=%f\nread_single_sigma=%f\n"
"read_vector_bytes=%lld\nread_vector_operations=%llu\nread_vector_min=%lld\nread_vector_max=%lld\nread_vector_average=%f\nread_vector_sigma=%f\n"
"read_vector_count_min=%lld\nread_vector_count_max=%lld\nread_vector_count_average=%f\nread_vector_count_sigma=%f\n"
"write_bytes=%lld\nwrite_operations=%llu\nwrite_min=%lld\nwrite_max=%lld\nwrite_average=%f\nwrite_sigma=%f\n"
"read_bytes_at_close=%lld\n"
"write_bytes_at_close=%lld\n",
unique_id,
file->GetName(), dmtoll(file->GetSizeMB()), file->RefOpenTime().GetSec(), file->RefCloseTime().GetSec(),
dmtoll(RS .GetSumX()), RS .GetN(), dmtoll(RS .GetMin()), dmtoll(RS .GetMax()), dmtod(RS .GetAverage()), dmtod(RS .GetSigma()),
dmtoll(RSS.GetSumX()), RSS.GetN(), dmtoll(RSS.GetMin()), dmtoll(RSS.GetMax()), dmtod(RSS.GetAverage()), dmtod(RSS.GetSigma()),
dmtoll(RSV.GetSumX()), RSV.GetN(), dmtoll(RSV.GetMin()), dmtoll(RSV.GetMax()), dmtod(RSV.GetAverage()), dmtod(RSV.GetSigma()),
dtoll(RSVC.GetMin()), dtoll(RSVC.GetMax()), RSVC.GetAverage(), RSVC.GetSigma(),
dmtoll(WS .GetSumX()), WS .GetN(), dmtoll(WS .GetMin()), dmtoll(WS .GetMax()), dmtod(WS .GetAverage()), dmtod(WS .GetSigma()),
dmtoll(file->GetRTotalMB()),
dmtoll(file->GetWTotalMB()));
}
{
GLensReadHolder _ulck(user);
msg += TString::Format
("user_dn=%s\nuser_vo=%s\nuser_role=%s\nuser_fqan=%s\nclient_domain=%s\nclient_host=%s\n"
"server_username=%s\napp_info=%s\n",
user->GetDN(), user->GetVO(), user->GetRole(), user->GetGroup(),
user->GetFromDomain(), user->GetFromHost(), user->GetServerUsername(), user->GetAppInfo());
}
{
GLensReadHolder _slck(server);
msg += TString::Format
("server_domain=%s\nserver_host=%s\n",
server->GetDomain(), server->GetHost());
}
msg += "#end\n";
if (sendto(mReporterSocket, msg.Data(), msg.Length() + 1, 0, mSAddr, sizeof(struct sockaddr)) == -1)
{
ZLog::Helper log(*mLog, ZLog::L_Error, _eh);
log.Form("Error sending report for file='%s'.\n\t%s.",
file->GetName(), strerror(errno));
}
}
void XrdFileCloseReporterGratia::ReportLoopFinalize()
{
close(mReporterSocket);
mReporterSocket = 0;
}
XrdFileCloseReporterGratia.cxx:1 XrdFileCloseReporterGratia.cxx:2 XrdFileCloseReporterGratia.cxx:3 XrdFileCloseReporterGratia.cxx:4 XrdFileCloseReporterGratia.cxx:5 XrdFileCloseReporterGratia.cxx:6 XrdFileCloseReporterGratia.cxx:7 XrdFileCloseReporterGratia.cxx:8 XrdFileCloseReporterGratia.cxx:9 XrdFileCloseReporterGratia.cxx:10 XrdFileCloseReporterGratia.cxx:11 XrdFileCloseReporterGratia.cxx:12 XrdFileCloseReporterGratia.cxx:13 XrdFileCloseReporterGratia.cxx:14 XrdFileCloseReporterGratia.cxx:15 XrdFileCloseReporterGratia.cxx:16 XrdFileCloseReporterGratia.cxx:17 XrdFileCloseReporterGratia.cxx:18 XrdFileCloseReporterGratia.cxx:19 XrdFileCloseReporterGratia.cxx:20 XrdFileCloseReporterGratia.cxx:21 XrdFileCloseReporterGratia.cxx:22 XrdFileCloseReporterGratia.cxx:23 XrdFileCloseReporterGratia.cxx:24 XrdFileCloseReporterGratia.cxx:25 XrdFileCloseReporterGratia.cxx:26 XrdFileCloseReporterGratia.cxx:27 XrdFileCloseReporterGratia.cxx:28 XrdFileCloseReporterGratia.cxx:29 XrdFileCloseReporterGratia.cxx:30 XrdFileCloseReporterGratia.cxx:31 XrdFileCloseReporterGratia.cxx:32 XrdFileCloseReporterGratia.cxx:33 XrdFileCloseReporterGratia.cxx:34 XrdFileCloseReporterGratia.cxx:35 XrdFileCloseReporterGratia.cxx:36 XrdFileCloseReporterGratia.cxx:37 XrdFileCloseReporterGratia.cxx:38 XrdFileCloseReporterGratia.cxx:39 XrdFileCloseReporterGratia.cxx:40 XrdFileCloseReporterGratia.cxx:41 XrdFileCloseReporterGratia.cxx:42 XrdFileCloseReporterGratia.cxx:43 XrdFileCloseReporterGratia.cxx:44 XrdFileCloseReporterGratia.cxx:45 XrdFileCloseReporterGratia.cxx:46 XrdFileCloseReporterGratia.cxx:47 XrdFileCloseReporterGratia.cxx:48 XrdFileCloseReporterGratia.cxx:49 XrdFileCloseReporterGratia.cxx:50 XrdFileCloseReporterGratia.cxx:51 XrdFileCloseReporterGratia.cxx:52 XrdFileCloseReporterGratia.cxx:53 XrdFileCloseReporterGratia.cxx:54 XrdFileCloseReporterGratia.cxx:55 XrdFileCloseReporterGratia.cxx:56 XrdFileCloseReporterGratia.cxx:57 XrdFileCloseReporterGratia.cxx:58 XrdFileCloseReporterGratia.cxx:59 XrdFileCloseReporterGratia.cxx:60 XrdFileCloseReporterGratia.cxx:61 XrdFileCloseReporterGratia.cxx:62 XrdFileCloseReporterGratia.cxx:63 XrdFileCloseReporterGratia.cxx:64 XrdFileCloseReporterGratia.cxx:65 XrdFileCloseReporterGratia.cxx:66 XrdFileCloseReporterGratia.cxx:67 XrdFileCloseReporterGratia.cxx:68 XrdFileCloseReporterGratia.cxx:69 XrdFileCloseReporterGratia.cxx:70 XrdFileCloseReporterGratia.cxx:71 XrdFileCloseReporterGratia.cxx:72 XrdFileCloseReporterGratia.cxx:73 XrdFileCloseReporterGratia.cxx:74 XrdFileCloseReporterGratia.cxx:75 XrdFileCloseReporterGratia.cxx:76 XrdFileCloseReporterGratia.cxx:77 XrdFileCloseReporterGratia.cxx:78 XrdFileCloseReporterGratia.cxx:79 XrdFileCloseReporterGratia.cxx:80 XrdFileCloseReporterGratia.cxx:81 XrdFileCloseReporterGratia.cxx:82 XrdFileCloseReporterGratia.cxx:83 XrdFileCloseReporterGratia.cxx:84 XrdFileCloseReporterGratia.cxx:85 XrdFileCloseReporterGratia.cxx:86 XrdFileCloseReporterGratia.cxx:87 XrdFileCloseReporterGratia.cxx:88 XrdFileCloseReporterGratia.cxx:89 XrdFileCloseReporterGratia.cxx:90 XrdFileCloseReporterGratia.cxx:91 XrdFileCloseReporterGratia.cxx:92 XrdFileCloseReporterGratia.cxx:93 XrdFileCloseReporterGratia.cxx:94 XrdFileCloseReporterGratia.cxx:95 XrdFileCloseReporterGratia.cxx:96 XrdFileCloseReporterGratia.cxx:97 XrdFileCloseReporterGratia.cxx:98 XrdFileCloseReporterGratia.cxx:99 XrdFileCloseReporterGratia.cxx:100 XrdFileCloseReporterGratia.cxx:101 XrdFileCloseReporterGratia.cxx:102 XrdFileCloseReporterGratia.cxx:103 XrdFileCloseReporterGratia.cxx:104 XrdFileCloseReporterGratia.cxx:105 XrdFileCloseReporterGratia.cxx:106 XrdFileCloseReporterGratia.cxx:107 XrdFileCloseReporterGratia.cxx:108 XrdFileCloseReporterGratia.cxx:109 XrdFileCloseReporterGratia.cxx:110 XrdFileCloseReporterGratia.cxx:111 XrdFileCloseReporterGratia.cxx:112 XrdFileCloseReporterGratia.cxx:113 XrdFileCloseReporterGratia.cxx:114 XrdFileCloseReporterGratia.cxx:115 XrdFileCloseReporterGratia.cxx:116 XrdFileCloseReporterGratia.cxx:117 XrdFileCloseReporterGratia.cxx:118 XrdFileCloseReporterGratia.cxx:119 XrdFileCloseReporterGratia.cxx:120 XrdFileCloseReporterGratia.cxx:121 XrdFileCloseReporterGratia.cxx:122 XrdFileCloseReporterGratia.cxx:123 XrdFileCloseReporterGratia.cxx:124 XrdFileCloseReporterGratia.cxx:125 XrdFileCloseReporterGratia.cxx:126 XrdFileCloseReporterGratia.cxx:127 XrdFileCloseReporterGratia.cxx:128 XrdFileCloseReporterGratia.cxx:129 XrdFileCloseReporterGratia.cxx:130 XrdFileCloseReporterGratia.cxx:131 XrdFileCloseReporterGratia.cxx:132 XrdFileCloseReporterGratia.cxx:133 XrdFileCloseReporterGratia.cxx:134 XrdFileCloseReporterGratia.cxx:135 XrdFileCloseReporterGratia.cxx:136 XrdFileCloseReporterGratia.cxx:137 XrdFileCloseReporterGratia.cxx:138 XrdFileCloseReporterGratia.cxx:139 XrdFileCloseReporterGratia.cxx:140 XrdFileCloseReporterGratia.cxx:141 XrdFileCloseReporterGratia.cxx:142 XrdFileCloseReporterGratia.cxx:143 XrdFileCloseReporterGratia.cxx:144 XrdFileCloseReporterGratia.cxx:145 XrdFileCloseReporterGratia.cxx:146 XrdFileCloseReporterGratia.cxx:147 XrdFileCloseReporterGratia.cxx:148 XrdFileCloseReporterGratia.cxx:149 XrdFileCloseReporterGratia.cxx:150 XrdFileCloseReporterGratia.cxx:151 XrdFileCloseReporterGratia.cxx:152 XrdFileCloseReporterGratia.cxx:153 XrdFileCloseReporterGratia.cxx:154 XrdFileCloseReporterGratia.cxx:155 XrdFileCloseReporterGratia.cxx:156 XrdFileCloseReporterGratia.cxx:157 XrdFileCloseReporterGratia.cxx:158 XrdFileCloseReporterGratia.cxx:159 XrdFileCloseReporterGratia.cxx:160 XrdFileCloseReporterGratia.cxx:161 XrdFileCloseReporterGratia.cxx:162 XrdFileCloseReporterGratia.cxx:163 XrdFileCloseReporterGratia.cxx:164 XrdFileCloseReporterGratia.cxx:165 XrdFileCloseReporterGratia.cxx:166 XrdFileCloseReporterGratia.cxx:167 XrdFileCloseReporterGratia.cxx:168 XrdFileCloseReporterGratia.cxx:169 XrdFileCloseReporterGratia.cxx:170 XrdFileCloseReporterGratia.cxx:171