LCOV - code coverage report
Current view: top level - confmodel/apps - list_apps.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 0.0 % 82 0
Test Date: 2026-10-11 15:05:20 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/ExcludableEntitySet.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              : void
      19            0 : process_segment(const Session* session,
      20              :                 const Segment* segment,
      21              :                 const std::set<std::string>& excluded_objects,
      22              :                 std::string spacer)
      23              : {
      24            0 :   std::cout << spacer << "Segment " << segment->UID();
      25            0 :   bool segment_excluded = segment->is_excluded(*session);
      26            0 :   std::string reason = "";
      27            0 :   if (segment_excluded) {
      28            0 :     std::cout << " excluded";
      29            0 :     reason = "segment";
      30              :   }
      31            0 :   std::cout << "\n";
      32            0 :   for (auto subseg : segment->get_segments()) {
      33            0 :     process_segment(session, subseg, excluded_objects, spacer + "  ");
      34              :   }
      35              : 
      36            0 :   for (auto app : segment->get_applications()) {
      37            0 :     bool excluded = segment_excluded;
      38            0 :     std::cout << spacer << "  Application: " << app->UID();
      39            0 :     if (!excluded) {
      40            0 :       auto rset = app->cast<ExcludableEntitySet>();
      41            0 :       if (rset) {
      42            0 :         if (rset->is_excluded(*session)) {
      43            0 :           excluded = true;
      44            0 :           if (excluded_objects.find(app->UID()) != excluded_objects.end()) {
      45            0 :             reason = "directly";
      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_excludable_entities()) {
      53            0 :           std::cout << seperator << mod->UID();
      54            0 :           if (mod->is_excluded(*session)) {
      55            0 :             std::cout << "<excluded ";
      56            0 :             if (excluded_objects.find(mod->UID()) == excluded_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 (excluded) {
      67            0 :       std::cout << " <excluded " << 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              : int
      82            0 : main(int argc, char* argv[])
      83              : {
      84              : 
      85            0 :   if (argc < 2) {
      86            0 :     std::cout << "Usage: " << argv[0] << " [session] database-file\n";
      87            0 :     return 0;
      88              :   }
      89              : 
      90            0 :   int filearg = 1;
      91            0 :   if (argc == 3) {
      92            0 :     filearg = 2;
      93              :   }
      94            0 :   std::string confimpl = "oksconflibs:" + std::string(argv[filearg]);
      95            0 :   auto confdb = new conffwk::Configuration(confimpl);
      96              : 
      97            0 :   std::vector<std::string> sessionList;
      98            0 :   if (argc == 3) {
      99            0 :     sessionList.emplace_back(std::string(argv[1]));
     100              :   } else {
     101            0 :     std::vector<conffwk::ConfigObject> session_obj;
     102            0 :     confdb->get("Session", session_obj);
     103            0 :     if (session_obj.size() == 0) {
     104            0 :       std::cerr << "Can't find any Sessions in database\n";
     105            0 :       return -1;
     106              :     }
     107            0 :     for (auto obj : session_obj) {
     108            0 :       sessionList.push_back(obj.UID());
     109            0 :     }
     110            0 :   }
     111            0 :   dunedaq::logging::Logging::setup(sessionList[0], "list-apps");
     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: " << sessionName << "\n";
     123            0 :     std::set<std::string> excluded_objects;
     124            0 :     for (auto object : session->get_excluded()) {
     125            0 :       TLOG_DEBUG(11) << object->UID() << " is in excluded list of Session";
     126            0 :       excluded_objects.insert(object->UID());
     127              :     }
     128              : 
     129            0 :     process_segment(session, session->get_segment(), excluded_objects, "");
     130            0 :     separator = "\n   ----------------------------------------------\n\n";
     131            0 :   }
     132            0 :   delete confdb;
     133            0 : }
        

Generated by: LCOV version 2.0-1