def versionBehind(self):
     if not self.dmd.availableVersion:
         return False
     if Version.parse('Zenoss ' +
                      self.dmd.availableVersion) > self.getZenossVersion():
         return True
     return False
示例#2
0
    def save_return_payload(self, returnPayload):
        '''
        Process and save the data returned from the callhome server. This
        always includes versioning and crypto key changes, and may include
        other data to be processed by plugins to the IReturnPayloadProcessor
        interface.
        '''
        try:
            returnPayload = zlib.decompress(
                base64.urlsafe_b64decode(returnPayload))
            returnPayload = json.loads(returnPayload)
        except:
            logger.debug('Error decoding return payload from server')
            return

        if all(x in returnPayload
               for x in ('currentPublicKey', 'revocationList')):
            # TODO: VERIFY revocation list, and apply
            newPubkey = returnPayload.get('currentPublicKey')
            if self.callHome.publicKey != newPubkey:
                self.callHome.publicKey = newPubkey

        if 'encrypted' in returnPayload:
            base64data = base64.urlsafe_b64decode(
                str(returnPayload.get('encrypted')))
            data = json.loads(decrypt(base64data, self.callHome.symmetricKey))

            if 'compliancereport' in data:
                data['compliancereport']['pdf'] = base64.urlsafe_b64decode(
                    str(data['compliancereport']['pdf']))

            if 'latestVersion' in data:
                # Save the latest version, and send a
                # message if new version available
                self.dmd.lastVersionCheck = long(time.time())
                available = Version.parse('Zenoss ' + data['latestVersion'])
                if (getattr(self.dmd, 'availableVersion', '') !=
                        available.short()):
                    self.dmd.availableVersion = available.short()
                    if self.dmd.About.getZenossVersion() < available:
                        try:
                            import socket
                            zep = getFacade('zep')
                            summary = (
                                'A new version of Zenoss (%s)' +
                                'has been released') % available.short()
                            zep.create(summary, 'Info', socket.getfqdn())
                        except ZepConnectionError:
                            logger.warning("ZEP not running - can't send " +
                                           "new version event")

            # Go through other data in the return payload, and process
            for name, utility in getUtilitiesFor(IReturnPayloadProcessor):
                if name in data:
                    utility.process(self.dmd, data[name])

        self.callHome.lastSuccess = long(time.time())
        self.chs.updateStat('lastSuccess', long(time.time()))
        return
示例#3
0
    def save_return_payload(self, returnPayload):
        '''
        Process and save the data returned from the callhome server. This
        always includes versioning and crypto key changes, and may include
        other data to be processed by plugins to the IReturnPayloadProcessor
        interface.
        '''
        try:
            returnPayload = zlib.decompress(base64.urlsafe_b64decode(
                                                returnPayload))
            returnPayload = json.loads(returnPayload)
        except:
            logger.debug('Error decoding return payload from server')
            return

        if all(x in returnPayload for x in ('currentPublicKey',
                                            'revocationList')):
            # TODO: VERIFY revocation list, and apply
            newPubkey = returnPayload.get('currentPublicKey')
            if self.callHome.publicKey != newPubkey:
                self.callHome.publicKey = newPubkey

        if 'encrypted' in returnPayload:
            base64data = base64.urlsafe_b64decode(str(returnPayload.get(
                                                          'encrypted')))
            data = json.loads(decrypt(base64data, self.callHome.symmetricKey))

            if 'compliancereport' in data:
                data['compliancereport']['pdf'] = base64.urlsafe_b64decode(str(
                                              data['compliancereport']['pdf']))

            if 'latestVersion' in data:
                # Save the latest version, and send a
                # message if new version available
                self.dmd.lastVersionCheck = long(time.time())
                available = Version.parse('Zenoss ' + data['latestVersion'])
                if (getattr(self.dmd, 'availableVersion', '')
                        != available.short()):
                    self.dmd.availableVersion = available.short()
                    if self.dmd.About.getZenossVersion() < available:
                        try:
                            import socket
                            zep = getFacade('zep')
                            summary = ('A new version of Zenoss (%s)' +
                                       'has been released') % available.short()
                            zep.create(summary, 'Info', socket.getfqdn())
                        except ZepConnectionError:
                            logger.warning("ZEP not running - can't send " +
                                           "new version event")

            # Go through other data in the return payload, and process
            for name, utility in getUtilitiesFor(IReturnPayloadProcessor):
                if name in data:
                    utility.process(self.dmd, data[name])

        self.callHome.lastSuccess = long(time.time())
        self.chs.updateStat('lastSuccess', long(time.time()))
        return
