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__