Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SphenixClient.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file SphenixClient.cc
1 #include "SphenixClient.h"
2 
3 #include <nopayloadclient/exception.hpp> // for DataBaseException
4 #include <nopayloadclient/nopayloadclient.hpp>
5 
6 #include <nlohmann/json.hpp>
7 
8 #include <iostream>
9 #include <stdexcept>
10 
12  : nopayloadclient::NoPayloadClient(gt_name)
13  , m_CachedGlobalTag(gt_name)
14 {
15 }
16 
17 nlohmann::json SphenixClient::getPayloadIOVs(long long iov)
18 {
19  return nopayloadclient::NoPayloadClient::getPayloadIOVs(0, iov);
20 }
21 
22 nlohmann::json SphenixClient::getUrl(const std::string& pl_type, long long iov)
23 {
24  nlohmann::json resp = getPayloadIOVs(iov);
25  if (resp["code"] != 0)
26  {
27  return resp;
28  }
29  nlohmann::json payload_iovs = resp["msg"];
30  if (!payload_iovs.contains(pl_type))
31  {
32  return nopayloadclient::DataBaseException("No valid payload with type " + pl_type).jsonify();
33  }
34  nlohmann::json payload_iov = payload_iovs[pl_type];
35  if (m_Verbosity > 0)
36  {
37  std::cout << "pl_type: " << pl_type
38  << ", iov: " << iov
39  << ", minor_iov_start: " << payload_iov["minor_iov_start"]
40  << ", minor_iov_end: " << payload_iov["minor_iov_end"]
41  << std::endl;
42  }
43  if (payload_iov["minor_iov_end"] <= iov)
44  {
45  return nopayloadclient::DataBaseException("No valid payload with type " + pl_type).jsonify();
46  }
47  return makeResp(payload_iov["payload_url"]);
48 }
49 
50 nlohmann::json SphenixClient::getUrlDict(long long iov)
51 {
52  nlohmann::json resp = getPayloadIOVs(iov);
53  if (resp["code"] != 0)
54  {
55  return resp;
56  }
57  for (auto it = resp["msg"].begin(); it != resp["msg"].end();)
58  {
59  if (it.value()["minor_iov_end"] < iov)
60  {
61  it = resp["msg"].erase(it);
62  }
63  else
64  {
65  ++it;
66  }
67  }
68  for (auto& piov : resp["msg"].items())
69  {
70  piov.value() = piov.value()["payload_url"];
71  }
72  return resp;
73 }
74 
75 nlohmann::json SphenixClient::deletePayloadIOV(const std::string& pl_type, long long iov_start)
76 {
77  return nopayloadclient::NoPayloadClient::deletePayloadIOV(pl_type, 0, iov_start);
78 }
79 
80 nlohmann::json SphenixClient::deletePayloadIOV(const std::string& pl_type, long long iov_start, long long iov_end)
81 {
82  return nopayloadclient::NoPayloadClient::deletePayloadIOV(pl_type, 0, iov_start, 0, iov_end);
83 }
84 
86 {
87  nlohmann::json resp = getUrl(pl_type, iov);
88  if (resp["code"] != 0)
89  {
90  if (m_Verbosity > 0)
91  {
92  std::cout << resp << std::endl;
93  }
94  return "";
95  }
96  return resp["msg"];
97 }
98 
99 nlohmann::json SphenixClient::unlockGlobalTag(const std::string& gt_name)
100 {
101  if (existGlobalTag(gt_name))
102  {
104  }
105  std::string message = "global tag " + gt_name + " does not exist";
106  return {{"code", -1}, {"msg", message}};
107 }
108 
109 nlohmann::json SphenixClient::lockGlobalTag(const std::string& gt_name)
110 {
111  if (existGlobalTag(gt_name))
112  {
114  }
115  std::string message = "global tag " + gt_name + " does not exist";
116  return {{"code", -1}, {"msg", message}};
117 }
118 
119 nlohmann::json SphenixClient::insertPayload(const std::string& pl_type, const std::string& file_url,
120  long long iov_start)
121 {
122  return nopayloadclient::NoPayloadClient::insertPayload(pl_type, file_url, 0, iov_start);
123 }
124 
125 nlohmann::json SphenixClient::insertPayload(const std::string& pl_type, const std::string& file_url,
126  long long iov_start, long long iov_end)
127 {
128  return nopayloadclient::NoPayloadClient::insertPayload(pl_type, file_url, 0, iov_start, 0, iov_end);
129 }
130 
131 nlohmann::json SphenixClient::setGlobalTag(const std::string& gt_name)
132 {
133  if (m_CachedGlobalTag == gt_name)
134  {
135  std::string message = "global tag already set to " + gt_name;
136  return {{"code", 0}, {"msg", message}};
137  }
138  // check if the global tag exists before switching
139  if (existGlobalTag(gt_name))
140  {
141  m_CachedGlobalTag = gt_name;
143  }
144 
145  std::string message = "global tag " + gt_name + " does not exist";
146  return {{"code", -1}, {"msg", message}};
147 }
148 
150 {
151  int iret = 0;
152  if (tagname == m_CachedGlobalTag) // global tag already set
153  {
154  return iret;
155  }
156  m_CachedGlobalTag = tagname;
158  bool found_gt = false;
159  nlohmann::json resp = nopayloadclient::NoPayloadClient::getGlobalTags();
160  nlohmann::json msgcont = resp["msg"];
161  for (auto& it : msgcont.items())
162  {
163  std::string exist_gt = it.value().at("name");
164  std::cout << "global tag: " << exist_gt << std::endl;
165  if (exist_gt == tagname)
166  {
167  found_gt = true;
168  break;
169  }
170  }
171  if (!found_gt)
172  {
174  iret = resp["code"];
175  if (iret != 0)
176  {
177  std::cout << "Error creating global tag, msg: " << resp["msg"] << std::endl;
178  }
179  else
180  {
181  std::cout << "SphenixClient: Created new global tag " << tagname << std::endl;
182  }
183  }
184  return iret;
185 }
186 
188 {
189  int iret = -1;
190  nlohmann::json resp;
191  if (m_DomainCache.empty())
192  {
193  resp = nopayloadclient::NoPayloadClient::getPayloadTypes();
194  nlohmann::json msgcont = resp["msg"];
195  for (auto& it : msgcont.items())
196  {
197  std::string existent_domain = it.value().at("name");
198  m_DomainCache.insert(existent_domain);
199  }
200  }
201  if (m_DomainCache.find(domain) == m_DomainCache.end())
202  {
204  iret = resp["code"];
205  if (iret == 0)
206  {
207  m_DomainCache.insert(domain);
208  }
209  }
210  else
211  {
212  iret = 0;
213  }
214  return iret;
215 }
216 
218 {
219  if (m_CachedGlobalTag.empty())
220  {
221  return false;
222  }
223  return true;
224 }
225 
227 {
228  if (m_GlobalTagCache.find(tagname) != m_GlobalTagCache.end())
229  {
230  return true;
231  }
232  nlohmann::json resp = nopayloadclient::NoPayloadClient::getGlobalTags();
233  nlohmann::json msgcont = resp["msg"];
234  for (auto& it : msgcont.items())
235  {
236  std::string exist_gt = it.value().at("name");
237  m_GlobalTagCache.insert(tagname);
238  if (exist_gt == tagname)
239  {
240  return true;
241  }
242  }
243  return false;
244 }