00001 #include "artdaq/DAQdata/Globals.hh"
00002 #include "artdaq-core/Data/Fragment.hh"
00003 #include "artdaq-core/Utilities/ExceptionHandler.hh"
00004
00005 #include "artdaq-utilities/Plugins/MetricManager.hh"
00006 #include "cetlib/container_algorithms.h"
00007 #include "cetlib/filepath_maker.h"
00008 #include "fhiclcpp/ParameterSet.h"
00009 #include "fhiclcpp/make_ParameterSet.h"
00010 #include <boost/program_options.hpp>
00011
00012 #include <signal.h>
00013 #include <iostream>
00014 #include <memory>
00015 #include <utility>
00016 #include "artdaq/Application/DispatcherApp.hh"
00017 #include "artdaq/ExternalComms/MakeCommanderPlugin.hh"
00018 #include "artdaq/Application/LoadParameterSet.hh"
00019 #include "artdaq/BuildInfo/GetPackageBuildInfo.hh"
00020
00021 int main(int argc, char * argv[])
00022 {
00023 artdaq::configureMessageFacility("datalogger");
00024
00025 fhicl::ParameterSet config = LoadParameterSet(argc, argv);
00026
00027 std::string name = config.get<std::string>("application_name", "Dispatcher");
00028 auto rank = config.get<int>("rank", 0);
00029 TLOG_DEBUG(name + "Main") << "Setting application name to " << name << TLOG_ENDL;
00030
00031 TLOG_DEBUG(name + "Main") << "artdaq version " <<
00032 artdaq::GetPackageBuildInfo::getPackageBuildInfo().getPackageVersion()
00033 << ", built " <<
00034 artdaq::GetPackageBuildInfo::getPackageBuildInfo().getBuildTimestamp() << TLOG_ENDL;
00035
00036 artdaq::setMsgFacAppName(name, config.get<int>("id"));
00037
00038
00039 artdaq::DispatcherApp dl_app(rank, name);
00040
00041 auto auto_run = config.get<bool>("auto_run", false);
00042 if (auto_run) {
00043 int run = config.get<int>("run_number", 101);
00044 uint64_t timeout = config.get<uint64_t>("transition_timeout", 30);
00045 uint64_t timestamp = 0;
00046
00047 dl_app.do_initialize(config, timeout, timestamp);
00048 dl_app.do_start(art::RunID(run), timeout, timestamp);
00049
00050 TLOG_INFO(name) << "Running XMLRPC Commander. To stop, either Control-C or " << std::endl
00051 << "xmlrpc http://`hostname`:" << config.get<int>("id") << "/RPC2 daq.stop" << std::endl
00052 << "xmlrpc http://`hostname`:" << config.get<int>("id") << "/RPC2 daq.shutdown" << TLOG_ENDL;
00053 }
00054
00055 auto commander = artdaq::MakeCommanderPlugin(config, dl_app);
00056 commander->run_server();
00057 }