22bool initOptionsAndParse(bpo::options_description& options,
int argc,
char* argv[], bpo::variables_map& vm)
24 options.add_options()(
25 "files,f", bpo::value<std::vector<std::string>>()->multitoken(),
"Space separated list of ROOT files holding (downloaded) CCDB object")(
26 "check-timestamp,t", bpo::value<long>()->default_value(-1),
"Checks that validity of objects is compatible with this timestamp. In millisecond")(
27 "help,h",
"Produce help message.");
30 bpo::store(parse_command_line(argc, argv, options), vm);
32 if (vm.count(
"help")) {
33 std::cout << options << std::endl;
37 }
catch (
const bpo::error& e) {
38 std::cerr << e.what() <<
"\n\n";
39 std::cerr <<
"Error parsing command line arguments; Available options:\n";
41 std::cerr << options << std::endl;
49int main(
int argc,
char* argv[])
51 bpo::options_description options(
"Tool to inspect meta-data content of downloaded CCDB objects. Allowed options:");
52 bpo::variables_map vm;
56 auto filenames = vm[
"files"].as<std::vector<std::string>>();
57 auto timestamp2bchecked = vm[
"check-timestamp"].as<
long>();
58 std::vector<std::string> filesWrongValidity;
60 for (
auto&
f : filenames) {
61 std::cout <<
"### Loading file : " <<
f <<
"\n";
62 TFile
file(
f.c_str());
65 auto keys =
file.GetListOfKeys();
67 std::cout <<
"--- found the following objects -----\n";
68 for (
int i = 0;
i < keys->GetEntries(); ++
i) {
69 auto key =
static_cast<TKey*
>(keys->At(
i));
71 std::cout <<
key->GetName() <<
" of type " <<
key->GetClassName() <<
"\n";
75 std::cout <<
"--- no objects found -----\n";
80 std::cout <<
"---found query info -----\n";
83 std::cout <<
"--- no query information found ------\n";
88 std::cout <<
"---found meta info -----\n";
89 for (
auto keyvalue : *meta) {
90 std::cout << keyvalue.first <<
" : " << keyvalue.second <<
"\n";
92 if (timestamp2bchecked > 0) {
95 auto valid_from = std::stol((*meta)[
"Valid-From"]);
96 auto valid_to = std::stol((*meta)[
"Valid-Until"]);
97 if (!(valid_from <= timestamp2bchecked) && (timestamp2bchecked <= valid_to)) {
98 std::cerr <<
"### ERROR: failed validity check for timestamp " << timestamp2bchecked <<
" not in [" << valid_from <<
":" << valid_to <<
"]\n";
99 filesWrongValidity.push_back(
f);
101 }
catch (std::exception e) {
103 filesWrongValidity.push_back(
f);
107 std::cout <<
"--- no meta information found ---\n";
111 if (filesWrongValidity.size() > 0) {
112 std::cerr <<
"### ERROR: Validity checks failed for:\n";
113 for (
auto&
f : filesWrongValidity) {
114 std::cerr <<
"### " <<
f <<
"\n";