Idea Details

E2E_Appmon Database Schema Change

Last activity 07-23-2019 08:40 AM
Murugesan Ramaiah's profile image
10-08-2018 08:27 AM

CA UIM E2E_Appmon probe stores data in the s_qos_data table. Today, it inserts script_name (Application_Name) and Transaction_Name (each steps within the script) in to the same column "target" within same table.

Please see below where application name and transaction name with - separated.



The target gets filled by the following variables from the e2e scripts.


qos$(1) = script$ + " - 01 - Click_Flag_Click_Finish
qos$(2) = script$ + " - 02 - login"

qos$(3) = script$ + " - 03 - Login_to_the_OmniCRM-Outbound
qos$(4) = script$ + " - 04 - Logoff_closeapplication


Now the idea or proposal here is, can we break these parameters which are highlighted above in to 2 different columns example Application, Transaction instead of writing/inserting everything in to target columns. Then this Application and Transaction columns have same relations as other columns with in s_qos_data with other tables, example RN_QOS_DATA_0021, HN_QOS_DATA_0021, VN_QOS_DATA_0021, CM_COMPUTER_SYSTEM, CM_GROUP, CM_GROUP_MEMBER and so on.







12-07-2018 09:55 AM

Hello there,

It is quite difficult for this change to be implemented because all probes understand the key fields of performance metrics of QOSname/Source/Target, not just E2E_appmon.

Splitting the target into two columns would make major changes to the whole product and all the probes, so I think this will be a little ambitious.


Can you explain the difficulty you are experiencing and perhaps I might be able to offer some other simpler solution?


12-07-2018 05:44 AM

Hi Greg,


Thanks. Unfortunately, i am not too sure how this can help in my original question to have the application and transaction is separated. Have you already tried in your environment? If so can you show me a sample of s_qos_data database table please?






10-08-2018 01:07 PM

Hi Murugesh,


You can use the nimInitWithMax() function to change the QoS name and set the source for the

   QOS metrics and still use the qos$(n) for the target name.


You would likely need to call this right before each qos is sent.


Here is the nimInitWithMax function from the NimBUS-functions.src script which should be

  include in your script using the include "Nimbus-functions.src"


' nimInitWithMax (qos_name$, source$, description$, long_unit$, short_unit$, max_value)
' Initializes the NimBUS SDK components.
' Empty source implies using default
' Default values will be used for these arguments if the
' values supplied as empty strings:
' qos_name_par$, description_par$, long_unit_par$ and short_unit_par$
Function nimInitWithMax (qos_name_par$, source$, description_par$, long_unit_par$, short_unit_par$, max_value)
local ret, qos_group$, qos_interval
local qos_name$, description$, long_unit$, short_unit$

' Determine QoS Name
if qos_name_par$ = "" then
qos_name$ = nimGetEnv$("APPMON_QOS_NAME","QOS_E2E_EXECUTION")
qos_name$ = qos_name_par$

if description_par$ = "" then
description$ = "E2E AppMon Script Run Time"
description$ = description_par$

if long_unit_par$ = "" then
long_unit$ = "Milliseconds"
long_unit$ = long_unit_par$

if short_unit_par$ = "" then
short_unit$ = "ms"
short_unit$ = short_unit_par$

'Determine QoS Group
qos_group$ = nimGetEnv$("APPMON_QOS_GROUP","QOS_APPLICATION")

'Determine run interval for this script
qos_interval = val(nimGetEnv$("APPMON_RUN_INTERVAL","300"))

ret = External ("nimmacro", "SetAlarmSource", source$)
ret = External ("nimmacro","QoSDefinitionWithMax",qos_name$,qos_group$,description$,long_unit$,short_unit$)
ret = External ("nimmacro","QoSInit",qos_name$,source$,qos_interval,max_value)
nimInitWithMax = ret