cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
909
Views
0
Helpful
10
Replies

Getting error during selectCmDeviceExt

jdrinkwater
Level 1
Level 1

Hello, I am getting the following error and don't know why. I am only sending one request selectCmDeviceExt to capture Route List status.
<soapenv:Fault xmlns:axis2ns2120696="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>axis2ns2120696:Server.RateControl</faultcode>
<faultstring>Exceeded allowed rate for Reatime information. Current allowed rate for realtime information is 15 requests per minute.RISService70</faultstring>
<detail />
</soapenv:Fault>

10 Replies 10

Jitendra Kumar
Spotlight
Spotlight

achieve this with a bit of groovy scripting like this.

Create a new project, add a test suite and then add 3 new test cases (script, getSiteList and getSiteInfo).

Right-click on getSiteList and getSiteInfo and deactivate the test case.

Add a Soap-Request to getSiteInfo and getSiteList, set the appropriate soap-endpoint for each.

Add a groovy script to the test case "script".

It should look like this now:

 

 

 

 

Add the following code to the groovy script:

def getSiteInfo = context.testCase.testSuite.getTestCaseByName('getSiteInfo').getTestStepByName("request")
def getSiteList = context.testCase.testSuite.getTestCaseByName('getSiteList').getTestStepByName("request")

//add code here to change userName, password, custNbr if necessary
def userName = 'username'
def password = 'pwsd'
def custNbr = '288'

//set userName, password, custNbr 
getSiteList.setPropertyValue('request',
"""<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bil="http://billing.xyz.cc/">
	<soapenv:Header/>
		<soapenv:Body>
			<bil:getSiteList>
			<!--userName-->
			<arg0>""" + userName + """</arg0>
			<!--password-->
			<arg1>""" + password + """</arg1>
			<!--custNbr-->
			<arg2>""" + custNbr + """</arg2>
			<!--lastModifiedDt-->
			<!--<arg3>?</arg3>-->
		</bil:getSiteList>
	</soapenv:Body>
</soapenv:Envelope>""")

// fire request
getSiteList.run(null, context)

// get response
def root = new XmlSlurper().parseText(getSiteList.getPropertyValue('response'))

// iterate over all siteIds and fire request based on the siteId
root.'**'.findAll() {node -> node.name() == 'siteId'}.each { id ->
	getSiteInfo.setPropertyValue('request',
"""<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bil="http://billing.xyz.cc/">
	<soapenv:Header/>
		<soapenv:Body>
			<bil:getSiteInfo>
			<!--userName-->
			<arg0>""" + userName + """</arg0>
			<!--password-->
			<arg1>""" + password + """</arg1>
			<!--custNbr-->
			<arg2>""" + custNbr + """</arg2>
			<!--siteId-->
			<arg3>""" + id + """</arg3>
		</bil:getSiteInfo>
	</soapenv:Body>
</soapenv:Envelope>""")

	//fire request for getSiteInfo
	getSiteInfo.run(null, context)

	//show result
	log.info getSiteInfo.getPropertyValue('response')
	
	// add more code here
	// ...
}

 

If you either run the project, test suite or groovy script it should first request the site list and then iterate of every siteId and request further information for each.

 

Thanks,
Jitendra

dstaudt
Cisco Employee
Cisco Employee

That doesn't sound good...

Not sure I've tried it with Route Lists previously - can you provide a sample of your request XML?

Hi David,

Can I access registrationdynamic table without problem? I am doing some query to capture some timestamp. I know I can only send 15-18 request per mins for selectCmDeviceExt commands and 1000 devices per mins.

Thanks,

Jung

As always when using direct SQL, you may be bypassing some of the restrictions/protections implemented to avoid poorly-behaving applications from impacting the system - this means more of the diligence is on the developer to understand/test/optimize what they're doing.
That being said, the registrationdynamic table is going to be one primarily held in-memory, so should be quite fast.  Keeping track of and querying the datetimestamp field for values larger than the last query may keep the results fairly small, i.e. only changed records; however I've yet to figure out how to interpret the Informix IDS index information so if that field is not indexed it may be relative expensive to run that query (or any query) if there are thousands of rows...

It seems like it's working for Route List status but still does not work for Phone status. Just found out that the CUCM server is located in Europe. Do you think it has something to do with it? Should I increase the wait time in between the requests?

Thanks!

Hi David,

I am finding out that same request is working in north America cluster but not working for EMEA cluster. Do  you think it has to do with latency of the network speed? 

Thanks!

Based on the error re rate limits in the OP, not sure that would be due to latency.  Are the US/EU nodes in different clusters?  Are the clusters different sizes?  Any possibility the EU has other applications using Risport at the same time (and reducing available requests/s?)

All other things looking ok, I wouldn't necessarily rule out latency, but if so probably need to do some troubleshooting via logs, etc.

These are all good questions. I did open the new TAC case. I will add the trace log from RTMT. Is there a way to tell if bandwidth is consume by other app? They are different cluster and about the same size. 

Probably would need to look at logs to identify if other apps are also making Risport requests

BjoernMartin
Spotlight
Spotlight

Hi.
If I understood you correctly, then you want to read the phone status (registered for example) from your CUCM Nodes.

How are you currently doing this? SQL (show risdb query phone) or RIS (selectCmDeviceExt)?
If you use RIS, then share your XML request/response please.

best regards

Getting Started

Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: