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 : }
|