serviceability-python-zeep-samples

Overview

Sample scripts demonstrating usage of various Cisco CUCM Serviceability APIs using Python and the Zeep SOAP library.

https://developer.cisco.com/site/sxml/

Available samples

  • risport70_selectCmDevice.py - Demonstrates querying for all device registrations using Risport (<selectCmDevice>)

  • perfmonPort_collect_counter_data.py - Demonstrates retrieving and parsing performance counter data via the Perfmon <perfmonCollectCounterData> request

  • services_getProductInformationList.py - Use Control Center Services to retrieve a list of the installed Products and versions (<getProductInformationList>)

  • perfmonPort_collectSession_data.py - (Mac/Linux only) Uses Perfmonport to start a collection session, add example counters, then periodically retrieve/parse the results (<perfmonOpenSession>, <perfmonAddCounter>,<perfmonCollectCounterData>)

  • logCollection_GetOneFile.py - Performs a listing of log files available for a specific service (Cisco Audit Logs), retrieves the contents of the latest file, then parses/prints a few lines of the results (<selectLogFiles>, <GetOneFile>)

  • services_soapGetServiceStatus.py - Performs a <soapGetServiceStatus> request using the Zeep SOAP library.

  • services_doControlServices.py - Performs a <soapDoControlServices> request using the Zeep SOAP library,
    periodically checks the status using <soapGetServiceStatus> and parses/prints the results in a simple table output.

Tested using:

  • Ubuntu 21.04 / Python 3.9.5
  • Mac OS 11.4 / Python 3.9.6

Getting started

  • Install Python 3

    (On Windows, choose the option to add to PATH environment variable)

  • Clone this repository:

    git clone https://www.github.com/CiscoDevNet/serviceability-python-zeep-samples
    cd serviceability-python-zeep-samples
  • (Optional) Create/activate a Python virtual environment named venv:

    python3 -m venv venv
    source venv/bin/activate
  • Install needed dependency packages:

    pip install -r requirements.txt
  • Open the project in Visual Studio Code:

    code .
  • Rename the file .env.example to .env and edit to specify your CUCM address and Serviceability API user credentials

  • The Serviceability SOAP API WSDL files for CUCM v12.5 are included in this project. If you'd like to use a different version, replace the files in schema/ with the versions from your CUCM, which can be retrieved at:

    • CDRonDemand: https://{cucm}/CDRonDemandService2/services/CDRonDemandService?wsdl

    • Log Collection: https://{cucm}:8443/logcollectionservice2/services/LogCollectionPortTypeService?wsdl

    • PerfMon: https://{cucm}:8443/perfmonservice2/services/PerfmonService?wsdl

    • RisPort70: https://{cucm}:8443/realtimeservice2/services/RISService70?wsdl

    • Control Center Services: https://{cucm}:8443/controlcenterservice2/services/ControlCenterServices?wsdl

    • Control Center Services Extended: https://{cucm}:8443/controlcenterservice2/services/ControlCenterServicesEx?wsdl

Hints

  • You can get a 'dump' of an API WSDL to see how Zeep interprets it, for example by running (Mac/Linux):

    python -mzeep schema/PerfmonService.wsdl > PerfmonServiceWsdl.txt

    This can help with identifying the proper object structure to send to Zeep

  • Elements which contain a list, such as:

    <members>
        <member>
            <subElement1/>
            <subElement2/>
        </member>
        <member>
            <subElement1/>
            <subElement2/>
        </member>
    </members>

    are represented a little differently than expected by Zeep. Note that <member> becomes an array, not <members>:

    {
        'members': {
            'member': [
                {
                    'subElement1': 'value',
                    'subElement2': 'value'
                },
                                {
                    'subElement1': 'value',
                    'subElement2': 'value'
                }
            ]
        }
    }
View code on GitHub

Code Exchange Community

Get help, share code, and collaborate with other developers in the Code Exchange community.View Community
Disclaimer:
Cisco provides Code Exchange for convenience and informational purposes only, with no support of any kind. This page contains information and links from third-party websites that are governed by their own separate terms. Reference to a project or contributor on this page does not imply any affiliation with or endorsement by Cisco.