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