示例#4
0
    def determineSteps(self):
        """
        Return a list of steps from self.allSteps that meet the criteria
        for this migrate run
        """
        # Ensure all steps have version numbers
        for step in self.allSteps:
            if step.version == -1:
                raise MigrationFailed("Migration %s does not set "
                                      "the version number" %
                                      step.__class__.__name__)

        # Level was specified
        if self.options.level is not None:
            levelVers = VersionBase.parse('Zenoss ' + self.options.level)
            steps = [s for s in self.allSteps if s.version >= levelVers]

        # Step was specified
        elif self.options.steps:
            import re

            def matches(name):
                for step in self.options.steps:
                    if re.match('.*' + step + '.*', name):
                        return True
                return False

            steps = [s for s in self.allSteps if matches(s.name())]
            if not steps:
                log.error("No steps found that matched '%s'",
                          ', '.join(self.options.steps))
                log.error("Aborting")
                sys.exit(1)
            log.info("Will execute these steps: %s",
                     ', '.join(self.options.steps))

        else:
            currentDbVers = self._currentVersion()
            # The user did not specify steps to be run, so we run the default
            # steps.
            newDbVers = max(self.allSteps, key=lambda x: x.version).version
            if currentDbVers == newDbVers:
                # There are no steps newer than the current db version.
                # By default we rerun the steps for the current version.
                # If --newer was specified then we run nothing.
                if self.options.newer:
                    steps = []
                else:
                    steps = [
                        s for s in self.allSteps if s.version == currentDbVers
                    ]
            else:
                # There are steps newer than the current db version.
                # Run the newer steps.
                steps = [s for s in self.allSteps if s.version > currentDbVers]

        return steps
示例#5
0
    def determineSteps(self):
        """
        Return a list of steps from self.allSteps that meet the criteria
        for this migrate run
        """
        # Ensure all steps have version numbers
        for step in self.allSteps:
            if step.version == -1:
                raise MigrationFailed("Migration %s does not set "
                                      "the version number" %
                                      step.__class__.__name__)

        # Level was specified
        if self.options.level is not None:
            levelVers = VersionBase.parse('Zenoss ' + self.options.level)
            steps = [s for s in self.allSteps
                        if s.version >= levelVers]

        # Step was specified
        elif self.options.steps:
            import re
            def matches(name):
                for step in self.options.steps:
                    if re.match('.*' + step + '.*', name):
                        return True
                return False
            steps = [s for s in self.allSteps if matches(s.name())]
            if not steps:
                log.error("No steps found that matched '%s'",
                           ', '.join(self.options.steps))
                log.error("Aborting")
                sys.exit(1)
            log.info("Will execute these steps: %s",
                     ', '.join(self.options.steps))

        else:
            currentDbVers = self._currentVersion()
            # The user did not specify steps to be run, so we run the default
            # steps.
            newDbVers = max(self.allSteps, key = lambda x:x.version).version
            if currentDbVers == newDbVers:
                # There are no steps newer than the current db version.
                # By default we rerun the steps for the current version.
                # If --newer was specified then we run nothing.
                if self.options.newer:
                    steps = []
                else:
                    steps = [s for s in self.allSteps
                                if s.version == currentDbVers]
            else:
                # There are steps newer than the current db version.
                # Run the newer steps.
                steps = [s for s in self.allSteps
                            if s.version > currentDbVers]

        return steps
    def getErlangVersion(self):
        retVal, output = commands.getstatusoutput('erl -noshell +V')
        version = None

        if not retVal:
            try:
                version = re.findall(r'version (\S+)', output)[0]
            except Exception:
                pass

        return Version.parse("Erlang %s" % version)
