ARC SDK
DataDeliveryComm.h
1 #ifndef DATA_DELIVERY_COMM_H_
2 #define DATA_DELIVERY_COMM_H_
3 
4 #include "DTR.h"
5 
6 namespace DataStaging {
7 
8  class DataDeliveryCommHandler;
9 
11 
28 
29  friend class DataDeliveryCommHandler;
30 
31  public:
40  };
42  #pragma pack(4)
43 
45  struct Status {
47  time_t timestamp;
51  char error_desc[1024];
52  unsigned int streams;
53  unsigned long long int transferred;
54  unsigned long long int offset;
55  unsigned long long int size;
56  unsigned int speed;
57  char checksum[128];
58  unsigned long long int transfer_time;
59  };
60  #pragma pack()
61 
62  protected:
63 
69  unsigned int status_pos_;
71  Glib::Mutex lock_;
80 
82 
87  virtual void PullStatus() = 0;
88 
90 
94  DataDeliveryComm(DTR_ptr dtr, const TransferParameters& params);
95 
96  public:
98  static DataDeliveryComm* CreateInstance(DTR_ptr dtr, const TransferParameters& params);
99 
101  virtual ~DataDeliveryComm() {};
102 
104  Status GetStatus() const;
105 
107 
114  static bool CheckComm(DTR_ptr dtr, std::vector<std::string>& allowed_dirs, std::string& load_avg);
115 
117  std::string GetError() const { return status_.error_desc; };
118 
120  virtual operator bool() const = 0;
122  virtual bool operator!() const = 0;
123  };
124 
126 
131 
132  private:
133  Glib::Mutex lock_;
134  static void func(void* arg);
135  std::list<DataDeliveryComm*> items_;
136  static DataDeliveryCommHandler* comm_handler;
137 
142 
143  public:
146  void Add(DataDeliveryComm* item);
148  void Remove(DataDeliveryComm* item);
151  };
152 
153 } // namespace DataStaging
154 
155 #endif // DATA_DELIVERY_COMM_H_
void Add(DataDeliveryComm *item)
Add a new DataDeliveryComm instance to the handler.
DataDeliveryCommHandler * handler_
Pointer to singleton handler of all DataDeliveryComm objects.
Definition: DataDeliveryComm.h:73
time_t timestamp
Time when information was generated (filled externally)
Definition: DataDeliveryComm.h:47
unsigned long long int transfer_time
Time in ns to complete transfer (0 if not completed)
Definition: DataDeliveryComm.h:58
DTRStatusType
Possible state values.
Definition: DTRStatus.h:21
DTRErrorStatus::DTRErrorLocation error_location
Where error happened.
Definition: DataDeliveryComm.h:50
Status status_buf_
Latest status of transfer is read into this buffer.
Definition: DataDeliveryComm.h:67
Communication going on smoothly.
Definition: DataDeliveryComm.h:35
DTRErrorStatus::DTRErrorStatusType error
Error type.
Definition: DataDeliveryComm.h:49
A class for storing and manipulating times.
Definition: DateTime.h:125
virtual ~DataDeliveryComm()
Destroy object. This stops any ongoing transfer and cleans up resources.
Definition: DataDeliveryComm.h:101
Status status_
Current status of transfer.
Definition: DataDeliveryComm.h:65
unsigned int status_pos_
Reading position of Status buffer.
Definition: DataDeliveryComm.h:69
static DataDeliveryCommHandler * getInstance()
Get the singleton instance of the handler.
virtual bool operator!() const =0
Returns true if transfer is currently not active.
Represents limits and properties of a DTR transfer. These generally apply to all DTRs.
Definition: DTR.h:91
char error_desc[1024]
Error description.
Definition: DataDeliveryComm.h:51
Status GetStatus() const
Obtain status of transfer.
Communication experienced timeout.
Definition: DataDeliveryComm.h:36
DTRErrorStatusType
A list of error types.
Definition: DTRStatus.h:213
Arc::Time start_
Time transfer was started.
Definition: DataDeliveryComm.h:77
DataStaging contains all components for data transfer scheduling and execution.
Definition: DataDelivery.h:12
unsigned int streams
Number of transfer streams active.
Definition: DataDeliveryComm.h:52
DTRStatus::DTRStatusType status
Generic status.
Definition: DataDeliveryComm.h:48
virtual void PullStatus()=0
Check for new state and fill state accordingly.
std::string GetError() const
Get explanation of error.
Definition: DataDeliveryComm.h:117
Transfer exited. Mostly same as CommClosed but exit detected before pipe closed.
Definition: DataDeliveryComm.h:38
TransferParameters transfer_params
Transfer limits.
Definition: DataDeliveryComm.h:75
Plain C struct to pass information from executing process back to main thread.
Definition: DataDeliveryComm.h:45
char checksum[128]
Calculated checksum.
Definition: DataDeliveryComm.h:57
CommStatusType
Communication status with transfer.
Definition: DataDeliveryComm.h:33
Initializing/starting transfer, rest of information not valid.
Definition: DataDeliveryComm.h:34
DTRErrorLocation
Describes where the error occurred.
Definition: DTRStatus.h:247
static DataDeliveryComm * CreateInstance(DTR_ptr dtr, const TransferParameters &params)
Factory method to get DataDeliveryComm instance.
DTRLogger logger_
Logger object. Pointer to DTR&#39;s Logger.
Definition: DataDeliveryComm.h:79
unsigned int speed
Current transfer speed in bytes/sec during last ~minute.
Definition: DataDeliveryComm.h:56
Glib::Mutex lock_
Lock to protect access to status.
Definition: DataDeliveryComm.h:71
void Remove(DataDeliveryComm *item)
Remove a DataDeliveryComm instance from the handler.
This class provides an abstract interface for the Delivery layer.
Definition: DataDeliveryComm.h:27
Definition: DataDeliveryComm.h:39
unsigned long long int offset
Last position to which file has no missing pieces.
Definition: DataDeliveryComm.h:54
DataDeliveryComm(DTR_ptr dtr, const TransferParameters &params)
Start transfer with parameters taken from DTR and supplied transfer limits.
unsigned long long int size
File size as obtained by protocol.
Definition: DataDeliveryComm.h:55
CommStatusType commstatus
Communication state (filled by main thread)
Definition: DataDeliveryComm.h:46
unsigned long long int transferred
Number of bytes transferred.
Definition: DataDeliveryComm.h:53
static bool CheckComm(DTR_ptr dtr, std::vector< std::string > &allowed_dirs, std::string &load_avg)
Check the delivery method is available. Calls CheckComm of the appropriate subclass.
Communication channel was closed.
Definition: DataDeliveryComm.h:37
Singleton class handling all active DataDeliveryComm objects.
Definition: DataDeliveryComm.h:130