08-05-2022 05:19 AM
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>
08-05-2022 05:36 AM
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.
08-05-2022 11:45 AM
That doesn't sound good...
Not sure I've tried it with Route Lists previously - can you provide a sample of your request XML?
08-09-2022 08:06 AM
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
08-09-2022 09:57 AM
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...
08-25-2022 11:45 AM
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!
10-11-2022 05:05 AM
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!
10-11-2022 09:55 AM
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.
10-11-2022 10:11 AM
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.
10-11-2022 10:29 AM
Probably would need to look at logs to identify if other apps are also making Risport requests
08-25-2022 10:26 PM
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
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide