ROOT logo

TSQLServer *fServer=0;

//______________________________________________________________________________________________
Bool_t Connect(){
// Connect to MySQL Server of the DAQ logbook

	// check connection: if already connected return
	if(fServer && fServer->IsConnected()) return kTRUE;

//	TString serverHost="mysql://pcald30.cern.ch";
	TString serverHost="mysql://aldaqgw01-gpn.cern.ch:1434";
	fServer = TSQLServer::Connect(serverHost.Data(),"shuttle","alice");
	
	printf("Connecting to mysql server on %s !!!!!!\n", serverHost.Data());

	if (!fServer || !fServer->IsConnected()) {
		printf("Can't establish connection to DAQ log book DB!\n");
		if(fServer) delete fServer;
		return kFALSE;
	}

	// Get table
	TSQLResult* aResult=0;
	aResult = fServer->GetTables("SHUTTLE_TEST");
	delete aResult;
	return kTRUE;
}

//______________________________________________________________________________________________
Bool_t QueryShuttleLogbook(AliShuttleLogbookEntry& entry, Int_t runNumber=-1)
{
// Query DAQ's Shuttle logbook and fills detector status array

	if(runNumber<=0 && entry.GetRun()<=0) {
		printf("Use a valid Run number!\n");
		return kFALSE;
	}
	if(!Connect()) return kFALSE;
	if(runNumber<=0) runNumber= entry.GetRun();
	//entry.SetRun(runNumber); 

	// check connection, in case connect
	if(!Connect()) return kFALSE;

	TString sqlQuery;
	sqlQuery = Form("select * from logbook_shuttle where run = %d", runNumber);

	TSQLResult* aResult = fServer->Query(sqlQuery);
	if (!aResult) {
		printf("Can't execute query <%s>!\n", sqlQuery.Data());
		return kFALSE;
	}

	// TODO Check field count!
//	if (aResult->GetFieldCount() != 24) {
//		printf("Invalid SQL result field number!\n");
//		delete aResult;
//		return kFALSE;
//	}

	TSQLRow* aRow;
	while ((aRow = aResult->Next())) {
		TString runString(aRow->GetField(0), aRow->GetFieldLength(0));
		Int_t run = runString.Atoi();

		// loop on detectors
		for(UInt_t ii = 0; ii < 22; ii++){
			entry.SetDetectorStatus(aResult->GetFieldName(ii), aRow->GetField(ii));
		}

		delete aRow;
	}

	delete aResult; aResult=0;

	// Query run parameters from logbook!

	sqlQuery = Form("select * from logbook where run=%d", runNumber);

	aResult = fServer->Query(sqlQuery);
	if (!aResult) {
		printf("Can't execute query <%s>!", sqlQuery.Data());
		return kFALSE;
	}

	if(aResult->GetRowCount() == 0) {
		printf("QueryRunParameters - No entry in DAQ Logbook for run %d!", runNumber);
		delete aResult;
		return kFALSE;
	}

	if(aResult->GetRowCount() > 1) {
		printf("More than one entry in DAQ Logbook for run %d!", runNumber);
		delete aResult;
		return kFALSE;
	}

	while ((aRow = aResult->Next())) {

		for(UInt_t ii = 0; ii < aResult->GetFieldCount(); ii++)
			entry.SetRunParameter(aResult->GetFieldName(ii), aRow->GetField(ii));

		UInt_t startTime, endTime;
		TString startTimeString = entry.GetRunParameter("time_start");
		UInt_t startTime = startTimeString.Atoi();
		TString endTimeString = entry.GetRunParameter("time_end");
		UInt_t endTime = endTimeString.Atoi();

		if (!startTime || !endTime || startTime > endTime) {
			printf("QueryRunParameters - Invalid parameters for Run %d: startTime = %d, endTime = %d",
					runNumber, startTime, endTime);
			delete aRow;
			delete aResult;
			return kFALSE;
		}

//		entry.SetStartTime(startTime);
//		entry.SetEndTime(endTime);

		delete aRow;
	}

	entry.Print("all");

	delete aResult;
	return kTRUE;
}
//______________________________________________________________________________________________
Bool_t UpdateShuttleLogbook(AliShuttleLogbookEntry& entry, Int_t runNumber=-1)
{
  // Update Shuttle logbook table - TEST ONLY, USE WITH CARE!


	if(runNumber<=0 && entry.GetRun()<=0) {
		printf("Use a valid Run number!\n");
		return kFALSE;
	}
	if(!Connect()) return kFALSE;
	if(runNumber<=0) runNumber= entry.GetRun();
	entry.SetRun(runNumber); 

	TString sqlQuery("update logbook_shuttle set ");

	for(UInt_t i=0; i < AliShuttleInterface::NDetectors(); i++){
		sqlQuery += Form("%s=\"%s\"", AliShuttleInterface::GetDetName(i), entry.GetDetectorStatusName(entry.GetDetectorStatus(i)));
		if(i < AliShuttleInterface::NDetectors()-1) sqlQuery += ", ";
	}

	sqlQuery += Form(" where run=%d;",entry.GetRun());

	printf("sqlQuery: %s\n", sqlQuery.Data());

	TSQLResult* aResult;
	aResult = fServer->Query(sqlQuery);
	if (!aResult) {
		printf("Can't execute query <%s>!\n", sqlQuery.Data());
		return kFALSE;
	}

	delete aResult;

	return kTRUE;
}

