Beispiel #1
0
 def version_comparable(self, executable):
     ''' Returns the detected comparable version given executable '''
     self.lock.acquire()
     try:
         if executable in self._info and self._info[executable] is not None:
             return '%03d%03d%03d' %(int(self._info[executable]['version_major']), \
                                     int(self._info[executable]['version_minor']), \
                                     int(self._info[executable]['version_patch']))
         return None
     finally:
         self.lock.release()
Beispiel #2
0
 def version_comparable(self, executable):
     """ Returns the detected comparable version given executable """
     self.lock.acquire()
     try:
         if executable in self._info and self._info[
                 executable] is not None:
             return "%03d%03d%03d" % (
                 int(self._info[executable]["version_major"]),
                 int(self._info[executable]["version_minor"]),
                 int(self._info[executable]["version_patch"]),
             )
         return None
     finally:
         self.lock.release()
Beispiel #3
0
 def get_filters(self):
     filters = self.DEFAULT_FILTERS.copy()
     filter_field = self.table.get_filter_field()
     filter_string = self.table.get_filter_string()
     filter_action = self.table._meta._filter_action
     if filter_field and filter_string and (
             filter_action.is_api_filter(filter_field)):
         if filter_field in ['size_min', 'size_max']:
             invalid_msg = ('API query is not valid and is ignored: '
                            '%(field)s=%(string)s')
             try:
                 filter_string = builtins.int(
                     float(filter_string) * (units.Mi))
                 if filter_string >= 0:
                     filters[filter_field] = filter_string
                 else:
                     LOG.warning(invalid_msg, {
                         'field': filter_field,
                         'string': filter_string
                     })
             except ValueError:
                 LOG.warning(invalid_msg, {
                     'field': filter_field,
                     'string': filter_string
                 })
         elif (filter_field == 'disk_format'
               and filter_string.lower() == 'docker'):
             filters['disk_format'] = 'raw'
             filters['container_format'] = 'docker'
         else:
             filters[filter_field] = filter_string
     return filters
Beispiel #4
0
 def get_filters(self):
     filters = self.DEFAULT_FILTERS.copy()
     filter_field = self.table.get_filter_field()
     filter_string = self.table.get_filter_string()
     filter_action = self.table._meta._filter_action
     if filter_field and filter_string and (
             filter_action.is_api_filter(filter_field)):
         if filter_field in ['size_min', 'size_max']:
             invalid_msg = ('API query is not valid and is ignored: '
                            '%(field)s=%(string)s')
             try:
                 filter_string = builtins.int(float(filter_string) *
                                              (units.Mi))
                 if filter_string >= 0:
                     filters[filter_field] = filter_string
                 else:
                     LOG.warning(invalid_msg,
                                 {'field': filter_field,
                                  'string': filter_string})
             except ValueError:
                 LOG.warning(invalid_msg,
                             {'field': filter_field,
                              'string': filter_string})
         elif (filter_field == 'disk_format' and
               filter_string.lower() == 'docker'):
             filters['disk_format'] = 'raw'
             filters['container_format'] = 'docker'
         else:
             filters[filter_field] = filter_string
     return filters
Beispiel #5
0
def isodate(now=int(time.time()), utc=False, short=False):
    """
    This function converts seconds since epoch into ISO 8601 timestamp
    """
    if utc:
        my_time_u = time.gmtime(now)
        if short:
            return time.strftime("%Y%m%dT%H%M%SZ", my_time_u)
        else:
            return time.strftime("%Y-%m-%dT%H:%M:%SZ", my_time_u)
    else:
        my_time_l = time.localtime(now)
        my_offset = int(calendar.timegm(my_time_l) - time.mktime(my_time_l))
        offset = "%+03d%02d" % (my_offset / 3600, (abs(my_offset) % 3600) / 60)
        if short:
            return time.strftime("%Y%m%dT%H%M%S", my_time_l) + offset
        else:
            return time.strftime("%Y-%m-%dT%H:%M:%S", my_time_l) + offset
Beispiel #6
0
def isodate(now=int(time.time()), utc=False, short=False):
    """
    This function converts seconds since epoch into ISO 8601 timestamp
    """
    if utc:
        my_time_u = time.gmtime(now)
        if short:
            return time.strftime("%Y%m%dT%H%M%SZ", my_time_u)
        else:
            return time.strftime("%Y-%m-%dT%H:%M:%SZ", my_time_u)
    else:
        my_time_l = time.localtime(now)
        my_offset = int(calendar.timegm(my_time_l) - time.mktime(my_time_l))
        offset = "%+03d%02d" % (my_offset / 3600, (abs(my_offset) % 3600) / 60)
        if short:
            return time.strftime("%Y%m%dT%H%M%S", my_time_l) + offset
        else:
            return time.strftime("%Y-%m-%dT%H:%M:%S", my_time_l) + offset
