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