KaliVeda
Toolkit for HIC analysis
KVRemoteAvailableRunsFile.cpp
1 /*
2 $Id: KVRemoteAvailableRunsFile.cpp,v 1.4 2008/02/08 08:19:59 franklan Exp $
3 $Revision: 1.4 $
4 $Date: 2008/02/08 08:19:59 $
5 */
6 
7 //Created by KVClassFactory on Mon May 22 00:14:11 2006
8 //Author: John Frankland
9 
10 #include "KVRemoteAvailableRunsFile.h"
11 #include "KVDataRepository.h"
12 #include "KVDataSet.h"
13 #include "TSystem.h"
14 #include "TEnv.h"
15 
16 using namespace std;
17 
19 
20 
21 
25 {
26  //default Constructor
27  init();
28 }
29 
30 
31 
35 
37  type,
38  KVDataSet*
40  (type, ds)
41 {
42  //Constructor with name of datatype
43  //and pointer to parent dataset
44  init();
45 }
46 
47 
48 
52 
53 KVRemoteAvailableRunsFile::~KVRemoteAvailableRunsFile()
54 {
55  //Destructor
56  //Delete the runlist file from the temp directory if it has been opened
57  if (IsFileOpen()) {
61  }
62  }
63 }
64 
65 
66 
67 
71 
73 {
74  //Find executable 'curl' or programme indicated by
75  //value of DataRepository.RemoteAvailableRuns.protocol
77  ("%s.DataRepository.RemoteAvailableRuns.protocol",
78  GetDataSet()->GetRepository()->GetName()), "curl");
80 }
81 
82 
83 
84 
99 
101 {
102  //Initialise fRunlist so that it can be used to read the available runs file from the beginning.
103  //
104  //If the file has already been opened, this means resetting the ifstream to the start of the file.
105  //
106  //If not already open, open the file containing the list of available runs for the dataset.
107  //What this actually means is:
108  // - read value of DataRepository.RemoteAvailableRuns.url for the data repository
109  // - use 'curl' or programme indicated by value of
110  // DataRepository.RemoteAvailableRuns.protocol to make local copy
111  // of file
112  // - open copy
113  //Returns kFALSE in case of problems.
114 
115  //already open ?
116  if (IsFileOpen()) {
117  fRunlist.clear(); // clear any error flags (EOF etc.)
118  fRunlist.seekg(0, ios::beg); // set file buffer pointer to beginning of file
119  //if we can get a lock on the file, all is well. if not, we need to fetch a new
120  //copy
121  if (runlist_lock.Lock()) return kTRUE;
122  }
123  TString http =
124  gEnv->GetValue(Form("%s.DataRepository.RemoteAvailableRuns.url",
125  GetDataSet()->GetRepository()->GetName()), "");
126  if (http == "") {
127  Warning("OpenAvailableRunsFile(ifstream& runlist)",
128  "%s.DataRepository.RemoteAvailableRuns.url is not defined. See $KVROOT/KVFiles/.kvrootrc",
129  GetDataSet()->GetRepository()->GetName());
130  return kFALSE;
131  }
132  TString url;
133  url.Form("%s/%s", http.Data(), GetFileName());
134  //remote file will be copied to $TEMP directory with name
135  //repository.available_runs....
138  TString cmd;
139  cmd.Form("%s -o%s %s", fCurl.Data(), fFilePath.Data(), url.Data());
140  //lock temp file - just in case
142  if (gSystem->Exec(cmd.Data())) {
144  return kFALSE; // problem with curl
145  }
146  fRunlist.open(fFilePath.Data());
147  if (!fRunlist.good() || !fRunlist.is_open()) {
148  Error("OpenAvailableRunsFile",
149  "Cannot open temp file to copy remote runlist file");
151  return kFALSE;
152  }
153  return kTRUE;
154 }
155 
156 
157 
158 
163 
165 {
166  //Redefines KVAvailableRunsFile::CloseAvailableRunsFile
167  //We do not want to transfer the file again every time we need to read it,
168  //therefore we do not close the file, simply remove the lock.
170 }
171 
172 
173 
bool Bool_t
char Char_t
constexpr Bool_t kFALSE
constexpr Bool_t kTRUE
R__EXTERN TEnv * gEnv
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
char * Form(const char *fmt,...)
R__EXTERN TSystem * gSystem
Handles lists of available runs for different datasets and types of data.
const Char_t * GetFileName() const
const KVDataSet * GetDataSet() const
static Bool_t FindExecutable(TString &exec, const Char_t *path="$(PATH)")
Definition: KVBase.cpp:1001
static void GetTempFileName(TString &base)
Definition: KVBase.cpp:848
Manage an experimental dataset corresponding to a given experiment or campaign.
Definition: KVDataSet.h:35
Bool_t Release()
Definition: KVLockfile.cpp:195
Bool_t Lock(const Char_t *filename="")
Definition: KVLockfile.cpp:165
List of available runfiles in a remote data repository.
KVRemoteAvailableRunsFile()
default Constructor
virtual const char * GetValue(const char *name, const char *dflt) const
const char * GetName() const override
virtual void Warning(const char *method, const char *msgfmt,...) const
virtual void Error(const char *method, const char *msgfmt,...) const
const char * Data() const
void Form(const char *fmt,...)
virtual Int_t Exec(const char *shellcmd)
virtual int Unlink(const char *name)
void init()
ClassImp(TPyArg)