3 - Remote User API
Portal Server Remote User API Specification
Generating an Authentication Token
To perform a Remote User API call, you must first sign in into the portal and generate an “API Authentication Token”.
When generating the token you can enter a purpose (only used as information) and also restrict the remote IP addresses for which the token is valid.
API Functions
The API supports the following functions (so-called “actions”):
Common Functions:
- getUserAccountInfo (Get information about the own user account)
- getPricePlanInfo (Get information about the current price plan)
Projects, Resource Sets and Files Functions:
- getProjectTree (Get the project tree inclusive all resource sets and all file information)
- createProject (Create a new project)
- deleteProject (Delete a project)
- getResourceSetsOfProject (Get all resource sets of a project, inclusive all file information)
- createResourceSet (Create a new resource set)
- deleteResourceSet (Delete a resource set)
- getFilesInfoOfResourceSet (Get all files information of a resource set)
- createFile (Create or overwrite a file)
- getFile (Get the content of a file and the file information)
- deleteFile (Delete a file)
Measuring Agents Functions:
- getMeasuringAgents (Get all defined measuring agents)
- getMinRequiredMeasuringAgentVersion (Get the minimum required measuring agent version)
- addMeasuringAgent (Add a new measuring agent)
- pingMeasuringAgent (Ping a measuring agent)
- setMeasuringAgentActive (Set the state of a measuring agent to active or inactive)
- deleteMeasuringAgent (Delete a measuring agent)
Measuring Agent Cluster Functions:
- getMeasuringAgentClusters (Get all defined measuring agent clusters)
- getClusterControllers (Get all cluster controllers and for each cluster controller a list of measuring agent clusters which are referencing the cluster controller)
- getMinRequiredClusterControllerVersion (Get the minimum required cluster controller version)
- pingClusterController (Ping a cluster controller)
- addMeasuringAgentCluster (Add a new measuring agent cluster)
- addMemberToMeasuringAgentCluster (Add a member to a measuring agent cluster)
- removeMemberFromMeasuringAgentCluster (Remove a member from a measuring agent cluster)
- pingMeasuringAgentClusterMembers (Ping the cluster members of a measuring agent cluster via cluster controller)
- setMeasuringAgentClusterActive (Set the state of a measuring agent cluster to active or inactive)
- deleteMeasuringAgentCluster (Delete a measuring agent cluster)
HTTP/S Remote Proxy Recorders Functions:
- getProxyRecorders (Get all defined HTTP/S proxy recorders)
- getMinRequiredProxyRecorderVersion (Get the minimum required HTTP/S proxy recorder version)
- addProxyRecorder (Add a new HTTP/S proxy recorder)
- pingProxyRecorder (Ping a HTTP/S proxy recorder)
- deleteProxyRecorder (Delete a HTTP/S proxy recorder)
- getProxyRecordersClientCertificates (Get all client certificates for HTTP/S proxy recorders)
- addProxyRecordersClientCertificate (Add a client certificate for HTTP/S proxy recorders)
- setProxyRecordersClientCertificateActive (Set a client certificate for HTTP/S proxy recorders to active or inactive)
- modifyProxyRecordersClientCertificate (Modify a client certificate for HTTP/S proxy recorders)
- deleteProxyRecordersClientCertificate (Delete a client certificate for HTTP/S proxy recorders)
Load Test Jobs Functions:
- getTestjobTemplates (Get all test job templates)
- defineNewTestjobFromTemplate (Define new test job from template)
- submitTestjob (Submit a ‘defined’ test job to the measuring agent or to the cluster controller)
- makeTestjobReadyToRun (Turn a remote test job which is in the state ‘submitted’ into the state ‘ready to run’)
- startTestjob (Turn a remote test job which is in the state ‘ready to run’ into the state ‘running’)
- getMeasuringAgentTestjobs (Get from a measuring agent all test jobs, inclusive their states)
- getTestjobOutDirectoryFilesInfo (Get from test job information about all files located in a measuring agent job or cluster controller job ‘out’ subdirectory)
- getTestjobOutDirectoryFile (Get from a measuring agent or from a cluster controller the content of a file located in a testjob/cluster-job out subdirectory in base64 format)
- saveTestjobOutDirectoryFileToProjectTree (Get from a measuring agent or from a cluster controller the content of a file located in a testjob/cluster-job out subdirectory and save it in a resource set of the project tree)
- deleteTestjob (Delete a test job locally and also on the measuring agent or cluster controller)
Test Execution Suites Functions:
- getTestExecutionSuites (Get all test execution suites with a summary of all results of the executed test runs)
- getCurrentlyRunningTestExecutionSuiteIds (Get the ID(s) of all currently running test execution suites)
- startTestExecutionSuiteTestRun (Start a new run of a test execution suite)
- getTestExecutionSuiteTestRunResultDetail (Get a test run result detail of a test execution suite)
- getTestExecutionSuiteTestRunTestJobOutputFileContent (Get the content of a test job output file of a test execution suite run)
- deleteTestExecutionSuiteTestRun (Delete a test run of a test execution suite)
Example
API HTTP/S Request
curl -v --request POST --header "Content-Type: application/json" --data {\"authTokenValue\":\"jPmFClqeDUXaEk8Q274q\",\"action\":\"getUserAccountInfo\"} https://portal.realload.com/RemoteUserAPI
API Request Data
{
"authTokenValue": "jPmFClqeDUXaEk8Q274q",
"action": "getUserAccountInfo"
}
API Response Data
{
"userAccountInfo":{
"userId":48,
"nickname":"BET",
"firstName":"Bettina",
"lastName":"MeierHans",
"primaryEmail":"bettina@meierhans.id.au",
"primarySMSPhone":"+61401111111",
"secondaryEmail":"",
"secondarySMSPhone":"",
"accountBlocked":false,
"accountCreateTime":1623719604561,
"lastLoginTime":1625348376450,
"lastLoginIP":"127.0.0.1",
"pricePlanId":6,
"accountExpiresTime":1625953109397,
"pricePlanTitle":"BASIC1"
},
"isError":false
}
If the API call is successful, then the response field “isError” is false.
If a numeric field has a value of -1 (minus one), this means “no data” or “unlimited” depending on the context.
getUserAccountInfo
Specific Request Fields:
Specific Error Flags:
getPricePlanInfo
Specific Request Fields:
Specific Error Flags:
JSON Response Example:
{
"pricePlanInfo":{
"pricePlanId":6,
"title":"BASIC1",
"description":"",
"isDeprecated":false,
"lastModified":1625348413042,
"maxDiskSpaceMB":1024,
"maxSubUserAccounts":0,
"maxMeasuringAgentsOwnedByUser":3,
"maxRemoteProxyRecordersOwnedByUser":3,
"executeLoadJobsEnabled":true,
"executeMonitoringJobsEnabled":false,
"apiAccessEnabled":true,
"maxStartLoadJobsLast24h":24,
"maxUsersPerLoadJob":500,
"maxDurationPerLoadJob":1800
},
"isError":false
}
The unit for “maxDurationPerLoadJob” is seconds.
getProjectTree
Specific Request Fields:
Specific Error Flags:
JSON Response Example:
{
"projectsArray": [
{
"projectId": 97,
"projectName": "Common",
"projectDescription": "",
"resourceSetsArray": [
{
"resourceSetId": 154,
"resourceSetName": "Input Files",
"resourceSetDescription": "",
"filesArray": [
{
"fileName": "InputFile.txt",
"fileSize": 233,
"fileHashCode": 1873256029,
"fileLastModified": 1613835992073
}
]
},
{
"resourceSetId": 155,
"resourceSetName": "Jar Files",
"resourceSetDescription": "",
"filesArray": [
{
"fileName": "com.dkfqs.tools.jar",
"fileSize": 578087,
"fileHashCode": -2033420926,
"fileLastModified": 1613838181727
}
]
},
{
"resourceSetId": 156,
"resourceSetName": "Plug-Ins",
"resourceSetDescription": "",
"filesArray": [
{
"fileName": "HttpSessionPlugin_ChangeCopyright.json",
"fileSize": 5321,
"fileHashCode": 1958407366,
"fileLastModified": 1613838287871
}
]
}
]
},
...
...
...
],
"isError": false
}
createProject
Specific Request Fields:
- projectName
- projectDescription (optional)
Response Fields:
Specific Error Flags:
- projectNameError
- diskSpaceLimitExceededError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"createProject",
"projectName":"My New Project",
"projectDescription": "Created by API call"
}
JSON Response Example (Success Case):
{"projectId":113,"isError":false}
JSON Response Example (Error Case):
{"isError":true,"genericErrorText":"","diskSpaceLimitExceededError":false,"projectNameError":true}
deleteProject
Specific Request Fields:
- projectId
- moveToTrash (optional, default: false)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteProject",
"projectId":113,
"moveToTrash":false
}
getResourceSetsOfProject
Specific Request Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getResourceSetsOfProject",
"projectId":97
}
JSON Response Example (Success Case):
{
"resourceSetsArray": [
{
"resourceSetId": 154,
"resourceSetName": "Input Files",
"resourceSetDescription": "",
"filesArray": [
{
"fileName": "InputFile.txt",
"fileSize": 233,
"fileHashCode": 1873256029,
"fileLastModified": 1613835992073
}
]
},
{
"resourceSetId": 155,
"resourceSetName": "Jar Files",
"resourceSetDescription": "",
"filesArray": [
{
"fileName": "com.dkfqs.tools.jar",
"fileSize": 578087,
"fileHashCode": -2033420926,
"fileLastModified": 1613838181727
}
]
},
{
"resourceSetId": 156,
"resourceSetName": "Plug-Ins",
"resourceSetDescription": "",
"filesArray": [
{
"fileName": "HttpSessionPlugin_ChangeCopyright.json",
"fileSize": 5321,
"fileHashCode": 1958407366,
"fileLastModified": 1613838287871
}
]
}
],
"isError": false
}
createResourceSet
Specific Request Fields:
- projectId
- resourceSetName
- resourceSetDescription (optional)
Response Fields:
Specific Error Flags:
- projectIdError
- resourceSetNameError
- diskSpaceLimitExceededError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"createResourceSet",
"projectId":97,
"resourceSetName":"My New Resource Set",
"resourceSetDescription": "Created by API call"
}
JSON Response Example (Success Case):
{"resourceSetId":172,"isError":false}
JSON Response Example (Error Case):
{"isError":true,"genericErrorText":"","resourceSetNameError":true,"projectIdError":false,"diskSpaceLimitExceededError":false}
deleteResourceSet
Specific Request Fields:
- projectId
- resourceSetId
- moveToTrash (optional, default: false)
Specific Error Flags:
- projectIdError
- resourceSetIdError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteResourceSet",
"projectId":97,
"resourceSetId":172,
"moveToTrash":false
}
getFilesInfoOfResourceSet
Specific Request Fields:
Specific Error Flags:
- projectIdError
- resourceSetIdError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getFilesInfoOfResourceSet",
"projectId":23,
"resourceSetId":143
}
JSON Response Example:
{
"filesArray": [
{
"fileName": "DKFQSLibrary2.psm1",
"fileSize": 16339,
"fileHashCode": -1503445747,
"fileLastModified": 1603566144851
},
{
"fileName": "powershell-http-bern2.ps1",
"fileSize": 12900,
"fileHashCode": -1174212096,
"fileLastModified": 1603566162094
},
{
"fileName": "TestResult_powershell-http-bern2Neu_2020-10-24@21-06-04.json",
"fileSize": 14395,
"fileHashCode": -951574615,
"fileLastModified": 1603566379097
},
{
"fileName": "TestResult_powershell-http-bern2Neu_2020-10-24@21-09-45.json",
"fileSize": 55128,
"fileHashCode": 1499924815,
"fileLastModified": 1603566591322
}
],
"isError": false
}
createFile
Specific Request Fields:
- projectId
- resourceSetId
- fileName
- fileContentB64 (the content of the file, in Base64 format)
Response Fields:
- fileName
- fileSize
- fileHashCode
- fileLastModified
Specific Error Flags:
- projectIdError
- resourceSetIdError
- fileNameError
- diskSpaceLimitExceededError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"createFile",
"projectId":23,
"resourceSetId":143,
"fileName":"test.txt",
"fileContentB64":"VGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgZmlsZS4="
}
JSON Response Example (Success Case):
{
"fileName":"test.txt",
"fileSize":32,
"fileHashCode":-1460278014,
"fileLastModified":1625423562384,
"isError":false
}
JSON Response Example (Error Case):
{"isError":true,"genericErrorText":"","projectIdError":false,"resourceSetIdError":false,"diskSpaceLimitExceededError":false,"fileNameError":true}
getFile
Specific Request Fields:
- projectId
- resourceSetId
- fileName
Response Fields:
- fileName
- fileContentB64 (the content of the file, in Base64 format)
- fileSize
- fileHashCode
- fileLastModified
Specific Error Flags:
- projectIdError
- resourceSetIdError
- fileNameError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getFile",
"projectId":23,
"resourceSetId":143,
"fileName":"test.txt"
}
JSON Response Example (Success Case):
{
"fileName":"test.txt",
"fileContentB64":"VGhpcyBpcyB0aGUgY29udGVudCBvZiB0aGUgZmlsZS4=",
"fileSize":32,
"fileHashCode":-1460278014,
"fileLastModified":1625423562384,
"isError":false
}
deleteFile
Specific Request Fields:
- projectId
- resourceSetId
- fileName
- moveToTrash (optional, default: false)
Response Fields:
- fileDeleted (a flag which is true if the file was deleted)
Specific Error Flags:
- projectIdError
- resourceSetIdError
- fileNameError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteFile",
"projectId":23,
"resourceSetId":143,
"fileName":"test.txt",
"moveToTrash":false
}
JSON Response Example (Success Case):
{"fileDeleted":true,"isError":false}
JSON Response Example (Error Case):
{"isError":true,"genericErrorText":"","projectIdError":false,"resourceSetIdError":false,"fileNameError":true}
getMeasuringAgents
Specific Request Fields:
Response Fields:
- agentId (the unique measuring agent id)
- createdBySystem (normally false, true = the user cannot modify or delete the measuring agent)
- ownerUserId (always the same as the user account id)
- agentActive (flag: if false then the availability of the measuring agent is not monitored)
- agentDescription
- agentHost
- agentPort
- authToken (the authentication token to access the measuring agent, or an empty string = no access protection | don’t confuse it with the API authTokenValue)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getMeasuringAgents"
}
JSON Response Example (Success Case):
{
"measuringAgentsArray": [
{
"agentId": 46,
"createdBySystem": false,
"ownerUserId": 13,
"agentActive": true,
"agentDescription": "Local Agent",
"agentHost": "127.0.0.1",
"agentPort": 8080,
"authToken": "OrKmpkbyNWEHok"
},
{
"agentId": 49,
"createdBySystem": false,
"ownerUserId": 13,
"agentActive": false,
"agentDescription": "Rasberry 1",
"agentHost": "192.168.0.51",
"agentPort": 8080,
"authToken": ""
},
{
"agentId": 50,
"createdBySystem": false,
"ownerUserId": 13,
"agentActive": true,
"agentDescription": "Ubuntu 10",
"agentHost": "192.168.0.110",
"agentPort": 8080,
"authToken": ""
},
{
"agentId": 51,
"createdBySystem": false,
"ownerUserId": 13,
"agentActive": true,
"agentDescription": "Ubuntu 11",
"agentHost": "192.168.0.111",
"agentPort": 8080,
"authToken": ""
}
],
"isError": false
}
getMinRequiredMeasuringAgentVersion
Specific Request Fields:
Response Fields:
- minRequiredMeasuringAgentVersion (the minimum required measuring agent version)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getMinRequiredMeasuringAgentVersion"
}
JSON Response Example (Success Case):
{
"minRequiredMeasuringAgentVersion":"3.9.34",
"isError":false
}
addMeasuringAgent
Specific Request Fields:
- agentDescription (must be unique across all measuring agents of the user, cannot be an empty string)
- agentHost
- agentPort
- agentActive (flag: if false then the availability of the measuring agent is not monitored)
- agentAuthToken (the authentication token to access the measuring agent, or an empty string = no access protection)
Response Fields (JSON object “measuringAgent”):
- agentId (the unique measuring agent id)
- createdBySystem (always false for this function)
- ownerUserId (always the same as the user account id)
- agentActive (flag: if false then the availability of the measuring agent is not monitored)
- agentDescription
- agentHost
- agentPort
- authToken (the authentication token to access the measuring agent, or an empty string = no access protection)
Specific Error Flags:
- agentDescriptionError
- agentHostError
- agentPortError
- maxNumberMeasuringAgentsLimitExceededError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"addMeasuringAgent",
"agentDescription":"Ubuntu 12",
"agentHost":"192.168.0.112",
"agentPort":8080,
"agentActive": true,
"agentAuthToken": "nixda"
}
JSON Response Example (Success Case):
{
"measuringAgent": {
"agentId": 53,
"createdBySystem": false,
"ownerUserId": 13,
"agentActive": true,
"agentDescription": "Ubuntu 12",
"agentHost": "192.168.0.112",
"agentPort": 8080,
"authToken": "nixda"
},
"isError": false
}
pingMeasuringAgent
Specific Request Fields:
Response Fields (JSON object “agentResponse”):
- pingFromRemoteIp
- pingFromRemoteUserId
- productVersion (measuring agent version | don’t confuse with portal server version)
- limitMaxUsersPerJob (limit of the measuring agent, -1 = unlimited | don’t confuse with price plan limit)
- limitMaxJobDurationSeconds (limit of the measuring agent, -1 = unlimited | don’t confuse with price plan limit)
- osName
- osVersion
- javaVersion
- javaVendor
- javaMaxMemory
- systemTime
- deltaTimeMillis
- agentStartupTimeStamp
- httpExecuteTimeMillis
Specific Error Flags:
- agentIdError
- agentAccessDeniedError
- agentVersionOutdatedError
- agentNotReachableError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"pingMeasuringAgent",
"agentId":48
}
JSON Response Example (Success Case):
{
"agentResponse": {
"pingFromRemoteIp": "83.150.39.44",
"pingFromRemoteUserId": 13,
"productVersion": "3.9.30",
"limitMaxUsersPerJob": 500,
"limitMaxJobDurationSeconds": 300,
"osName": "Linux",
"osVersion": "4.15.0-136-generic",
"javaVersion": "11.0.1",
"javaVendor": "Oracle Corporation",
"javaMaxMemory":"2048 MB",
"systemTime": 1625513238236,
"deltaTimeMillis": 841,
"agentStartupTimeStamp": 1622836702172,
"httpExecuteTimeMillis": 247
},
"isError": false
}
JSON Response Example (Error Case 1):
{
"isError": true,
"genericErrorText": "API V1 request to 192.168.0.51:8080 timed out",
"agentIdError": false,
"agentAccessDeniedError": false,
"agentNotReachableError": true,
"agentVersionOutdatedError": false
}
JSON Response Example (Error Case 2):
{
"isError": true,
"genericErrorText": "Min. measuring agent version required: 3.9.30",
"agentIdError": false,
"agentAccessDeniedError": false,
"agentNotReachableError": false,
"agentVersionOutdatedError": true
}
setMeasuringAgentActive
Specific Request Fields:
Response Fields:
Specific Error Flags:
- agentIdError
- agentAccessDeniedError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"setMeasuringAgentActive",
"agentId":46,
"agentActive":false
}
JSON Response Example (Success Case):
deleteMeasuringAgent
Specific Request Fields:
Response Fields:
Specific Error Flags:
- agentIdError
- agentAccessDeniedError
- agentDeleteDeniedError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteMeasuringAgent",
"agentId":54
}
JSON Response Example (Success Case):
getMeasuringAgentClusters
Specific Request Fields:
Response Fields (JSON array “measuringAgentClustersArray”):
- clusterId (the unique cluster id)
- createdBySystem (normally false, true = the user cannot modify or delete the cluster)
- ownerUserId (always the same as the user account id)
- clusterActive (flag: if false then the availability of the cluster is not monitored)
- clusterDescription
- controllerHost (the hostname or IP address of the cluster controller)
- controllerPort (the IP port of the cluster controller)
- controllerAuthToken (the authentication token to access the cluster controller, or an empty string = no access protection | don’t confuse it with the API authTokenValue)
- clusterMembersArray
- clusterMemberId (the unique cluster member id)
- loadFactor (integer 0..100: the default load factor of this cluster member)
- agentId (the referenced measuring agent id)
- agentActive (flag: if false then the availability of the measuring agent is not monitored)
- agentDescription
- agentHost
- agentPort
- agentAuthToken (the authentication token to access the measuring agent, or an empty string = no access protection | don’t confuse it with the API authTokenValue)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getMeasuringAgentClusters"
}
JSON Response Example:
{
"measuringAgentClustersArray": [
{
"clusterId": 11,
"createdBySystem": false,
"ownerUserId": 13,
"clusterActive": true,
"clusterDescription": "C1",
"controllerHost": "192.168.0.50",
"controllerPort": 8083,
"controllerAuthToken": "aberaber",
"clusterMembersArray": [
{
"clusterMemberId": 59,
"loadFactor": 1,
"agentId": 64,
"agentActive": true,
"agentDescription": "Agent 1",
"agentHost": "192.168.0.10",
"agentPort": 8080,
"agentAuthToken": "OrKmAAbyNWEHok"
},
{
"clusterMemberId": 60,
"loadFactor": 1,
"agentId": 59,
"agentActive": true,
"agentDescription": "Ubuntu 10",
"agentHost": "192.168.0.110",
"agentPort": 8080,
"agentAuthToken": "asc7jhacab"
},
{
"clusterMemberId": 61,
"loadFactor": 1,
"agentId": 60,
"agentActive": true,
"agentDescription": "Ubuntu 11",
"agentHost": "192.168.0.111",
"agentPort": 8080,
"agentAuthToken": "66ascascsdac"
}
]
},
{
"clusterId": 14,
"createdBySystem": false,
"ownerUserId": 13,
"clusterActive": true,
"clusterDescription": "C2",
"controllerHost": "192.168.0.50",
"controllerPort": 8083,
"controllerAuthToken": "aberaber",
"clusterMembersArray": [
{
"clusterMemberId": 66,
"loadFactor": 1,
"agentId": 56,
"agentActive": true,
"agentDescription": "Test System",
"agentHost": "192.168.0.60",
"agentPort": 8080,
"agentAuthToken": "aberdoch"
},
{
"clusterMemberId": 67,
"loadFactor": 1,
"agentId": 59,
"agentActive": true,
"agentDescription": "Ubuntu 10",
"agentHost": "192.168.0.110",
"agentPort": 8080,
"agentAuthToken": "asc7jhacab"
}
]
}
],
"isError": false
}
getClusterControllers
Specific Request Fields:
Response Fields (JSON array “clusterControllersArray”):
- controllerHost (the hostname or IP address of the cluster controller)
- controllerPort (the IP port of the cluster controller)
- controllerAuthToken (the authentication token to access the cluster controller)
- measuringAgentClustersArray (an array of measuring agent clusters which are referencing this cluster controller)
- clusterId
- clusterDescription
- clusterActive
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getClusterControllers"
}
JSON Response Example:
{
"clusterControllersArray": [
{
"controllerHost": "192.168.0.33",
"controllerPort": 8083,
"controllerAuthToken": "2fasdtfffe",
"measuringAgentClustersArray": [
{
"clusterId": 11,
"clusterDescription": "C1",
"clusterActive": 1
},
{
"clusterId": 13,
"clusterDescription": "C2",
"clusterActive": 1
},
{
"clusterId": 14,
"clusterDescription": "C3",
"clusterActive": 1
}
]
},
{
"controllerHost": "192.168.0.50",
"controllerPort": 8083,
"controllerAuthToken": "asfsdgh763",
"measuringAgentClustersArray": [
{
"clusterId": 15,
"clusterDescription": "C4",
"clusterActive": 1
},
{
"clusterId": 16,
"clusterDescription": "C7",
"clusterActive": 1
}
]
}
],
"isError": false
}
getMinRequiredClusterControllerVersion
Specific Request Fields:
Response Fields:
- minRequiredClusterControllerVersion (the minimum required cluster controller version)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getMinRequiredClusterControllerVersion"
}
JSON Response Example:
{
"minRequiredClusterControllerVersion":"4.0.4",
"isError":false
}
pingClusterController
Specific Request Fields:
- controllerHost (the cluster controller host name or IP address)
- controllerPort (the cluster controller IP port)
- controllerAuthToken (the authentication token to access the cluster controller, or an empty string = no access protection)
Response Fields (JSON object “controllerResponse”):
- pingFromRemoteIp
- pingFromRemoteUserId
- productVersion (cluster controller version | don’t confuse with portal server version)
- osName
- osVersion
- javaVersion
- javaVendor
- javaMaxMemory
- systemTime
- deltaTimeMillis
- controllerStartupTimeStamp
- httpExecuteTimeMillis
- clusterControllerOutdated
Specific Error Flags:
- controllerHostError
- controllerPortError
- controllerVersionOutdatedError
- controllerNotReachableError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"pingClusterController",
"controllerHost":"192.168.0.50",
"controllerPort":8083,
"controllerAuthToken":"hagsajjs99"
}
JSON Response Example (Success Case):
{
"controllerResponse": {
"pingFromRemoteIp": "192.168.0.100",
"pingFromRemoteUserId": 13,
"productVersion": "4.0.4",
"osName": "Linux",
"osVersion": "4.15.0-135-generic",
"javaVersion": "11.0.1",
"javaVendor": "Oracle Corporation",
"javaMaxMemory": "512 MB",
"systemTime": 1643406118552,
"deltaTimeMillis": 1120,
"controllerStartupTimeStamp": 1643322597013,
"httpExecuteTimeMillis": 249,
"clusterControllerOutdated": false
},
"isError": false
}
JSON Response Example (Error Case 1):
{
"isError": true,
"genericErrorText": "API call pingGetControllerInfo failed. Error code = 18, Error message = Invalid authentication token",
"controllerHostError": false,
"controllerVersionOutdatedError": false,
"controllerNotReachableError": true,
"controllerPortError": false
}
JSON Response Example (Error Case 2):
{
"isError": true,
"genericErrorText": "Min. cluster controller version required: 4.0.4",
"controllerHostError": false,
"controllerVersionOutdatedError": true,
"controllerNotReachableError": false,
"controllerPortError": false
}
addMeasuringAgentCluster
Specific Request Fields:
- clusterActive (flag: if false then the availability of the cluster is not monitored)
- clusterDescription (must be unique across all measuring agent clusters and all measuring agents of the user, cannot be an empty string)
- controllerHost (the cluster controller host name or IP address)
- controllerPort (the cluster controller IP port)
- controllerAuthToken (the authentication token to access the cluster controller, or an empty string = no access protection)
- clusterMembersArray (an array of cluster members - can also be empty)
- agentId (the referenced measuring agent id)
- loadFactor (integer 0..100: the load factor of this cluster member, recommended value = 1)
Response Fields:
- clusterId (the unique cluster id)
- clusterMembersArray (the array of cluster members)
- clusterMemberId (the unique cluster member id)
- agentId (the referenced measuring agent id)
- loadFactor (integer 0..100: the load factor of this cluster member)
Specific Error Flags:
- clusterDescriptionError
- controllerHostError
- controllerPortError
- agentIdError
- loadFactorError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"addMeasuringAgentCluster",
"clusterActive":true,
"clusterDescription":"C7",
"controllerHost":"192.168.0.50",
"controllerPort":8083,
"controllerAuthToken":"aberaber",
"clusterMembersArray":[
{
"agentId":59,
"loadFactor":1
},
{
"agentId":60,
"loadFactor":1
}
]
}
JSON Response Example (Success Case):
{
"clusterId":16,
"clusterMembersArray":[
{
"clusterMemberId":71,
"agentId":59,
"loadFactor":1
},
{
"clusterMemberId":72,
"agentId":60,
"loadFactor":1
}
],
"isError":false
}
JSON Response Example (Error Case):
{
"isError": true,
"genericErrorText": "Invalid agentId = 101",
"controllerHostError": false,
"agentIdError": true,
"controllerPortError": false,
"loadFactorError": false,
"clusterDescriptionError": false
}
addMemberToMeasuringAgentCluster
Specific Request Fields:
- clusterId
- agentId (the referenced measuring agent id)
- loadFactor (integer 0..100: the load factor of this cluster member, recommended value = 1)
Response Fields (JSON object “clusterMember”):
- clusterMemberId (the unique cluster member id)
- agentId
- loadFactor
Specific Error Flags:
- clusterIdError
- clusterAccessDeniedError
- clusterModifyDeniedError
- agentIdError
- agentAccessDeniedError
- loadFactorError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"addMemberToMeasuringAgentCluster",
"clusterId":17,
"agentId":64,
"loadFactor":1
}
JSON Response Example:
{
"clusterMember": {
"clusterMemberId": 75,
"agentId": 64,
"loadFactor": 1
},
"isError": false
}
removeMemberFromMeasuringAgentCluster
Specific Request Fields:
- clusterId
- clusterMemberId
Response Fields:
Specific Error Flags:
- clusterIdError
- clusterAccessDeniedError
- clusterModifyDeniedError
- clusterMemberIdError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"removeMemberFromMeasuringAgentCluster",
"clusterId":17,
"clusterMemberId":75
}
JSON Response Example:
pingMeasuringAgentClusterMembers
Specific Request Fields:
Response Fields (JSON object “controllerResponse”):
- productVersion (cluster controller version)
- clusterConnectResult (the connect information to the cluster members)
- measuringAgentClusterMemberArray (the array of cluster members)
- clusterMemberId
- loadFactor
- agentId
- agentActive
- agentDescription
- agentHost
- agentPort
- agentAuthToken
- connectSuccessfulClusterMemberArray (the array of cluster member ids to which the connection was successful established)
- connectFailedClusterMemberArray (the array of cluster members to which the connection has failed)
- clusterMemberId
- errorMessage
- clusterConnectStartTimestamp
- clusterConnectDurationMillis
- clusterActionResult (the ping result of the cluster members)
- actionSuccessfulClusterMemberArray (the array of cluster member ids which have performed the ping to the measuring agent)
- actionFailedClusterMemberArray (the array of cluster members which have not performed the ping to the measuring agent)
- clusterMemberId
- errorMessage
- jsonResponseClusterMemberArray (the array of cluster member which have performed the ping)
- clusterMemberId
- jsonResponseObject (the pong response of the cluster member)
- productVersion (measuring agent product version)
- systemTime
- deltaTimeMillis (the OS time difference in milliseconds between the cluster controller and the measuring agent)
- osName
- osVersion
- javaVersion
- javaVendor
- javaMaxMemory
- samplingGranularityMillis (the data collector sampling granularity in milliseconds)
- isError (boolean flag, normally always false)
- measuringAgentOutdated (a boolean flag, true = measuring agent product version is outdated)
- clusterActionStartTimestamp
- clusterActionDurationMillis
- httpExecuteTimeMillis
- clusterControllerOutdated
Specific Error Flags:
- clusterIdError
- clusterAccessDeniedError
- controllerVersionOutdatedError
- controllerNotReachableError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"pingMeasuringAgentClusterMembers",
"clusterId":16
}
JSON Response Example (Success Case):
{
"controllerResponse": {
"productVersion": "4.0.4",
"clusterConnectResult": {
"measuringAgentClusterMemberArray": [
{
"clusterMemberId": 71,
"loadFactor": 1,
"agentId": 59,
"agentActive": true,
"agentDescription": "Ubuntu 10",
"agentHost": "192.168.0.110",
"agentPort": 8080,
"agentAuthToken": "agsdhagsj"
},
{
"clusterMemberId": 72,
"loadFactor": 1,
"agentId": 60,
"agentActive": true,
"agentDescription": "Ubuntu 11",
"agentHost": "192.168.0.111",
"agentPort": 8080,
"agentAuthToken": "nvbjnvbnn"
}
],
"connectSuccessfulClusterMemberArray": [
71,
72
],
"connectFailedClusterMemberArray": [],
"clusterConnectStartTimestamp": 1643410829270,
"clusterConnectDurationMillis": 79
},
"clusterActionResult": {
"actionSuccessfulClusterMemberArray": [
71,
72
],
"actionFailedClusterMemberArray": [],
"jsonResponseClusterMemberArray": [
{
"clusterMemberId": 71,
"jsonResponseObject": {
"productVersion": "4.0.4",
"systemTime": 1643410829340,
"deltaTimeMillis": -10,
"osName": "Linux",
"osVersion": "5.4.0-92-generic",
"javaVersion": "11.0.1",
"javaVendor": "Oracle Corporation",
"javaMaxMemory": "2048 MB",
"samplingGranularityMillis": 4000,
"isError": false,
"measuringAgentOutdated": false
}
},
{
"clusterMemberId": 72,
"jsonResponseObject": {
"productVersion": "4.0.4",
"systemTime": 1643410829351,
"deltaTimeMillis": -10,
"osName": "Linux",
"osVersion": "5.4.0-92-generic",
"javaVersion": "11.0.1",
"javaVendor": "Oracle Corporation",
"javaMaxMemory": "2048 MB",
"samplingGranularityMillis": 4000,
"isError": false,
"measuringAgentOutdated": false
}
}
],
"clusterActionStartTimestamp": 1643410829349,
"clusterActionDurationMillis": 43
},
"httpExecuteTimeMillis": 1778,
"clusterControllerOutdated": false
},
"isError": false
}
JSON Response Example (Error Case / Partly failed):
{
"controllerResponse": {
"productVersion": "4.0.4",
"clusterConnectResult": {
"measuringAgentClusterMemberArray": [
{
"clusterMemberId": 71,
"loadFactor": 1,
"agentId": 59,
"agentActive": true,
"agentDescription": "Ubuntu 10",
"agentHost": "192.168.0.110",
"agentPort": 8080,
"agentAuthToken": "marderzahn"
},
{
"clusterMemberId": 72,
"loadFactor": 1,
"agentId": 60,
"agentActive": true,
"agentDescription": "Ubuntu 11",
"agentHost": "192.168.0.111",
"agentPort": 8080,
"agentAuthToken": "marderzahn"
}
],
"connectSuccessfulClusterMemberArray": [
72
],
"connectFailedClusterMemberArray": [
{
"clusterMemberId": 71,
"errorMessage": "Connection refused (Connection refused)"
}
],
"clusterConnectStartTimestamp": 1643414272214,
"clusterConnectDurationMillis": 97
},
"clusterActionResult": {
"actionSuccessfulClusterMemberArray": [
72
],
"actionFailedClusterMemberArray": [],
"jsonResponseClusterMemberArray": [
{
"clusterMemberId": 72,
"jsonResponseObject": {
"productVersion": "4.0.4",
"systemTime": 1643414272310,
"deltaTimeMillis": -8,
"osName": "Linux",
"osVersion": "5.4.0-92-generic",
"javaVersion": "11.0.1",
"javaVendor": "Oracle Corporation",
"javaMaxMemory": "2048 MB",
"samplingGranularityMillis": 4000,
"isError": false,
"measuringAgentOutdated": false
}
}
],
"clusterActionStartTimestamp": 1643414272311,
"clusterActionDurationMillis": 21
},
"httpExecuteTimeMillis": 1769,
"clusterControllerOutdated": false
}
}
setMeasuringAgentClusterActive
Specific Request Fields:
Response Fields:
Specific Error Flags:
- clusterIdError
- clusterAccessDeniedError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"setMeasuringAgentClusterActive",
"clusterId":16,
"clusterActive":true
}
JSON Response Example (Success Case):
deleteMeasuringAgentCluster
Specific Request Fields:
Response Fields:
Specific Error Flags:
- clusterIdError
- clusterAccessDeniedError
- clusterDeleteDeniedError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteMeasuringAgentCluster",
"clusterId":16
}
JSON Response Example (Success Case):
getProxyRecorders
Specific Request Fields:
Response Fields (JSON array “proxyRecordersArray”):
- recorderId (the unique proxy recorder id)
- createdBySystem (normally false, true = the user cannot modify or delete the proxy recorder)
- ownerUserId (always the same as the user account id)
- recorderDescription
- recorderProxyHost
- recorderProxyPort (HTTP and HTTPS port of the proxy)
- recorderProxyAuthUsername (proxy authentication username, or an empty string = no proxy authentication required)
- recorderProxyAuthPassword (proxy authentication password)
- recorderControlPort (the proxy recorder control port)
- recorderControlAuthToken (the authentication token to access the proxy recorder control port, or an empty string = no access protection | don’t confuse it with the API authTokenValue)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getProxyRecorders"
}
JSON Response Example:
{
"proxyRecordersArray": [
{
"recorderId": 3,
"createdBySystem": false,
"ownerUserId": 13,
"recorderDescription": "Erster",
"recorderProxyHost": "192.168.0.40",
"recorderProxyPort": 8082,
"recorderProxyAuthUsername": "",
"recorderProxyAuthPassword": "",
"recorderControlPort": 8081,
"recorderControlAuthToken": ""
},
{
"recorderId": 4,
"createdBySystem": false,
"ownerUserId": 13,
"recorderDescription": "proxy.realload.com",
"recorderProxyHost": "proxy.realload.com",
"recorderProxyPort": 8082,
"recorderProxyAuthUsername": "max.meier",
"recorderProxyAuthPassword": "123456",
"recorderControlPort": 8081,
"recorderControlAuthToken": "aZujkl97zuwert"
}
],
"isError": false
}
getMinRequiredProxyRecorderVersion
Specific Request Fields:
Response Fields:
- minRequiredProxyRecorderVersion (the minimum required HTTP/S proxy recorder version)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getMinRequiredProxyRecorderVersion"
}
JSON Response Example (Success Case):
{
"minRequiredProxyRecorderVersion":"0.2.2",
"isError":false
}
addProxyRecorder
Specific Request Fields:
- recorderDescription (must be unique across all HTTP/S proxy recorders of the user, cannot be an empty string)
- recorderProxyHost
- recorderProxyPort (HTTP and HTTPS port of the proxy)
- recorderProxyAuthUsername (proxy authentication username, or an empty string = no proxy authentication required)
- recorderProxyAuthPassword (proxy authentication password, applied if recorderProxyAuthUsername is not an empty string)
- recorderControlPort (the proxy recorder control port)
- recorderControlAuthToken (the authentication token to access the proxy recorder control port, or an empty string = no access protection)
Response Fields (JSON object “proxyRecorder”):
- recorderId (the unique HTTP/S proxy recorder id)
- createdBySystem (always false for this function)
- ownerUserId (always the same as the user account id)
- recorderDescription
- recorderProxyHost
- recorderProxyPort
- recorderProxyAuthUsername
- recorderProxyAuthPassword
- recorderControlPort
- recorderControlAuthToken
Specific Error Flags:
- recorderDescriptionError
- recorderProxyHostError
- recorderProxyPortError
- recorderControlPortError
- maxNumberProxyRecordersLimitExceededError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"addProxyRecorder",
"recorderDescription":"My New Proxy Recorder",
"recorderProxyHost":"192.168.0.148",
"recorderProxyPort":8082,
"recorderProxyAuthUsername":"max.meier",
"recorderProxyAuthPassword":"123456",
"recorderControlPort":8081,
"recorderControlAuthToken":"aZujkl97zuwert"
}
JSON Response Example (Success Case):
{
"proxyRecorder": {
"recorderId": 10,
"createdBySystem": false,
"ownerUserId": 13,
"recorderDescription": "My New Proxy Recorder",
"recorderProxyHost": "192.168.0.148",
"recorderProxyPort": 8082,
"recorderProxyAuthUsername": "max.meier",
"recorderProxyAuthPassword": "123456",
"recorderControlPort": 8081,
"recorderControlAuthToken": "aZujkl97zuwert"
},
"isError": false
}
pingProxyRecorder
Specific Request Fields:
Response Fields (JSON object “pongResponse”):
- pingFromRemoteIp
- pingFromRemoteUserId
- productVersion (the remote proxy recorder version | don’t confuse with portal server version)
- recorderComponentVersion (the proxy recorder component version | don’t confuse with portal server version)
- isRecording
- recordHostFilter
- numRecordedElements
- osName
- osVersion
- javaMemoryMB
- javaVersion
- javaVendor
- systemTime
- deltaTimeMillis
- httpExecuteTimeMillis
Specific Error Flags:
- recorderIdError
- recorderAccessDeniedError
- recorderNotReachableError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"pingProxyRecorder",
"recorderId":4
}
JSON Response Example (Success Case):
{
"pongResponse": {
"pingFromRemoteIp": "83.150.39.44",
"pingFromRemoteUserId": 13,
"productVersion": "0.2.0",
"recorderComponentVersion": "1.1.0",
"isRecording": false,
"recordHostFilter": "www.dkfqa.com",
"numRecordedElements": 0,
"osName": "Linux",
"osVersion": "5.4.0-74-generic",
"javaMemoryMB": 2048,
"javaVersion": "11.0.1",
"javaVendor": "Oracle Corporation",
"systemTime": 1625529858405,
"deltaTimeMillis": 790,
"httpExecuteTimeMillis": 88
},
"isError": false
}
JSON Response Example (Error Case):
{
"isError": true,
"genericErrorText": "connect timed out",
"recorderNotReachableError": true,
"recorderIdError": false,
"recorderAccessDeniedError": false
}
deleteProxyRecorder
Specific Request Fields:
Response Fields:
Specific Error Flags:
- recorderIdError
- recorderAccessDeniedError
- recorderDeleteDeniedError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteProxyRecorder",
"recorderId":10
}
JSON Response Example (Success Case):
getProxyRecordersClientCertificates
Specific Request Fields:
Response Fields:
- certificateId (unique ID)
- ownerUserId (always the own user ID)
- recorderId (always -1 = apply for all proxy recorders)
- originalCertFileName (without disk path)
- certFileType (always PKCS#12)
- certFileDataB64 (the file data in base64 format)
- certPassword
- certDescription
- certActive (if false then do not transmit the certificate to the proxy recorders)
- applyForHost
- applyForPort
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getProxyRecordersClientCertificates"
}
JSON Response Example (Success Case):
{
"clientCertificatesArray": [
{
"certificateId": 1,
"ownerUserId": 13,
"recorderId": -1,
"originalCertFileName": "fischer@dkfqa.com.p12",
"certFileType": "PKCS#12",
"certFileDataB64": "MIIRQQ.....CAA=",
"certPassword": "12345678",
"certDescription": "Fischer's Cert",
"certActive": true,
"applyForHost": "192.168.0.100",
"applyForPort": 499
},
{
"certificateId": 3,
"ownerUserId": 13,
"recorderId": -1,
"originalCertFileName": "miller@dkfqa.com.p12",
"certFileType": "PKCS#12",
"certFileDataB64": "MIIRXB.....CCAA=",
"certPassword": "abcdefgh",
"certDescription": "",
"certActive": false,
"applyForHost": "www.werwaswo.com",
"applyForPort": 443
}
],
"isError": false
}
addProxyRecordersClientCertificate
Specific Request Fields:
- recorderId (always -1 = apply for all proxy recorders)
- certFileName (without disk path)
- certFileType (always PKCS#12)
- certFileDataB64 (the file data in base64 format)
- certPassword
- certDescription (optional, but not null)
- certActive (if false then do not transmit the certificate to the proxy recorders)
- applyForHost
- applyForPort
Response Fields:
- certificateId (the new unique ID)
- ownerUserId (always the own user ID)
- recorderId (always -1 = apply for all proxy recorders)
- originalCertFileName (without disk path)
- certFileType (always PKCS#12)
- certDescription
- certActive
- applyForHost
- applyForPort
Specific Error Flags:
- certDescriptionError
- applyForHostError
- applyForPortError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"addProxyRecordersClientCertificate",
"recorderId": -1,
"certFileName": "felix@dkfqa.com.p12",
"certFileType": "PKCS#12",
"certFileDataB64": "MIIRQQIBAzCCEQ.....3dUWQICCAA=",
"certPassword": "mammamia",
"certDescription":"",
"certActive": true,
"applyForHost": "www.dkfqa.com",
"applyForPort": 443
}
JSON Response Example (Success Case):
{
"addedClientCertificate": {
"certificateId": 5,
"ownerUserId": 13,
"recorderId": -1,
"originalCertFileName": "felix@dkfqa.com.p12",
"certFileType": "PKCS#12",
"certDescription": "",
"certActive": true,
"applyForHost": "www.dkfqa.com",
"applyForPort": 443
},
"isError": false
}
setProxyRecordersClientCertificateActive
Specific Request Fields:
- certificateId
- certActive (if false then do not transmit the certificate to the proxy recorders)
Response Fields:
- certificateId
- ownerUserId (always the own user ID)
- recorderId (always -1 = apply for all proxy recorders)
- originalCertFileName (without disk path)
- certFileType (always PKCS#12)
- certDescription
- certActive
- applyForHost
- applyForPort
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"setProxyRecordersClientCertificateActive",
"certificateId": 5,
"certActive": false
}
JSON Response Example (Success Case):
{
"updatedClientCertificate": {
"certificateId": 5,
"ownerUserId": 13,
"recorderId": -1,
"originalCertFileName": "felix@dkfqa.com.p12",
"certFileType": "PKCS#12",
"certDescription": "",
"certActive": false,
"applyForHost": "www.dkfqa.com",
"applyForPort": 443
},
"isError": false
}
modifyProxyRecordersClientCertificate
Specific Request Fields:
- certificateId
- certDescription (optional but not null)
- applyForHost (required)
- applyForPort (required)
Response Fields:
- certificateId
- ownerUserId (always the own user ID)
- recorderId (always -1 = apply for all proxy recorders)
- originalCertFileName (without disk path)
- certFileType (always PKCS#12)
- certDescription
- certActive
- applyForHost
- applyForPort
Specific Error Flags:
- certDescriptionError
- applyForHostError
- applyForPortError
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"modifyProxyRecordersClientCertificate",
"certificateId": 5,
"certDescription": "My Cert",
"applyForHost": "www.dkfqa.com",
"applyForPort": 444
}
JSON Response Example (Success Case):
{
"updatedClientCertificate": {
"certificateId": 5,
"ownerUserId": 13,
"recorderId": -1,
"originalCertFileName": "felix@dkfqa.com.p12",
"certFileType": "PKCS#12",
"certDescription": "My Cert",
"certActive": false,
"applyForHost": "www.dkfqa.com",
"applyForPort": 444
},
"isError": false
}
deleteProxyRecordersClientCertificate
Specific Request Fields:
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteProxyRecordersClientCertificate",
"certificateId": 5
}
JSON Response Example (Success Case):
JSON Response Example (Error Case):
{"isError": true, "genericErrorText": "Invalid certificate Id"}
getTestjobTemplates
Specific Request Fields:
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getTestjobTemplates"
}
JSON Response Example (Success Case):
{
"testjobTemplatesArray": [
{
"testjobTemplate": {
"templateId": 10,
"templateName": "SimpleTest 1VU",
"templateDescription": "",
"testjobProperties": {
"testjobResultFileName": "",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "1",
"testjobDescription": "SimpleTest",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "",
"testjobRampUpTime": "10",
"localTestjobId": "",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.23",
"remoteTestjobId": "",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "",
"testjobDelayPerLoop": "1000",
"testjobExitCode": "",
"createTimeStamp": "1694549684261",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "invalid",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "",
"executeOnMeasuringAgentClusterId": ""
},
"hasUserInputFields": false
},
"testIsHealthy": true
},
{
"testjobTemplate": {
"templateId": 11,
"templateName": "SimpleTestWithInputFields 10VU",
"templateDescription": "",
"testjobProperties": {
"testjobResultFileName": "",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "10",
"testjobDescription": "SimpleTestWithInputFields",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "60",
"isClusterJob": "",
"testjobRampUpTime": "10",
"localTestjobId": "",
"testjobMaxLoopsPerUser": "5",
"productVersion": "4.8.23",
"remoteTestjobId": "",
"testjobAdditionalArguments": "",
"definedFromTestId": "385",
"testjobSignature": "",
"testjobDelayPerLoop": "1000",
"testjobExitCode": "",
"createTimeStamp": "1695047319785",
"userInputFieldsFileName": "InputFields_SimpleTestWithInputFields.json",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "invalid",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "true",
"executeOnUserMeasuringAgentId": "",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "",
"executeOnMeasuringAgentClusterId": ""
},
"hasUserInputFields": true,
"userInputFieldsFile": {
"useShortNames": false,
"magicPattern": "UserInputFields",
"productVersion": "4.8.23",
"userInputFieldsArray": [
{
"useShortNames": false,
"productVersion": "4.8.23",
"label": "Input Host",
"variableName": "vHost",
"inputType": "string",
"defaultValue": "126.3.4.5",
"currentValue": "126.3.4.5"
},
{
"useShortNames": false,
"productVersion": "4.8.23",
"label": "Input Port",
"variableName": "vPort",
"inputType": "integer",
"defaultValue": "444",
"currentValue": "444"
}
]
}
},
"testIsHealthy": true
}
],
"isError": false
}
defineNewTestjobFromTemplate
Specific Request Fields:
- templateId
- measuringAgentOrClusterId
- isCluster (boolean)
- jobDescription
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"defineNewTestjobFromTemplate",
"templateId":10,
"measuringAgentOrClusterId":65,
"isCluster":false,
"jobDescription": "Simple Test"
}
JSON Response Example (Success Case):
{
"newTestjobId":33533,
"isError":false
}
submitTestjob
Specific Request Fields:
Response Fields:
- agentResponse (for measuring agents), or
- controllerResponse (for cluster controllers)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"submitTestjob",
"localTestjobId":33534
}
JSON Response Example (Success Case):
{
"isClusterJob": false,
"agentResponse": {
"remoteTestjobId": 24129,
"httpExecuteTimeMillis": 338
},
"isError": false
}
makeTestjobReadyToRun
Specific Request Fields:
Response Fields:
- agentResponse (for measuring agents), or
- controllerResponse (for cluster controllers)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"makeTestjobReadyToRun",
"localTestjobId":33534
}
JSON Response Example (Success Case):
{
"isClusterJob": false,
"agentResponse": {
"testjobProperties": {
"testjobResultFileName": "",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "1",
"testjobDescription": "Simple Test",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "false",
"testjobRampUpTime": "10",
"localTestjobId": "33534",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.18",
"remoteTestjobId": "24129",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "Z9B963yIj232nht1DIX5aSRt8m77QuXpvVA5736Tl9Wc7UZ7jOiU3l6UC7y3Nx6CXDDZB4qUg4FHDtTuHsD9xd0T/CSq/g==",
"testjobDelayPerLoop": "1000",
"testjobExitCode": "",
"createTimeStamp": "1695050460395",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "ready to run",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "65",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "agent2.realload.com:8080",
"executeOnMeasuringAgentClusterId": ""
},
"httpExecuteTimeMillis": 2871
},
"isError": false
}
startTestjob
Specific Request Fields:
Response Fields:
- agentResponse (for measuring agents), or
- controllerResponse (for cluster controllers)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"startTestjob",
"localTestjobId":33534
}
JSON Response Example (Success Case):
{
"isClusterJob": false,
"agentResponse": {
"testjobProperties": {
"testjobResultFileName": "",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "1",
"testjobDescription": "Simple Test",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "false",
"testjobRampUpTime": "10",
"localTestjobId": "33534",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.18",
"remoteTestjobId": "24129",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "Z9B963yIj232nht1DIX5aSRt8m77QuXpvVA5736Tl9Wc7UZ7jOiU3l6UC7y3Nx6CXDDZB4qUg4FHDtTuHsD9xd0T/CSq/g==",
"testjobDelayPerLoop": "1000",
"testjobExitCode": "",
"createTimeStamp": "1695050460395",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "running",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "65",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "agent2.realload.com:8080",
"executeOnMeasuringAgentClusterId": ""
},
"httpExecuteTimeMillis": 249
},
"isError": false
}
getMeasuringAgentTestjobs
Specific Request Fields:
- measuringAgentId
- synchronizeLocalTestjobsState (boolean)
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getMeasuringAgentTestjobs",
"measuringAgentId":65,
"synchronizeLocalTestjobsState":true
}
JSON Response Example (Success Case):
{
"agentResponse": {
"allTestjobsArray": [
{
"testjobProperties": {
"testjobResultFileName": "TestResult_RealloadTest_2023-09-09@23-45-34.json",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "1",
"testjobDescription": "RealloadTest",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "60",
"isClusterJob": "false",
"testjobRampUpTime": "10",
"localTestjobId": "30717",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.18",
"remoteTestjobId": "15240",
"testjobAdditionalArguments": "",
"definedFromTestId": "379",
"testjobSignature": "NeYJG4vf8/joAwz4nR4Fie3W0Qr7ijps25ONuk6F5BLghuD8/clPL9mBKc/ogQiic7wI8OXOf53Mi4YDCpg4dQzuaWQ==",
"testjobDelayPerLoop": "1000",
"testjobExitCode": "0",
"createTimeStamp": "1694295923799",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "completed",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "true",
"executeOnUserMeasuringAgentId": "65",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "agent2.realload.com:8080",
"executeOnMeasuringAgentClusterId": ""
},
"testProperties": {
"referencedResourceFilesList": [
{
"projectId": 130,
"testplanId": 203,
"fileName": "com.dkfqs.selenium.jar"
},
{
"projectId": 130,
"testplanId": 203,
"fileName": "commons-io-2.13.0.jar"
},
{
"projectId": 130,
"testplanId": 203,
"fileName": "hamcrest-core-1.3.jar"
},
{
"projectId": 130,
"testplanId": 203,
"fileName": "com.dkfqs.tools.jar"
},
{
"projectId": 130,
"testplanId": 203,
"fileName": "junit-4.13.2.jar"
},
{
"projectId": 130,
"testplanId": 203,
"fileName": "selenium_bundle-4.12.1.jar"
}
],
"jsonConfigObject": {
"productVersion": "4.8.20",
"jUnitConfigExecutionClassArray": [
{
"productVersion": "4.8.20",
"executingClassName": "RealloadTest",
"testMethodNamesArray": [
"realload"
]
}
],
"seleniumWebBrowserType": "Firefox"
},
"executingScript": "RealloadTest.jar",
"executingScriptResourceFileList": "",
"createTimeStamp": "1694293491984",
"testDescription": "",
"definedFromTestplanId": "251",
"productVersion": "4.8.20",
"definedFromProjectId": "137",
"visibleTestName": "RealloadTest",
"scriptType": "Selenium4byJUnit4",
"testId": "379"
}
},
{
"testjobProperties": {
"testjobResultFileName": "TestResult_SimpleTest_2023-09-18@17-01-08.json",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "1",
"testjobDescription": "Simple Test",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "false",
"testjobRampUpTime": "10",
"localTestjobId": "33533",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.18",
"remoteTestjobId": "24112",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "JYstx+myVNqbyVMr24u4Pi8IXkLGH0iXUquRh5+NL0veKs4DRJX/w2ZT77wLXF70J9YmTPzR7g==",
"testjobDelayPerLoop": "1000",
"testjobExitCode": "0",
"createTimeStamp": "1695049264730",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "completed",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "65",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "agent2.realload.com:8080",
"executeOnMeasuringAgentClusterId": ""
},
"testProperties": {
"referencedResourceFilesList": [
{
"projectId": 130,
"testplanId": 203,
"fileName": "com.dkfqs.tools.jar"
}
],
"jsonConfigObject": {},
"executingScript": "SimpleTest.jar",
"executingScriptResourceFileList": "",
"createTimeStamp": "1694549112155",
"testDescription": "",
"definedFromTestplanId": "251",
"productVersion": "4.8.21",
"definedFromProjectId": "137",
"visibleTestName": "SimpleTest",
"scriptType": "OpenJDK11Jar",
"testId": "384"
}
},
{
"testjobProperties": {
"testjobResultFileName": "TestResult_SimpleTest_2023-09-18@17-51-53.json",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "1",
"testjobDescription": "Simple Test",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "false",
"testjobRampUpTime": "10",
"localTestjobId": "33534",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.18",
"remoteTestjobId": "24129",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "Z9B963yIj232nht1DIX5aSRt8m77QuXYjP9rn4OBSq/g==",
"testjobDelayPerLoop": "1000",
"testjobExitCode": "0",
"createTimeStamp": "1695050460395",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "completed",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "65",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "agent2.realload.com:8080",
"executeOnMeasuringAgentClusterId": ""
},
"testProperties": {
"referencedResourceFilesList": [
{
"projectId": 130,
"testplanId": 203,
"fileName": "com.dkfqs.tools.jar"
}
],
"jsonConfigObject": {},
"executingScript": "SimpleTest.jar",
"executingScriptResourceFileList": "",
"createTimeStamp": "1694549112155",
"testDescription": "",
"definedFromTestplanId": "251",
"productVersion": "4.8.21",
"definedFromProjectId": "137",
"visibleTestName": "SimpleTest",
"scriptType": "OpenJDK11Jar",
"testId": "384"
}
}
],
"httpExecuteTimeMillis": 141
},
"isError": false
}
getTestjobOutDirectoryFilesInfo
Specific Request Fields:
Response Fields:
- filesInfoArray (for measuring agents), or
- controllerResponse (for cluster controllers)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getTestjobOutDirectoryFilesInfo",
"localTestjobId":33534
}
JSON Response Example (Success Case):
{
"isClusterJob": false,
"measuringAgentData": {
"agentId": 65,
"createdBySystem": false,
"ownerUserId": 13,
"agentActive": true,
"agentDescription": "Demo Agent 2",
"agentHost": "agent2.realload.com",
"agentPort": 8080,
"authToken": "************",
"sharedMeasuringAgentTemplateId": -1,
"isLaunchedByCloudCredits": false
},
"filesInfoArray": [
{
"fileName": "DataCollector.err",
"fileSize": 0,
"lastModified": 1695051456261,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.out",
"fileSize": 5647,
"lastModified": 1695052318516,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.pid",
"fileSize": 8,
"lastModified": 1695051456273,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.port",
"fileSize": 6,
"lastModified": 1695051457729,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.state",
"fileSize": 2,
"lastModified": 1695052318512,
"mimeType": "application/octet-stream"
},
{
"fileName": "TestResult_SimpleTest_2023-09-18@17-51-53.json",
"fileSize": 7421,
"lastModified": 1695052315488,
"mimeType": "application/json"
},
{
"fileName": "user_1_statistics.out",
"fileSize": 5037,
"lastModified": 1695052313788,
"mimeType": "application/octet-stream"
},
{
"fileName": "users.out",
"fileSize": 1923,
"lastModified": 1695052314000,
"mimeType": "application/octet-stream"
}
],
"isError": false
}
getTestjobOutDirectoryFile
Specific Request Fields:
- localTestjobId
- clusterMemberId (optional, -1 = no cluster member file)
- fileName
Response Fields:
- filesInfoArray (for measuring agents), or
- controllerResponse (for cluster controllers)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getTestjobOutDirectoryFile",
"localTestjobId":33534,
"fileName":"users.out"
}
JSON Response Example (Success Case):
{
"isClusterJob": false,
"measuringAgentData": {
"agentId": 65,
"createdBySystem": false,
"ownerUserId": 13,
"agentActive": true,
"agentDescription": "Demo Agent 2",
"agentHost": "agent2.realload.com",
"agentPort": 8080,
"authToken": "************",
"sharedMeasuringAgentTemplateId": -1,
"isLaunchedByCloudCredits": false
},
"fileContentB64": "MjAyMy0wOS0xOCAxNTo1MTo1Mi42MjYgfCBtYWluIHwgSU5GTyB8IE1heC4gSmF2YSBNZW1vcnkgPSAzMzAwIE1CCjIwMjMtMDktMTggMTU6NTE6NTIuNjU1IHwgbWFpbiB8IElORk8gfCBUaW1lIFpvbmUgPSBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSArMDA6MDAKMjAyMy0wOS0xOCAxNTo1MTo1Mi42NjggfCBtYWluIHwgSU5GTyB8IC0tLSB2dnYgLS0tIHJlc291cmNlIGZpbGVzIC0tLSB2dnYgLS0tCjIwMjMtMDktMTggMTU6NTE6NTIuNjY5IHwgbWFpbiB8IElORk8gfCAtLS0gXl5eIC0tLSByZXNvdXJjZSBmaWxlcyAtLS0gXl5eIC0tLQoyMDIzLTA5LTE4IDE1OjUxOjUyLjY2OSB8IG1haW4gfCBJTkZPIHwgLS0tIHZ2diAtLS0gZ2VuZXJpYyBhcmd1bWVudHMgLS0tIHZ2diAtLS0KMjAyMy0wOS0xOCAxNTo1MTo1Mi42NjkgfCBtYWluIHwgSU5GTyB8IHVzZXJzID0gMQoyMDIzLTA5LTE4IDE1OjUxOjUyLjY2OSB8IG1haW4gfCBJTkZPIHwgZHVyYXRpb24gPSAzMAoyMDIzLTA5LTE4IDE1OjUxOjUyLjY3MCB8IG1haW4gfCBJTkZPIHwgbWF4TG9vcHMgPSAxCjIwMjMtMDktMTggMTU6NTE6NTIuNjcwIHwgbWFpbiB8IElORk8gfCBkZWxheVBlckxvb3AgPSAxMDAwCjIwMjMtMDktMTggMTU6NTE6NTIuNjcwIHwgbWFpbiB8IElORk8gfCByYW1wdXBUaW1lID0gMTAKMjAyMy0wOS0xOCAxNTo1MTo1Mi42NzAgfCBtYWluIHwgSU5GTyB8IGRhdGFPdXRwdXREaXIgPSAvaG9tZS9ka2Zxcy9hZ2VudC91c2Vyc0RhdGEvVXNlcl8xMy9UZXN0Sm9icy9UZXN0am9iXzI0MTI5L291dAoyMDIzLTA5LTE4IDE1OjUxOjUyLjY3MCB8IG1haW4gfCBJTkZPIHwgZGVidWdFeGVjID0gZmFsc2UKMjAyMy0wOS0xOCAxNTo1MTo1Mi42NzEgfCBtYWluIHwgSU5GTyB8IGRlYnVnRGF0YSA9IGZhbHNlCjIwMjMtMDktMTggMTU6NTE6NTIuNjcxIHwgbWFpbiB8IElORk8gfCBkZXNjcmlwdGlvbiA9IFNpbXBsZSBUZXN0CjIwMjMtMDktMTggMTU6NTE6NTIuNjcxIHwgbWFpbiB8IElORk8gfCAtLS0gXl5eIC0tLSBnZW5lcmljIGFyZ3VtZW50cyAtLS0gXl5eIC0tLQoyMDIzLTA5LTE4IDE1OjUxOjUyLjkyMSB8IG1haW4gfCBJTkZPIHwgSlZNIFdhcm11cCBwZXJmb3JtZWQgaW4gMjM2IG1zCjIwMjMtMDktMTggMTU6NTE6NTIuOTc3IHwgbWFpbiB8IElORk8gfCAtLS0gdnZ2IC0tLSBzcGVjaWZpYyBhcmd1bWVudHMgLS0tIHZ2diAtLS0KMjAyMy0wOS0xOCAxNTo1MTo1Mi45OTQgfCBtYWluIHwgSU5GTyB8IHRjcFRpbWVvdXQgPSAxMDAwMAoyMDIzLTA5LTE4IDE1OjUxOjUyLjk5NSB8IG1haW4gfCBJTkZPIHwgc3NsVGltZW91dCA9IDUwMDAKMjAyMy0wOS0xOCAxNTo1MTo1Mi45OTcgfCBtYWluIHwgSU5GTyB8IGh0dHBUaW1lb3V0ID0gMzAwMDAKMjAyMy0wOS0xOCAxNTo1MTo1Mi45OTcgfCBtYWluIHwgSU5GTyB8IC0tLSBeXl4gLS0tIHNwZWNpZmljIGFyZ3VtZW50cyAtLS0gXl5eIC0tLQoyMDIzLTA5LTE4IDE1OjUxOjUzLjAwMiB8IG1haW4gfCBJTkZPIHwgW1N0YXJ0IG9mIFRlc3RdCjIwMjMtMDktMTggMTU6NTE6NTMuMDAzIHwgVXNlci0xIHwgSU5GTyB8IFVzZXIgc3RhcnRlZAoyMDIzLTA5LTE4IDE1OjUxOjUzLjAyNiB8IHBlcmlvZGljLXRocmVhZCB8IElORk8gfCBUaHJlYWQgc3RhcnRlZAoyMDIzLTA5LTE4IDE1OjUxOjUzLjAyNiB8IFVzZXItMSB8IElORk8gfCBTdGFydCBleGVjdXRlIHNlc3Npb24gbm8uIDEgLi4uCjIwMjMtMDktMTggMTU6NTE6NTMuNTk3IHwgVXNlci0xIHwgSU5GTyB8IC4uLiBFbmQgZXhlY3V0ZSBzZXNzaW9uIG5vLiAxIHN1Y2Nlc3NmdWwgcGFzc2VkCjIwMjMtMDktMTggMTU6NTE6NTMuNjQ5IHwgVXNlci0xIHwgSU5GTyB8IFVzZXIgbm9ybWFsIHRlcm1pbmF0ZWQKMjAyMy0wOS0xOCAxNTo1MTo1NC4wMDMgfCBtYWluIHwgSU5GTyB8IFtFbmQgb2YgVGVzdF0K",
"isError": false
}
saveTestjobOutDirectoryFileToProjectTree
Specific Request Fields:
- localTestjobId
- clusterMemberId (optional, -1 = no cluster member file)
- fileName
- saveAsFileName
- projectId
- resourceSetId
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"saveTestjobOutDirectoryFileToProjectTree",
"localTestjobId":33534,
"fileName":"users.out",
"saveAsFileName":"users.out",
"projectId":137,
"resourceSetId":251
}
JSON Response Example (Success Case):
{
"isClusterJob": false,
"fileHashCode": 4557110,
"isError": false
}
deleteTestjob
Specific Request Fields:
- localTestjobId
- deleteAlsoRemoteTestjob (boolean)
Response Fields:
- localTestjobState (before the testjob was delete)
- agentResponse (for measuring agents), or
- controllerResponse (for cluster controllers)
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteTestjob",
"localTestjobId":33534,
"deleteAlsoRemoteTestjob":true
}
JSON Response Example (Success Case):
{
"isClusterJob": false,
"localTestjobState": "completed",
"agentResponse": {
"httpExecuteTimeMillis": 143
},
"isError": false
}
getTestExecutionSuites
Specific Request Fields:
Response Fields:
- testExecutionSuitesArray
- testExecutionSuite
- testRunResultsArray
Specific Error Flags:
Values of testRunResultsArray[n].executionState :
- EXECUTION_STATE_INITIALIZED = 0;
- EXECUTION_STATE_RUNNING = 1;
- EXECUTION_STATE_RUN_COMPLETED = 2;
- EXECUTION_STATE_RUN_FAILED = 3;
- EXECUTION_STATE_RUN_ABORTED = 4;
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getTestExecutionSuites"
}
JSON Response Example (Success Case):
{
"testExecutionSuitesArray": [
{
"testExecutionSuite": {
"testExecutionSuiteId": 2,
"testExecutionSuiteName": "First Suite",
"testExecutionSuiteDescription": "",
"topExecuteOnMeasuringAgentOrClusterId": "m-145",
"topExecutionOrder": 2,
"totalNumberOfTestjobs": 3,
"isTestExecutionSuiteHealthy": true
},
"testRunResultsArray": [
{
"userId": 13,
"subUserId": -1,
"testRunId": 1,
"executionState": 2,
"annotationArray": [],
"testRunStartTimestamp": 1699716014207,
"testRunLastUpdatedTimestamp": 1699716054368,
"numTestjobTemplatesToExecute": 3,
"numTestjobTemplatesExecutionPassed": 3,
"numTestjobTemplatesExecutionFailed": 0,
"totalSessionsPassed": 8,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 5295,
"totalSamplesPassed": 12,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 1,
"maxPendingSamples": 1
},
{
"userId": 13,
"subUserId": -1,
"testRunId": 2,
"executionState": 2,
"annotationArray": [],
"testRunStartTimestamp": 1699716108571,
"testRunLastUpdatedTimestamp": 1699716151826,
"numTestjobTemplatesToExecute": 3,
"numTestjobTemplatesExecutionPassed": 3,
"numTestjobTemplatesExecutionFailed": 0,
"totalSessionsPassed": 8,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 5503,
"totalSamplesPassed": 12,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 1,
"maxPendingSamples": 1
}
]
},
{
"testExecutionSuite": {
"testExecutionSuiteId": 3,
"testExecutionSuiteName": "Second Suite Long Run",
"testExecutionSuiteDescription": "",
"topExecuteOnMeasuringAgentOrClusterId": "c-27",
"topExecutionOrder": 1,
"totalNumberOfTestjobs": 2,
"isTestExecutionSuiteHealthy": true
},
"testRunResultsArray": [
{
"userId": 13,
"subUserId": -1,
"testRunId": 1,
"executionState": 2,
"annotationArray": [],
"testRunStartTimestamp": 1699715808192,
"testRunLastUpdatedTimestamp": 1699715867468,
"numTestjobTemplatesToExecute": 2,
"numTestjobTemplatesExecutionPassed": 2,
"numTestjobTemplatesExecutionFailed": 0,
"totalSessionsPassed": 44,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 4400,
"totalSamplesPassed": 44,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 4,
"maxPendingSamples": 4
},
{
"userId": 13,
"subUserId": -1,
"testRunId": 2,
"executionState": 2,
"annotationArray": [],
"testRunStartTimestamp": 1699715952212,
"testRunLastUpdatedTimestamp": 1699716012124,
"numTestjobTemplatesToExecute": 2,
"numTestjobTemplatesExecutionPassed": 2,
"numTestjobTemplatesExecutionFailed": 0,
"totalSessionsPassed": 44,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 4400,
"totalSamplesPassed": 44,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 4,
"maxPendingSamples": 3
},
{
"userId": 13,
"subUserId": -1,
"testRunId": 3,
"executionState": 2,
"annotationArray": [],
"testRunStartTimestamp": 1699717843777,
"testRunLastUpdatedTimestamp": 1699717905674,
"numTestjobTemplatesToExecute": 2,
"numTestjobTemplatesExecutionPassed": 2,
"numTestjobTemplatesExecutionFailed": 0,
"totalSessionsPassed": 43,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 4300,
"totalSamplesPassed": 43,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 4,
"maxPendingSamples": 3
}
]
}
],
"isError": false
}
getCurrentlyRunningTestExecutionSuiteIds
Specific Request Fields:
Response Fields:
- testExecutionSuiteIdArray
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getCurrentlyRunningTestExecutionSuiteIds"
}
JSON Response Example (Success Case):
{
"testExecutionSuiteIdArray": [
3
],
"isError": false
}
startTestExecutionSuiteTestRun
Specific Request Fields:
- testExecutionSuiteId
- testRunAnnotation (optional, can also be an empty string)
- topExecuteOnMeasuringAgentOrClusterId (the ’top execution’ measuring agent id or cluster id)
- topExecuteOnCluster (boolean, if true: top execution = cluster id, or false: top execution = measuring agent id)
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"startTestExecutionSuiteTestRun",
"testExecutionSuiteId":3,
"testRunAnnotation":"",
"topExecuteOnMeasuringAgentOrClusterId":143,
"topExecuteOnCluster":false
}
JSON Response Example (Success Case):
{
"newTestRunId": 5,
"isError": false
}
JSON Response Example (Error Case):
{
"isError": true,
"genericErrorText": "Test execution suite currently running"
}
getTestExecutionSuiteTestRunResultDetail
Specific Request Fields:
- testExecutionSuiteId
- testRunId
Response Fields:
- testRunResultDetail
- testRunResult
- executedByUserNickname
- testjobsOutFilesArray
Specific Error Flags:
Values of executionState :
- EXECUTION_STATE_INITIALIZED = 0;
- EXECUTION_STATE_RUNNING = 1;
- EXECUTION_STATE_RUN_COMPLETED = 2;
- EXECUTION_STATE_RUN_FAILED = 3;
- EXECUTION_STATE_RUN_ABORTED = 4;
Values of logLevel :
- LOG_DEBUG = 4;
- LOG_INFO = 7;
- LOG_WARN = 8;
- LOG_ERROR = 9;
- LOG_FATAL = 10;
Values of elementType :
- ELEMENT_TYPE_TESTJOB_TEMPLATE = 1;
- ELEMENT_TYPE_EXECUTION_GROUP = 10;
Values of executionOrder :
- EXECUTION_ORDER_SEQUENTIAL = 1;
- EXECUTION_ORDER_PARALLEL = 2;
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getTestExecutionSuiteTestRunResultDetail",
"testExecutionSuiteId":3,
"testRunId":5
}
JSON Response Example (Success Case):
{
"testRunResultDetail": {
"testRunResult": {
"userId": 13,
"subUserId": -1,
"testExecutionSuite": {
"testExecutionSuiteId": 3,
"testExecutionSuiteName": "Second Suite Long Run",
"testExecutionSuiteDescription": "",
"topExecuteOnMeasuringAgentOrClusterId": "c-27",
"topExecutionOrder": 1,
"testExecutionElementsArray": [
{
"productVersion": "4.8.24",
"elementType": 10,
"elementId": 737867696,
"elementInactive": false,
"executionGroupName": "Top Group",
"executionGroupDescription": "",
"executionOrder": 2,
"executeOnMeasuringAgentOrClusterId": "",
"executionElementsArray": [
{
"productVersion": "4.8.24",
"elementType": 1,
"elementId": 1040705161,
"elementInactive": false,
"templateId": 18
},
{
"productVersion": "4.8.24",
"elementType": 1,
"elementId": 493179849,
"elementInactive": false,
"templateId": 18
}
]
}
]
},
"testjobTemplatesArray": [
{
"templateId": 18,
"templateName": "Simple Test 2VU Long Run",
"templateDescription": "",
"testjobProperties": {
"testjobResultFileName": "",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "2",
"testjobDescription": "Simple Test 2VU Long Run",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "",
"testjobRampUpTime": "1",
"localTestjobId": "",
"testjobMaxLoopsPerUser": "-1",
"productVersion": "4.8.24",
"remoteTestjobId": "",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "",
"testjobDelayPerLoop": "3000",
"testjobExitCode": "",
"createTimeStamp": "1697224057753",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "invalid",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "",
"executeOnMeasuringAgentClusterId": ""
},
"hasUserInputFields": false
}
],
"testRunId": 5,
"executorLog": {
"userId": 13,
"testExecutionSuiteId": 3,
"testRunId": 5,
"logEntriesArray": [
{
"timestamp": 1699726961703,
"logLevel": 7,
"threadName": "TestSuiteExecutor-S:3-R:5",
"testExecutionElementId": -1,
"logMessage": "Test run #5 started",
"stacktraceArray": []
},
{
"timestamp": 1699726963704,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-G:737867696",
"testExecutionElementId": 737867696,
"logMessage": "Execution Group 'Top Group' started",
"stacktraceArray": []
},
{
"timestamp": 1699726963706,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:1040705161",
"testExecutionElementId": 1040705161,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' execution started",
"stacktraceArray": []
},
{
"timestamp": 1699726963708,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:493179849",
"testExecutionElementId": 493179849,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' execution started",
"stacktraceArray": []
},
{
"timestamp": 1699726963731,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:1040705161",
"testExecutionElementId": 1040705161,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' test job defined with id = 34442",
"stacktraceArray": []
},
{
"timestamp": 1699726963753,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:493179849",
"testExecutionElementId": 493179849,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' test job defined with id = 34443",
"stacktraceArray": []
},
{
"timestamp": 1699726964081,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:1040705161",
"testExecutionElementId": 1040705161,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' test job submitted to 'Shared Agent 2', remote test job id = 791",
"stacktraceArray": []
},
{
"timestamp": 1699726964128,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:493179849",
"testExecutionElementId": 493179849,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' test job submitted to 'Shared Agent 2', remote test job id = 792",
"stacktraceArray": []
},
{
"timestamp": 1699726968458,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:493179849",
"testExecutionElementId": 493179849,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' started on 'Shared Agent 2', remote test job id = 792",
"stacktraceArray": []
},
{
"timestamp": 1699726968466,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:1040705161",
"testExecutionElementId": 1040705161,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' started on 'Shared Agent 2', remote test job id = 791",
"stacktraceArray": []
},
{
"timestamp": 1699727005910,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:493179849",
"testExecutionElementId": 493179849,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' execution successful",
"stacktraceArray": []
},
{
"timestamp": 1699727006912,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:1040705161",
"testExecutionElementId": 1040705161,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' execution successful",
"stacktraceArray": []
},
{
"timestamp": 1699727012111,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:1040705161",
"testExecutionElementId": 1040705161,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' execution terminated",
"stacktraceArray": []
},
{
"timestamp": 1699727012112,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-T:493179849",
"testExecutionElementId": 493179849,
"logMessage": "Test Job Template 'Simple Test 2VU Long Run' execution terminated",
"stacktraceArray": []
},
{
"timestamp": 1699727012113,
"logLevel": 7,
"threadName": "TestSuiteExecutorGroup-S:3-R:5-G:737867696",
"testExecutionElementId": 737867696,
"logMessage": "Execution Group 'Top Group' terminated",
"stacktraceArray": []
},
{
"timestamp": 1699727014114,
"logLevel": 7,
"threadName": "TestSuiteExecutor-S:3-R:5",
"testExecutionElementId": -1,
"logMessage": "Test run #5 done. Execution state = completed",
"stacktraceArray": []
}
]
},
"executionState": 2,
"annotationArray": [],
"testRunStartTimestamp": 1699726961701,
"testRunLastUpdatedTimestamp": 1699727012113,
"numTestjobTemplatesToExecute": 2,
"numTestjobTemplatesExecutionPassed": 2,
"numTestjobTemplatesExecutionFailed": 0,
"totalSessionsPassed": 44,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 4400,
"totalSamplesPassed": 44,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 4,
"maxPendingSamples": 2,
"testRunExecutionGroupResultArray": [
{
"testExecutionSuiteId": 3,
"testRunId": 5,
"executionGroupElementId": 737867696,
"containsMeasuringAgent": true,
"measuringAgent": {
"agentId": 143,
"createdBySystem": true,
"ownerUserId": 13,
"agentActive": true,
"agentDescription": "Shared Agent 2",
"agentHost": "192.168.0.50",
"agentPort": 8081,
"sharedMeasuringAgentTemplateId": 5,
"isLaunchedByCloudCredits": false
},
"containsMeasuringAgentCluster": false,
"executionState": 2,
"executionStartTimestamp": 1699726963704,
"executionEndTimestamp": 1699727012113,
"numTestjobTemplatesExecutionPassed": 2,
"numTestjobTemplatesExecutionFailed": 0,
"totalSessionsPassed": 44,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 4400,
"totalSamplesPassed": 44,
"totalSamplesFailed": 0
}
],
"testRunTestjobResultArray": [
{
"testExecutionSuiteId": 3,
"testRunId": 5,
"testExecutionGroupElementId": 737867696,
"testjobTemplateElementId": 493179849,
"testjobTemplate": {
"templateId": 18,
"templateName": "Simple Test 2VU Long Run",
"templateDescription": "",
"testjobProperties": {
"testjobResultFileName": "TestResult_SimpleTest_2023-11-11@19-22-49.json",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "2",
"testjobDescription": "Simple Test 2VU Long Run",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "false",
"testjobRampUpTime": "1",
"localTestjobId": "34443",
"testjobMaxLoopsPerUser": "-1",
"productVersion": "4.8.24",
"remoteTestjobId": "792",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "",
"testjobDelayPerLoop": "3000",
"testjobExitCode": "",
"createTimeStamp": "1697224057753",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "invalid",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "143",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "Shared Agent 2",
"executeOnMeasuringAgentClusterId": ""
},
"hasUserInputFields": false
},
"executionState": 2,
"executionStartTimestamp": 1699726963708,
"executionEndTimestamp": 1699727005710,
"jobStartTimestamp": 1699726969618,
"jobEndTimestamp": 1699727003517,
"totalSessionsPassed": 22,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 2200,
"totalSamplesPassed": 22,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 2,
"maxPendingSamples": 1
},
{
"testExecutionSuiteId": 3,
"testRunId": 5,
"testExecutionGroupElementId": 737867696,
"testjobTemplateElementId": 1040705161,
"testjobTemplate": {
"templateId": 18,
"templateName": "Simple Test 2VU Long Run",
"templateDescription": "",
"testjobProperties": {
"testjobResultFileName": "TestResult_SimpleTest_2023-11-11@19-22-49.json",
"executeMeasuringAgentClusterInfo": "",
"testjobConcurrentUsers": "2",
"testjobDescription": "Simple Test 2VU Long Run",
"testjobDebugMeasuring": "false",
"testjobMaxTestDuration": "30",
"isClusterJob": "false",
"testjobRampUpTime": "1",
"localTestjobId": "34442",
"testjobMaxLoopsPerUser": "-1",
"productVersion": "4.8.24",
"remoteTestjobId": "791",
"testjobAdditionalArguments": "",
"definedFromTestId": "384",
"testjobSignature": "",
"testjobDelayPerLoop": "3000",
"testjobExitCode": "",
"createTimeStamp": "1697224057753",
"userInputFieldsFileName": "",
"testjobType": "load test",
"enableAutomaticFileSync": "true",
"testjobState": "invalid",
"isClusterControllerJobProperties": "",
"testjobDebugExecution": "false",
"executeOnUserMeasuringAgentId": "143",
"definedFromTimeZoneId": "Europe/Berlin",
"executeMeasuringAgentInfo": "Shared Agent 2",
"executeOnMeasuringAgentClusterId": ""
},
"hasUserInputFields": false
},
"executionState": 2,
"executionStartTimestamp": 1699726963706,
"executionEndTimestamp": 1699727006711,
"jobStartTimestamp": 1699726969515,
"jobEndTimestamp": 1699727003517,
"totalSessionsPassed": 22,
"totalSessionsFailed": 0,
"totalSessionsPassedTimeSum": 2200,
"totalSamplesPassed": 22,
"totalSamplesFailed": 0,
"maxConcurrentUsers": 2,
"maxPendingSamples": 1
}
]
},
"executedByUserNickname": "DKF",
"testjobsOutFilesArray": [
{
"elementId": 1040705161,
"outFileInfoArray": [
{
"fileName": "DataCollector.err",
"fileSize": 0,
"lastModified": 1699727006724,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.out",
"fileSize": 6537,
"lastModified": 1699727006726,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.pid",
"fileSize": 7,
"lastModified": 1699727006736,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.port",
"fileSize": 6,
"lastModified": 1699727006737,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.state",
"fileSize": 1,
"lastModified": 1699727006738,
"mimeType": "application/octet-stream"
},
{
"fileName": "TestResult_SimpleTest_2023-11-11@19-22-49.json",
"fileSize": 11913,
"lastModified": 1699727006739,
"mimeType": "application/json"
},
{
"fileName": "users.out",
"fileSize": 5507,
"lastModified": 1699727006741,
"mimeType": "application/octet-stream"
}
]
},
{
"elementId": 493179849,
"outFileInfoArray": [
{
"fileName": "DataCollector.err",
"fileSize": 0,
"lastModified": 1699727005722,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.out",
"fileSize": 6264,
"lastModified": 1699727005725,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.pid",
"fileSize": 7,
"lastModified": 1699727005733,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.port",
"fileSize": 6,
"lastModified": 1699727005734,
"mimeType": "application/octet-stream"
},
{
"fileName": "DataCollector.state",
"fileSize": 1,
"lastModified": 1699727005735,
"mimeType": "application/octet-stream"
},
{
"fileName": "TestResult_SimpleTest_2023-11-11@19-22-49.json",
"fileSize": 11850,
"lastModified": 1699727005736,
"mimeType": "application/json"
},
{
"fileName": "users.out",
"fileSize": 5507,
"lastModified": 1699727005738,
"mimeType": "application/octet-stream"
}
]
}
]
},
"isError": false
}
getTestExecutionSuiteTestRunTestJobOutputFileContent
Specific Request Fields:
- testExecutionSuiteId
- testRunId
- testjobTemplateElementId (don’t confuse with testjobTemplateId)
- fileName
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"getTestExecutionSuiteTestRunTestJobOutputFileContent",
"testExecutionSuiteId":3,
"testRunId":5,
"testjobTemplateElementId":1040705161,
"fileName":"users.out"
}
JSON Response Example (Success Case):
{
"fileContentB64": "MjAyMy0xMS0xMSAxO ... uZCBvZiBUZXN0XQo=",
"isError": false
}
deleteTestExecutionSuiteTestRun
Specific Request Fields:
- testExecutionSuiteId
- testRunId
Response Fields:
Specific Error Flags:
JSON Request Example:
{
"authTokenValue":"jPmFClqeDUXaEk8Q274q",
"action":"deleteTestExecutionSuiteTestRun",
"testExecutionSuiteId":3,
"testRunId":5
}
JSON Response Example (Success Case):
4 - Remote User Monitoring API
Portal Server Remote User Monitoring API Specification
Abstract
The “Remote User Monitoring API” is a WebSocket API that supports developers to implement their own version of a Synthetic Monitoring “Real Time Dashboard”.
Similar to the Remote User API
there is also an “API Authentication Token” required to access the API.
API Functions
The API supports the following functions (so-called “actions”):
- pingPortalServer : Ping the Portal Server at API level.
- subscribeToHeartbeat : Subscribe to a periodic timestamp which is received every second.
- unsubscribeFromHeartbeat : Cancel subscription to ‘subscribeToHeartbeat’.
- subscribeToPeriodicAliveThread: Same functionality as ‘subscribeToHeartbeat’, but the time interval (in seconds) can be specified arbitrarily.
- unsubscribeFromPeriodicAliveThread: Cancel subscription to ‘subscribeToPeriodicAliveThread’.
- subscribeToRealtimeMonitor : Subscribe to events when a Monitoring Group or a Monitoring Job is created, modified or deleted, and subscribe to be notified each time when a Monitoring Group or a Monitoring Job is executed.
- unsubscribeFromRealtimeMonitor : Cancel subscription to ‘subscribeToRealtimeMonitor’.
- subscribeToMonitoringAlerts : Subscribe to monitoring alerts.
- unsubscribeFromMonitoringAlerts : Cancel subscription to ‘subscribeToMonitoringAlerts’.
- subscribeToGroupExecutionHistoryCache : Subscribe to a monitoring group’s execution history cache, which contains the measured data over the last 24 hours. The received data can be used to draw a chart or sparkline of the corresponding monitoring group.
- unsubscribeFromAllGroupExecutionHistoryCaches : Cancel subscription to ‘subscribeToGroupExecutionHistoryCache’ for all monitoring groups.
- subscribeToJobExecutionHistoryCache : Subscribe to a monitoring job’s execution history cache, which contains the measured data over the last 24 hours. The received data can be used to draw a chart or sparkline of the corresponding monitoring job.
- unsubscribeFromAllJobExecutionHistoryCaches : Cancel subscription to ‘subscribeToJobExecutionHistoryCache’ for all monitoring jobs.
WebSocket URL |
wss://portal.realload.com/RemoteUserMonitoringAPI |
HTTP Request Header Fields |
|
x-api-key: <API Authentication Token> |
required |
subscribeToHeartbeat: true |
optional |
subscribeToRealtimeMonitor: true |
optional |
The subscribed data are received in JSON format. The received JSON values are never null.
Runtime Behavior
- When the WebSocket connection is closed, all subscriptions are terminated.
- When you send an “action”, the action is confirmed with a response frame with the name of the action repeated (except for “pingPortalServer”).
- If you send an invalid “action”, the WebSocket connection will be closed.
- The WebSocket connection doesn’t last forever. It will be closed after a few hours by the Portal Server. You then have to reestablish the WebSocket connection and renew the subscriptions.
Example:
Send: {"action":"subscribeToHeartbeat"}
Received: {"action":"subscribeToHeartbeat","isError":false}
Received: {"action":"heartbeat","timestamp":1708466543962,"isError":false}
Received: {"action":"heartbeat","timestamp":1708466544963,"isError":false}
Received: {"action":"heartbeat","timestamp":1708466545963,"isError":false}
Implementation Recommendations
- We recommend that you implement two hash maps on the client side which contain the current configuration data of the monitoring jobs and monitoring groups - based on the actions of onMonitoringGroupEvent and onMonitoringJobEvent received from subscribeToRealtimeMonitor (hash map keys = Monitoring Group ID, Monitoring Job ID).
- Preferably use a WebSocket client framework that can detect the closure of the WebSocket connection to the server. If this is not possible, use “subscribeToPeriodicAliveThread” or “pingPortalServer”.
pingPortalServer
Example:
Send: {"action":"pingPortalServer"}
Received: {"action":"pongFromPortalServer","portalServerVersion":"4.8.35","portalServerTimestamp":1708468300516,"isError":false}
subscribeToHeartbeat
- Send action : “subscribeToHeartbeat”
{
"action":"subscribeToHeartbeat"
}
- Received action: “heartbeat”
{
"action":"heartbeat",
"timestamp":1677521478771,
"isError":false
}
subscribeToPeriodicAliveThread
- Send action : “subscribeToPeriodicAliveThread”
{
"action":"subscribeToPeriodicAliveThread",
"periodicIntervalSeconds":60
}
- Received action: “periodicAlive”
{
"action":"periodicAlive",
"timestamp":1708469366167,
"isError":false
}
subscribeToRealtimeMonitor
- Send action : “subscribeToRealtimeMonitor”
{
"action":"subscribeToRealtimeMonitor"
}
- Received actions:
- onMonitoringGroupEvent(The configuration data of a monitoring group)
- onMonitoringJobEvent(The configuration data of a monitoring job)
- onMonitoringGroupExecuted(The execution result of a monitoring group)
- onMonitoringJobExecuted(The execution result of a monitoring job)
- onMonitoringGroupTemporarilyEvent(Notification whether a monitoring group is temporarily disabled)
- onMonitoringJobTemporarilyEvent(Notification whether a monitoring job is temporarily disabled)
As first you will receive instantly the configuration data of all already defined Monitoring Groups and Monitoring Jobs, and also the data of the last Execution Result of the Monitoring Groups and Monitoring Jobs (if they have been executed in the past).
After that you will receive update information of all Monitoring Groups and Monitoring Jobs when they are new-defined/modified/deleted, and you will receive also update information about the result of executed Monitoring Groups and Monitoring Jobs.
Because monitoring groups and jobs can be temporarily disabled by configuring one or multiple “Monitoring Downtime(s)” you receive the actions “onMonitoringGroupTemporarilyEvent” and “onMonitoringJobTemporarilyEvent”.
Notifications for Monitoring Groups
- Received action: “onMonitoringGroupEvent”
- monitoringGroupAction:
- “groupExists”
- “groupAdded”
- “groupModified”
- “groupDeleted”
{
"action": "onMonitoringGroupEvent",
"monitoringGroupId": 34,
"monitoringEvent": {
"eventTimestamp": 1708541771774,
"monitoringGroup": {
"monitoringGroupId": 34,
"ownerUserId": 13,
"title": "First Group",
"description": "",
"maxDataStorageDays": 14,
"agentType": "agent",
"executionEnabled": true,
"executionInterval": 300,
"executionTimeout": 300,
"currentExecutionState": "executing",
"lastExecutionStartTime": 1708541763897
},
"monitoringGroupAction": "groupExists"
},
"isError": false
}
The executionInterval and the executionTimeout are in seconds.
The lastExecutionStartTime has a value of -1 (minus one) if the Monitoring Group was never executed. The agentType has currently no meaning.
Any modification of a Monitoring Group made by the Portal Server Web Interface such as modify executionEnabled or title effects that a new frame with monitoringGroupAction = “groupModified” is received.
Notification for Monitoring Jobs
- Received action: “onMonitoringJobEvent”
- monitoringJobAction:
- “jobExists”
- “jobAdded”
- “jobModified”
- “jobDeleted”
{
"action": "onMonitoringJobEvent",
"monitoringGroupId": 36,
"monitoringJobId": 79,
"monitoringEvent": {
"eventTimestamp": 1708541771790,
"monitoringJobProperties": {
"performanceErrorAlertThresholdMillis": "-1",
"enableJobExecution": "true",
"performanceWarningAlertsEnabled": "false",
"testjobConcurrentUsers": "1",
"testjobDelayPerLoop": "1000",
"testjobDebugMeasuring": "false",
"performanceErrorAlertsEnabled": "false",
"enableAutomaticFileSync": "false",
"performanceWarningAlertThresholdMillis": "-1",
"testjobMaxTestDuration": "60",
"testjobDebugExecution": "false",
"testjobRampUpTime": "5",
"definedFromMonitoringGroupId": "36",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.35",
"monitoringJobId": "79",
"monitoringJobTitle": "Local_Cinema",
"lastExecutionStartTime": "1708541731138",
"testjobAdditionalArguments": "",
"definedFromTestId": "399",
"testjobUserInputFieldsValuesJsonArray": "[]",
"monitoringJobDescription": ""
},
"monitoringTestProperties": {
"referencedResourceFilesList": [
{
"projectId": 130,
"testplanId": 203,
"fileName": "com.dkfqs.tools.jar"
}
],
"jsonConfigObject": {},
"executingScript": "Local_Cinema.jar",
"executingScriptResourceFileList": "",
"createTimeStamp": "1708293851731",
"testDescription": "",
"definedFromTestplanId": "287",
"productVersion": "4.8.34",
"definedFromProjectId": "137",
"visibleTestName": "Local_Cinema",
"scriptType": "OpenJDK11Jar",
"testId": "399"
},
"monitoringTestIsHealthy": true,
"monitoringJobAction": "jobExists"
},
"isError": false
}
The testjobMaxTestDuration and the testjobRampUpTime are in seconds. The testjobDelayPerLoop are in milliseconds.
The lastExecutionStartTime has a value of -1 (minus one) if the Monitoring Job was never executed.
Any modification of a Monitoring Job made by the Portal Server Web Interface such as modify enableJobExecution or monitoringJobTitle effects that a new frame with monitoringJobAction = “jobModified” is received.
Notification for Monitoring Group Execution
- Received action: “onMonitoringGroupExecuted”
- oldEvent: true or false | Note: the oldEvent is true at the first time (if the monitoring group was executed in the past) and then will always be false each time when the monitoring group is executed.
{
"action": "onMonitoringGroupExecuted",
"monitoringGroupId": 34,
"monitoringEvent": {
"eventTimestamp": 1708541771806,
"oldEvent": true,
"groupExecutionResult": {
"magicPattern": "MonitoringGroupExecutionResult",
"productVersion": "4.8.35",
"userId": 13,
"monitoringGroupId": 34,
"groupExecutionId": 39412,
"resultTimestamp": 1708541492973,
"monitoringJobIdToLocalTestjobIdArray": [
{
"monitoringJobId": 60,
"localTestjobId": 73932
},
{
"monitoringJobId": 61,
"localTestjobId": 73934
},
{
"monitoringJobId": 62,
"localTestjobId": 73933
}
],
"groupSystemStatus": 0,
"groupCombinedTestjobState": "completed",
"groupExecutionLogArray": [
"2024-02-21 19:51:03.915 | | INFO | Monitoring Group Execution Thread started",
"2024-02-21 19:51:32.972 | | INFO | Monitoring Job Id 60 executed",
"2024-02-21 19:51:32.972 | | INFO | Monitoring Job Id 62 executed",
"2024-02-21 19:51:32.972 | | INFO | Monitoring Job Id 61 executed",
"2024-02-21 19:51:32.973 | | INFO | Monitoring Group Execution Thread terminated"
],
"numberOfPassedSamples": 10,
"numberOfFailedSamples": 0,
"numberOfPassedLoops": 6,
"numberOfFailedLoops": 0,
"sumErrorsSeverityWarning": 0,
"sumErrorsSeverityError": 0,
"sumErrorsSeverityFatal": 0
}
},
"hasGroupExecutionStatistic": true,
"groupExecutionStatistic": {
"userId": 13,
"monitoringGroupId": 34,
"fromTimestamp": 1708455371812,
"toTimestamp": 1708541771812,
"systemAvailabilityPercent": 100,
"measuredAvailabilityPercent": 100,
"measuredFaultyTimeSumSeconds": 0
},
"isError": false
}
groupSystemStatus:
- 0: Healthy = All monitoring jobs of the monitoring group have been started on all measuring agents.
- -1 (minus one): Partial Malfunction = Some monitoring jobs of the monitoring group have not been started on some measuring agents.
- -2 (minus two): Malfunction = No monitoring jobs of the monitoring group have been started on any measuring agent.
groupCombinedTestjobState
- “completed”: All test jobs of the monitoring group have been successfully executed on all measuring agents.
- “partial failed”: The execution of some of the test jobs of the monitoring group did fail on some measuring agents.
- “failed”: The execution of all of the test jobs of the monitoring group did fail on all measuring agents.
Hint for groupCombinedTestjobState : Note that is value does not reflect if any warnings or errors have been measured by the test jobs.
The Reference Implementation on the Real Load Portal Server shows the measured (sumErrorsSeverityError + sumErrorsSeverityFatal) simple as “number of measured errors”.
Notification for Monitoring Job Execution
- Received action: “onMonitoringJobExecuted”
- oldEvent: true or false | Note: the oldEvent is true at the first time (if the monitoring job was executed in the past) and then will always be false each time when the monitoring job is executed.
{
"action": "onMonitoringJobExecuted",
"monitoringGroupId": 36,
"monitoringJobId": 79,
"monitoringEvent": {
"eventTimestamp": 1708541771849,
"oldEvent": true,
"jobExecutionResult": {
"magicPattern": "MonitoringJobExecutionResult",
"productVersion": "4.8.35",
"userId": 13,
"monitoringGroupId": 36,
"groupExecutionId": 39417,
"monitoringJobId": 79,
"localTestjobId": 73939,
"resultTimestamp": 1708541748100,
"systemStatus": 0,
"jobExecutionLogArray": [
"2024-02-21 19:55:31.137 | | INFO | Monitoring Job Execution Thread started",
"2024-02-21 19:55:31.495 | Shared Agent 1 | INFO | Job submitted to measuring agent, remote testjob id = 19015",
"2024-02-21 19:55:38.034 | Shared Agent 1 | INFO | Job executed on measuring agent, exit code = process executed successfully",
"2024-02-21 19:55:40.014 | Shared Agent 2 | INFO | Job submitted to measuring agent, remote testjob id = 4864",
"2024-02-21 19:55:46.446 | Shared Agent 2 | INFO | Job executed on measuring agent, exit code = process executed successfully",
"2024-02-21 19:55:48.100 | | INFO | Monitoring Job Execution Thread terminated"
],
"combinedTestjobState": "completed",
"hasCombinedTestResult": true,
"combinedTestResultFileName": "TestResult_MonitoringJob_79_2024-02-21@19-55-48.json",
"combinedTestResultSummaryStatistic": {
"productVersion": "4.8.35",
"localTestjobId": 73939,
"remoteTestjobId": 39417,
"samplingGranularity": 4000,
"jobStartTimestamp": 1708541736385,
"jobEndTimestamp": 1708541744994,
"osCpuLoadPercent": -1,
"numberOfPassedLoopsTimeSum": 178,
"numberOfConcurrentUsers": 0,
"currentlyPendingSamples": 0,
"numberOfPassedSamples": 2,
"numberOfFailedSamples": 0,
"numberOfPassedLoops": 2,
"numberOfFailedLoops": 0,
"numberOfMeasuredErrors": 0,
"numErrorsSeverityWarning": 0,
"numErrorsSeverityError": 0,
"numErrorsSeverityFatal": 0
},
"averagePassedLoopTime": 89,
"sumErrorsSeverityWarning": 0,
"sumErrorsSeverityError": 0,
"sumErrorsSeverityFatal": 0
}
},
"hasJobExecutionStatistic": true,
"jobExecutionStatistic": {
"userId": 13,
"monitoringGroupId": 36,
"monitoringJobId": 79,
"fromTimestamp": 1708455371849,
"toTimestamp": 1708541771849,
"systemAvailabilityPercent": 100,
"measuredAvailabilityPercent": 100,
"measuredFaultyTimeSumSeconds": 0,
"averagePassedLoopTime": 93,
"hasPassedLoopTimePercentileArray": false
},
"isError": false
}
systemStatus:
- 0: Healthy = The monitoring job have been started on all measuring agents.
- -1 (minus one): Partial Malfunction = The monitoring job was not started on some measuring agents.
- -2 (minus two): Malfunction = The monitoring job was not started on any measuring agent.
combinedTestjobState
- “completed”: The testjob was successfully executed on all measuring agents.
- “partial failed”: The execution of the testjob did fail on some measuring agents.
- “failed”: The execution of the testjob did fail on all measuring agents.
Hint for combinedTestjobState : Note that is value does not reflect if any warnings or errors have been measured by the test jobs.
The Reference Implementation of the Monitoring Dashboard on the RealLoad Portal Server shows the measured (sumErrorsSeverityError + sumErrorsSeverityFatal) simple as “number of measured errors”.
Notification for Monitoring Group Temporarily Event
- Received action: “onMonitoringGroupTemporarilyEvent”
- monitoringGroupTemporarilyAction: “groupExecutionTemporarilyNotDisabled” or “groupExecutionTemporarilyDisabled”
{
"action": "onMonitoringGroupTemporarilyEvent",
"monitoringGroupId": 34,
"monitoringEvent": {
"eventTimestamp": 1708541771851,
"monitoringGroup": {
"monitoringGroupId": 34,
"ownerUserId": 13,
"title": "First Group",
"description": "",
"maxDataStorageDays": 14,
"agentType": "agent",
"executionEnabled": true,
"executionInterval": 300,
"executionTimeout": 300,
"currentExecutionState": "executing",
"lastExecutionStartTime": 1708541763897
},
"monitoringGroupTemporarilyAction": "groupExecutionTemporarilyNotDisabled"
},
"isError": false
}
Notification for Monitoring Job Temporarily Event
- Received action: “onMonitoringJobTemporarilyEvent”
- monitoringJobTemporarilyAction: “jobExecutionTemporarilyNotDisabled” or “jobExecutionTemporarilyDisabled”
{
"action": "onMonitoringJobTemporarilyEvent",
"monitoringGroupId": 36,
"monitoringJobId": 79,
"monitoringEvent": {
"eventTimestamp": 1708541771854,
"monitoringJobProperties": {
"performanceErrorAlertThresholdMillis": "-1",
"enableJobExecution": "true",
"performanceWarningAlertsEnabled": "false",
"testjobConcurrentUsers": "1",
"testjobDelayPerLoop": "1000",
"testjobDebugMeasuring": "false",
"performanceErrorAlertsEnabled": "false",
"enableAutomaticFileSync": "false",
"performanceWarningAlertThresholdMillis": "-1",
"testjobMaxTestDuration": "60",
"testjobDebugExecution": "false",
"testjobRampUpTime": "5",
"definedFromMonitoringGroupId": "36",
"testjobMaxLoopsPerUser": "1",
"productVersion": "4.8.35",
"monitoringJobId": "79",
"monitoringJobTitle": "Local_Cinema",
"lastExecutionStartTime": "1708541731138",
"testjobAdditionalArguments": "",
"definedFromTestId": "399",
"testjobUserInputFieldsValuesJsonArray": "[]",
"monitoringJobDescription": ""
},
"monitoringJobTemporarilyAction": "jobExecutionTemporarilyNotDisabled"
},
"isError": false
}
subscribeToMonitoringAlerts
- Send action : “subscribeToMonitoringAlerts”
{
"action":"subscribeToMonitoringAlerts"
}
- Received action: “onMonitoringAlert”
- alertLevel: “Monitoring Group”, “Monitoring Job” or “Monitoring Job Measuring Agent”
- alertType: “New Alert”, “Modified Alert”, “Repeated Alert” or “Canceled Alert”
{
"action": "onMonitoringAlert",
"monitoringEvent": {
"eventTimestamp": 1708547148410,
"monitoringAlert": {
"userId": 13,
"alertLevel": "Monitoring Group",
"alertType": "New Alert",
"alertId": 579,
"alertContext": {
"alertIdUpdateCounter": 0,
"currentSystemStatus": "Healthy",
"currentExecutionState": "Successful",
"currentNumMeasuredWarnings": 0,
"currentNumMeasuredErrors": 2,
"previousSystemStatus": "Healthy",
"previousExecutionState": "Successful",
"previousNumMeasuredWarnings": 0,
"previousNumMeasuredErrors": 0
},
"monitoringGroupId": 36,
"monitoringGroupExecutionResult": {
"magicPattern": "MonitoringGroupExecutionResult",
"productVersion": "4.8.35",
"userId": 13,
"monitoringGroupId": 36,
"groupExecutionId": 39525,
"resultTimestamp": 1708547148390,
"monitoringJobIdToLocalTestjobIdArray": [
{
"monitoringJobId": 79,
"localTestjobId": 74083
}
],
"groupSystemStatus": 0,
"groupCombinedTestjobState": "completed",
"groupExecutionLogArray": [
"2024-02-21 21:25:31.365 | | INFO | Monitoring Group Execution Thread started",
"2024-02-21 21:25:48.383 | | INFO | Monitoring Job Id 79 executed",
"2024-02-21 21:25:48.390 | | INFO | Monitoring Group Execution Thread terminated"
],
"numberOfPassedSamples": 0,
"numberOfFailedSamples": 2,
"numberOfPassedLoops": 0,
"numberOfFailedLoops": 2,
"sumErrorsSeverityWarning": 0,
"sumErrorsSeverityError": 2,
"sumErrorsSeverityFatal": 0
}
}
},
"isError": false
}
subscribeToGroupExecutionHistoryCache
- Send action : “subscribeToGroupExecutionHistoryCache”
{
"action": "subscribeToGroupExecutionHistoryCache",
"monitoringGroupId": 36
}
Error Case
{
"action": "subscribeToGroupExecutionHistoryCache",
"isError": true,
"genericErrorText": "subscribeToGroupExecutionHistoryCache failed: java.lang.IllegalArgumentException: Invalid monitoringGroupId : 35"
}
Received actions:
- onMonitoringGroupExecutionHistoryInitialEntries(history data of the last 24 hours)
- onMonitoringGroupExecutionHistoryNewEntry(last update of history data)
{
"action": "onMonitoringGroupExecutionHistoryInitialEntries",
"monitoringGroupId": 36,
"monitoringEvent": {
"eventTimestamp": 1708548777246,
"historyEntriesArray": [
{
"t": 1708463444623,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 0,
"f": 0,
"gid": 37851
},
{
"t": 1708463504557,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 0,
"f": 0,
"gid": 37853
},
{
"t": 1708463563635,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 0,
"f": 0,
"gid": 37854
},
{
"t": 1708548588515,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 2,
"f": 0,
"gid": 39554
},
{
"t": 1708548648466,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 2,
"f": 0,
"gid": 39555
},
{
"t": 1708548708464,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 2,
"f": 0,
"gid": 39557
},
{
"t": 1708548768449,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 2,
"f": 0,
"gid": 39558
}
]
},
"isError": false
}
{
"action": "onMonitoringGroupExecutionHistoryNewEntry",
"monitoringGroupId": 36,
"monitoringEvent": {
"eventTimestamp": 1708549188525,
"historyEntry": {
"t": 1708549188468,
"ge": 60,
"ss": 0,
"ct": "completed",
"w": 0,
"e": 2,
"f": 0,
"gid": 39566
}
},
"isError": false
}
- t : Unix-like timestamp
- ge : Monitoring group execution interval (seconds)
- ss : Group system status: 0 = HEALTHY, -1 = PARTIAL MALFUNCTION, -2 = MALFUNCTION
- ct : Group combined test job state: “completed”, “partial failed” or “failed”
- w : Sum of errors with severity warning
- e : Sum of errors with severity error
- f : Sum of errors with severity fatal
- gid : Group execution ID
subscribeToJobExecutionHistoryCache
- Send action : “subscribeToJobExecutionHistoryCache”
{
"action": "subscribeToJobExecutionHistoryCache",
"monitoringJobId": 79
}
Error Case
{
"action": "subscribeToJobExecutionHistoryCache",
"isError": true,
"genericErrorText": "subscribeToJobExecutionHistoryCache failed: java.lang.IllegalArgumentException: Invalid monitoringJobId : 80"
}
Received actions:
- onMonitoringJobExecutionHistoryInitialEntries(history data of the last 24 hours)
- onMonitoringJobExecutionHistoryNewEntry(last update of history data)
{
"action": "onMonitoringJobExecutionHistoryInitialEntries",
"monitoringGroupId": 36,
"monitoringJobId": 79,
"monitoringEvent": {
"eventTimestamp": 1708551216713,
"historyEntriesArray": [
{
"t": 1708464823243,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": 118,
"w": 0,
"e": 0,
"f": 0,
"lid": 71889,
"h": true
},
{
"t": 1708464882694,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": 107,
"w": 0,
"e": 0,
"f": 0,
"lid": 71890,
"h": true
},
{
"t": 1708464943399,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": 96,
"w": 0,
"e": 0,
"f": 0,
"lid": 71891,
"h": true
},
{
"t": 1708550987656,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": -1,
"w": 0,
"e": 2,
"f": 0,
"lid": 74186,
"h": true
},
{
"t": 1708551047722,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": -1,
"w": 0,
"e": 2,
"f": 0,
"lid": 74187,
"h": true
},
{
"t": 1708551108599,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": -1,
"w": 0,
"e": 2,
"f": 0,
"lid": 74191,
"h": true
},
{
"t": 1708551167586,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": -1,
"w": 0,
"e": 2,
"f": 0,
"lid": 74192,
"h": true
}
]
},
"isError": false
}
{
"action": "onMonitoringJobExecutionHistoryNewEntry",
"monitoringGroupId": 36,
"monitoringJobId": 79,
"monitoringEvent": {
"eventTimestamp": 1708551228189,
"historyEntry": {
"t": 1708551228183,
"ge": 60,
"ss": 0,
"ct": "completed",
"al": -1,
"w": 0,
"e": 2,
"f": 0,
"lid": 74193,
"h": true
}
},
"isError": false
}
- t : Unix-like timestamp
- ge : Monitoring group execution interval (seconds)
- ss : System status: 0 = HEALTHY, -1 = PARTIAL MALFUNCTION, -2 = MALFUNCTION
- ct : Combined test job state: “completed”, “partial failed” or “failed”
- al : Average passed loop time (milliseconds), -1 = no data
- w : Sum of errors with severity warning
- e : Sum of errors with severity error
- f : Sum of errors with severity fatal
- lid : Local test job ID
- h: Has combined test result: true or false
Other Received Actions
You will also receive other actions than previously described above. These are confirmations that you can ignore. Example:
{
"action":"subscribeToRealtimeMonitor",
"isError":false
}