示例#7
0
 def _currentVersion(self):
     """
     Return a VersionBase instance representing the version of the database.
     This also does some cleanup of dmd.version in case in is
     nonexistant, empty or set to a float value.
     """
     if not hasattr(self.dmd, 'version') or not self.dmd.version:
         self.dmd.version = 'Zenoss ' + VERSION
     if type(self.dmd.version) == type(1.0):
         self.dmd.version = "Zenoss 0.%f" % self.dmd.version
     v = VersionBase.parse(self.dmd.version)
     v.name = 'Zenoss'
     return v
示例#8
0
 def _currentVersion(self):
     """
     Return a VersionBase instance representing the version of the database.
     This also does some cleanup of dmd.version in case in is
     nonexistant, empty or set to a float value.
     """
     if not hasattr(self.dmd, 'version') or not self.dmd.version:
         self.dmd.version = 'Zenoss ' + VERSION
     if type(self.dmd.version) == type(1.0):
         self.dmd.version = "Zenoss 0.%f" % self.dmd.version
     v = VersionBase.parse(self.dmd.version)
     v.name = 'Zenoss'
     return v
示例#9
0
def version_check(dmd):
    params = urlencode({'product': dmd.getProductName()})
    try:
        httpreq = urllib2.urlopen(VERSION_CHECK_URL, params, _URL_TIMEOUT)
        returnPayload = json.loads(httpreq.read())
    except Exception as e:
        logger.warning('Error retrieving version from callhome server: %s', e)
    else:
        available = Version.parse('Zenoss ' + returnPayload['latest'])
        version = available.short()
        dmd.lastVersionCheck = long(time.time())
        if getattr(dmd, 'availableVersion', '') != version:
            dmd.availableVersion = version
示例#10
0
 def getEarliestAppropriateStepVersion(self, codeVers=None):
     """
     Return a Version instance that represents the earliest version
     of migrate step appropriate to run with this code base.
     The earliest version is basically the first sprint/alpha release
     for the current minor version.
     codeVers represents the current version of the code.  It exists
     for testing purposes and should usually not be passed in.
     """
     if codeVers is None:
         codeVers = VersionBase.parse('Zenoss %s' % VERSION)
     if codeVers.micro >= 70:
         # We are in a dev/beta release.  Anything back through the start
         # of this dev/beta cycle is appropriate.
         earliestAppropriate = Version(codeVers.major, codeVers.minor, 70)
     elif codeVers.minor > 0:
         # We are in a regular release that is not a  N.0 version.
         # Anything back through the previous dev/beta cycle is
         # appropriate
         earliestAppropriate = Version(codeVers.major, codeVers.minor - 1,
                                       70)
     else:
         # This is a X.0.Y release.  This is tough because we don't know
         # what the minor version was for the last release of version X-1.
         # We take the reasonable guess that the last version of X-1 that
         # we see migrate steps for was indeed the last minor release
         # of X-1.
         beforeThis = Version(codeVers.major)
         # self.allSteps is ordered by version, so just look back through
         # all steps for the first one that predates beforeThis.
         for s in reversed(self.allSteps):
             if s.version < beforeThis:
                 lastPrevious = s.version
                 break
         else:
             # We couldn't find any migrate step that predates codeVers.
             # Something is wrong, this should never happen.
             raise MigrationFailed('Unable to determine the appropriate '
                                   'migrate script versions.')
         if lastPrevious.micro >= 70:
             earliestAppropriate = Version(lastPrevious.major,
                                           lastPrevious.minor, 70)
         else:
             earliestAppropriate = Version(lastPrevious.major,
                                           lastPrevious.minor - 1, 70)
     return earliestAppropriate
