Logo
ApraPipes 1.0
Loading...
Searching...
No Matches
ArchiveSpaceManager.h
1#pragma once
2#include "Module.h"
3#include "AIPExceptions.h"
4#include "declarative/PropertyMacros.h"
5
7{
8public:
9 // Default constructor for declarative pipeline - validation happens in init()
14
15 ArchiveSpaceManagerProps(uint64_t _lowerWaterMark, uint64_t _upperWaterMark, string _pathToWatch, int _samplingFreq)
16 {
17 lowerWaterMark = _lowerWaterMark;
18 upperWaterMark = _upperWaterMark;
19 pathToWatch = _pathToWatch;
20 samplingFreq = _samplingFreq;
21 fps = 0.001;
22
24 }
25
26 ArchiveSpaceManagerProps(uint64_t maxSizeAllowed, string _pathToWatch, int _samplingFreq)
27 {
28 lowerWaterMark = maxSizeAllowed - (maxSizeAllowed / 10);
29 upperWaterMark = maxSizeAllowed;
30 pathToWatch = _pathToWatch;
31 samplingFreq = _samplingFreq;
32 fps = 0.001;
33
35 }
36
37 // Validation method - can be called from constructor or init()
38 void validateProps() const
39 {
40 if (pathToWatch.empty()) {
41 throw AIPException(AIP_FATAL, "pathToWatch cannot be empty");
42 }
43 auto totalSpace = boost::filesystem::space(pathToWatch);
44 if ((lowerWaterMark > upperWaterMark) || (upperWaterMark > totalSpace.capacity))
45 {
46 LOG_ERROR << "Please enter correct properties!";
47 std::string errorMsg = "Incorrect properties set for Archive Manager. TotalDiskCapacity <" + std::to_string(totalSpace.capacity) + ">lowerWaterMark<" + std::to_string(lowerWaterMark) + "> UpperWaterMark<" + std::to_string(upperWaterMark) + ">";
48 throw AIPException(AIP_FATAL, errorMsg);
49 }
50 }
51
52
53 uint64_t lowerWaterMark; // Lower disk space
54 uint64_t upperWaterMark; // Higher disk space
55 std::string pathToWatch;
58 {
59 return ModuleProps::getSerializeSize() + sizeof(lowerWaterMark) + sizeof(upperWaterMark) + sizeof(pathToWatch) + sizeof(samplingFreq);
60 }
61
62 // ============================================================
63 // Property Binding for Declarative Pipeline
64 // ============================================================
65 template<typename PropsT>
66 static void applyProperties(
67 PropsT& props,
68 const std::map<std::string, apra::ScalarPropertyValue>& values,
69 std::vector<std::string>& missingRequired
70 ) {
71 apra::applyProp(props.pathToWatch, "pathToWatch", values, true, missingRequired);
72 // Handle uint64_t via int64_t conversion
73 auto itLower = values.find("lowerWaterMark");
74 if (itLower != values.end()) {
75 if (auto* val = std::get_if<int64_t>(&itLower->second)) {
76 props.lowerWaterMark = static_cast<uint64_t>(*val);
77 }
78 } else {
79 missingRequired.push_back("lowerWaterMark");
80 }
81 auto itUpper = values.find("upperWaterMark");
82 if (itUpper != values.end()) {
83 if (auto* val = std::get_if<int64_t>(&itUpper->second)) {
84 props.upperWaterMark = static_cast<uint64_t>(*val);
85 }
86 } else {
87 missingRequired.push_back("upperWaterMark");
88 }
89 apra::applyProp(props.samplingFreq, "samplingFreq", values, false, missingRequired);
90 }
91
92 apra::ScalarPropertyValue getProperty(const std::string& propName) const {
93 if (propName == "pathToWatch") return pathToWatch;
94 if (propName == "lowerWaterMark") return static_cast<int64_t>(lowerWaterMark);
95 if (propName == "upperWaterMark") return static_cast<int64_t>(upperWaterMark);
96 if (propName == "samplingFreq") return static_cast<int64_t>(samplingFreq);
97 throw std::runtime_error("Unknown property: " + propName);
98 }
99
100 bool setProperty(const std::string& propName, const apra::ScalarPropertyValue& value) {
101 // All properties are static (can't change watched path after init)
102 return false;
103 }
104
105 static std::vector<std::string> dynamicPropertyNames() {
106 return {}; // No dynamically changeable properties
107 }
108
109private:
111
112 template <class Archive>
113 void serialize(Archive& ar, const unsigned int version)
114 {
115 ar& boost::serialization::base_object<ModuleProps>(*this);
116 ar& lowerWaterMark;
117 ar& upperWaterMark;
118 ar& pathToWatch;
119 ar& samplingFreq;
120 }
121};
122
123
125public:
127
129 }
130 bool init();
131 bool term();
132 uint64_t finalArchiveSpace = 0;
135
136protected:
137 bool produce();
138 bool validateInputPins();
139 bool validateOutputPins();
141 void addInputPin(framemetadata_sp& metadata, string& pinId);
142 bool handlePropsChange(frame_sp& frame);
143private:
144
145 class Detail;
146 boost::shared_ptr<Detail> mDetail;
147 bool checkDirectory = true;
148};
Definition ArchiveSpaceManager.h:7
bool setProperty(const std::string &propName, const apra::ScalarPropertyValue &value)
Definition ArchiveSpaceManager.h:100
static void applyProperties(PropsT &props, const std::map< std::string, apra::ScalarPropertyValue > &values, std::vector< std::string > &missingRequired)
Definition ArchiveSpaceManager.h:66
apra::ScalarPropertyValue getProperty(const std::string &propName) const
Definition ArchiveSpaceManager.h:92
ArchiveSpaceManagerProps(uint64_t maxSizeAllowed, string _pathToWatch, int _samplingFreq)
Definition ArchiveSpaceManager.h:26
std::string pathToWatch
Definition ArchiveSpaceManager.h:55
size_t getSerializeSize()
Definition ArchiveSpaceManager.h:57
int samplingFreq
Definition ArchiveSpaceManager.h:56
void serialize(Archive &ar, const unsigned int version)
Definition ArchiveSpaceManager.h:113
ArchiveSpaceManagerProps(uint64_t _lowerWaterMark, uint64_t _upperWaterMark, string _pathToWatch, int _samplingFreq)
Definition ArchiveSpaceManager.h:15
ArchiveSpaceManagerProps()
Definition ArchiveSpaceManager.h:10
uint64_t lowerWaterMark
Definition ArchiveSpaceManager.h:53
uint64_t upperWaterMark
Definition ArchiveSpaceManager.h:54
friend class boost::serialization::access
Definition ArchiveSpaceManager.h:110
static std::vector< std::string > dynamicPropertyNames()
Definition ArchiveSpaceManager.h:105
void validateProps() const
Definition ArchiveSpaceManager.h:38
Definition ArchiveSpaceManager.cpp:8
Definition ArchiveSpaceManager.h:124
bool validateInputOutputPins()
Definition ArchiveSpaceManager.cpp:148
bool produce()
Definition ArchiveSpaceManager.cpp:193
void setProps(ArchiveSpaceManagerProps &props)
Definition ArchiveSpaceManager.cpp:180
bool checkDirectory
Definition ArchiveSpaceManager.h:147
bool validateInputPins()
Definition ArchiveSpaceManager.cpp:138
boost::shared_ptr< Detail > mDetail
Definition ArchiveSpaceManager.h:146
bool handlePropsChange(frame_sp &frame)
Definition ArchiveSpaceManager.cpp:185
bool term()
Definition ArchiveSpaceManager.cpp:170
virtual ~ArchiveSpaceManager()
Definition ArchiveSpaceManager.h:128
bool init()
Definition ArchiveSpaceManager.cpp:159
void addInputPin(framemetadata_sp &metadata, string &pinId)
Definition ArchiveSpaceManager.cpp:153
bool validateOutputPins()
Definition ArchiveSpaceManager.cpp:143
ArchiveSpaceManager(ArchiveSpaceManagerProps _props)
Definition ArchiveSpaceManager.cpp:132
uint64_t finalArchiveSpace
Definition ArchiveSpaceManager.h:132
ArchiveSpaceManagerProps getProps()
Definition ArchiveSpaceManager.cpp:175
Definition Module.h:33
float fps
Definition Module.h:110
virtual size_t getSerializeSize()
Definition Module.h:101
Definition Module.h:151
void applyProp(T &member, const char *propName, const std::map< std::string, ScalarPropertyValue > &values, bool isRequired, std::vector< std::string > &missingRequired)
Definition PropertyMacros.h:36
std::variant< int64_t, double, bool, std::string > ScalarPropertyValue
Definition ModuleRegistry.h:30