starpy.examples.priexhaustion
index
/home/mcfletch/pylive/starpy/examples/priexhaustion.py

Sample application to watch for PRI exhaustion
 
This script watches for events on the AMI interface, tracking the identity of
open channels in order to track how many channels are being used.  This would 
be used to send messages to an administrator when network capacity is being 
approached.
 
Similarly, you could watch for spare capacity on the network and use that 
to decide whether to allow low-priority calls, such as peering framework or
free-world-dialup calls to go through.

 
Modules
       
basicproperty.basic
basicproperty.common
twisted.internet.defer
starpy.fastagi
twisted.application.internet
logging
starpy.manager
starpy.menu
os
pprint
basicproperty.propertied
twisted.application.service
time
starpy.utilapplication

 
Classes
       
Propertied(object)
ChannelTracker

 
class ChannelTracker(Propertied)
    Track open channels on the Asterisk server
 
 
Method resolution order:
ChannelTracker
Propertied
object

Methods defined here:
interestingEvent(self, event, ami=None)
Decide whether this channel event is interesting 
 
Real-world application would want to take only Zap channels, or only
channels from a given context, or whatever other filter you want in 
order to capture *just* the scarce resource (such as PRI lines).
 
Keep in mind that an "interesting" event must show up as interesting 
for *both* Newchannel and Hangup events or you will leak 
references/channels or have unknown channels hanging up.
main(self)
Main operation for the channel-tracking demo
onAMIConnect(self, ami)
Register for AMI events
onChannelChange(self, ami, event, opening=False)
Channel count has changed, do something useful like enforcing limits
onChannelHangup(self, ami, event)
Handle hangup of an existing channel
onChannelNew(self, ami, event)
Handle creation of a new channel
onStatus(self, events, ami=None)
Integrate the current status into our set of channels

Data and other attributes defined here:
channels = <DictionaryProperty 'channels'>
Set of open channels on the system
thresholdCount = <IntegerProperty 'thresholdCount'>
Storage of threshold below which we don't warn user

Methods inherited from Propertied:
__init__(self, *arguments, **namedarguments)
Propertied object initialisation, allows passing in initial values for properties by name
__str__(self)
Get a friendly representation of the object
clone(self, **newValues)
Clone this object, with optional new property values
 
This method calls the __init__ method of your class with
the current property values of your class.  Providing newValues
(a dictionary) overrides property settings with new values.
getCloneProperties(self)
Get properties dictionary (key:value) for use in cloning of the instance
 
By default you get getProperties()' values, with an
attempt made to use the property's name, then the property's
direct "__get__" method.
toString(self, indentation='', alreadyDone=None, indentString=' ')
Get a nicely formatted representation of this object
 
This version assumes that getProperties returns
the list of properties which should be presented,
it recursively calls it's children with greater
indents to get their representations.
 
indentation -- current string indentation level
alreadyDone -- set of object ids which are already finished
 
XXX Needs a far better API, likely a stand-alone class
        without the automatic inheritance problems here :(

Class methods inherited from Propertied:
getProperties(cls) from type
Get the BasicProperty properties for a particular object's class

Data and other attributes inherited from Propertied:
__dict__ = <dictproxy object>
dictionary for instance variables (if defined)
__weakref__ = <attribute '__weakref__' of 'Propertied' objects>
list of weak references to the object (if defined)

 
Data
        APPLICATION = <starpy.utilapplication.UtilApplication object>
reactor = <twisted.internet.selectreactor.SelectReactor instance>