示例#11
0
 def getEarliestAppropriateStepVersion(self, codeVers=None):
     """
     Return a Version instance that represents the earliest version
     of migrate step appropriate to run with this code base.
     The earliest version is basically the first sprint/alpha release
     for the current minor version.
     codeVers represents the current version of the code.  It exists
     for testing purposes and should usually not be passed in.
     """
     if codeVers is None:
         codeVers = VersionBase.parse('Zenoss %s' % VERSION)
     if codeVers.micro >= 70:
         # We are in a dev/beta release.  Anything back through the start
         # of this dev/beta cycle is appropriate.
         earliestAppropriate = Version(codeVers.major, codeVers.minor, 70)
     elif codeVers.minor > 0:
         # We are in a regular release that is not a  N.0 version.
         # Anything back through the previous dev/beta cycle is
         # appropriate
         earliestAppropriate = Version(codeVers.major, codeVers.minor-1, 70)
     else:
         # This is a X.0.Y release.  This is tough because we don't know
         # what the minor version was for the last release of version X-1.
         # We take the reasonable guess that the last version of X-1 that
         # we see migrate steps for was indeed the last minor release
         # of X-1.
         beforeThis = Version(codeVers.major)
         # self.allSteps is ordered by version, so just look back through
         # all steps for the first one that predates beforeThis.
         for s in reversed(self.allSteps):
             if s.version < beforeThis:
                 lastPrevious = s.version
                 break
         else:
             # We couldn't find any migrate step that predates codeVers.
             # Something is wrong, this should never happen.
             raise MigrationFailed('Unable to determine the appropriate '
                 'migrate script versions.')
         if lastPrevious.micro >= 70:
             earliestAppropriate = Version(lastPrevious.major,
                     lastPrevious.minor, 70)
         else:
             earliestAppropriate = Version(lastPrevious.major,
                     lastPrevious.minor-1, 70)
     return earliestAppropriate
示例#12
0
    def getControlCenterVersion(self):
        """
        This is intended to run from within a container.
        """
        version = Version('ControlCenter')
        if os.path.exists('/serviced/serviced'):
            try:
                # Note the port given below is not used when getting the version, but overrides the
                # SERVICED_UI_PORT env variable that can cause it to fail cli parameter validation.
                output = subprocess.check_output(
                    ['/serviced/serviced', '--uiport', ':1', 'version'])
                for line in output.split('\n'):
                    splitLine = line.split()
                    if splitLine[0] == 'Version:':
                        version = Version.parse('ControlCenter {}'.format(
                            splitLine[1]))
                        break
            except subprocess.CalledProcessError as e:
                pass

        return version
示例#13
0
 def getZenossVersion(self):
     from Products.ZenModel.ZVersion import VERSION
     return Version.parse("Zenoss %s" % VERSION)
示例#14
0
 def getRabbitMQVersion(self):
     from Products.ZenUtils.qverify import ZenAmqp
     return Version.parse("RabbitMQ %s" % ZenAmqp().getVersion())
示例#15
0
 def getWmiVersion(self):
     from pysamba.version import VERSION
     return Version.parse('Wmi %s ' % VERSION)
示例#16
0
 def getPyNetSnmpVersion(self):
     from pynetsnmp.version import VERSION
     return Version.parse('PyNetSnmp %s ' % VERSION)
示例#17
0
 def getNetSnmpVersion(self):
     from pynetsnmp.netsnmp import lib
     return Version.parse('NetSnmp %s ' % lib.netsnmp_get_version())
from Products.Zuul.form import schema
from Products.Zuul.interfaces.component import IComponentInfo
from Products.Zuul.interfaces.template import IRRDDataSourceInfo

# ZuulMessageFactory is the translation layer. You will see strings intended to
# been seen in the web interface wrapped in _t(). This is so that these strings
# can be automatically translated to other languages.
from Products.Zuul.utils import ZuulMessageFactory as _t

# In Zenoss 3 we mistakenly mapped TextLine to Zope's multi-line text
# equivalent and Text to Zope's single-line text equivalent. This was
# backwards so we flipped their meanings in Zenoss 4. The following block of
# code allows the ZenPack to work properly in Zenoss 3 and 4.

