ARC SDK
DataSpeed.h
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_DATASPEED_H__
4 #define __ARC_DATASPEED_H__
5 
6 #include <string>
7 
8 #include <arc/Logger.h>
9 
10 #define DATASPEED_AVERAGING_PERIOD 60
11 
12 namespace Arc {
13 
15 
20  class DataSpeed {
21  private:
22  time_t first_time;
23  time_t last_time;
24  time_t last_activity_time;
25  unsigned long long int N;
26  unsigned long long int Nall;
27  unsigned long long int Nmax;
28  time_t first_speed_failure;
29  time_t last_printed;
30 
31  time_t T;
32  time_t min_speed_time;
33  time_t max_inactivity_time;
34  unsigned long long int min_speed;
35  unsigned long long int min_average_speed;
36  bool be_verbose;
37  std::string verbose_prefix;
38 
39  bool min_speed_failed;
40  bool min_average_speed_failed;
41  bool max_inactivity_time_failed;
42 
43  bool disabled;
44  static Logger logger;
45 
46  public:
48 
59  typedef void (*show_progress_t)(FILE *o, const char *s, unsigned int t,
60  unsigned long long int all,
61  unsigned long long int max,
62  double instant, double average);
63  private:
64  show_progress_t show_progress;
65  void print_statistics(FILE *o, time_t t);
66  public:
68 
71  DataSpeed(time_t base = DATASPEED_AVERAGING_PERIOD);
73 
84  DataSpeed(unsigned long long int min_speed, time_t min_speed_time,
85  unsigned long long int min_average_speed,
86  time_t max_inactivity_time,
87  time_t base = DATASPEED_AVERAGING_PERIOD);
89  ~DataSpeed();
91  void verbose(bool val);
93  void verbose(const std::string& prefix);
95  bool verbose();
97 
103  void set_min_speed(unsigned long long int min_speed,
104  time_t min_speed_time);
106 
110  void set_min_average_speed(unsigned long long int min_average_speed);
112 
116  void set_max_inactivity_time(time_t max_inactivity_time);
118  time_t get_max_inactivity_time() { return max_inactivity_time; };
120  void set_base(time_t base_ = DATASPEED_AVERAGING_PERIOD);
122  void set_max_data(unsigned long long int max = 0);
124 
128  void set_progress_indicator(show_progress_t func = NULL);
130  void reset();
132 
138  bool transfer(unsigned long long int n = 0);
140  void hold(bool disable);
143  return min_speed_failed;
144  }
147  return min_average_speed_failed;
148  }
151  return max_inactivity_time_failed;
152  }
154  unsigned long long int transferred_size() {
155  return Nall;
156  }
157  };
158 
159 } // namespace Arc
160 
161 #endif // __ARC_DATASPEED_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
void set_min_average_speed(unsigned long long int min_average_speed)
Set minimal average speed in bytes per second.
void set_progress_indicator(show_progress_t func=NULL)
Specify an external function to print verbose messages.
Keeps track of average and instantaneous transfer speed.
Definition: DataSpeed.h:20
bool verbose()
Check if speed information is going to be printed.
unsigned long long int transferred_size()
Returns number of bytes transferred so far (this object knows about).
Definition: DataSpeed.h:154
time_t get_max_inactivity_time()
Get inactivity timeout.
Definition: DataSpeed.h:118
~DataSpeed()
Destructor.
A logger class.
Definition: Logger.h:493
bool min_speed_failure()
Check if minimal speed error was triggered.
Definition: DataSpeed.h:142
DataSpeed(time_t base=DATASPEED_AVERAGING_PERIOD)
Constructor.
void set_base(time_t base_=DATASPEED_AVERAGING_PERIOD)
Set averaging time period (default 1 minute).
void set_max_inactivity_time(time_t max_inactivity_time)
Set inactivity timeout.
void set_min_speed(unsigned long long int min_speed, time_t min_speed_time)
Set minimal allowed speed in bytes per second.
void(* show_progress_t)(FILE *o, const char *s, unsigned int t, unsigned long long int all, unsigned long long int max, double instant, double average)
Callback for output of transfer status.
Definition: DataSpeed.h:59
void reset()
Reset all counters and triggers.
bool max_inactivity_time_failure()
Check if maximal inactivity time error was triggered.
Definition: DataSpeed.h:150
bool transfer(unsigned long long int n=0)
Inform object that an amount of data has been transferred.
void hold(bool disable)
Turn and off off speed control.
bool min_average_speed_failure()
Check if minimal average speed error was triggered.
Definition: DataSpeed.h:146
void set_max_data(unsigned long long int max=0)
Set amount of data (in bytes) to be transferred. Used in verbose messages.