File indexing completed on 2025-12-16 09:24:01
0001 #include <CDBUtils.C>
0002
0003 #include <TSystem.h>
0004
0005 std::map<std::string, std::string> md5map;
0006 std::string md5sumfile;
0007
0008 void loadmd5map(const std::string &fname);
0009 int md5check(const std::string &cdbfname, const std::string &fname);
0010 int insertpl(const std::string &fname, const std::string &ptype, int runnumber);
0011 int checkpl(const std::string &fname, const std::string &ptype, int runnumber);
0012 int insertplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun);
0013 int checkplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun);
0014 int insertplinfinity(const std::string &fname, const std::string &ptype, int runnumber);
0015 int checkplinfinity(const std::string &fname, const std::string &ptype, int runnumber);
0016
0017 int checkpl(const std::string &fname, const std::string &ptype, int runnumber)
0018 {
0019 std::string cdbres = getCalibration(ptype, runnumber);
0020 if (cdbres.empty() || cdbres.find(fname) == std::string::npos)
0021 {
0022 std::cout << fname << " not in cdb, inserting it" << std::endl;
0023 insertpl(fname, ptype, runnumber);
0024 }
0025 else
0026 {
0027 int iret = md5check(cdbres, fname);
0028 switch (iret)
0029 {
0030 case 0:
0031
0032 break;
0033 case 1:
0034 std::cout << fname << " will be overwritten with new md5sum" << std::endl;
0035 insertpl(fname, ptype, runnumber);
0036 break;
0037 case -1:
0038 std::cout << "could not find " << fname << " in " << md5sumfile << " doing nothing" << std::endl;
0039 break;
0040 default:
0041 std::cout << "strange return from md5check(" << cdbres << ", "
0042 << fname << ")" << " doing nothing" << std::endl;
0043 break;
0044 }
0045 }
0046 return 0;
0047 }
0048
0049 int checkplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun)
0050 {
0051 std::string cdbres = getCalibration(ptype, runnumber);
0052 if (cdbres.empty() || cdbres.find(fname) == std::string::npos)
0053 {
0054 std::cout << fname << " not in cdb, inserting it" << std::endl;
0055 insertplrunrange(fname, ptype, runnumber, endrun);
0056 }
0057 else
0058 {
0059 int iret = md5check(cdbres, fname);
0060 switch (iret)
0061 {
0062 case 0:
0063
0064 break;
0065 case 1:
0066 std::cout << fname << " will be overwritten with new md5sum" << std::endl;
0067 insertplrunrange(fname, ptype, runnumber, endrun);
0068 break;
0069 case -1:
0070 std::cout << "could not find " << fname << " in " << md5sumfile << " doing nothing" << std::endl;
0071 break;
0072 default:
0073 std::cout << "strange return from md5check(" << cdbres << ", "
0074 << fname << ")" << " doing nothing" << std::endl;
0075 break;
0076 }
0077 }
0078 return 0;
0079 }
0080
0081 int checkplinfinity(const std::string &fname, const std::string &ptype, int runnumber)
0082 {
0083 std::string cdbres = getCalibration(ptype, runnumber);
0084 if (cdbres.empty() || cdbres.find(fname) == std::string::npos)
0085 {
0086 std::cout << fname << " not in cdb, inserting it" << std::endl;
0087 insertplinfinity(fname, ptype, runnumber);
0088 }
0089 else
0090 {
0091 int iret = md5check(cdbres, fname);
0092 switch (iret)
0093 {
0094 case 0:
0095
0096 break;
0097 case 1:
0098 std::cout << fname << " will be overwritten with new md5sum" << std::endl;
0099 insertplinfinity(fname, ptype, runnumber);
0100 break;
0101 case -1:
0102 std::cout << "could not find " << fname << " in " << md5sumfile << " doing nothing" << std::endl;
0103 break;
0104 default:
0105 std::cout << "strange return from md5check(" << cdbres << ", "
0106 << fname << ")" << " doing nothing" << std::endl;
0107 break;
0108 }
0109 }
0110 return 0;
0111 }
0112
0113 int insertpl(const std::string &fname, const std::string &ptype, int runnumber)
0114 {
0115 insertPayload(ptype, fname, runnumber, runnumber + 1);
0116
0117 return 0;
0118 }
0119
0120 int insertplrunrange(const std::string &fname, const std::string &ptype, int runnumber, int endrun)
0121 {
0122 std::cout << "insert " << fname << ", from " << runnumber << " to "
0123 << endrun << std::endl;
0124 insertPayload(ptype, fname, runnumber, endrun + 1);
0125
0126 return 0;
0127 }
0128
0129 int insertplinfinity(const std::string &fname, const std::string &ptype, int runnumber)
0130 {
0131
0132 std::cout << "insert " << fname << ", from " << runnumber << " to end of time" << std::endl;
0133 insertPayload(ptype, fname, runnumber);
0134
0135 return 0;
0136 }
0137
0138 void loadmd5map(const std::string &fname)
0139 {
0140 md5sumfile = fname;
0141 std::ifstream infile(fname);
0142 if (infile.is_open())
0143 {
0144 std::string line;
0145 while (std::getline(infile, line))
0146 {
0147 std::istringstream istr(line);
0148 std::string md5;
0149 std::string cdbfile;
0150 istr >> md5;
0151 istr >> cdbfile;
0152 md5map[cdbfile] = md5;
0153 }
0154 infile.close();
0155
0156
0157
0158
0159 }
0160 else
0161 {
0162 std::cout << "could not open " << fname << std::endl;
0163 gSystem->Exit(1);
0164 }
0165 }
0166
0167 int md5check(const std::string &cdbfname, const std::string &fname)
0168 {
0169 std::filesystem::path fullfile(cdbfname);
0170 std::string lfn = fullfile.stem();
0171 std::filesystem::path fullfname(fname);
0172 int pos = lfn.find(fullfname.stem());
0173 pos--;
0174
0175 lfn.erase(pos);
0176 auto iter = md5map.find(fname);
0177 if (iter != md5map.end())
0178 {
0179
0180 if (iter->second == lfn)
0181 {
0182
0183 return 0;
0184 }
0185 return 1;
0186 }
0187 return -1;
0188 }
0189
0190 int checkrunrange(const std::string &fname, const std::string &ptype, int beginrun, int endrun)
0191 {
0192 int iret = 0;
0193 for (int irun = beginrun; irun <= endrun; irun++)
0194 {
0195 if (irun % 1000 == 0)
0196 {
0197 std::cout << "checking " << irun << std::endl;
0198 }
0199 std::string cdbres = getCalibration(ptype,irun);
0200 if (cdbres.empty())
0201 {
0202 std::cout << "no " << ptype << " calibration for run " << irun << std::endl;
0203 iret = -1;
0204 continue;
0205 }
0206 if (cdbres.find(fname) == std::string::npos)
0207 {
0208 std::cout << "calibration mismatch for " << ptype << " calibration, expected " << fname << ", read back "
0209 << cdbres << std::endl;
0210 iret = -2;
0211 continue;
0212 }
0213 int md5ret = md5check(cdbres,fname);
0214 if (md5ret != 0)
0215 {
0216 std::cout << "md5sum check failed" << std::endl;
0217 iret = -3;
0218 }
0219 }
0220 return iret;
0221 }