Hi Srikanth,

Thanks. I will fix this and update to the newer psutil version and send 
an updated changeset.

/ Johan

On 09/17/2015 02:07 PM, Srikanth Revanuru wrote:
> Johan,
>
>   The "tones" application doesn't provide the help text.
>
> / Srikanth
>
> ----- [email protected] wrote:
>
>> python/samples/immoi/samples/README                                |
>> 93 -------
>>   python/samples/immoi/samples/interface-handler                     |
>> 121 ---------
>>   python/samples/immoi/samples/interface-handler-inheritance-version |
>> 125 ----------
>>   python/samples/immoi/samples/classes.xml                           |
>>    0
>>   4 files changed, 0 insertions(+), 339 deletions(-)
>>
>>
>> Finish the merge of the previously separate immoi/samples directory
>> with the other samples.
>>
>> diff --git a/python/samples/immoi/samples/README
>> b/python/samples/immoi/samples/README
>> deleted file mode 100644
>> --- a/python/samples/immoi/samples/README
>> +++ /dev/null
>> @@ -1,93 +0,0 @@
>> -Samples
>> -=======
>> -
>> -The samples use the classes defined in the classes.xml file. Before
>> running them, load it:
>> -
>> -$ immcfg -f classes.xml
>> -
>> -Each sample OI is implemented in two versions, one using straight
>> callbacks and one using a class that subclasses Implementer or
>> Applier. The latter is named <oi-name>-inheritance-impl
>> -
>> -Imm Listener
>> -------------
>> -
>> -The Imm Lister OI demonstrates how to build an applier. It listens to
>> changes to SampleClass1 and simply prints them on stdout. It's an
>> applier which means that it does not validate any of the changes and
>> it can be run in parallel with a proper OI.
>> -
>> -Use like this:
>> -
>> -$ imm-listener SampleClass1
>> -
>> -or, to listen for changes to all configuration classes:
>> -
>> -$ imm-listener --all
>> -
>> -
>> -Tones
>> ------
>> -
>> -The Tones OI demonstrates validation of containment relations. It
>> implements classes for the tones Do, Re, Mi, Fa, So, La, Ti and only
>> allows creation of each tone under the lower tone, except for Do which
>> can be created without a parent.
>> -
>> -Use like this:
>> -
>> -$ tones &
>> -
>> -$ immcfg -c Do doId=1                 (allowed)
>> -
>> -$ immcfg -c Re reId=1,doId=1          (allowed)
>> -
>> -$ immcfg -c Do doId=1,reId=1,doId=1   (not allowed)
>> -
>> -$ immcfg -c Mi miId=1                 (not allowed)
>> -
>> -
>> -Caps
>> -----
>> -
>> -The Caps OI demonstrates validation. It validates that any new
>> CapsSample objects and any updated CapsSample objects follow these
>> rules:
>> -
>> -  - The upperCaps attribute consists only of uppercase characters
>> -  - The lowerCaps attribute consists only of lowercase characters
>> -
>> -Use like this:
>> -
>> -$ caps &
>> -
>> -$ immcfg -c CapsSample capsId=<RDN>
>> -
>> -$ immcfg -a upperCaps=ABC capsId=<RDN>  (allowed)
>> -
>> -$ immcfg -a lowerCaps=Abc capsId=<RDN>  (not allowed)
>> -
>> -
>> -Time Reporter
>> --------------
>> -
>> -The Time Reporter OI demonstrates update of runtime attributes from
>> an OI and inclusion of the OI logic into a select loop owned by the
>> application. It creates a runtime object timeId=1 of the class
>> TimeSample and updates its hours, minutes and seconds attributes once
>> every second.
>> -
>> -Use like this:
>> -
>> -$ time-reporter
>> -
>> -
>> -Ping Pong
>> ----------
>> -
>> -The Ping Pong OI demonstrates administrative operations. It creates
>> an object pingPongId=1 and responds on admin operations 0 and 1.
>> -
>> -Use like this:
>> -
>> -$ ping-pong &
>> -
>> -$ immadm -o [0|1] pingPongId=1 <parameters..>
>> -
>> -
>> -Users
>> ------
>> -
>> -The Users OI demonstrates an OI that returns values of runtime
>> attributes when it's queried by IMM. It uses the Python package psutil
>> to fill in the list of logged in users.
>> -
>> -Use like this:
>> -
>> -$ users &
>> -
>> -$ immlist usersId=1
>> -
>> diff --git a/python/samples/immoi/samples/interface-handler
>> b/python/samples/immoi/samples/interface-handler
>> deleted file mode 100755
>> --- a/python/samples/immoi/samples/interface-handler
>> +++ /dev/null
>> @@ -1,121 +0,0 @@
>> -#!/usr/bin/env python
>> -
>> -import argparse
>> -import sys
>> -import netifaces
>> -import select
>> -
>> -from pyosaf.saAis import eSaAisErrorT
>> -
>> -from pyosaf.utils import immom, immoi
>> -
>> -from pyosaf.utils.immom.object import ImmObject
>> -from pyosaf.utils.immom.iterator import InstanceIterator
>> -
>> -
>> -from pyosaf.utils.immoi import get_object_no_runtime
>> -from pyosaf.utils.immoi.implementer import Implementer
>> -
>> -interface_class_name = "InterfaceRO01"
>> -timeout = 1
>> -
>> -def get_interface_name_from_dn(dn):
>> -
>> -    return dn.split(',')[0].split('=')[1]
>> -
>> -def create_rt_object_for_interface(implementer, interface):
>> -
>> -    mo = ImmObject(class_name=interface_class_name,
>> dn='interfaceId=%s' % interface)
>> -
>> -    # Set the RDN with the right interface name
>> -    mo.interfaceId = 'interfaceId=%s' % interface
>> -
>> -    # Look up the IPv4 and IPv6 addresses
>> -    addresses = netifaces.ifaddresses(interface)
>> -
>> -    mo.ipv4Addresses = None
>> -    mo.ipv6Addresses = None
>> -
>> -    if netifaces.AF_INET in addresses:
>> -        ipv4 = [a['addr'] for a in addresses[netifaces.AF_INET]]
>> -        mo.ipv4Addresses = ipv4
>> -    else:
>> -        mo.ipv4Addresses = "dummy"
>> -
>> -    if netifaces.AF_INET6 in addresses:
>> -        ipv6 = [a['addr'] for a in addresses[netifaces.AF_INET6]]
>> -        mo.ipv6Addresses = ipv6
>> -    else:
>> -        mo.ipv6Addresses = "dummy"
>> -
>> -    ##
>> -    ## This exposes a potential fault in IMM.
>> -    ##
>> -    ## Cached attributes need to have their values set when
>> -    ## the object is created. If there is an interface that lacks
>> -    ## an IPv4 or IPv6 address, this will be set to None and
>> -    ## converted to an empty list in the implementer code. IMM
>> -    ## does not allow this and responds with
>> SA_AIS_ERR_INVALID_PARAM
>> -    ##
>> -
>> -    implementer.create(mo)
>> -
>> -def select_loop(implementer):
>> -
>> -    # Get selection object for the implementer
>> -    selection_object = implementer.get_selection_object()
>> -
>> -    # Wait for next IO event or N seconds
>> -    inputs  = [selection_object]
>> -    outputs = []
>> -
>> -    while inputs:
>> -
>> -        readable, writable, exceptional = \
>> -        select.select(inputs, outputs, inputs, timeout)
>> -
>> -        if selection_object in readable:
>> -            implementer.dispatch()
>> -        else:
>> -
>> -            interfaces = netifaces.interfaces()
>> -
>> -            # Add objects for new interfaces
>> -            for interface in interfaces:
>> -                if not immoi.get_object_no_runtime('interfaceId=%s' %
>> interface,
>> -
>> class_name=interface_class_name):
>> -                    create_rt_object_for_interface(implementer,
>> interface)
>> -
>> -            # Go through existing objects
>> -            for mo in InstanceIterator('InterfaceRO'):
>> -                interface_name = get_interface_name_from_dn(mo.dn)
>> -
>> -                # Remove objects for deleted interfaces
>> -                if not mo.dn in interfaces:
>> -                    implementer.delete(mo.dn)
>> -
>> -                # Update interfaces
>> -                addresses = netifaces.ifaddresses(interface_name)
>> -
>> -                ipv4 = None
>> -                ipv6 = None
>> -
>> -                if netifaces.AF_INET in addresses:
>> -                    ipv4 = [a['addr'] for a in
>> addresses[netifaces.AF_INET]]
>> -
>> -                if netifaces.AF_INET6 in addresses:
>> -                    ipv6 = [a['addr'] for a in
>> addresses[netifaces.AF_INET6]]
>> -
>> -                attributes = {'ipv4Addresses' : ipv4,
>> -                              'ipv6Addresses' : ipv6}
>> -
>> -                implementer.update_runtime_attributes(mo.dn,
>> attributes)
>> -
>> -
>> -if __name__ == "__main__":
>> -
>> -    # Create the implementer instance
>> -    interface_implementer = Implementer(name="InterfaceImplementer")
>> -
>> -    # Enter an infinite select loop
>> -    select_loop(interface_implementer)
>> diff --git
>> a/python/samples/immoi/samples/interface-handler-inheritance-version
>> b/python/samples/immoi/samples/interface-handler-inheritance-version
>> deleted file mode 100755
>> ---
>> a/python/samples/immoi/samples/interface-handler-inheritance-version
>> +++ /dev/null
>> @@ -1,125 +0,0 @@
>> -#!/usr/bin/env python
>> -
>> -import argparse
>> -import sys
>> -import netifaces
>> -import select
>> -
>> -from pyosaf.saAis import eSaAisErrorT
>> -
>> -from pyosaf.utils import immom, immoi
>> -
>> -from pyosaf.utils.immom.object import ImmObject
>> -from pyosaf.utils.immom.iterator import InstanceIterator
>> -
>> -
>> -from pyosaf.utils.immoi import get_object_no_runtime
>> -from pyosaf.utils.immoi.implementer import Implementer
>> -
>> -interface_class_name = "InterfaceRO01"
>> -timeout = 1
>> -
>> -class InterfaceImplementer(Implementer):
>> -
>> -
>> -    def __init__(self, timeout=1):
>> -        Implementer.__init__(self, name="InterfaceImplementer")
>> -
>> -        self.timeout = timeout
>> -
>> -    def get_interface_name_from_dn(self, dn):
>> -
>> -        return dn.split(',')[0].split('=')[1]
>> -
>> -    def create_rt_object_for_interface(self, interface):
>> -
>> -        mo = ImmObject(class_name=interface_class_name,
>> dn='interfaceId=%s' % interface)
>> -
>> -        # Set the RDN with the right interface name
>> -        mo.interfaceId = 'interfaceId=%s' % interface
>> -
>> -        # Look up the IPv4 and IPv6 addresses
>> -        addresses = netifaces.ifaddresses(interface)
>> -
>> -        if netifaces.AF_INET in addresses:
>> -            ipv4 = [a['addr'] for a in addresses[netifaces.AF_INET]]
>> -            mo.ipv4Addresses = ipv4
>> -        else:
>> -            mo.ipv4Addresses = "dummy"
>> -
>> -        if netifaces.AF_INET6 in addresses:
>> -            ipv6 = [a['addr'] for a in
>> addresses[netifaces.AF_INET6]]
>> -            mo.ipv6Addresses = ipv6
>> -        else:
>> -            mo.ipv6Addresses = "dummy"
>> -
>> -        ##
>> -        ## This exposes a potential fault in IMM.
>> -        ##
>> -        ## Cached attributes need to have their values set when
>> -        ## the object is created. If there is an interface that
>> lacks
>> -        ## an IPv4 or IPv6 address, this will be set to None and
>> -        ## converted to an empty list in the implementer code. IMM
>> -        ## does not allow this and responds with
>> SA_AIS_ERR_INVALID_PARAM
>> -        ##
>> -        ## Work around this for now by setting dummy values
>> -        ##
>> -
>> -        self.create(mo)
>> -
>> -    def enter_dispatch_loop(self):
>> -
>> -        # Wait for next IO event or N seconds
>> -        inputs  = [self.get_selection_object()]
>> -        outputs = []
>> -
>> -        while inputs:
>> -
>> -            readable, writable, exceptional = \
>> -            select.select(inputs, outputs, inputs, timeout)
>> -
>> -            if self.get_selection_object() in readable:
>> -                self.dispatch()
>> -            else:
>> -
>> -                interfaces = netifaces.interfaces()
>> -
>> -                # Add objects for new interfaces
>> -                for interface in interfaces:
>> -                    if not
>> immoi.get_object_no_runtime('interfaceId=%s' % interface,
>> -
>> class_name=interface_class_name):
>> -
>> self.create_rt_object_for_interface(interface)
>> -
>> -                # Go through existing objects
>> -                for mo in InstanceIterator('InterfaceRO'):
>> -                    interface_name =
>> self.get_interface_name_from_dn(mo.dn)
>> -
>> -                    # Remove objects for deleted interfaces
>> -                    if not mo.dn in interfaces:
>> -                        self.delete(mo.dn)
>> -
>> -                    # Update interfaces
>> -                    addresses =
>> netifaces.ifaddresses(interface_name)
>> -
>> -                    ipv4 = None
>> -                    ipv6 = None
>> -
>> -                    if netifaces.AF_INET in addresses:
>> -                        ipv4 = [a['addr'] for a in
>> addresses[netifaces.AF_INET]]
>> -
>> -                    if netifaces.AF_INET6 in addresses:
>> -                        ipv6 = [a['addr'] for a in
>> addresses[netifaces.AF_INET6]]
>> -
>> -                    attributes = {'ipv4Addresses' : ipv4,
>> -                                  'ipv6Addresses' : ipv6}
>> -
>> -                    self.update_runtime_attributes(mo.dn,
>> attributes)
>> -
>> -
>> -if __name__ == "__main__":
>> -
>> -    # Create the implementer
>> -    interface_implementer = InterfaceImplementer()
>> -
>> -    # Enter an infinite select loop
>> -    interface_implementer.enter_dispatch_loop()
>> diff --git a/python/samples/immoi/samples/classes.xml
>> b/python/samples/sample-classes.xml
>> rename from python/samples/immoi/samples/classes.xml
>> rename to python/samples/sample-classes.xml


------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to