XRootD
XrdStatsFile.hh
Go to the documentation of this file.
1 
2 #pragma once
3 
5 #include "XrdSys/XrdSysError.hh"
6 #include "XrdStatsFileSystem.hh"
7 
8 #include <memory>
9 
10 class XrdSecEntity;
11 
12 class StatsFile : public XrdOssWrapDF {
13 public:
14  StatsFile(std::unique_ptr<XrdOssDF> wrapDF, XrdSysError &log, StatsFileSystem &oss) :
16  m_wrapped(std::move(wrapDF)),
17  m_log(log),
18  m_oss(oss)
19  {}
20 
21  virtual ~StatsFile();
22 
23  int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) override
24  {
25  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);
26  return wrapDF.Open(path, Oflag, Mode, env);
27  }
28 
29  int Fchmod(mode_t mode) override
30  {
31  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);
32  return wrapDF.Fchmod(mode);
33  }
34 
35  void Flush() override
36  {
37  return wrapDF.Flush();
38  }
39 
40  int Fstat(struct stat *buf) override
41  {
42  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);
43  return wrapDF.Fstat(buf);
44  }
45 
46  int Fsync() override
47  {
48  return wrapDF.Fsync();
49  }
50 
51  int Fsync(XrdSfsAio *aiop) override
52  {
53  return wrapDF.Fsync(aiop);
54  }
55 
56  int Ftruncate(unsigned long long size) override
57  {
58  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);
59  return wrapDF.Ftruncate(size);
60  }
61 
62  off_t getMmap(void **addr) override
63  {
64  return wrapDF.getMmap(addr);
65  }
66 
67  int isCompressed(char *cxidp=0) override
68  {
69  return wrapDF.isCompressed(cxidp);
70  }
71 
72  ssize_t pgRead (void* buffer, off_t offset, size_t rdlen,
73  uint32_t* csvec, uint64_t opts) override
74  {
75  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);
76  return wrapDF.pgRead(buffer, offset, rdlen, csvec, opts);
77  }
78 
79  int pgRead (XrdSfsAio* aioparm, uint64_t opts) override
80  {
81  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);
82  return wrapDF.pgRead(aioparm, opts);
83  }
84 
85  ssize_t pgWrite(void* buffer, off_t offset, size_t wrlen,
86  uint32_t* csvec, uint64_t opts) override
87  {
88  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);
89  return wrapDF.pgWrite(buffer, offset, wrlen, csvec, opts);
90  }
91 
92  int pgWrite(XrdSfsAio* aioparm, uint64_t opts) override
93  {
94  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);
95  return wrapDF.pgWrite(aioparm, opts);
96  }
97 
98  ssize_t Read(off_t offset, size_t size) override
99  {
100  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);
101  return wrapDF.Read(offset, size);
102  }
103 
104  ssize_t Read(void *buffer, off_t offset, size_t size) override
105  {
106  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);
107  return wrapDF.Read(buffer, offset, size);
108  }
109 
110  int Read(XrdSfsAio *aiop) override
111  {
112  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);
113  return wrapDF.Read(aiop);
114  }
115 
116  ssize_t ReadRaw(void *buffer, off_t offset, size_t size) override
117  {
118  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);
119  return wrapDF.ReadRaw(buffer, offset, size);
120  }
121 
122  ssize_t ReadV(XrdOucIOVec *readV, int rdvcnt) override
123  {
124  auto start = std::chrono::steady_clock::now();
125  auto result = wrapDF.ReadV(readV, rdvcnt);
126  auto dur = std::chrono::steady_clock::now() - start;
127  m_oss.m_ops.m_readv_ops++;
128  m_oss.m_ops.m_readv_segs += rdvcnt;
129  auto ns = std::chrono::nanoseconds(dur).count();
130  m_oss.m_times.m_readv += ns;
131  if (dur > m_oss.m_slow_duration) {
132  m_oss.m_slow_ops.m_readv_ops++;
133  m_oss.m_slow_ops.m_readv_segs += rdvcnt;
134  m_oss.m_times.m_readv += std::chrono::nanoseconds(dur).count();
135  }
136  return result;
137  }
138 
139  ssize_t Write(const void *buffer, off_t offset, size_t size) override
140  {
141  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);
142  return wrapDF.Write(buffer, offset, size);
143  }
144 
145  int Write(XrdSfsAio *aiop) override
146  {
147  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);
148  return wrapDF.Write(aiop);
149  }
150 
151  ssize_t WriteV(XrdOucIOVec *writeV, int wrvcnt) override
152  {
153  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);
154  return wrapDF.WriteV(writeV, wrvcnt);
155  }
156 
157  int Close(long long *retsz=0) override
158  {
159  return wrapDF.Close(retsz);
160  }
161 
162 private:
163  std::unique_ptr<XrdOssDF> m_wrapped;
164  XrdSysError &m_log;
165  const XrdSecEntity* m_client;
166  StatsFileSystem &m_oss;
167 
168 };
int stat(const char *path, struct stat *buf)
int Mode
struct myOpts opts
off_t getMmap(void **addr) override
Definition: XrdStatsFile.hh:62
int Ftruncate(unsigned long long size) override
Definition: XrdStatsFile.hh:56
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
Definition: XrdStatsFile.hh:29
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
Definition: XrdStatsFile.hh:85
ssize_t Write(const void *buffer, off_t offset, size_t size) override
int pgRead(XrdSfsAio *aioparm, uint64_t opts) override
Definition: XrdStatsFile.hh:79
void Flush() override
Flush filesystem cached pages for this file (used for checksums).
Definition: XrdStatsFile.hh:35
int pgWrite(XrdSfsAio *aioparm, uint64_t opts) override
Definition: XrdStatsFile.hh:92
int isCompressed(char *cxidp=0) override
Definition: XrdStatsFile.hh:67
int Fstat(struct stat *buf) override
Definition: XrdStatsFile.hh:40
StatsFile(std::unique_ptr< XrdOssDF > wrapDF, XrdSysError &log, StatsFileSystem &oss)
Definition: XrdStatsFile.hh:14
ssize_t Read(off_t offset, size_t size) override
Definition: XrdStatsFile.hh:98
ssize_t pgRead(void *buffer, off_t offset, size_t rdlen, uint32_t *csvec, uint64_t opts) override
Definition: XrdStatsFile.hh:72
int Fsync(XrdSfsAio *aiop) override
Definition: XrdStatsFile.hh:51
int Close(long long *retsz=0) override
int Write(XrdSfsAio *aiop) override
int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) override
Definition: XrdStatsFile.hh:23
virtual ~StatsFile()
Definition: XrdStatsFile.cc:4
int Fsync() override
Definition: XrdStatsFile.hh:46
virtual int Fsync()
Definition: XrdOss.hh:144
virtual ssize_t WriteV(XrdOucIOVec *writeV, int wrvcnt)
Definition: XrdOss.cc:257
virtual int isCompressed(char *cxidp=0)
Definition: XrdOss.hh:187
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 Close(long long *retsz=0)=0
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 void Flush()
Flush filesystem cached pages for this file (used for checksums).
Definition: XrdOss.hh:126
virtual off_t getMmap(void **addr)
Definition: XrdOss.hh:176
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