You are on page 1of 6

Citrix Monitoring Scripts

The sample script used in document is “StarsIIPlus”.

Group, Monitor and Transaction Name --

Following is the code in the script


strcat(sql, ", 'StarsIIPlus', 'StarsIIPlus_1',
'StarsIIPlus_01_AppLogin', ");
In this StarsIIPlus is Group, StarsIIPlus_1 is monitor
name, StarsIIPlus_01_AppLogin is transaction name

Code to connect with Production, Staging and QA Database in


Vuser Init Section –

//lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "",


"", "DSN=D060;UID=insbat;PWD=password;SERVER=D060;", Ctx1,
1, 0); //Dev DB
//lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "",
"", "DSN=P053;UID=insbat;PWD=password;SERVER=P053;", Ctx1,
1, 0); //Production DB
//lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "",
"", "DSN=P063;UID=insbat;PWD=bat_ins_p1;SERVER=P063;",
Ctx1, 1, 0); //Prod Oracle 10g
//lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "",
"", "DSN=Q063;UID=insapp;PWD=app_ins_q1;SERVER=Q063;",
Ctx1, 1, 0); //QA D

Code in the beginning of Script before Vuser_init --

typedef long time_t;


long file_stream;
time_t t;
int intStatus;
char *strStatus;
double doubleDuration;
char *SQLStatement;

Continue the code in Vuser_init --

vuser_init()
{
lrd_init(&InitInfo, DBTypeVersion);
lrd_open_context(&Ctx1, LRD_DBTYPE_ODBC, 0, 0, 0);
lrd_alloc_connection(&Con1, LRD_DBTYPE_ODBC, Ctx1, 0 /*Unused*/, 0);
lrd_db_option(Con1, OT_ODBC_LOGIN_TIMEOUT, (void FAR const *)20, 0);
lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "", "",
"DSN=P063;UID=insbat;PWD=bat_ins_p1;SERVER=P063;", Ctx1, 1, 0); //Prod Oracle
10g
//lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "", "",
"DSN=Q063;UID=insbat;PWD=bat_ins_q1;SERVER=Q063;", Ctx1, 1, 0); //QA
Oracle 10g
//lrd_open_connection(&Con1, LRD_DBTYPE_ODBC, "", "", "",
"DSN=S063;UID=insbat;PWD=bat_ins_s1;SERVER=S063;", Ctx1, 1, 0); //Staging
Oracle 10g
return 0;
}

Code in the beginning of Script before Action –

struct tm *today;
char errorMsg[51];

char* getErrorMessage(int httpCode)


{
strcpy(errorMsg, "");
lr_output_message("Error Code here is %i", httpCode);

if(httpCode >= 400 && httpCode < 500)


{
switch (httpCode)
{
case 400:
strcpy(errorMsg, "400 - Bad Request");
break;

case 401:
strcpy(errorMsg, "401 - Unauthorized");
break;

case 402:
strcpy(errorMsg, "402 - Payment Required");
break;

case 403:
strcpy(errorMsg, "403 - Forbidden");
break;

case 404:
strcpy(errorMsg, "404 - Not Found");
break;
case 405:
strcpy(errorMsg, "405 - Method Not Allowed");
break;

case 406:
strcpy(errorMsg, "406 - Not Acceptable");
break;

case 407:
strcpy(errorMsg, "407 - Proxy Authentication Required");
break;

case 408:
strcpy(errorMsg, "408 - Requet Time-Out");
break;

case 409:
strcpy(errorMsg, "409 - Conflict");
break;

case 410:
strcpy(errorMsg, "410 - Gone");
break;

case 411:
strcpy(errorMsg, "411 - Length Required");
break;

case 412:
strcpy(errorMsg, "412 - Precondition Failed");
break;

case 413:
strcpy(errorMsg, "413 - Request Entity Too Large");
break;

case 414:
strcpy(errorMsg, "414 - Request-URL Too Large");
break;

case 415:
strcpy(errorMsg, "415 - Unsupported Media Type");
break;

case 500:
strcpy(errorMsg, "500 - Internal Server Error");
break;

case 501:
strcpy(errorMsg, "501 - Not Implemented");
break;

case 502:
strcpy(errorMsg, "502 - Bad Gateway");
break;

case 503:
strcpy(errorMsg, "503 - Out of Resources");
break;

case 504:
strcpy(errorMsg, "504 - Gateway Time-out");
break;

case 505:
strcpy(errorMsg, "505 - HTTP Version not supported");

break;
}
}

lr_output_message("Error Message = %s", errorMsg);

return errorMsg;
}

Continue the code in Action --

char sql[2048] = "begin INSAPP.P1112_INSIGHT_RATIONAL(SYSDATE, ";


char a[20];
char b[20];
int httpReturnCode = 200;
int Count;
char *robot;

robot = (char *) strupr(lr_get_host_name());


lr_think_time(5);
The Transaction will be like this –

lr_start_transaction("StarsIIPlus_03_ViewSystemCalendar");
ctrx_key("c", MODIF_CONTROL);
ctrx_sync_on_window("II+ System Calendar", ACTIVATE, 96, 257, 787, 294,
"snapshot8", CTRX_LAST);

doubleDuration =
lr_get_transaction_duration("StarsIIPlus_03_ViewSystemCalendar");
intStatus = lr_get_transaction_status("StarsIIPlus_03_ViewSystemCalendar") ==
LR_FAIL ? -1 : 0;
lr_end_transaction("StarsIIPlus_03_ViewSystemCalendar", LR_AUTO);

After the Transaction ends Insert the following Code –

strcpy(sql, "begin INSAPP.P1112_INSIGHT_RATIONAL(SYSDATE, ");


strcpy(a, "");
strcpy(b, "");

sprintf(a, "%f", doubleDuration * 1000);


sprintf(b, "%i", intStatus);

lr_output_message("doubleDuration = %s", a);


lr_output_message("Status output = %s", b);

time(&t);
today = (struct tm *) localtime(&t);

strcat(sql, "'");
strcat(sql, robot);
strcat(sql, "', ");

if(intStatus < 0)
{
strcat(sql, "'Failed'");
strcat(sql, ", 'StarsIIPlus', 'StarsIIPlus_2', 'StarsIIPlus_02_SelectSchedule',
");
strcat(sql, "'n/a' ,'");
strcat(sql, "Unable to see II+ Schedule * window.");
strcat(sql, "'); end;");
}
else
{
strcat(sql, "'Success'");
strcat(sql, ", 'StarsIIPlus', 'StarsIIPlus_2', 'StarsIIPlus_02_SelectSchedule',
");
strcat(sql, a);
strcat(sql, ", 'Success'); end;");
}

lr_output_message("SQL = %s", sql);

lrd_open_cursor(&Csr2, Con1, 0);


lrd_stmt(Csr2, sql, -1, 1, 0, 0);
lrd_db_option(Csr2, OT_ODBC_CURSOR_CLOSE, 0, 0);
lrd_close_cursor(&Csr2, 0);

// Lr_Exit will Stop current iteration, and go to the next iteration.


if(intStatus != 0)
{
ctrx_key("F4_KEY", MODIF_ALT);
ctrx_key("F4_KEY", MODIF_ALT);
ctrx_disconnect_server("");
lr_exit (LR_EXIT_ITERATION_AND_CONTINUE, LR_AUTO);
}

lr_think_time(5);

Code for Vuser_end –

vuser_end()
{
lrd_close_connection(&Con1, 0, 0);
lrd_free_connection(&Con1, 0 /*Unused*/, 0);
lrd_close_context(&Ctx1, 0, 0);
return 0;
}

You might also like