24 return probeReturn::Probe_Ok;
31 virtual void handle_buffer(
const Buffer& buffer) {
32 PYBIND11_OVERRIDE_PURE_NAME(
46 return ret ? probeReturn::Probe_Ok:probeReturn::Probe_Drop;
53 virtual bool handle_buffer(Buffer buffer) {
54 PYBIND11_OVERRIDE_PURE_NAME(
70 return probeReturn::Probe_Ok;
86 virtual void handle_metadata(BatchMetadata& metadata) {
87 PYBIND11_OVERRIDE_PURE_NAME(
98 class Probe :
public BufferProbe {
101 : BufferProbe(name, handler)
105 : BufferProbe(name, factory, handler)
109 : BufferProbe(name, handler)
113 : BufferProbe(name, factory, handler)
117 : BufferProbe(name, handler)
121 : BufferProbe(name, factory, handler)
126 metadata_handler_.release();
129 static unique_ptr<Probe>
create(
const string&
plugin,
const string& name) {
130 auto obj = CommonFactory::getInstance().createObject(
plugin, name).release();
132 return unique_ptr<Probe>(probe);
143 class __attribute__((visibility("hidden"))) PythonProbeFactory :
public CustomFactory {
144 py::object py_class_;
146 string factory_name_;
148 PythonProbeFactory(
const string& name, py::object py_class,
string param_spec)
149 : CustomFactory(name, 0)
150 , py_class_(py_class), param_spec_(param_spec), factory_name_(name) {}
152 CustomObject* createObject(
const string& instance_name)
override {
153 py::gil_scoped_acquire gil;
154 py::object py_instance = py_class_();
155 Probe* probe =
nullptr;
156 const char* factory_name = factory_name_.c_str();
157 if (py::isinstance<BufferObserver_>(py_instance)) {
159 py_instance.release();
160 probe =
new Probe(instance_name, factory_name, obs);
163 py_instance.release();
164 probe =
new Probe(instance_name, factory_name, handler);
172 Value get_(
const std::string& property_name)
override {
173 if (property_name ==
"param-spec") {
174 return Value(param_spec_);
187 .def(
"set", [](
Probe&
self, py::dict args) {
188 for (
auto item : args) {
189 string key = item.first.cast<
string>();
190 Object::Value value = item.second.cast<Object::Value>();
191 self.set(key, value);
205 m.def(
"_register_probe",
206 [](
const string& name, py::object cls,
const string& param_spec) {
207 CommonFactory::getInstance().addCustomFactory(
208 new PythonProbeFactory(name, cls, param_spec), name.c_str());
210 py::arg(
"name"), py::arg(
"cls"), py::arg(
"param_spec") = string(
""));