//______________________________________________________________________________________________
Bool_t UpdateShuttleLogbook(Int_t runNumber, const char* detCode, AliShuttleLogbookEntry::Status status)
{
  // Update Shuttle logbook table - TEST ONLY, USE WITH CARE!


	if(AliShuttleInterface::GetDetPos(detCode) < 0) return kFALSE;
	if(!Connect()) return kFALSE;

	TString sqlQuery("update logbook_shuttle set ");


	sqlQuery += Form("%s=\"%s\" ", detCode, AliShuttleLogbookEntry::GetDetectorStatusName(status));

	sqlQuery += Form("where run=%d;",runNumber);

	printf("sqlQuery: %s\n", sqlQuery.Data());

	TSQLResult* aResult;
	aResult = fServer->Query(sqlQuery);
	if (!aResult) {
		printf("Can't execute query <%s>!\n", sqlQuery.Data());
		return kFALSE;
	}

	delete aResult;

	return kTRUE;
}

//______________________________________________________________________________________________
Bool_t UpdateShuttleLogbook(Int_t runNumber, const char* detCode, const char* status)
{
  // Update Shuttle logbook table - TEST ONLY, USE WITH CARE!


	if(AliShuttleInterface::GetDetPos(detCode) < 0) return kFALSE;
	if(!Connect()) return kFALSE;

	TString sqlQuery("update logbook_shuttle set ");


	sqlQuery += Form("%s=\"%s\" ", detCode, status);

	sqlQuery += Form("where run=%d;",runNumber);

	printf("sqlQuery: %s\n", sqlQuery.Data());

	TSQLResult* aResult;
	aResult = fServer->Query(sqlQuery);
	if (!aResult) {
		printf("Can't execute query <%s>!\n", sqlQuery.Data());
		return kFALSE;
	}

	delete aResult;

	return kTRUE;
}

//______________________________________________________________________________________________
Bool_t InsertNewRun(AliShuttleLogbookEntry& entry, Int_t runNumber=-1)
{
  // Update Shuttle logbook table - TEST ONLY, USE WITH CARE!

	if(runNumber<=0 && entry.GetRun()<=0) {
		printf("Use a valid Run number!\n");
		return kFALSE;
	}
	if(!Connect()) return kFALSE;
	if(runNumber<=0) runNumber= entry.GetRun();
	entry.SetRun(runNumber); 

	TString sqlQuery = Form("insert into logbook_shuttle (run) values (%d);", runNumber);

	printf("sqlQuery: %s\n", sqlQuery.Data());

	TSQLResult* aResult;
	aResult = fServer->Query(sqlQuery);
	if (!aResult) {
		printf("Can't execute query <%s>!\n", sqlQuery.Data());
		return kFALSE;
	}

	delete aResult;

	UpdateShuttleLogbook(entry);

	return kTRUE;
}

//______________________________________________________________________________________________
Bool_t DeleteEntries(Int_t runNumber=-1)
{
  // Update Shuttle logbook table - TEST ONLY, USE WITH CARE!

	if(!Connect()) return kFALSE;
	
	TString runStr;
	if(runNumber>0) runStr=Form("where run=%d",runNumber);
	TString sqlQuery = Form("delete from logbook_shuttle %s;", runStr.Data());

	printf("sqlQuery: %s\n", sqlQuery.Data());

	TSQLResult* aResult;
	aResult = fServer->Query(sqlQuery);
	if (!aResult) {
		printf("Can't execute query <%s>!\n", sqlQuery.Data());
		return kFALSE;
	}

	delete aResult;

	return kTRUE;
}

