LCOV - code coverage report
Current view: top level - confmodel/pybindsrc - dal_methods.cpp (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 125 0
Test Date: 2026-03-29 15:29:34 Functions: 0.0 % 15 0

            Line data    Source code
       1              : /**
       2              :  * @file dal_methods.cpp
       3              :  *
       4              :  * This is part of the DUNE DAQ Software Suite, copyright 2020.
       5              :  * Licensing/copyright details are in the COPYING file that you should have
       6              :  * received with this code.
       7              :  */
       8              : 
       9              : #include "pybind11/operators.h"
      10              : #include "pybind11/pybind11.h"
      11              : #include "pybind11/stl.h"
      12              : 
      13              : #include "confmodel/Application.hpp"
      14              : #include "confmodel/DaqApplication.hpp"
      15              : #include "confmodel/DetectorToDaqConnection.hpp"
      16              : #include "confmodel/DetectorStream.hpp"
      17              : #include "confmodel/DetDataReceiver.hpp"
      18              : #include "confmodel/DetDataSender.hpp"
      19              : #include "confmodel/HostComponent.hpp"
      20              : #include "confmodel/RCApplication.hpp"
      21              : #include "confmodel/Session.hpp"
      22              : 
      23              : 
      24              : #include <sstream>
      25              : 
      26              : namespace py = pybind11;
      27              : using namespace dunedaq::conffwk;
      28              : 
      29              : namespace dunedaq::confmodel::python {
      30              : 
      31              :   struct ObjectLocator {
      32            0 :     ObjectLocator(const std::string& id_arg, const std::string& class_name_arg) :
      33            0 :       id(id_arg), class_name(class_name_arg)
      34            0 :       {}
      35              :     const std::string id;
      36              :     const std::string class_name;
      37              :   };
      38              : 
      39              : 
      40              :   std::vector<ObjectLocator>
      41            0 :   session_get_all_applications(Configuration& db,
      42              :                                const std::string& session_name) {
      43            0 :     auto session=db.get<Session>(session_name);
      44            0 :     std::vector<ObjectLocator> apps;
      45            0 :     for (auto app : session->all_applications()) {
      46            0 :       apps.push_back({app->UID(),app->class_name()});
      47            0 :     }
      48            0 :     return apps;
      49            0 :   }
      50              : 
      51              :   std::vector<ObjectLocator>
      52            0 :   session_get_enabled_applications(Configuration& db,
      53              :                                    const std::string& session_name) {
      54            0 :     auto session=db.get<Session>(session_name);
      55            0 :     std::vector<ObjectLocator> apps;
      56            0 :     for (auto app : session->enabled_applications()) {
      57            0 :       apps.push_back({app->UID(),app->class_name()});
      58            0 :     }
      59            0 :     return apps;
      60            0 :   }
      61              : 
      62              : 
      63            0 :   void disable_component(Configuration& db,
      64              :                          const std::string& session_id,
      65              :                          const std::string& component_id) {
      66            0 :     auto session_ptr = const_cast<dunedaq::confmodel::Session*>(db.get<dunedaq::confmodel::Session>(session_id));
      67            0 :     auto component_ptr = db.get<dunedaq::confmodel::Resource>(component_id);
      68            0 :     if (session_ptr == nullptr) {
      69            0 :       throw (std::runtime_error(std::format("Session {} not found", session_id)));
      70              :     }
      71            0 :     if (component_ptr == nullptr) {
      72            0 :       throw (std::runtime_error(std::format("Component {} not found", component_id)));
      73              :     }
      74            0 :     session_ptr->disable(component_ptr);
      75            0 :   }
      76            0 :   void enable_component(Configuration& db,
      77              :                          const std::string& session_id,
      78              :                          const std::string& component_id) {
      79            0 :     auto session_ptr = const_cast<dunedaq::confmodel::Session*>(db.get<dunedaq::confmodel::Session>(session_id));
      80            0 :     auto component_ptr = db.get<dunedaq::confmodel::Resource>(component_id);
      81            0 :     if (session_ptr == nullptr) {
      82            0 :       throw (std::runtime_error(std::format("Session {} not found", session_id)));
      83              :     }
      84            0 :     if (component_ptr == nullptr) {
      85            0 :       throw (std::runtime_error(std::format("Component {} not found", component_id)));
      86              :     }
      87            0 :     session_ptr->enable(component_ptr);
      88            0 :   }
      89              : 
      90              : 
      91            0 :   bool component_disabled(Configuration& db,
      92              :                           const std::string& session_id,
      93              :                           const std::string& component_id) {
      94            0 :     const dunedaq::confmodel::Session* session_ptr = db.get<dunedaq::confmodel::Session>(session_id);
      95            0 :     const dunedaq::confmodel::Resource* component_ptr = db.get<dunedaq::confmodel::Resource>(component_id);
      96            0 :     if (component_ptr == nullptr) {
      97              :       return false;
      98              :     }
      99            0 :     return component_ptr->is_disabled(*session_ptr);
     100              :   }
     101              : 
     102              : 
     103            0 :   std::vector<std::vector<ObjectLocator>> component_get_parents(Configuration& db,
     104              :                                                                 const std::string& session_id,
     105              :                                                                 const std::string& component_id) {
     106            0 :     const dunedaq::confmodel::Session* session_ptr = db.get<dunedaq::confmodel::Session>(session_id);
     107            0 :     const dunedaq::confmodel::Resource* component_ptr = db.get<dunedaq::confmodel::Resource>(component_id);
     108              : 
     109            0 :     std::list<std::vector<const dunedaq::confmodel::Resource*>> parents;
     110            0 :     std::vector<std::vector<ObjectLocator>> parent_ids;
     111              : 
     112            0 :     component_ptr->parents(*session_ptr, parents);
     113              : 
     114            0 :     for (const auto& parent : parents) {
     115            0 :       std::vector<ObjectLocator> parents_components;
     116            0 :       for (const auto& ancestor_component_ptr : parent) {
     117            0 :         parents_components.emplace_back(
     118            0 :           ObjectLocator(ancestor_component_ptr->UID(),
     119            0 :                         ancestor_component_ptr->class_name()) );
     120              :       }
     121            0 :       parent_ids.emplace_back(parents_components);
     122            0 :     }
     123            0 :     return parent_ids;
     124            0 :   }
     125              : 
     126            0 :   std::vector<std::string> daq_application_get_used_hostresources(Configuration& db, const std::string& app_id) {
     127            0 :     auto app = db.get<dunedaq::confmodel::DaqApplication>(app_id);
     128            0 :     std::vector<std::string> resources;
     129            0 :     for (auto res : app->get_used_hostresources()) {
     130            0 :       resources.push_back(res->UID());
     131            0 :     }
     132            0 :     return resources;
     133            0 :   }
     134              : 
     135            0 :   std::vector<std::string> daq_application_construct_commandline_parameters(Configuration& db,
     136              :                                                                             const std::string& session_id,
     137              :                                                                             const std::string& app_id) {
     138            0 :     const auto* app = db.get<dunedaq::confmodel::DaqApplication>(app_id);
     139            0 :     const auto* session = db.get<dunedaq::confmodel::Session>(session_id);
     140            0 :     return app->construct_commandline_parameters(db, session);
     141              :   }
     142              : 
     143            0 :   std::vector<std::string> rc_application_construct_commandline_parameters(Configuration& db,
     144              :                                                                            const std::string& session_id,
     145              :                                                                            const std::string& app_id) {
     146            0 :     const auto* app = db.get<dunedaq::confmodel::RCApplication>(app_id);
     147            0 :     const auto* session = db.get<dunedaq::confmodel::Session>(session_id);
     148            0 :     return app->construct_commandline_parameters(db, session);
     149              :   }
     150              : 
     151              : 
     152            0 :   std::string d2d_receiver(Configuration& db,
     153              :                            const std::string& d2d_id) {
     154            0 :     const auto* d2d = db.get<dunedaq::confmodel::DetectorToDaqConnection>(d2d_id);
     155            0 :     if (d2d == nullptr) {
     156            0 :       return "";
     157              :     }
     158            0 :     return d2d->receiver()->UID();
     159              :   }
     160              : 
     161            0 :   std::vector<std::string> d2d_senders(Configuration& db,
     162              :                                        const std::string& d2d_id) {
     163            0 :     std::vector<std::string> senders;
     164            0 :     const auto* d2d = db.get<dunedaq::confmodel::DetectorToDaqConnection>(d2d_id);
     165            0 :     if (d2d != nullptr) {
     166            0 :       for (auto sender: d2d->senders()) {
     167            0 :         senders.push_back(sender->UID());
     168            0 :       }
     169              :     }
     170            0 :     return senders;
     171            0 :   }
     172              : 
     173            0 :   std::vector<std::string> d2d_streams(Configuration& db,
     174              :                                        const std::string& d2d_id) {
     175            0 :     std::vector<std::string> streams;
     176            0 :     const auto* d2d = db.get<dunedaq::confmodel::DetectorToDaqConnection>(d2d_id);
     177            0 :     if (d2d != nullptr) {
     178            0 :       for (auto stream: d2d->streams()) {
     179            0 :         streams.push_back(stream->UID());
     180            0 :       }
     181              :     }
     182            0 :     return streams;
     183            0 :   }
     184              : 
     185              :   std::vector<std::string>
     186            0 :   resourceset_contains(Configuration& db,
     187              :                        const std::string& res_id) {
     188            0 :     std::vector<std::string> resources;
     189            0 :     auto res_set = db.get<dunedaq::confmodel::ResourceSet>(res_id);
     190            0 :     if (res_set != nullptr) {
     191            0 :       for (auto res: res_set->contained_resources()) {
     192            0 :         resources.push_back(res->UID());
     193            0 :       }
     194              :     }
     195            0 :     return resources;
     196            0 :   }
     197              : 
     198              : 
     199              : void
     200            0 : register_dal_methods(py::module& m)
     201              : {
     202            0 :   py::class_<ObjectLocator>(m, "ObjectLocator")
     203            0 :     .def(py::init<const std::string&, const std::string&>())
     204            0 :     .def_readonly("id", &ObjectLocator::id)
     205            0 :     .def_readonly("class_name", &ObjectLocator::class_name)
     206              :     ;
     207              : 
     208            0 :   m.def("session_get_all_applications", &session_get_all_applications, "Get list of ALL applications (regardless of enabled/disabled state) in the requested session");
     209            0 :   m.def("session_get_enabled_applications", &session_get_enabled_applications, "Get list of enabled applications in the requested session");
     210              : 
     211            0 :   m.def("disable_component", &disable_component, "Disable a Resource-derived object (e.g. a Segment)");
     212            0 :   m.def("enable_component", &enable_component, "Enable a Resource-derived object (e.g. a Segment)");
     213              : 
     214            0 :   m.def("component_disabled", &component_disabled, "Determine if a Resource-derived object (e.g. a Segment) has been disabled");
     215            0 :   m.def("component_get_parents", &component_get_parents, "Get the Resource-derived class instances of the parent(s) of the Resource-derived object in question");
     216            0 :   m.def("daqapp_get_used_resources", &daq_application_get_used_hostresources, "Get list of HostResources used by DAQApplication");
     217            0 :   m.def("daq_application_construct_commandline_parameters", &daq_application_construct_commandline_parameters, "Get a version of the command line agruments parsed");
     218            0 :   m.def("rc_application_construct_commandline_parameters", &rc_application_construct_commandline_parameters, "Get a version of the command line agruments parsed");
     219              : 
     220            0 :   m.def("d2d_receiver", &d2d_receiver, "Get receiver associated with DetectorToDaqConnection");
     221            0 :   m.def("d2d_senders", &d2d_senders, "Get senders associated with DetectorToDaqConnection");
     222            0 :   m.def("d2d_streams", &d2d_streams, "Get streams associated with DetectorToDaqConnection");
     223            0 :   m.def("resourceset_contains", &resourceset_contains, "Get contained Resources from ResourceSet");
     224            0 : }
     225              : 
     226              : } // namespace dunedaq::confmodel::python
        

Generated by: LCOV version 2.0-1