LCOV - code coverage report
Current view: top level - confmodel/apps - list_apps.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 84 0
Test Date: 2025-12-21 13:07:08 Functions: 0.0 % 3 0

            Line data    Source code
       1              : #include "logging/Logging.hpp"
       2              : 
       3              : #include "conffwk/Configuration.hpp"
       4              : 
       5              : #include "confmodel/DaqApplication.hpp"
       6              : #include "confmodel/DaqModule.hpp"
       7              : #include "confmodel/ResourceSet.hpp"
       8              : #include "confmodel/Segment.hpp"
       9              : #include "confmodel/Session.hpp"
      10              : 
      11              : #include <iostream>
      12              : //#include <set>
      13              : #include <string>
      14              : 
      15              : using namespace dunedaq;
      16              : using namespace dunedaq::confmodel;
      17              : 
      18              : 
      19            0 : void process_segment(const Session* session,
      20              :                      const Segment* segment,
      21              :                      const std::set<std::string>& disabled_objects,
      22              :                      std::string spacer) {
      23            0 :   std::cout << spacer << "Segment " << segment->UID();
      24            0 :   bool segment_disabled = segment->is_disabled(*session);
      25            0 :   std::string reason = "";
      26            0 :   if (segment_disabled) {
      27            0 :     std::cout << " disabled";
      28            0 :     reason = "segment";
      29              :   }
      30            0 :   std::cout << "\n";
      31            0 :   for (auto subseg : segment->get_segments()) {
      32            0 :     process_segment (session, subseg, disabled_objects, spacer+"  ");
      33              :   }
      34              : 
      35            0 :   for (auto app : segment->get_applications()) {
      36            0 :     bool disabled = segment_disabled;
      37            0 :     std::cout << spacer << "  Application: " << app->UID();
      38            0 :     if (!disabled) {
      39            0 :       auto rset = app->cast<ResourceSet>();
      40            0 :       if (rset) {
      41            0 :         if (rset->is_disabled(*session)) {
      42            0 :           disabled = true;
      43            0 :           if (disabled_objects.find(app->UID()) != disabled_objects.end()) {
      44            0 :             reason = "directly";
      45              :           }
      46              :           else {
      47            0 :             reason = "due to state of related objects";
      48              :           }
      49              :         }
      50            0 :         std::cout << " contains: {";
      51            0 :         std::string seperator = "";
      52            0 :         for (auto mod : rset->contained_resources()) {
      53            0 :           std::cout << seperator << mod->UID();
      54            0 :           if (mod->is_disabled(*session)) {
      55            0 :             std::cout << "<disabled ";
      56            0 :             if (disabled_objects.find(mod->UID()) == disabled_objects.end()) {
      57            0 :               std::cout << "in";
      58              :             }
      59            0 :             std::cout << "directly>";
      60              :           }
      61            0 :           seperator = ", ";
      62            0 :         }
      63            0 :         std::cout << "}";
      64            0 :       }
      65              :     }
      66            0 :     if (disabled) {
      67            0 :       std::cout << " <disabled "<< reason << ">";
      68              :     }
      69            0 :     auto daqApp = app->cast<DaqApplication>();
      70            0 :     if (daqApp) {
      71            0 :       std::cout << " Modules:";
      72            0 :       for (auto mod : daqApp->get_modules()) {
      73            0 :         std::cout << " " << mod->UID();
      74              :       }
      75              :     }
      76              : 
      77            0 :     std::cout << std::endl;
      78              :   }
      79            0 : }
      80              : 
      81            0 : int main(int argc, char* argv[]) {
      82              : 
      83            0 :   if (argc < 2) {
      84            0 :     std::cout << "Usage: " << argv[0] << " [session] database-file\n";
      85            0 :     return 0;
      86              :   }
      87              : 
      88            0 :   int filearg = 1;
      89            0 :   if (argc == 3) {
      90            0 :     filearg = 2;
      91              :   }
      92            0 :   std::string confimpl = "oksconflibs:" + std::string(argv[filearg]);
      93            0 :   auto confdb = new conffwk::Configuration(confimpl);
      94              : 
      95            0 :   std::vector<std::string> sessionList;
      96            0 :   if (argc == 3) {
      97            0 :     sessionList.emplace_back(std::string(argv[1]));
      98              :   }
      99              :   else {
     100            0 :     std::vector<conffwk::ConfigObject> session_obj;
     101            0 :     confdb->get("Session", session_obj);
     102            0 :     if (session_obj.size() == 0) {
     103            0 :       std::cerr << "Can't find any Sessions in database\n";
     104            0 :       return -1;
     105              :     }
     106            0 :     for (auto obj : session_obj) {
     107            0 :       sessionList.push_back(obj.UID());
     108            0 :     }
     109            0 :   }
     110            0 :   dunedaq::logging::Logging::setup(sessionList[0], "list-apps"
     111              :   );
     112              : 
     113            0 :   std::string separator{};
     114            0 :   for (const auto& sessionName : sessionList) {
     115            0 :     const Session* session;
     116            0 :     session = confdb->get<Session>(sessionName);
     117            0 :     if (session==nullptr) {
     118            0 :       std::cerr << "Session " << sessionName << " not found in database\n";
     119            0 :       return -1;
     120              :     }
     121              : 
     122            0 :     std::cout << separator << "      Applications in Session: "
     123            0 :               << sessionName << "\n";
     124            0 :     std::set<std::string> disabled_objects;
     125            0 :     for (auto object : session->get_disabled()) {
     126            0 :       TLOG_DEBUG(11) << object->UID() << " is in disabled list of Session";
     127            0 :       disabled_objects.insert(object->UID());
     128              :     }
     129              : 
     130            0 :     process_segment (session, session->get_segment(),
     131              :                      disabled_objects,
     132              :                      "");
     133            0 :     separator =
     134            0 :       "\n   ----------------------------------------------\n\n";
     135            0 :   }
     136            0 :   delete confdb;
     137            0 : }
        

Generated by: LCOV version 2.0-1