24 #ifndef XRDCK_RECORDER_HH_
25 #define XRDCK_RECORDER_HH_
56 inline static Output& Instance()
58 Output& output = Get();
59 std::unique_lock<std::mutex> lck( output.mtx );
60 if( !output.IsValid() )
71 inline static Output& Get()
83 bool Write( std::unique_ptr<Action> action )
85 std::unique_lock<std::mutex> lck( mtx );
86 const std::string &entry = action->ToString();
90 int rc =
::write( fd, entry.c_str(), entry.size() );
99 while(
size_t( btsWritten ) < entry.size() );
110 fd =
open( path.c_str(), O_CREAT | O_WRONLY | O_TRUNC, 0644 );
124 void SetPath(
const std::string &path )
141 Output(
const Output& ) =
delete;
142 Output( Output&& ) =
delete;
143 Output& operator=(
const Output& ) =
delete;
144 Output& operator=( Output&& ) =
delete;
153 int rc =
close( fd );
175 RecordHandler( Output &output,
176 std::unique_ptr<Action> action,
179 action( std::move( action ) ),
194 action->RecordResult( status, response );
195 output.Write( std::move( action ) );
209 action->RecordResult( status, response );
210 output.Write( std::move( action ) );
217 std::unique_ptr<Action> action;
228 inline static void SetOutput(
const std::string &cfgpath )
230 static const std::string defaultpath =
"/tmp/xrdrecord.csv";
231 const char *envpath = getenv(
"XRD_RECORDERPATH" );
232 std::string path = envpath ? envpath :
233 ( !cfgpath.empty() ? cfgpath : defaultpath );
234 Output::Get().SetPath( path );
242 output( Output::Instance() )
251 return output.IsValid();
270 std::unique_ptr<Action> ptr(
new OpenAction(
this, url, flags, mode, timeout ) );
271 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
272 return file.
Open( url, flags, mode, recHandler, timeout );
281 std::unique_ptr<Action> ptr(
new CloseAction(
this, timeout ) );
282 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
283 return file.
Close( recHandler, timeout );
293 std::unique_ptr<Action> ptr(
new StatAction(
this, force, timeout ) );
294 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
295 return file.
Stat(force, recHandler, timeout);
308 std::unique_ptr<Action> ptr(
new ReadAction(
this, offset, size, timeout ) );
309 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
310 return file.
Read( offset, size, buffer, recHandler, timeout );
322 std::unique_ptr<Action> ptr(
new WriteAction(
this, offset, size, timeout ) );
323 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
324 return file.
Write( offset, size, buffer, recHandler, timeout );
336 std::unique_ptr<Action> ptr(
new PgReadAction(
this, offset, size, timeout ) );
337 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
338 return file.
PgRead( offset, size, buffer, recHandler, timeout );
347 std::vector<uint32_t> &cksums,
351 std::unique_ptr<Action> ptr(
new PgWriteAction(
this, offset, size, timeout ) );
352 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
353 return file.
PgWrite( offset, size, buffer, cksums, recHandler, timeout );
362 std::unique_ptr<Action> ptr(
new SyncAction(
this, timeout ) );
363 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
364 return file.
Sync( recHandler, timeout );
374 std::unique_ptr<Action> ptr(
new TruncateAction(
this, size, timeout ) );
375 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
376 return file.
Truncate(size, recHandler, timeout);
387 std::unique_ptr<Action> ptr(
new VectorReadAction(
this, chunks, timeout ) );
388 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
389 return file.
VectorRead(chunks, buffer, recHandler, timeout);
400 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
401 return file.
VectorWrite( chunks, recHandler, timeout );
411 std::unique_ptr<Action> ptr(
new FcntlAction(
this, arg, timeout ) );
412 RecordHandler *recHandler =
new RecordHandler( output, std::move( ptr ), handler );
413 return file.
Fcntl(arg, recHandler, timeout);
422 return file.
Visa(handler, timeout);
437 const std::string& value)
446 std::string& value)
const
int open(const char *path, int oflag,...)
ssize_t write(int fildes, const void *buf, size_t nbyte)
Binary blob representation.
static Log * GetLog()
Get default log.
An interface for file plug-ins.
XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus Close(ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
bool IsOpen() const
Check if the file is open.
XRootDStatus Truncate(uint64_t size, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus VectorRead(const ChunkList &chunks, void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus Fcntl(const Buffer &arg, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus Open(const std::string &url, OpenFlags::Flags flags, Access::Mode mode, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
bool GetProperty(const std::string &name, std::string &value) const
XRootDStatus Visa(ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
Get access token to a file - async.
XRootDStatus Write(uint64_t offset, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus Stat(bool force, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
bool SetProperty(const std::string &name, const std::string &value)
XRootDStatus Sync(ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus PgWrite(uint64_t offset, uint32_t size, const void *buffer, std::vector< uint32_t > &cksums, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
XRootDStatus VectorWrite(const ChunkList &chunks, ResponseHandler *handler, uint16_t timeout=0) XRD_WARN_UNUSED_RESULT
void Error(uint64_t topic, const char *format,...)
Report an error.
void Warning(uint64_t topic, const char *format,...)
Report a warning.
virtual XRootDStatus Open(const std::string &url, OpenFlags::Flags flags, Access::Mode mode, ResponseHandler *handler, uint16_t timeout)
Open.
virtual XRootDStatus Fcntl(const Buffer &arg, ResponseHandler *handler, uint16_t timeout)
Fcntl.
virtual XRootDStatus Sync(ResponseHandler *handler, uint16_t timeout)
Sync.
virtual XRootDStatus PgRead(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout)
virtual XRootDStatus Stat(bool force, ResponseHandler *handler, uint16_t timeout)
Stat.
virtual bool SetProperty(const std::string &name, const std::string &value)
SetProperty.
virtual bool IsOpen() const
IsOpen.
static void SetOutput(const std::string &cfgpath)
virtual XRootDStatus VectorWrite(const ChunkList &chunks, ResponseHandler *handler, uint16_t timeout)
VectorRead.
virtual XRootDStatus Truncate(uint64_t size, ResponseHandler *handler, uint16_t timeout)
Truncate.
virtual XRootDStatus Close(ResponseHandler *handler, uint16_t timeout)
Close.
virtual ~Recorder()
Destructor.
virtual bool GetProperty(const std::string &name, std::string &value) const
GetProperty.
virtual XRootDStatus Visa(ResponseHandler *handler, uint16_t timeout)
Visa.
virtual XRootDStatus PgWrite(uint64_t offset, uint32_t size, const void *buffer, std::vector< uint32_t > &cksums, ResponseHandler *handler, uint16_t timeout)
virtual XRootDStatus Read(uint64_t offset, uint32_t size, void *buffer, ResponseHandler *handler, uint16_t timeout)
Read.
virtual XRootDStatus Write(uint64_t offset, uint32_t size, const void *buffer, ResponseHandler *handler, uint16_t timeout)
Write.
virtual XRootDStatus VectorRead(const ChunkList &chunks, void *buffer, ResponseHandler *handler, uint16_t timeout)
VectorRead.
Handle an async response.
virtual void HandleResponseWithHosts(XRootDStatus *status, AnyObject *response, HostList *hostList)
virtual void HandleResponse(XRootDStatus *status, AnyObject *response)
std::vector< HostInfo > HostList
std::vector< ChunkInfo > ChunkList
List of chunks.
Flags
Open flags, may be or'd when appropriate.