Beispiel #7
0
def make_boolean(value):
    # purpose: convert an input string into something boolean
    # paramtr: $x (IN): a property value
    # returns: 0 (false) or 1 (true)
    my_val = str(value)
    if (my_val.lower() == "true" or my_val.lower() == "on"
            or my_val.lower() == "yes" or my_val.isdigit() and int(value) > 0):
        return 1

    return 0
Beispiel #8
0
def adjust_type(data_type, value):
    if not value:
        return value
    if data_type == "float":
        new_value = float(value)
    elif data_type == "long":
        new_value = builtins.int(value)
    elif data_type == "integer":
        new_value = int(value)
    else:
        new_value = value
    return new_value
Beispiel #9
0
def write_pid_file(pid_filename, ts=int(time.time())):
    """
    This function writes a pid file with name 'filename' containing
    the current pid and timestamp.
    """
    try:
        PIDFILE = open(pid_filename, "w")
        PIDFILE.write("pid %s\n" % (os.getpid()))
        PIDFILE.write("timestamp %s\n" % (isodate(ts)))
    except IOError:
        logger.error("cannot write PID file %s" % (pid_filename))
    else:
        PIDFILE.close()
Beispiel #10
0
def write_pid_file(pid_filename, ts=int(time.time())):
    """
    This function writes a pid file with name 'filename' containing
    the current pid and timestamp.
    """
    try:
        PIDFILE = open(pid_filename, "w")
        PIDFILE.write("pid %s\n" % (os.getpid()))
        PIDFILE.write("timestamp %s\n" % (isodate(ts)))
    except IOError:
        logger.error("cannot write PID file %s" % (pid_filename))
    else:
        PIDFILE.close()
Beispiel #11
0
def epochdate(timestamp):
    """
    This function converts an ISO timestamp into seconds since epoch
    """

    try:
        # Split date/time and timezone information
        m = parse_iso8601.search(timestamp)
        if m is None:
            logger.warn('unable to match "%s" to ISO 8601' % timestamp)
            return None
        else:
            dt = "%04d-%02d-%02d %02d:%02d:%02d" % (
                int(m.group(1)),
                int(m.group(2)),
                int(m.group(3)),
                int(m.group(4)),
                int(m.group(5)),
                int(m.group(6)),
            )
            tz = m.group(8)

        # my_time = datetime.datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")
        my_time = datetime.datetime(*(time.strptime(dt, "%Y-%m-%d %H:%M:%S")[0:6]))

        if tz.upper() != "Z":
            # no zulu time, has zone offset
            my_offset = datetime.timedelta(
                hours=int(m.group(9)), minutes=int(m.group(10))
            )

            # adjust for time zone offset
            if tz[0] == "-":
                my_time = my_time + my_offset
            else:
                my_time = my_time - my_offset

        # Turn my_time into Epoch format
        return int(calendar.timegm(my_time.timetuple()))

    except:
        logger.warn('unable to parse timestamp "%s"' % timestamp)
        return None
Beispiel #12
0
def epochdate(timestamp):
    """
    This function converts an ISO timestamp into seconds since epoch
    """

    try:
        # Split date/time and timezone information
        m = parse_iso8601.search(timestamp)
        if m is None:
            logger.warn('unable to match "%s" to ISO 8601' % timestamp)
            return None
        else:
            dt = "%04d-%02d-%02d %02d:%02d:%02d" % (
                int(m.group(1)),
                int(m.group(2)),
                int(m.group(3)),
                int(m.group(4)),
                int(m.group(5)),
                int(m.group(6)),
            )
            tz = m.group(8)

        # my_time = datetime.datetime.strptime(dt, "%Y-%m-%d %H:%M:%S")
        my_time = datetime.datetime(*(time.strptime(dt, "%Y-%m-%d %H:%M:%S")[0:6]))

        if tz.upper() != "Z":
            # no zulu time, has zone offset
            my_offset = datetime.timedelta(
                hours=int(m.group(9)), minutes=int(m.group(10))
            )

            # adjust for time zone offset
            if tz[0] == "-":
                my_time = my_time + my_offset
            else:
                my_time = my_time - my_offset

        # Turn my_time into Epoch format
        return int(calendar.timegm(my_time.timetuple()))

    except:
        logger.warn('unable to parse timestamp "%s"' % timestamp)
        return None
Beispiel #13
0
def make_boolean(value):
    # purpose: convert an input string into something boolean
    # paramtr: $x (IN): a property value
    # returns: 0 (false) or 1 (true)
    my_val = str(value)
    if (
        my_val.lower() == "true"
        or my_val.lower() == "on"
        or my_val.lower() == "yes"
        or my_val.isdigit()
        and int(value) > 0
    ):
        return 1

    return 0
