DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
list_apps.cxx File Reference
#include "logging/Logging.hpp"
#include "conffwk/Configuration.hpp"
#include "confmodel/Component.hpp"
#include "confmodel/DaqApplication.hpp"
#include "confmodel/DaqModule.hpp"
#include "confmodel/ResourceSet.hpp"
#include "confmodel/Segment.hpp"
#include "confmodel/Session.hpp"
#include <iostream>
#include <string>
Include dependency graph for list_apps.cxx:

Go to the source code of this file.

Functions

void process_segment (const confmodel::Session *session, const confmodel::Segment *segment, const std::set< std::string > &disabled_objects, std::string spacer)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 81 of file list_apps.cxx.

81 {
82
83 if (argc < 2) {
84 std::cout << "Usage: " << argv[0] << " [session] database-file\n";
85 return 0;
86 }
87
88 int filearg = 1;
89 if (argc == 3) {
90 filearg = 2;
91 }
92 std::string confimpl = "oksconflibs:" + std::string(argv[filearg]);
93 auto confdb = new conffwk::Configuration(confimpl);
94
95 std::vector<std::string> sessionList;
96 if (argc == 3) {
97 sessionList.emplace_back(std::string(argv[1]));
98 }
99 else {
100 std::vector<conffwk::ConfigObject> session_obj;
101 confdb->get("Session", session_obj);
102 if (session_obj.size() == 0) {
103 std::cerr << "Can't find any Sessions in database\n";
104 return -1;
105 }
106 for (auto obj : session_obj) {
107 sessionList.push_back(obj.UID());
108 }
109 }
110 dunedaq::logging::Logging::setup(sessionList[0], "list-apps"
111 );
112
113 std::string separator{};
114 for (const auto& sessionName : sessionList) {
115 const confmodel::Session* session;
116 session = confdb->get<confmodel::Session>(sessionName);
117 if (session==nullptr) {
118 std::cerr << "Session " << sessionName << " not found in database\n";
119 return -1;
120 }
121
122 std::cout << separator << " Applications in Session: "
123 << sessionName << "\n";
124 std::set<std::string> disabled_objects;
125 for (auto object : session->get_disabled()) {
126 TLOG_DEBUG(11) << object->UID() << " is in disabled list of Session";
127 disabled_objects.insert(object->UID());
128 }
129
130 process_segment (session, session->get_segment(),
131 disabled_objects,
132 "");
133 separator =
134 "\n ----------------------------------------------\n\n";
135 }
136}
static void setup(const std::string &session, const std::string &application)
Setup the Logger service Currently no args.
Definition Logging.hpp:32
void process_segment(const confmodel::Session *session, const confmodel::Segment *segment, const std::set< std::string > &disabled_objects, std::string spacer)
Definition list_apps.cxx:19
#define TLOG_DEBUG(lvl,...)
Definition Logging.hpp:112

◆ process_segment()

void process_segment ( const confmodel::Session * session,
const confmodel::Segment * segment,
const std::set< std::string > & disabled_objects,
std::string spacer )

Definition at line 19 of file list_apps.cxx.

22 {
23 std::cout << spacer << "Segment " << segment->UID();
24 bool segment_disabled = segment->disabled(*session);
25 std::string reason = "";
26 if (segment_disabled) {
27 std::cout << " disabled";
28 reason = "segment";
29 }
30 std::cout << "\n";
31 for (auto subseg : segment->get_segments()) {
32 process_segment (session, subseg, disabled_objects, spacer+" ");
33 }
34
35 for (auto app : segment->get_applications()) {
36 bool disabled = segment_disabled;
37 std::cout << spacer << " Application: " << app->UID();
38 if (!disabled) {
39 auto rset = app->cast<confmodel::ResourceSet>();
40 if (rset) {
41 if (rset->disabled(*session)) {
42 disabled = true;
43 if (disabled_objects.find(app->UID()) != disabled_objects.end()) {
44 reason = "directly";
45 }
46 else {
47 reason = "due to state of related objects";
48 }
49 }
50 std::cout << " contains: {";
51 std::string seperator = "";
52 for (auto mod : rset->get_contains()) {
53 std::cout << seperator << mod->UID();
54 if (mod->disabled(*session)) {
55 std::cout << "<disabled ";
56 if (disabled_objects.find(mod->UID()) == disabled_objects.end()) {
57 std::cout << "in";
58 }
59 std::cout << "directly>";
60 }
61 seperator = ", ";
62 }
63 std::cout << "}";
64 }
65 }
66 if (disabled) {
67 std::cout << " <disabled "<< reason << ">";
68 }
69 auto daqApp = app->cast<confmodel::DaqApplication>();
70 if (daqApp) {
71 std::cout << " Modules:";
72 for (auto mod : daqApp->get_modules()) {
73 std::cout << " " << mod->UID();
74 }
75 }
76
77 std::cout << std::endl;
78 }
79}
std::string const reason(ers::Issue const &)