XRootD
XrdOssStatsFile.hh
Go to the documentation of this file.
1 
2 #ifndef __XRDSTATS_FILE_H
3 #define __XRDSTATS_FILE_H
4 
6 #include "XrdSys/XrdSysError.hh"
8 
9 #include <memory>
10 
11 class XrdSecEntity;
12 
13 class StatsFile : public XrdOssWrapDF {
14 public:
15  StatsFile(std::unique_ptr<XrdOssDF> wrapDF, XrdSysError &log, StatsFileSystem &oss) :
17  m_wrapped(std::move(wrapDF)),
18  m_log(log),
19  m_oss(oss)
20  {}
21 
22  virtual ~StatsFile();
23 
24  int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) override
25  {
26  StatsFileSystem::OpTimer op(m_oss.m_ops.m_open_ops, m_oss.m_slow_ops.m_open_ops, m_oss.m_times.m_open, m_oss.m_slow_times.m_open, m_oss.m_slow_duration);
27  return wrapDF.Open(path, Oflag, Mode, env);
28  }
29 
30  int Fchmod(mode_t mode) override
31  {
32  StatsFileSystem::OpTimer op(m_oss.m_ops.m_chmod_ops, m_oss.m_slow_ops.m_chmod_ops, m_oss.m_times.m_chmod, m_oss.m_slow_times.m_chmod, m_oss.m_slow_duration);
33  return wrapDF.Fchmod(mode);
34  }
35 
36  int Fstat(struct stat *buf) override
37  {
38  StatsFileSystem::OpTimer op(m_oss.m_ops.m_stat_ops, m_oss.m_slow_ops.m_stat_ops, m_oss.m_times.m_stat, m_oss.m_slow_times.m_stat, m_oss.m_slow_duration);
39  return wrapDF.Fstat(buf);
40  }
41 
42  int Ftruncate(unsigned long long size) override
43  {
44  StatsFileSystem::OpTimer op(m_oss.m_ops.m_truncate_ops, m_oss.m_slow_ops.m_truncate_ops, m_oss.m_times.m_truncate, m_oss.m_slow_times.m_truncate, m_oss.m_slow_duration);
45  return wrapDF.Ftruncate(size);
46  }
47 
48  ssize_t pgRead (void* buffer, off_t offset, size_t rdlen,
49  uint32_t* csvec, uint64_t opts) override
50  {
51  StatsFileSystem::OpTimer op(m_oss.m_ops.m_pgread_ops, m_oss.m_slow_ops.m_pgread_ops, m_oss.m_times.m_pgread, m_oss.m_slow_times.m_pgread, m_oss.m_slow_duration);
52  return wrapDF.pgRead(buffer, offset, rdlen, csvec, opts);
53  }
54 
55  int pgRead (XrdSfsAio* aioparm, uint64_t opts) override
56  {
57  StatsFileSystem::OpTimer op(m_oss.m_ops.m_pgread_ops, m_oss.m_slow_ops.m_pgread_ops, m_oss.m_times.m_pgread, m_oss.m_slow_times.m_pgread, m_oss.m_slow_duration);
58  return wrapDF.pgRead(aioparm, opts);
59  }
60 
61  ssize_t pgWrite(void* buffer, off_t offset, size_t wrlen,
62  uint32_t* csvec, uint64_t opts) override
63  {
64  StatsFileSystem::OpTimer op(m_oss.m_ops.m_pgwrite_ops, m_oss.m_slow_ops.m_pgwrite_ops, m_oss.m_times.m_pgwrite, m_oss.m_slow_times.m_pgwrite, m_oss.m_slow_duration);
65  return wrapDF.pgWrite(buffer, offset, wrlen, csvec, opts);
66  }
67 
68  int pgWrite(XrdSfsAio* aioparm, uint64_t opts) override
69  {
70  StatsFileSystem::OpTimer op(m_oss.m_ops.m_pgwrite_ops, m_oss.m_slow_ops.m_pgwrite_ops, m_oss.m_times.m_pgwrite, m_oss.m_slow_times.m_pgwrite, m_oss.m_slow_duration);
71  return wrapDF.pgWrite(aioparm, opts);
72  }
73 
74  ssize_t Read(off_t offset, size_t size) override
75  {
76  StatsFileSystem::OpTimer op(m_oss.m_ops.m_read_ops, m_oss.m_slow_ops.m_read_ops, m_oss.m_times.m_read, m_oss.m_slow_times.m_read, m_oss.m_slow_duration);
77  return wrapDF.Read(offset, size);
78  }
79 
80  ssize_t Read(void *buffer, off_t offset, size_t size) override
81  {
82  StatsFileSystem::OpTimer op(m_oss.m_ops.m_read_ops, m_oss.m_slow_ops.m_read_ops, m_oss.m_times.m_read, m_oss.m_slow_times.m_read, m_oss.m_slow_duration);
83  return wrapDF.Read(buffer, offset, size);
84  }
85 
86  int Read(XrdSfsAio *aiop) override
87  {
88  StatsFileSystem::OpTimer op(m_oss.m_ops.m_read_ops, m_oss.m_slow_ops.m_read_ops, m_oss.m_times.m_read, m_oss.m_slow_times.m_read, m_oss.m_slow_duration);
89  return wrapDF.Read(aiop);
90  }
91 
92  ssize_t ReadRaw(void *buffer, off_t offset, size_t size) override
93  {
94  StatsFileSystem::OpTimer op(m_oss.m_ops.m_read_ops, m_oss.m_slow_ops.m_read_ops, m_oss.m_times.m_read, m_oss.m_slow_times.m_read, m_oss.m_slow_duration);
95  return wrapDF.ReadRaw(buffer, offset, size);
96  }
97 
98  ssize_t ReadV(XrdOucIOVec *readV, int rdvcnt) override
99  {
100  auto start = std::chrono::steady_clock::now();
101  auto result = wrapDF.ReadV(readV, rdvcnt);
102  auto dur = std::chrono::steady_clock::now() - start;
103  m_oss.m_ops.m_readv_ops++;
104  m_oss.m_ops.m_readv_segs += rdvcnt;
105  auto ns = std::chrono::nanoseconds(dur).count();
106  m_oss.m_times.m_readv += ns;
107  if (dur > m_oss.m_slow_duration) {
108  m_oss.m_slow_ops.m_readv_ops++;
109  m_oss.m_slow_ops.m_readv_segs += rdvcnt;
110  m_oss.m_times.m_readv += std::chrono::nanoseconds(dur).count();
111  }
112  return result;
113  }
114 
115  ssize_t Write(const void *buffer, off_t offset, size_t size) override
116  {
117  StatsFileSystem::OpTimer op(m_oss.m_ops.m_write_ops, m_oss.m_slow_ops.m_write_ops, m_oss.m_times.m_write, m_oss.m_slow_times.m_write, m_oss.m_slow_duration);
118  return wrapDF.Write(buffer, offset, size);
119  }
120 
121  int Write(XrdSfsAio *aiop) override
122  {
123  StatsFileSystem::OpTimer op(m_oss.m_ops.m_write_ops, m_oss.m_slow_ops.m_write_ops, m_oss.m_times.m_write, m_oss.m_slow_times.m_write, m_oss.m_slow_duration);
124  return wrapDF.Write(aiop);
125  }
126 
127  ssize_t WriteV(XrdOucIOVec *writeV, int wrvcnt) override
128  {
129  StatsFileSystem::OpTimer op(m_oss.m_ops.m_write_ops, m_oss.m_slow_ops.m_write_ops, m_oss.m_times.m_write, m_oss.m_slow_times.m_write, m_oss.m_slow_duration);
130  return wrapDF.WriteV(writeV, wrvcnt);
131  }
132 
133 private:
134  std::unique_ptr<XrdOssDF> m_wrapped;
135  XrdSysError &m_log;
136  const XrdSecEntity* m_client;
137  StatsFileSystem &m_oss;
138 
139 };
140 
141 #endif
int stat(const char *path, struct stat *buf)
int Mode
struct myOpts opts
int Ftruncate(unsigned long long size) override
ssize_t ReadRaw(void *buffer, off_t offset, size_t size) override
ssize_t ReadV(XrdOucIOVec *readV, int rdvcnt) override
ssize_t WriteV(XrdOucIOVec *writeV, int wrvcnt) override
int Fchmod(mode_t mode) override
int Read(XrdSfsAio *aiop) override
ssize_t Read(void *buffer, off_t offset, size_t size) override
ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts) override
ssize_t Write(const void *buffer, off_t offset, size_t size) override
int pgRead(XrdSfsAio *aioparm, uint64_t opts) override
int pgWrite(XrdSfsAio *aioparm, uint64_t opts) override
int Fstat(struct stat *buf) override
StatsFile(std::unique_ptr< XrdOssDF > wrapDF, XrdSysError &log, StatsFileSystem &oss)
ssize_t Read(off_t offset, size_t size) override
ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts) override
int Write(XrdSfsAio *aiop) override
int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) override
virtual ~StatsFile()
virtual ssize_t WriteV(XrdOucIOVec *writeV, int wrvcnt)
Definition: XrdOss.cc:257
virtual int Ftruncate(unsigned long long flen)
Definition: XrdOss.hh:164
virtual int Fstat(struct stat *buf)
Definition: XrdOss.hh:136
virtual ssize_t ReadRaw(void *buffer, off_t offset, size_t size)
Definition: XrdOss.hh:319
virtual int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env)
Definition: XrdOss.hh:200
virtual ssize_t Read(off_t offset, size_t size)
Definition: XrdOss.hh:281
virtual int Fchmod(mode_t mode)
Definition: XrdOss.hh:120
virtual ssize_t pgWrite(void *buffer, off_t offset, size_t wrlen, uint32_t *csvec, uint64_t opts)
Definition: XrdOss.cc:198
virtual ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts)
Definition: XrdOss.cc:160
virtual ssize_t ReadV(XrdOucIOVec *readV, int rdvcnt)
Definition: XrdOss.cc:236
virtual ssize_t Write(const void *buffer, off_t offset, size_t size)
Definition: XrdOss.hh:345
XrdOssDF & wrapDF