ROOT logo
void GetValues(const char* host, Int_t port, const char* request,
	Long_t startTime, Long_t endTime) 
{

	AliDCSClient client(host, port, 10000, 5);

	Int_t result;

	TTimeStamp currentTime;
	TMap values;
	values.SetOwner(1);

	TString rString(request);

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

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

	TStopwatch sw;
	sw.Start();

	if (requests->GetEntries() > 1) {
		
		TIter iter(requests);
		TObjString* aString;
		while ((aString = (TObjString*) iter.Next())) {
			TObjArray* valueSet = new TObjArray();
			valueSet->SetOwner(1);

			result = client.GetDPValues(request, startTime,
				endTime, valueSet);
			values.Add(new TObjString(request), valueSet);
		}


	} else {
		TObjArray* valueSet = new TObjArray();
		valueSet->SetOwner(1);


		result = client.GetDPValues(request, startTime,
				endTime, valueSet);
		values.Add(new TObjString(request), valueSet);
	}

	if (result < 0) {
		cout<<"Communication failure: "<<
			AliDCSClient::GetErrorString(result)<<endl;

		if (result == AliDCSClient::fgkServerError) {
			cout<<"Server error code: "<<
				client.GetServerErrorCode()<<endl;
			cout<<client.GetServerError()<<endl;
		}
	}
	
	sw.Stop();
	cout<<"Elapsed time: "<<sw.RealTime()<<endl;
	if (result > 0) {
		cout<<"Time per value: "<<sw.RealTime()/result<<endl;
	}
	cout<<"Received values: "<<result<<endl;

	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;
		} 
	}



	TFile file("DCSMap.root", "UPDATE");
	file.cd();
	values.Write("DCSMap",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;
}

void TestClientDP(const char* host, Int_t port, const char* request,
	UInt_t startShift, UInt_t endShift) {

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

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

	TTimeStamp currentTime;

	GetValues(host, port, request,
		currentTime.GetSec() - startShift, 
		currentTime.GetSec() - endShift);

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