//______________________________________________________________________________________________
void TestShuttleLogbook(){

	gSystem->Load("libSHUTTLE.so");
	
	DeleteEntries();

	AliShuttleLogbookEntry::Status y[18]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
	AliShuttleLogbookEntry lb(21242, y);
	lb.SetDetectorStatus("HMP","Unprocessed"); // HMPID
	lb.SetDetectorStatus("ZDC","Unprocessed"); // ZDC
	lb.SetDetectorStatus("TPC","Unprocessed"); // TPC
	lb.SetDetectorStatus("SPD","Unprocessed"); // SPD
	lb.SetDetectorStatus("GRP","Unprocessed"); // GRP
	lb.Print();

	InsertNewRun(lb);
	InsertNewRun(lb,21243);
	InsertNewRun(lb,21244);
	InsertNewRun(lb,21245);
//	InsertNewRun(lb,21246);
//	InsertNewRun(lb,1000);

}
 TestShuttleLogbook.C:1
 TestShuttleLogbook.C:2
 TestShuttleLogbook.C:3
 TestShuttleLogbook.C:4
 TestShuttleLogbook.C:5
 TestShuttleLogbook.C:6
 TestShuttleLogbook.C:7
 TestShuttleLogbook.C:8
 TestShuttleLogbook.C:9
 TestShuttleLogbook.C:10
 TestShuttleLogbook.C:11
 TestShuttleLogbook.C:12
 TestShuttleLogbook.C:13
 TestShuttleLogbook.C:14
 TestShuttleLogbook.C:15
 TestShuttleLogbook.C:16
 TestShuttleLogbook.C:17
 TestShuttleLogbook.C:18
 TestShuttleLogbook.C:19
 TestShuttleLogbook.C:20
 TestShuttleLogbook.C:21
 TestShuttleLogbook.C:22
 TestShuttleLogbook.C:23
 TestShuttleLogbook.C:24
 TestShuttleLogbook.C:25
 TestShuttleLogbook.C:26
 TestShuttleLogbook.C:27
 TestShuttleLogbook.C:28
 TestShuttleLogbook.C:29
 TestShuttleLogbook.C:30
 TestShuttleLogbook.C:31
 TestShuttleLogbook.C:32
 TestShuttleLogbook.C:33
 TestShuttleLogbook.C:34
 TestShuttleLogbook.C:35
 TestShuttleLogbook.C:36
 TestShuttleLogbook.C:37
 TestShuttleLogbook.C:38
 TestShuttleLogbook.C:39
 TestShuttleLogbook.C:40
 TestShuttleLogbook.C:41
 TestShuttleLogbook.C:42
 TestShuttleLogbook.C:43
 TestShuttleLogbook.C:44
 TestShuttleLogbook.C:45
 TestShuttleLogbook.C:46
 TestShuttleLogbook.C:47
 TestShuttleLogbook.C:48
 TestShuttleLogbook.C:49
 TestShuttleLogbook.C:50
 TestShuttleLogbook.C:51
 TestShuttleLogbook.C:52
 TestShuttleLogbook.C:53
 TestShuttleLogbook.C:54
 TestShuttleLogbook.C:55
 TestShuttleLogbook.C:56
 TestShuttleLogbook.C:57
 TestShuttleLogbook.C:58
 TestShuttleLogbook.C:59
 TestShuttleLogbook.C:60
 TestShuttleLogbook.C:61
 TestShuttleLogbook.C:62
 TestShuttleLogbook.C:63
 TestShuttleLogbook.C:64
 TestShuttleLogbook.C:65
 TestShuttleLogbook.C:66
 TestShuttleLogbook.C:67
 TestShuttleLogbook.C:68
 TestShuttleLogbook.C:69
 TestShuttleLogbook.C:70
 TestShuttleLogbook.C:71
 TestShuttleLogbook.C:72
 TestShuttleLogbook.C:73
 TestShuttleLogbook.C:74
 TestShuttleLogbook.C:75
 TestShuttleLogbook.C:76
 TestShuttleLogbook.C:77
 TestShuttleLogbook.C:78
 TestShuttleLogbook.C:79
 TestShuttleLogbook.C:80
 TestShuttleLogbook.C:81
 TestShuttleLogbook.C:82
 TestShuttleLogbook.C:83
 TestShuttleLogbook.C:84
 TestShuttleLogbook.C:85
 TestShuttleLogbook.C:86
 TestShuttleLogbook.C:87
 TestShuttleLogbook.C:88
 TestShuttleLogbook.C:89
 TestShuttleLogbook.C:90
 TestShuttleLogbook.C:91
 TestShuttleLogbook.C:92
 TestShuttleLogbook.C:93
 TestShuttleLogbook.C:94
 TestShuttleLogbook.C:95
 TestShuttleLogbook.C:96
 TestShuttleLogbook.C:97
 TestShuttleLogbook.C:98
 TestShuttleLogbook.C:99
 TestShuttleLogbook.C:100
 TestShuttleLogbook.C:101
 TestShuttleLogbook.C:102
 TestShuttleLogbook.C:103
 TestShuttleLogbook.C:104
 TestShuttleLogbook.C:105
 TestShuttleLogbook.C:106
 TestShuttleLogbook.C:107
 TestShuttleLogbook.C:108
 TestShuttleLogbook.C:109
 TestShuttleLogbook.C:110
 TestShuttleLogbook.C:111
 TestShuttleLogbook.C:112
 TestShuttleLogbook.C:113
 TestShuttleLogbook.C:114
 TestShuttleLogbook.C:115
 TestShuttleLogbook.C:116
 TestShuttleLogbook.C:117
 TestShuttleLogbook.C:118
 TestShuttleLogbook.C:119
 TestShuttleLogbook.C:120
 TestShuttleLogbook.C:121
 TestShuttleLogbook.C:122
 TestShuttleLogbook.C:123
 TestShuttleLogbook.C:124
 TestShuttleLogbook.C:125
 TestShuttleLogbook.C:126
 TestShuttleLogbook.C:127
 TestShuttleLogbook.C:128
 TestShuttleLogbook.C:129
 TestShuttleLogbook.C:130
 TestShuttleLogbook.C:131
 TestShuttleLogbook.C:132
 TestShuttleLogbook.C:133
 TestShuttleLogbook.C:134
 TestShuttleLogbook.C:135
 TestShuttleLogbook.C:136
 TestShuttleLogbook.C:137
 TestShuttleLogbook.C:138
 TestShuttleLogbook.C:139
 TestShuttleLogbook.C:140
 TestShuttleLogbook.C:141
 TestShuttleLogbook.C:142
 TestShuttleLogbook.C:143
 TestShuttleLogbook.C:144
 TestShuttleLogbook.C:145
 TestShuttleLogbook.C:146
 TestShuttleLogbook.C:147
 TestShuttleLogbook.C:148
 TestShuttleLogbook.C:149
 TestShuttleLogbook.C:150
 TestShuttleLogbook.C:151
 TestShuttleLogbook.C:152
 TestShuttleLogbook.C:153
 TestShuttleLogbook.C:154
 TestShuttleLogbook.C:155
 TestShuttleLogbook.C:156
 TestShuttleLogbook.C:157
 TestShuttleLogbook.C:158
 TestShuttleLogbook.C:159
 TestShuttleLogbook.C:160
 TestShuttleLogbook.C:161
 TestShuttleLogbook.C:162
 TestShuttleLogbook.C:163
 TestShuttleLogbook.C:164
 TestShuttleLogbook.C:165
 TestShuttleLogbook.C:166
 TestShuttleLogbook.C:167
 TestShuttleLogbook.C:168
 TestShuttleLogbook.C:169
 TestShuttleLogbook.C:170
 TestShuttleLogbook.C:171
 TestShuttleLogbook.C:172
 TestShuttleLogbook.C:173
 TestShuttleLogbook.C:174
 TestShuttleLogbook.C:175
 TestShuttleLogbook.C:176
 TestShuttleLogbook.C:177
 TestShuttleLogbook.C:178
 TestShuttleLogbook.C:179
 TestShuttleLogbook.C:180
 TestShuttleLogbook.C:181
 TestShuttleLogbook.C:182
 TestShuttleLogbook.C:183
 TestShuttleLogbook.C:184
 TestShuttleLogbook.C:185
 TestShuttleLogbook.C:186
 TestShuttleLogbook.C:187
 TestShuttleLogbook.C:188
 TestShuttleLogbook.C:189
 TestShuttleLogbook.C:190
 TestShuttleLogbook.C:191
 TestShuttleLogbook.C:192
 TestShuttleLogbook.C:193
 TestShuttleLogbook.C:194
 TestShuttleLogbook.C:195
 TestShuttleLogbook.C:196
 TestShuttleLogbook.C:197
 TestShuttleLogbook.C:198
 TestShuttleLogbook.C:199
 TestShuttleLogbook.C:200
 TestShuttleLogbook.C:201
 TestShuttleLogbook.C:202
 TestShuttleLogbook.C:203
 TestShuttleLogbook.C:204
 TestShuttleLogbook.C:205
 TestShuttleLogbook.C:206
 TestShuttleLogbook.C:207
 TestShuttleLogbook.C:208
 TestShuttleLogbook.C:209
 TestShuttleLogbook.C:210
 TestShuttleLogbook.C:211
 TestShuttleLogbook.C:212
 TestShuttleLogbook.C:213
 TestShuttleLogbook.C:214
 TestShuttleLogbook.C:215
 TestShuttleLogbook.C:216
 TestShuttleLogbook.C:217
 TestShuttleLogbook.C:218
 TestShuttleLogbook.C:219
 TestShuttleLogbook.C:220
 TestShuttleLogbook.C:221
 TestShuttleLogbook.C:222
 TestShuttleLogbook.C:223
 TestShuttleLogbook.C:224
 TestShuttleLogbook.C:225
 TestShuttleLogbook.C:226
 TestShuttleLogbook.C:227
 TestShuttleLogbook.C:228
 TestShuttleLogbook.C:229
 TestShuttleLogbook.C:230
 TestShuttleLogbook.C:231
 TestShuttleLogbook.C:232
 TestShuttleLogbook.C:233
 TestShuttleLogbook.C:234
 TestShuttleLogbook.C:235
 TestShuttleLogbook.C:236
 TestShuttleLogbook.C:237
 TestShuttleLogbook.C:238
 TestShuttleLogbook.C:239
 TestShuttleLogbook.C:240
 TestShuttleLogbook.C:241
 TestShuttleLogbook.C:242
 TestShuttleLogbook.C:243
 TestShuttleLogbook.C:244
 TestShuttleLogbook.C:245
 TestShuttleLogbook.C:246
 TestShuttleLogbook.C:247
 TestShuttleLogbook.C:248
 TestShuttleLogbook.C:249
 TestShuttleLogbook.C:250
 TestShuttleLogbook.C:251
 TestShuttleLogbook.C:252
 TestShuttleLogbook.C:253
 TestShuttleLogbook.C:254
 TestShuttleLogbook.C:255
 TestShuttleLogbook.C:256
 TestShuttleLogbook.C:257
 TestShuttleLogbook.C:258
 TestShuttleLogbook.C:259
 TestShuttleLogbook.C:260
 TestShuttleLogbook.C:261
 TestShuttleLogbook.C:262
 TestShuttleLogbook.C:263
 TestShuttleLogbook.C:264
 TestShuttleLogbook.C:265
 TestShuttleLogbook.C:266
 TestShuttleLogbook.C:267
 TestShuttleLogbook.C:268
 TestShuttleLogbook.C:269
 TestShuttleLogbook.C:270
 TestShuttleLogbook.C:271
 TestShuttleLogbook.C:272
 TestShuttleLogbook.C:273
 TestShuttleLogbook.C:274
 TestShuttleLogbook.C:275
 TestShuttleLogbook.C:276
 TestShuttleLogbook.C:277
 TestShuttleLogbook.C:278
 TestShuttleLogbook.C:279
 TestShuttleLogbook.C:280
 TestShuttleLogbook.C:281
 TestShuttleLogbook.C:282
 TestShuttleLogbook.C:283
 TestShuttleLogbook.C:284
 TestShuttleLogbook.C:285
 TestShuttleLogbook.C:286
 TestShuttleLogbook.C:287
 TestShuttleLogbook.C:288
 TestShuttleLogbook.C:289
 TestShuttleLogbook.C:290
 TestShuttleLogbook.C:291
 TestShuttleLogbook.C:292
 TestShuttleLogbook.C:293
 TestShuttleLogbook.C:294
 TestShuttleLogbook.C:295
 TestShuttleLogbook.C:296
 TestShuttleLogbook.C:297
 TestShuttleLogbook.C:298
 TestShuttleLogbook.C:299
 TestShuttleLogbook.C:300
 TestShuttleLogbook.C:301
 TestShuttleLogbook.C:302
 TestShuttleLogbook.C:303
 TestShuttleLogbook.C:304
 TestShuttleLogbook.C:305
 TestShuttleLogbook.C:306