CARMA C++
VisBrickWriterStage.h
1 #ifndef CARMA_PIPELINE_VISBRICKWRITERSTAGE_H
2 #define CARMA_PIPELINE_VISBRICKWRITERSTAGE_H
3 
4 #include "carma/pipeline/Stage.h"
5 
6 #include "carma/util/ConcurrentQueue.h"
7 #include "carma/util/PthreadMutex.h"
8 #include "carma/util/SimpleStatisticsAccumulators.h"
9 #include "carma/util/ThreadQuit.h"
10 
11 #include <iosfwd>
12 #include <fstream>
13 #include <string>
14 
15 namespace carma {
16 
17 namespace correlator {
18 namespace lib {
19  class CorrelatorData;
20 } } // namespace correlator::lib
21 
22 namespace monitor {
23  class PipelineSubsystem;
24 } // namespace monitor
25 
26 namespace pipeline {
27 
31 class VisBrickWriter : public Stage {
32 public:
33 
38 
42  VisBrickWriter( const std::string & filename,
44 
48  virtual ~VisBrickWriter();
49 
50  void setIsScienceData(bool isScienceData) ;
51 
52 private:
53 
54  void preprocess( carma::correlator::lib::CorrelatorDataPtr cd );
55 
56  void processBand( carma::correlator::lib::CorrelatorBand * cb );
57 
58  carma::correlator::lib::CorrelatorDataPtr
59  postprocess( carma::correlator::lib::CorrelatorDataPtr cd );
60 
61  struct Shared;
62 
63  void fillMonitorData( );
64 
65  bool checkFileStream( const std::ofstream & fp,
66  const std::string & filename,
67  const std::string & attemptedOpString );
68 
69  static void visbrickWriteThread( VisBrickWriter & This );
70 
71  class VisbrickWriteTQRH : public carma::util::ThreadQuitRequestHandler {
72  public:
73 
74  explicit VisbrickWriteTQRH( VisBrickWriter & dad );
75 
76  virtual ~VisbrickWriteTQRH( );
77 
78  void HandleQuitRequest( ::pthread_t thread );
79 
80  private:
81 
82  VisBrickWriter & dad_;
83  };
84 
85  struct Shared { // Data internally shared amongst threads.
86 
87  Shared( );
88 
89  mutable carma::util::PthreadMutex mutex;
90  carma::util::FloatStatAccumulator fileWriteTimeAcc;
91  double lastFileWriteTimeMs;
92  double lastSerializationTimeMs;
93  bool fileError;
94  bool isScienceData;
95  };
96 
97  struct WriteRequest {
98  std::string filename;
99  bool createNewFile;
100  carma::correlator::lib::CorrelatorDataPtr data;
101  };
102 
103  Shared shared_;
104 
105  carma::util::ConcurrentQueue< WriteRequest > writeRequestQueue_;
106 
107  // File current record will be written to
108  std::string currentFilename_;
109  float mbWrittenOrPending_; // Refers to current file
110  const int maxFilesize_;
111 
112  const std::string outputFilenameBase_;
113 
114  carma::monitor::PipelineSubsystem & monitorData_;
115 
116  ::pthread_t visbrickWriteThreadId_;
117 
118 }; // class VisBrickWriter
119 
120 } } // namespace carma::pipeline
121 
122 #endif // CARMA_PIPELINE_VISBRICKWRITERSTAGE_H
Concrete class for writing out Correlator Data to a File.
Base interface for a correlator pipeline stage.
Definition: Stage.h:39
virtual ~VisBrickWriter()
Destructor.
Class to hold a Band of Correlator Data.
VisBrickWriter(carma::monitor::PipelineSubsystem &monitor)
Constructor.
Tagged: Wed Jun 29 11:00:27 PDT 2005.
Abstract base class for retrieving pipeline monitor system components common between the spectral lin...
A simple wrapper class that makes use of ::pthread_mutex_t easier in a C++ world. ...
Definition: PthreadMutex.h:41