Hi There,
I have a REST Custom Sensor that has been configured to dynamically create channels from an API. Is there a way to filter or limit the values from the API that does not exceed the 50 channel limitation?
Any help would be greatly appreciated.
Thanks, Jodan Tran
Article Comments
I have a similar situation, trying to filter from a generic channel created to avoid hundreds of channels and only filtering through projects that are of interest. I'm trying to use JSON path, however haven't been able to get the filter to work properly.
REST API Response:
{ "executionTime": { "millis": 176, "seconds": 0 }, "returnCode": 0, "root": [ { "active": "true", "addStatisticsCodeEnabled": "false", "applicationBundleName": null, "applicationFeatureURL": null, "applicationGroup": null, "applicationId": "_etKaMNi2EeiDS5lpQcx7fA", "applicationName": "Corrected_TestContextVar", "applicationType": "JOB", "applicationVersion": "0.3", "applyContextToChildren": "false", "artifactGroupId": "org.example.testcontextvariable.job", "artifactId": "Corrected_TestContextVar", "artifactVersion": "0.4.0-LATEST", "awaitingExecutions": "0", "branch": "trunk", "commandLineVersion": "7.0.1.20180411_1414", "concurrentExecution": "false", "contextName": "DEV", "description": null, "errorStatus": "NO_ERROR", "execStatisticsEnabled": "false", "executionServerId": "JOB_SERVER_3", "featuresName": null, "featuresVersion": "0.4.0-LATEST", "framework": "", "frozenExecutions": "0", "id": "32", "idQuartzJob": "32", "jobServerLabelHost": "qav1-tj1", "jobscriptarchivefilename": "1540772209274_task_32.zip", "label": "asdf", "lastDeploymentDate": "2018-10-28 20:17:05.0", "lastEndedRunDate": "2018-10-28 20:17:12.0", "lastRunDate": "2018-10-28 20:17:10.0", "lastScriptGenerationDate": "2018-10-28 08:56:54.0", "lastTaskTraceError": "", "latestVersion": "false", "log4jLevel": "Info", "nextFireDate": null, "onUnknownStateJob": "WAIT", "onlineStatus": null, "originType": "ZIP", "pid": null, "processingState": "false", "projectId": "10", "projectName": "TESTCONTEXTVARIABLE", "regenerateJobOnChange": "false", "remaingTimeForNextFire": null, "repositoryName": "qa_releases", "runAsUser": null, "snapshot": "false", "status": "READY_TO_RUN", "svnConnectionAvailable": null, "svnRevision": null, "taskType": "ARTIFACT_TASK", "timeOut": null, "triggersStatus": "NO_TRIGGER", "uniqueId": "bcd301d8-cdd2-43c1-b020-1be08f884b51", "virtualServerLabel": null }, { "active": "true", "addStatisticsCodeEnabled": "true", "applicationBundleName": null, "applicationFeatureURL": null, "applicationGroup": null, "applicationId": "_etKaMNi2EeiDS5lpQcx7fA", "applicationName": "Corrected_TestContextVar", "applicationType": "JOB", "applicationVersion": "0.3", "applyContextToChildren": "false", "artifactGroupId": "org.example.testcontextvariable.job", "artifactId": "Corrected_TestContextVar", "artifactVersion": "0.4.6-LATEST", "awaitingExecutions": "0", "branch": "trunk", "commandLineVersion": "7.0.1.20180411_1414", "concurrentExecution": "false", "contextName": "QA", "description": "Testing with different context variables", "errorStatus": "NO_ERROR", "execStatisticsEnabled": "false", "executionServerId": "JOB_SERVER_3", "featuresName": null, "featuresVersion": "0.4.6-LATEST", "framework": "", "frozenExecutions": "0", "id": "33", "idQuartzJob": "33", "jobServerLabelHost": "qav1-tj1", "jobscriptarchivefilename": "1540785329196_task_33.zip", "label": "Context Variable Testing", "lastDeploymentDate": "2018-10-28 23:55:31.0", "lastEndedRunDate": "2018-10-28 23:55:32.0", "lastRunDate": "2018-10-28 23:55:31.0", "lastScriptGenerationDate": "2018-10-29 00:09:28.0", "lastTaskTraceError": "", "latestVersion": "false", "log4jLevel": "Info", "nextFireDate": null, "onUnknownStateJob": "WAIT", "onlineStatus": null, "originType": "ZIP", "pid": null, "processingState": "false", "projectId": "10", "projectName": "TESTCONTEXTVARIABLE", "regenerateJobOnChange": "false", "remaingTimeForNextFire": null, "repositoryName": "qa_releases", "runAsUser": null, "snapshot": "false", "status": "READY_TO_RUN", "svnConnectionAvailable": null, "svnRevision": null, "taskType": "ARTIFACT_TASK", "timeOut": "3600", "triggersStatus": "NO_TRIGGER", "uniqueId": "fb6798f6-6129-42c1-b641-c616d3d30e85", "virtualServerLabel": null } ] }
This is my Generic Channel creation that works:
{ "prtg": { "result": [ { "value": { "["+ #1 +"]" + " Error Status": $..({@.label : lookup(@.errorStatus, "KILLED")}).* } } ] } }
This is the filter I'm trying to create and haven't had success yet:
{ "prtg": { "result": [ { "value": { "["+ #1 +"]" + " Error Status": $.[?@.projectName=="TESTCONTEXTVARIABLE"].({@.label : lookup(@.errorStatus, "KILLED","JOB_ERROR","NO_ERROR")}).* } } ] } }
Error Message:
Parsing error: { "prtg": { "result": [ { "value": { "["+ #1 +"]" + " Error Status": $.[?@.projectName=="TESTCONTEXTVARIABLE"].({@.label : lookup(@.errorStatus, "KILLED","JOB_ERROR","NO_ERROR")}).* } } ] } } }:6:38 - 6:39 unexpected "[" while scanning JSON select expected Ident, "." or "*".
Any ideas on how to get this filter to work? Also, is there anyway to have wildcards in the filters or regular expressions? Looking for something similar to: projectName LIKE *Core*Ingestion Which would match: "projectName": "nCore_Job_Ingestion" "projectName": "tCore_restore_Ingestion"
Thanks Gui Lopes
Feb, 2019 - Permalink
I've forwarded the case to the developer, maybe he has an idea on how to get it to work :)
Feb, 2019 - Permalink
You might want to try the following (counting critical channels):
"critical": len($[*][@.size > 10000 && @.active])
However, creating channels as soon as a limit is exceed may lead to unforseen (read untested) behavior. As this example is quite complex, you might want to check it out with PowerShell or Python and parse it with that one. Using the EXE/Script Advanced Sensors, you're not limited to the fifty channels of the sensor.
Feb, 2019 - Permalink
Unfortunately, there's no way to filter the channels, other than via the JSON path. The following thread has some nice examples:
https://stackoverflow.com/questions/29703891/jsonpath-and-operator-on-array
The Rest Sensor also supports && and ||, so you could give that one a shot :)
PRTGapi | Feature Requests | WMI Issues | SNMP Issues
Kind regards,
Stephan Linke, Tech Support Team
Feb, 2019 - Permalink