CARMA C++
DataTransfer2.h
1 
11 #ifndef CARMA_ARCHIVE_DATATRANSFER_H_
12 #define CARMA_ARCHIVE_DATATRANSFER_H_
13 
15 #include "carma/monitor/DataflowSubsystem.h"
16 #include "carma/sdp/MiriadUV.h"
17 #include "carma/util/types.h"
18 
19 // C includes
20 #include <sys/types.h>
21 #include <dirent.h>
22 #include <stdio.h>
23 #include <zlib.h>
24 #include <errno.h>
25 
26 // Std C++ includes
27 #include <iostream>
28 #include <fstream>
29 #include <map>
30 #include <exception>
31 #include <vector>
32 #include <string>
33 
34 // Carma tools includes
35 #include "log4cpp/Category.hh"
36 #include "bgftp/ArchiveJni.h"
37 
38 namespace carma {
39 namespace archive {
40 
41 class DataTransfer
42 {
43  public:
47  DataTransfer(std::map<std::string, std::string> arv,
48  const carma::util::frameType startFrame,
49  const carma::util::frameType pollInterval,
50  const bool emulate = false );
51 
55  ~DataTransfer();
56 
63  int update(const std::vector<std::string> & p,
64  const std::vector<std::string> & dirs,
65  const std::string & filter);
66 
74  int move_mp(const std::vector<std::string> & p,
75  const std::vector<std::string> & dirs,
76  const std::string & filter);
77 
85  int move_sza(const std::vector<std::string> & p,
86  const std::vector<std::string> & dirs,
87  const std::string & filter);
88 
96  int move_qr(const std::vector<std::string> & p,
97  const std::string & dir,
98  const std::string & filter);
99 
103  void start(const std::vector<std::string> & p,
104  const std::vector<std::string> & dirs,
105  const std::string & filter);
106 
110  void stop();
111 
112  void updateMonitorPoints();
113 
114 
119  std::vector<std::string> getFiles(const std::string & dir, const std::string & filter);
120  std::vector<std::string> getSZAFiles(const std::string & dir);
121  std::vector<std::string> getQualityReports(const std::string & dir);
125  void setParams(const std::vector<std::string> & params, const std::string & filter);
126 
130  void gzip(const std::string & source, const std::string & dest);
131 
135  //void gunzip(std::string& source, std::string& dest);
136 
140  void writeTransferLog(const std::vector<std::string> & list);
141 
146  void writeTransferDB(const std::vector<std::string> & list, const bool append);
147 
151  void appendDoneList(const std::vector<std::string>& list);
152 
157  std::string getDate(const std::string & filename);
158 
162  std::string getYear(const std::string & filename);
163 
167  std::string getRange(const std::string & name);
168 
172  std::string logFile;
173 
177  std::vector<std::string> doneList;
178 
182  ArchiveJni *jniObj;
183 
187  std::string theDate;
188 
192  std::string theYear;
193 
197  std::string szaYear;
198 
203  std::string theRange;
204 
208  bool yearIsSet;
209 
213  bool szaYearIsSet;
214 
218  bool rangeIsSet;
219 
225  bool toAppend;
226 
230  TransferDB* db;
231  typedef enum xferFileTypeEnum {
232  FILE_ASTROHEADER,
233  FILE_MONITOR,
234  FILE_QUALITY,
235  FILE_SZA,
236  FILE_VISBRICK,
237  FILE_NONE
238  } xferFileType;
239 
246  void setLastTransferred( const size_t length, const xferFileType type );
247 
253  size_t fileTransferRate( const size_t intervalInMinutes );
254 
259  carma::util::frameType startFrame_;
260 
262  carma::util::frameType pollInterval_;
263 
265  bool emulate_;
266 
268  carma::util::frameType lastXferTime_;
269 
270  /* total number of files of all types transferred */
271  size_t numFilesXferred_;
272  /* number of astroheader files transferred */
273  size_t numAHXferred_;
274  /* number of monitor data files transferred */
275  size_t numMPXferred_;
276  /* number of visbrick files transferred */
277  size_t numVisbrickXferred_;
278  /* number of quality files transferred */
279  size_t numQualityXferred_;
280 
286  ::std::map<carma::util::frameType, size_t> fileXferRateMap_;
287 
291  carma::monitor::DataflowSubsystem dataflow_;
292 
293 };
294 
295 }} // namespace carma::archive
296 
297 #endif /*CARMA_ARCHIVE_DATATRANSFER_H_*/
unsigned int frameType
Half second frames since Jan 1, 2000.
Definition: types.h:29
Defines the abstract class MiriadUV and the specialization MiriadUVBin which define the interface for...
Various type definitions for util classes.
Class definition for TransferDB class.