Showing results for 
Search instead for 
Did you mean: 

Deploying Python code to Stingray Traffic Manager

You've deployed the PyRunner.jar extension to Stingray Traffic Manager so that you can run Python code (see PyRunner.jar: Running Python code in Stingray Traffic Manager).  What's the easiest way to deploy the Python code on Stingray?


The following script makes this easy.  It runs a quick syntax check against the Python code, then uses the REST API (Tech Tip: Using the RESTful Control API with Python - Overview) to PUT the python file in the conf/extra part of the Stingray configuration.


The source of the publish script:



import requests

import sys

import py_compile

# FIXME: these need to be correct for your deployment

url  = 'https://stingray:9070/api/tm/1.0/config/active/'

auth = ( 'admin', 'admin' )

file = sys.argv[1]

# Syntax-check script before uploading


  py_compile.compile( file, '/dev/null', file, True )

except Exception, e:

  print "Compilation check failed:", e

  sys.exit( 1 )

src=open( file, 'r' ).read()

# Deploy to Stingray

client = requests.Session()

client.auth = auth

client.verify = 0


    response = client.put( url+'extra/'+file, data = src )

except Exception, e:

    print "Error: Unable to connect to " + url + ": ", e

    sys.exit( 1 )

print "Uploaded " + file


Save this script on your development environment, check the URL and auth parameters, and make the script executable (chmod +x).


Deploying Python code to Stingray


Upload the PyRunner.jar file to Stingray Traffic Manager, as per the instructions in PyRunner.jar: Running Python code in Stingray Traffic Manager.


Create a simple TrafficScript rule and associate it with your virtual server: "PyRunner", "" );


Create a python file named


from javax.servlet.http import HttpServlet

class vars(HttpServlet):

   def doGet(self, request, response):

      reqsText =  '   %30s: %s\n' % ( "URL", request.getRequestURL() )

      reqsText += '   %30s: %s\n' % ( "URI", request.getRequestURI() )

      reqsText += '   %30s: %s\n' % ( "Query String", request.getQueryString() )

      headText = ''

      names = request.getHeaderNames()

      for n in names:

            headText += '   %30s: %s\n' % ( n, request.getHeader( n ) )

      paramText = ''

      names = request.getParameterNames()

      for n in names:

            paramText += '   %30s: %s\n' % ( n, request.getParameter( n ) )      

      attrText = ''

      names = request.getAttributeNames()

      for n in names:

            attrText += '   %30s: %s\n' % ( n, request.getAttribute( n ) )

      attrText += '   %30s: %s\n' % ( "args", request.getAttribute( "args" ) )

      toClient = response.getWriter()

      response.setContentType ("text/html")

      htmlOut = '''






      ''' % ( reqsText, headText, paramText, attrText )



Upload it using


$ ./


Then test it out!


The key advantage of this technique is that it makes publishing Python/Jython code very quick and easy.  Stingray will notice that the Python code has changed and re-load it immediately, giving you a quick test cycle.

Version history
Revision #:
1 of 1
Last update:
‎04-19-2013 07:22:AM
Updated by:
Labels (1)