# Until backwards compatibility with Zenoss 3 is no longer desired for your
# ZenPack it is recommended that you use "SingleLineText" and "MultiLineText"
# instead of schema.TextLine or schema.Text.
from Products.ZenModel.ZVersion import VERSION as ZENOSS_VERSION
from Products.ZenUtils.Version import Version

if Version.parse("Zenoss %s" % ZENOSS_VERSION) >= Version.parse("Zenoss 4"):
    SingleLineText = schema.TextLine
    MultiLineText = schema.Text
else:
    SingleLineText = schema.Text
    MultiLineText = schema.TextLine


class IJuniperCardInfo(IComponentInfo):
    pass
from Products.Zuul.interfaces import IInfo, IComponentInfo
from Products.Zuul.form import schema
from Products.Zuul.utils import ZuulMessageFactory as _t

from Products.Zuul.interfaces import IFacade
from Products.Zuul.interfaces import IDeviceInfo

from Products.ZenModel.ZVersion import VERSION as ZENOSS_VERSION
from Products.ZenUtils.Version import Version

if Version.parse('Zenoss %s' % ZENOSS_VERSION) >= Version.parse('Zenoss 4'):
    SingleLineText = schema.TextLine
    MultiLineText = schema.Text
else:
    SingleLineText = schema.Text
    MultiLineText = schema.TextLine

class ISLAFacade(IFacade):
    def manage_delSLAs(self, rttIndex, deviceIp, community):
        '''Delete a SLA on a host'''


    def manage_writeMemSLAs(self, deviceIp, community):
        '''Write mem on a host'''


    def manage_addTcpSLAs(self, newId, rttIndex, deviceIp, community, rttMonEchoAdminTargetAddress, rttMonEchoAdminTargetPort, rttMonScheduleAdminRttStartTime=1, rttMonCtrlAdminOwner='zenoss'):
        '''Add a SLA to this SLA host'''


    def manage_addJitterSLAs(self, newId, rttIndex, deviceIp, community, rttMonEchoAdminTargetAddress, rttMonEchoAdminTargetPort, rttMonEchoAdminInterval=60, rttMonEchoAdminNumPackets=100, rttMonScheduleAdminRttStartTime=1, rttMonCtrlAdminOwner='zenoss'):
示例#20
0
 def getZenossVersionAndBuild(self):
     from Products.ZenModel.ZVersion import VERSION, BUILD_NUMBER
     return Version.parse("Zenoss %s %s" % (VERSION, BUILD_NUMBER))
from Products.Zuul.form import schema
from Products.Zuul.interfaces.component import IComponentInfo
from Products.Zuul.utils import ZuulMessageFactory as _t


# In Zenoss 3 we mistakenly mapped TextLine to Zope's multi-line text
# equivalent and Text to Zope's single-line text equivalent. This was
# backwards so we flipped their meanings in Zenoss 4. The following block of
# code allows the ZenPack to work properly in Zenoss 3 and 4.

# Until backwards compatibility with Zenoss 3 is no longer desired for your
# ZenPack it is recommended that you use "SingleLineText" and "MultiLineText"
# instead of schema.TextLine or schema.Text.
from Products.ZenModel.ZVersion import VERSION as ZENOSS_VERSION
from Products.ZenUtils.Version import Version
if Version.parse('Zenoss %s' % ZENOSS_VERSION) >= Version.parse('Zenoss 4'):
    SingleLineText = schema.TextLine
    MultiLineText = schema.Text
else:
    SingleLineText = schema.Text
    MultiLineText = schema.TextLine


class IRabbitMQNodeInfo(IComponentInfo):
    vhostCount = schema.Int(title=_t(u"VHost Count"))
    exchangeCount = schema.Int(title=_t(u"Exchange Count"))
    queueCount = schema.Int(title=_t(u"Queue Count"))


class IRabbitMQVHostInfo(IComponentInfo):
    rabbitmq_node = schema.Entity(title=_t(u"Node"))
 def isVersion4(self):
     '''detect Zenoss version'''
     from Products.ZenUtils.Version import Version
     if Version.parse('Zenoss ' + ZENOSS_VERSION) >= Version.parse('Zenoss 4'): return True
     return False