from six.moves import builtins

c1 = complex()
d1 = dict()
f1 = float()
i1 = int()
l1 = list()
s1 = str()
t1 = tuple()

c2 = builtins.complex()
d2 = builtins.dict()
f2 = builtins.float()
i2 = builtins.int()
l2 = builtins.list()
s2 = builtins.str()
t2 = builtins.tuple()
Beispiel #15
0
        def find(self, executable, version_arg=None, version_regex=None, path_prepend=None):

            self.lock.acquire()
            try:
                if executable in self._info:
                    if self._info[executable] is None:
                        return None
                    return self._info[executable]

                logger.debug("Trying to detect availability/location of tool: %s"
                             %(executable))

                # initialize the global tool info for this executable
                self._info[executable] = {}
                self._info[executable]['full_path'] = None
                self._info[executable]['version'] = None
                self._info[executable]['version_major'] = None
                self._info[executable]['version_minor'] = None
                self._info[executable]['version_patch'] = None

                # figure out the full path to the executable
                path_entries = os.environ["PATH"].split(":")
                if "" in path_entries:
                    path_entries.remove("")
                # if we have PEGASUS_HOME set, and try to invoke a Pegasus tool, prepend
                if 'PEGASUS_HOME' in os.environ and executable.find("pegasus-") == 0:
                    path_entries.insert(0, os.environ['PEGASUS_HOME'] + '/bin')
                if path_prepend is not None:
                    for entry in path_prepend:
                        path_entries.insert(0, entry)

                # now walk the path
                full_path = None
                for entry in path_entries:
                    full_path = entry + "/" + executable
                    if os.path.isfile(full_path) and os.access(full_path, os.X_OK):
                        break
                    full_path = None

                if full_path == None:
                    logger.info("Command '%s' not found in the current environment"
                                %(executable))
                    self._info[executable] = None
                    return self._info[executable]
                self._info[executable]['full_path'] = full_path

                # version
                if version_regex is None:
                    version = "N/A"
                else:
                    version = backticks(executable + " " + version_arg + " 2>&1")
                    version = version.replace('\n', "")
                    re_version = re.compile(version_regex)
                    result = re_version.search(version)
                    if result:
                        version = result.group(1)
                    self._info[executable]['version'] = version

                # if possible, break up version into major, minor, patch
                re_version = re.compile("([0-9]+)\.([0-9]+)(\.([0-9]+)){0,1}")
                result = re_version.search(version)
                if result:
                    self._info[executable]['version_major'] = int(result.group(1))
                    self._info[executable]['version_minor'] = int(result.group(2))
                    self._info[executable]['version_patch'] = result.group(4)
                if self._info[executable]['version_patch'] is None or \
                   self._info[executable]['version_patch'] == "":
                    self._info[executable]['version_patch'] = None
                else:
                    self._info[executable]['version_patch'] = \
                        int(self._info[executable]['version_patch'])

                logger.info("Tool found: %s   Version: %s   Path: %s"
                            % (executable, version, full_path))
                return self._info[executable]['full_path']
            finally:
                self.lock.release()
Beispiel #16
0
def pid_running(filename):
    """
    This function takes a file containing a single line in the format
    of pid 'xxxxxx'. If the file exists, it reads the line and checks if
    the process id 'xxxxxx' is still running. The function returns True
    if the process is still running, or False if not.
    """
    # First, we check if file exists
    if os.access(filename, os.F_OK):
        try:
            # Open pid file
            PIDFILE = open(filename, "r")

            # Look for pid line
            for line in PIDFILE:
                line = line.strip()
                if line.startswith("pid"):
                    # Get pid
                    my_pid = int(line.split(" ")[1])
                    # We are done with this file, just close it...
                    PIDFILE.close()
                    # Now let's see if process still around...
                    try:
                        os.kill(my_pid, 0)
                    except OSError as err:
                        if err.errno == errno.ESRCH:
                            # pid is not found, monitoring cannot be running
                            logger.info("pid %d not running anymore..." % (my_pid))
                            return False
                        elif err.errno == errno.EPERM:
                            # pid cannot be killed because we don't have permission
                            logger.debug(
                                "no permission to talk to pid %d..." % (my_pid)
                            )
                            return True
                        else:
                            logger.warning(
                                "unknown error while sending signal to pid %d"
                                % (my_pid)
                            )
                            logger.warning(traceback.format_exc())
                            return True
                    except:
                        logger.warning(
                            "unknown error while sending signal to pid %d" % (my_pid)
                        )
                        logger.warning(traceback.format_exc())
                        return True
                    else:
                        logger.debug("pid %d still running..." % (my_pid))
                        return True

            logger.warning(
                "could not find pid line in file %s. continuing..." % (filename)
            )

            # Don't forget to close file
            PIDFILE.close()
        except:
            logger.warning("error processing file %s. continuing..." % (filename))
            logger.warning(traceback.format_exc())

        return True

    # PID file doesn't exist
    return False
