ROOT logo
TMap* GetValues(const char* host, Int_t port, const char* request,
	UInt_t startTime, UInt_t endTime, Int_t multiSplit) 
{
	AliDCSClient client(host, port, 1000, 20, multiSplit);
	// The 5th parameter switches from single alias to multi aliases!

	//Int_t result;

	TTimeStamp currentTime;
	//TMap values;

	TString rString(request);

	TObjArray* requests = rString.Tokenize(",");

	cout<<"Requests: "<<requests->GetEntries()<<endl;

	TMap* values=0;
	
	TStopwatch sw;
	sw.Start();
	
	if(requests->GetEntries() == 0) return NULL;

// 		TIter iter(requests);
// 		TObjString* aString;
// 		TObjArray* valueSet;
// 		while ((aString = (TObjString*) iter.Next())) {
// 		      cout<<"  Querying: "<<aString->GetName()<<endl;
// 		      valueSet = new TObjArray();
// 		      valueSet->SetOwner(1);
// 
// 			result = client.GetAliasValues(aString->GetName(), startTime,
// 				endTime, valueSet);
// 			values.Add(aString->Clone(), valueSet);
// 		}
 
	values = client.GetAliasValues(requests, startTime, endTime);

	if (!values) {
		cout<<"Query failed! Result error: "<<
			client.GetErrorString(client.GetResultErrorCode()) <<endl;
		if(client.GetResultErrorCode() == AliDCSClient::fgkServerError)	
			cout<<"Server error: "<<
				client.GetServerError().Data() <<endl;
		return NULL;
	}
	
	sw.Stop();
	cout<<"Elapsed time: "<<sw.RealTime()<<endl;

	cout<<"Time per alias: "<<sw.RealTime()/requests->GetEntries()<<endl;

	cout<<"Received values: "<<endl;

	Int_t nValues=0;

	TIter iter(values);
	TObjString* aRequest;
	while ((aRequest = (TObjString*) iter.Next())) {

		TObjArray* valueSet = (TObjArray*) values->GetValue(aRequest);
		
		cout<<" '"<<aRequest->String()<<"' values: " 
			<<valueSet->GetEntriesFast()<<endl;

		TIter valIter(valueSet);
		AliDCSValue* aValue;
		while ((aValue = (AliDCSValue*) valIter.Next())) {
			cout<<aValue->ToString()<<endl;
			nValues++;
		} 
	}
	
	cout<<"Number of received values: "<< nValues <<endl;
	

/*
	TFile file("dump.root", "UPDATE");
	file.cd();
	values.Write("DCSAliasMap", TObject::kSingleKey);
	file.Close(); 
*/

	//values.DeleteAll();
	//delete requests;

	cout<<"All values returned in runrange:  "<<endl;
	cout<<"StartTime: "<<TTimeStamp(startTime).AsString()<<endl;
	cout<<"EndTime: "<<TTimeStamp(endTime).AsString()<<endl;
	
	return values;
}

TMap* TestClientAlias(const char* host, Int_t port, const char* request,
	UInt_t startShift, UInt_t endShift, UInt_t multiSplit) {

	gSystem->Load("$ALICE_ROOT/SHUTTLE/DCSClient/AliDCSClient");

//	AliLog::EnableDebug(kFALSE);
//	AliLog::SetGlobalDebugLevel(3);

	TTimeStamp currentTime;

	
	TMap* values = GetValues(host, port, request,
		currentTime.GetSec() - startShift, 
		currentTime.GetSec() - endShift, multiSplit);
		
	if(values) values->Print();

	cout << endl;
	cout <<"Client done"<<endl;
	
	return values;
}
 TestClientAlias.C:1
 TestClientAlias.C:2
 TestClientAlias.C:3
 TestClientAlias.C:4
 TestClientAlias.C:5
 TestClientAlias.C:6
 TestClientAlias.C:7
 TestClientAlias.C:8
 TestClientAlias.C:9
 TestClientAlias.C:10
 TestClientAlias.C:11
 TestClientAlias.C:12
 TestClientAlias.C:13
 TestClientAlias.C:14
 TestClientAlias.C:15
 TestClientAlias.C:16
 TestClientAlias.C:17
 TestClientAlias.C:18
 TestClientAlias.C:19
 TestClientAlias.C:20
 TestClientAlias.C:21
 TestClientAlias.C:22
 TestClientAlias.C:23
 TestClientAlias.C:24
 TestClientAlias.C:25
 TestClientAlias.C:26
 TestClientAlias.C:27
 TestClientAlias.C:28
 TestClientAlias.C:29
 TestClientAlias.C:30
 TestClientAlias.C:31
 TestClientAlias.C:32
 TestClientAlias.C:33
 TestClientAlias.C:34
 TestClientAlias.C:35
 TestClientAlias.C:36
 TestClientAlias.C:37
 TestClientAlias.C:38
 TestClientAlias.C:39
 TestClientAlias.C:40
 TestClientAlias.C:41
 TestClientAlias.C:42
 TestClientAlias.C:43
 TestClientAlias.C:44
 TestClientAlias.C:45
 TestClientAlias.C:46
 TestClientAlias.C:47
 TestClientAlias.C:48
 TestClientAlias.C:49
 TestClientAlias.C:50
 TestClientAlias.C:51
 TestClientAlias.C:52
 TestClientAlias.C:53
 TestClientAlias.C:54
 TestClientAlias.C:55
 TestClientAlias.C:56
 TestClientAlias.C:57
 TestClientAlias.C:58
 TestClientAlias.C:59
 TestClientAlias.C:60
 TestClientAlias.C:61
 TestClientAlias.C:62
 TestClientAlias.C:63
 TestClientAlias.C:64
 TestClientAlias.C:65
 TestClientAlias.C:66
 TestClientAlias.C:67
 TestClientAlias.C:68
 TestClientAlias.C:69
 TestClientAlias.C:70
 TestClientAlias.C:71
 TestClientAlias.C:72
 TestClientAlias.C:73
 TestClientAlias.C:74
 TestClientAlias.C:75
 TestClientAlias.C:76
 TestClientAlias.C:77
 TestClientAlias.C:78
 TestClientAlias.C:79
 TestClientAlias.C:80
 TestClientAlias.C:81
 TestClientAlias.C:82
 TestClientAlias.C:83
 TestClientAlias.C:84
 TestClientAlias.C:85
 TestClientAlias.C:86
 TestClientAlias.C:87
 TestClientAlias.C:88
 TestClientAlias.C:89
 TestClientAlias.C:90
 TestClientAlias.C:91
 TestClientAlias.C:92
 TestClientAlias.C:93
 TestClientAlias.C:94
 TestClientAlias.C:95
 TestClientAlias.C:96
 TestClientAlias.C:97
 TestClientAlias.C:98
 TestClientAlias.C:99
 TestClientAlias.C:100
 TestClientAlias.C:101
 TestClientAlias.C:102
 TestClientAlias.C:103
 TestClientAlias.C:104
 TestClientAlias.C:105
 TestClientAlias.C:106
 TestClientAlias.C:107
 TestClientAlias.C:108
 TestClientAlias.C:109
 TestClientAlias.C:110
 TestClientAlias.C:111
 TestClientAlias.C:112
 TestClientAlias.C:113
 TestClientAlias.C:114
 TestClientAlias.C:115
 TestClientAlias.C:116
 TestClientAlias.C:117