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