Beispiel #17
0
        def version_comparable(self, executable):
            ''' Returns the detected comparable version given executable '''
            self.lock.acquire()
            try:
                if executable in self._info and self._info[executable] is not None:
                    return '%03d%03d%03d' %(int(self._info[executable]['version_major']), \
                                            int(self._info[executable]['version_minor']), \
                                            int(self._info[executable]['version_patch']))
                return None
            finally:
                self.lock.release()



if __name__ == "__main__":
    current_time = int(time.time())
    print("Testing isodate() function from now=%lu" % (current_time))
    print(" long local timestamp:", isodate(now=current_time))
    print("   long utc timestamp:", isodate(now=current_time, utc=True))
    print("short local timestamp:", isodate(now=current_time, short=True))
    print("  short utc timestamp:", isodate(now=current_time, utc=True, short=True))
    print()
    print("Testing epochdate() function from above ISO dates")
    print(" long local epochdate:", epochdate(isodate(now=current_time)))
    print("   long utc epochdate:", epochdate(isodate(now=current_time, utc=True)))
    print("short local timestamp:", epochdate(isodate(now=current_time, short=True)))
    print(
        "  short utc timestamp:",
        epochdate(isodate(now=current_time, utc=True, short=True)),
    )
    print()
Beispiel #18
0
    # returns: 0 (false) or 1 (true)
    my_val = str(value)
    if (
        my_val.lower() == "true"
        or my_val.lower() == "on"
        or my_val.lower() == "yes"
        or my_val.isdigit()
        and int(value) > 0
    ):
        return 1

    return 0


if __name__ == "__main__":
    current_time = int(time.time())
    print("Testing isodate() function from now=%lu" % (current_time))
    print(" long local timestamp:", isodate(now=current_time))
    print("   long utc timestamp:", isodate(now=current_time, utc=True))
    print("short local timestamp:", isodate(now=current_time, short=True))
    print("  short utc timestamp:", isodate(now=current_time, utc=True, short=True))
    print()
    print("Testing epochdate() function from above ISO dates")
    print(" long local epochdate:", epochdate(isodate(now=current_time)))
    print("   long utc epochdate:", epochdate(isodate(now=current_time, utc=True)))
    print("short local timestamp:", epochdate(isodate(now=current_time, short=True)))
    print(
        "  short utc timestamp:",
        epochdate(isodate(now=current_time, utc=True, short=True)),
    )
    print()
Beispiel #19
0
def pid_running(filename):
    """
    This function takes a file containing a single line in the format
    of pid 'xxxxxx'. If the file exists, it reads the line and checks if
    the process id 'xxxxxx' is still running. The function returns True
    if the process is still running, or False if not.
    """
    # First, we check if file exists
    if os.access(filename, os.F_OK):
        try:
            # Open pid file
            PIDFILE = open(filename, "r")

            # Look for pid line
            for line in PIDFILE:
                line = line.strip()
                if line.startswith("pid"):
                    # Get pid
                    my_pid = int(line.split(" ")[1])
                    # We are done with this file, just close it...
                    PIDFILE.close()
                    # Now let's see if process still around...
                    try:
                        os.kill(my_pid, 0)
                    except OSError as err:
                        if err.errno == errno.ESRCH:
                            # pid is not found, monitoring cannot be running
                            logger.info("pid %d not running anymore..." % (my_pid))
                            return False
                        elif err.errno == errno.EPERM:
                            # pid cannot be killed because we don't have permission
                            logger.debug(
                                "no permission to talk to pid %d..." % (my_pid)
                            )
                            return True
                        else:
                            logger.warning(
                                "unknown error while sending signal to pid %d"
                                % (my_pid)
                            )
                            logger.warning(traceback.format_exc())
                            return True
                    except:
                        logger.warning(
                            "unknown error while sending signal to pid %d" % (my_pid)
                        )
                        logger.warning(traceback.format_exc())
                        return True
                    else:
                        logger.debug("pid %d still running..." % (my_pid))
                        return True

            logger.warning(
                "could not find pid line in file %s. continuing..." % (filename)
            )

            # Don't forget to close file
            PIDFILE.close()
        except:
            logger.warning("error processing file %s. continuing..." % (filename))
            logger.warning(traceback.format_exc())

        return True

    # PID file doesn't exist
    return False