CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
edm::storage::StatisticsSenderService Class Reference

#include <StatisticsSenderService.h>

Classes

class  FileStatistics
 

Public Member Functions

void filePreCloseEvent (std::string const &lfn, bool usedFallback)
 
void setCurrentServer (const std::string &servername)
 
void setSize (size_t size)
 
 StatisticsSenderService (edm::ParameterSet const &pset, edm::ActivityRegistry &ar)
 

Static Public Member Functions

static const char * getJobID ()
 
static bool getX509Subject (std::string &)
 

Private Member Functions

void determineHostnames (void)
 
void fillUDP (const std::string &, bool, std::string &)
 

Private Attributes

std::string m_clientdomain
 
std::string m_clienthost
 
size_t m_counter
 
std::string m_filelfn
 
FileStatistics m_filestats
 
std::string m_guid
 
std::string m_serverdomain
 
std::string m_serverhost
 
ssize_t m_size
 
std::string m_userdn
 

Detailed Description

Definition at line 15 of file StatisticsSenderService.h.

Constructor & Destructor Documentation

StatisticsSenderService::StatisticsSenderService ( edm::ParameterSet const &  pset,
edm::ActivityRegistry ar 
)

Definition at line 114 of file StatisticsSenderService.cc.

References determineHostnames(), filePreCloseEvent(), getX509Subject(), m_userdn, and edm::ActivityRegistry::watchPreCloseFile().

114  :
115  m_clienthost("unknown"),
116  m_clientdomain("unknown"),
117  m_serverhost("unknown"),
118  m_serverdomain("unknown"),
119  m_filelfn("unknown"),
120  m_filestats(),
121  m_guid(Guid().toString()),
122  m_counter(0),
123  m_size(-1),
124  m_userdn("unknown")
125 {
128  if (!getX509Subject(m_userdn)) {
129  m_userdn = "unknown";
130  }
131 }
void filePreCloseEvent(std::string const &lfn, bool usedFallback)
std::string toString(const char *format,...)
Definition: xdaq_compat.cc:4
void watchPreCloseFile(PreCloseFile::slot_type const &iSlot)
ora::Guid Guid
Definition: Guid.h:26

Member Function Documentation

void StatisticsSenderService::determineHostnames ( void  )
private

Definition at line 200 of file StatisticsSenderService.cc.

References HOST_NAME_MAX, m_clientdomain, and m_clienthost.

Referenced by StatisticsSenderService().

200  {
201  char tmpName[HOST_NAME_MAX];
202  if (gethostname(tmpName, HOST_NAME_MAX) != 0) {
203  // Sigh, no way to log errors from here.
204  m_clienthost = "unknown";
205  } else {
206  m_clienthost = tmpName;
207  }
208  size_t dot_pos = m_clienthost.find(".");
209  if (dot_pos == std::string::npos) {
210  m_clientdomain = "unknown";
211  } else {
212  m_clientdomain = m_clienthost.substr(dot_pos+1, m_clienthost.size()-dot_pos-1);
213  m_clienthost = m_clienthost.substr(0, dot_pos);
214  }
215 }
#define HOST_NAME_MAX
void StatisticsSenderService::filePreCloseEvent ( std::string const &  lfn,
bool  usedFallback 
)

Definition at line 161 of file StatisticsSenderService.cc.

References fillUDP(), info(), edm::Service< T >::isAvailable(), m_counter, m_filelfn, m_userdn, python.entryComment::results, edm::SiteLocalConfig::siteName(), edm::SiteLocalConfig::statisticsDestination(), edm::SiteLocalConfig::statisticsInfo(), and AlCaHLTBitMon_QueryRunRegistry::string.

Referenced by StatisticsSenderService().

161  {
162  m_filelfn = lfn;
163 
165  if (!pSLC.isAvailable()) {
166  return;
167  }
168 
169  const struct addrinfo * addresses = pSLC->statisticsDestination();
170  if (!addresses) {
171  return;
172  }
173 
174  std::set<std::string> const * info = pSLC->statisticsInfo();
175  if (info && info->size() && (m_userdn != "unknown") && (
176  (info->find("dn") == info->end()) ||
177  (info->find("nodn") != info->end()))
178  )
179  {
180  m_userdn = "not reported";
181  }
182 
184  fillUDP(pSLC->siteName(), usedFallback, results);
185 
186  for (const struct addrinfo *address = addresses; address != nullptr; address = address->ai_next) {
187  int sock = socket(address->ai_family, address->ai_socktype, address->ai_protocol);
188  if (sock < 0) {
189  continue;
190  }
191  if (sendto(sock, results.c_str(), results.size(), 0, address->ai_addr, address->ai_addrlen) >= 0) {
192  break;
193  }
194  }
195 
196  m_counter++;
197 }
static const TGPicture * info(bool iBackgroundIsBlack)
bool isAvailable() const
Definition: Service.h:46
void fillUDP(const std::string &, bool, std::string &)
virtual std::string const & siteName(void) const =0
virtual struct addrinfo const * statisticsDestination() const =0
virtual std::set< std::string > const * statisticsInfo() const =0
void StatisticsSenderService::fillUDP ( const std::string &  siteName,
bool  usedFallback,
std::string &  udpinfo 
)
private

Definition at line 218 of file StatisticsSenderService.cc.

References edm::storage::StatisticsSenderService::FileStatistics::fillUDP(), getJobID(), m_clientdomain, m_clienthost, m_counter, m_filelfn, m_filestats, m_guid, m_serverdomain, m_serverhost, m_size, and m_userdn.

Referenced by filePreCloseEvent().

218  {
219  std::ostringstream os;
220 
221  // Header - same for all IO accesses
222  os << "{";
223  if (!siteName.empty()) {
224  os << "\"site_name\":\"" << siteName << "\", ";
225  }
226  if (usedFallback) {
227  os << "\"fallback\": true, ";
228  }
229  os << "\"user_dn\":\"" << m_userdn << "\", ";
230  os << "\"client_host\":\"" << m_clienthost << "\", ";
231  os << "\"client_domain\":\"" << m_clientdomain << "\", ";
232  os << "\"server_host\":\"" << m_serverhost << "\", ";
233  os << "\"server_domain\":\"" << m_serverdomain << "\", ";
234  os << "\"unique_id\":\"" << m_guid << "-" << m_counter << "\", ";
235  os << "\"file_lfn\":\"" << m_filelfn << "\", ";
236  // Dashboard devs requested that we send out no app_info if a job ID
237  // is not present in the environment.
238  const char * jobId = getJobID();
239  if (jobId) {
240  os << "\"app_info\":\"" << jobId << "\", ";
241  }
242 
243  if (m_size >= 0) {
244  os << "\"file_size\":" << m_size << ", ";
245  }
246 
247  m_filestats.fillUDP(os);
248 
249  os << "}";
250  udpinfo = os.str();
251 }
const char * StatisticsSenderService::getJobID ( )
static

Definition at line 134 of file StatisticsSenderService.cc.

References JOB_UNIQUE_ID_ENV, and JOB_UNIQUE_ID_ENV_V2.

Referenced by fillUDP(), and SendMonitoringInfo().

134  {
135  const char * id = getenv(JOB_UNIQUE_ID_ENV);
136  // Dashboard developers requested that we migrate to this environment variable.
137  return id ? id : getenv(JOB_UNIQUE_ID_ENV_V2);
138 }
#define JOB_UNIQUE_ID_ENV_V2
#define JOB_UNIQUE_ID_ENV
bool StatisticsSenderService::getX509Subject ( std::string &  result)
static

Definition at line 351 of file StatisticsSenderService.cc.

References lut2db_cfg::filename, getX509SubjectFromFile(), query::result, and contentValuesCheck::ss.

Referenced by StatisticsSenderService().

351  {
352  char *filename = getenv("X509_USER_PROXY");
353  if (filename && getX509SubjectFromFile(filename, result)) {
354  return true;
355  }
356  std::stringstream ss;
357  ss << "/tmp/x509up_u" << geteuid();
358  return getX509SubjectFromFile(ss.str(), result);
359 }
tuple result
Definition: query.py:137
tuple filename
Definition: lut2db_cfg.py:20
static bool getX509SubjectFromFile(const std::string &filename, std::string &result)
void StatisticsSenderService::setCurrentServer ( const std::string &  servername)

Definition at line 141 of file StatisticsSenderService.cc.

References m_serverdomain, and m_serverhost.

Referenced by XrdAdaptor::RequestManager::updateCurrentServer().

141  {
142  size_t dot_pos = servername.find(".");
143  if (dot_pos == std::string::npos) {
144  m_serverhost = servername.substr(0, servername.find(":"));
145  m_serverdomain = "unknown";
146  } else {
147  m_serverhost = servername.substr(0, dot_pos);
148  m_serverdomain = servername.substr(dot_pos+1, servername.find(":")-dot_pos-1);
149  if (m_serverdomain.empty()) {
150  m_serverdomain = "unknown";
151  }
152  }
153 }
void StatisticsSenderService::setSize ( size_t  size)

Definition at line 156 of file StatisticsSenderService.cc.

References m_size, and findQualityFiles::size.

Referenced by TStorageFactoryFile::Initialize().

156  {
157  m_size = size;
158 }
tuple size
Write out results.

Member Data Documentation

std::string edm::storage::StatisticsSenderService::m_clientdomain
private

Definition at line 45 of file StatisticsSenderService.h.

Referenced by determineHostnames(), and fillUDP().

std::string edm::storage::StatisticsSenderService::m_clienthost
private

Definition at line 44 of file StatisticsSenderService.h.

Referenced by determineHostnames(), and fillUDP().

size_t edm::storage::StatisticsSenderService::m_counter
private

Definition at line 51 of file StatisticsSenderService.h.

Referenced by filePreCloseEvent(), and fillUDP().

std::string edm::storage::StatisticsSenderService::m_filelfn
private

Definition at line 48 of file StatisticsSenderService.h.

Referenced by filePreCloseEvent(), and fillUDP().

FileStatistics edm::storage::StatisticsSenderService::m_filestats
private

Definition at line 49 of file StatisticsSenderService.h.

Referenced by fillUDP().

std::string edm::storage::StatisticsSenderService::m_guid
private

Definition at line 50 of file StatisticsSenderService.h.

Referenced by fillUDP().

std::string edm::storage::StatisticsSenderService::m_serverdomain
private

Definition at line 47 of file StatisticsSenderService.h.

Referenced by fillUDP(), and setCurrentServer().

std::string edm::storage::StatisticsSenderService::m_serverhost
private

Definition at line 46 of file StatisticsSenderService.h.

Referenced by fillUDP(), and setCurrentServer().

ssize_t edm::storage::StatisticsSenderService::m_size
private

Definition at line 52 of file StatisticsSenderService.h.

Referenced by fillUDP(), and setSize().

std::string edm::storage::StatisticsSenderService::m_userdn
private

Definition at line 53 of file StatisticsSenderService.h.

Referenced by filePreCloseEvent(), fillUDP(), and StatisticsSenderService().