예제 #1
0
    def _list_daemons(self,
                      hostname=None,
                      service_name=None,
                      daemon_type=None,
                      daemon_id=None,
                      format='plain',
                      refresh=False):
        completion = self.list_daemons(service_name,
                                       daemon_type,
                                       daemon_id=daemon_id,
                                       host=hostname,
                                       refresh=refresh)
        self._orchestrator_wait([completion])
        raise_if_exception(completion)
        daemons: List[DaemonDescription] = completion.result

        def ukn(s):
            return '<unknown>' if s is None else s

        # Sort the list for display
        daemons.sort(key=lambda s:
                     (ukn(s.daemon_type), ukn(s.hostname), ukn(s.daemon_id)))

        if len(daemons) == 0:
            return HandleCommandResult(stdout="No daemons reported")
        elif format != 'plain':
            data = [s.to_json() for s in daemons]
            return HandleCommandResult(stdout=to_format(data, format))
        else:
            now = datetime.datetime.utcnow()
            table = PrettyTable([
                'NAME', 'HOST', 'STATUS', 'REFRESHED', 'AGE', 'VERSION',
                'IMAGE NAME', 'IMAGE ID', 'CONTAINER ID'
            ],
                                border=False)
            table.align = 'l'
            table.left_padding_width = 0
            table.right_padding_width = 2
            for s in sorted(daemons, key=lambda s: s.name()):
                if s.status_desc:
                    status = s.status_desc
                else:
                    status = {
                        -1: 'error',
                        0: 'stopped',
                        1: 'running',
                        None: '<unknown>'
                    }[s.status]
                if s.status == 1 and s.started:
                    status += ' (%s)' % to_pretty_timedelta(now - s.started)

                table.add_row(
                    (s.name(), ukn(s.hostname), status,
                     nice_delta(now, s.last_refresh,
                                ' ago'), nice_delta(now, s.created),
                     ukn(s.version), ukn(s.container_image_name),
                     ukn(s.container_image_id)[0:12], ukn(s.container_id)))

            return HandleCommandResult(stdout=table.get_string())
예제 #2
0
파일: module.py 프로젝트: prathyushpv/ceph
    def _list_services(self,
                       host=None,
                       svc_type=None,
                       svc_id=None,
                       format='plain',
                       refresh=False):
        # XXX this is kind of confusing for people because in the orchestrator
        # context the service ID for MDS is the filesystem ID, not the daemon ID

        completion = self.describe_service(svc_type,
                                           svc_id,
                                           host,
                                           refresh=refresh)
        self._orchestrator_wait([completion])
        orchestrator.raise_if_exception(completion)
        services = completion.result

        def ukn(s):
            return '<unknown>' if s is None else s

        # Sort the list for display
        services.sort(key=lambda s: (ukn(s.service_type), ukn(s.nodename),
                                     ukn(s.service_instance)))

        if len(services) == 0:
            return HandleCommandResult(stdout="No services reported")
        elif format == 'json':
            data = [s.to_json() for s in services]
            return HandleCommandResult(stdout=json.dumps(data))
        else:
            now = datetime.datetime.utcnow()
            table = PrettyTable([
                'NAME', 'HOST', 'STATUS', 'REFRESHED', 'VERSION', 'IMAGE NAME',
                'IMAGE ID', 'CONTAINER ID'
            ],
                                border=False)
            table.align = 'l'
            table.left_padding_width = 0
            table.right_padding_width = 1
            for s in sorted(services, key=lambda s: s.name()):
                status = {
                    -1: 'error',
                    0: 'stopped',
                    1: 'running',
                    None: '<unknown>'
                }[s.status]

                if s.last_refresh:
                    age = to_pretty_timedelta(now - s.last_refresh) + ' ago'
                else:
                    age = '-'
                table.add_row((s.name(), ukn(s.nodename), status, age,
                               ukn(s.version), ukn(s.container_image_name),
                               ukn(s.container_image_id)[0:12],
                               ukn(s.container_id)[0:12]))

            return HandleCommandResult(stdout=table.get_string())
예제 #3
0
파일: module.py 프로젝트: lgp2013/ceph
    def _list_services(self,
                       host=None,
                       service_type=None,
                       service_name=None,
                       format='plain',
                       refresh=False):
        completion = self.describe_service(service_type,
                                           service_name,
                                           refresh=refresh)
        self._orchestrator_wait([completion])
        raise_if_exception(completion)
        services = completion.result

        def ukn(s):
            return '<unknown>' if s is None else s

        # Sort the list for display
        services.sort(key=lambda s: (ukn(s.service_name)))

        if len(services) == 0:
            return HandleCommandResult(stdout="No services reported")
        elif format == 'json':
            data = [s.to_json() for s in services]
            return HandleCommandResult(stdout=json.dumps(data))
        else:
            now = datetime.datetime.utcnow()
            table = PrettyTable([
                'NAME', 'RUNNING', 'REFRESHED', 'IMAGE NAME', 'IMAGE ID',
                'SPEC', 'PLACEMENT'
            ],
                                border=False)
            table.align['NAME'] = 'l'
            table.align['RUNNING'] = 'r'
            table.align['REFRESHED'] = 'l'
            table.align['IMAGE NAME'] = 'l'
            table.align['IMAGE ID'] = 'l'
            table.align['SPEC'] = 'l'
            table.align['PLACEMENT'] = 'l'
            table.left_padding_width = 0
            table.right_padding_width = 2
            for s in sorted(services, key=lambda s: s.service_name):
                if s.last_refresh:
                    age = to_pretty_timedelta(now - s.last_refresh) + ' ago'
                else:
                    age = '-'
                table.add_row((
                    s.service_name,
                    '%d/%d' % (s.running, s.size),
                    age,
                    ukn(s.container_image_name),
                    ukn(s.container_image_id)[0:12],
                    'present' if s.spec else '-',
                    s.spec.placement.pretty_str() if s.spec else '-',
                ))

            return HandleCommandResult(stdout=table.get_string())
예제 #4
0
파일: module.py 프로젝트: tpsilva/ceph
    def _list_daemons(self,
                      host=None,
                      daemon_type=None,
                      daemon_id=None,
                      format='plain',
                      refresh=False):
        completion = self.list_daemons(daemon_type,
                                       daemon_id=daemon_id,
                                       host=host,
                                       refresh=refresh)
        self._orchestrator_wait([completion])
        orchestrator.raise_if_exception(completion)
        daemons = completion.result

        def ukn(s):
            return '<unknown>' if s is None else s

        # Sort the list for display
        daemons.sort(key=lambda s:
                     (ukn(s.daemon_type), ukn(s.nodename), ukn(s.daemon_id)))

        if len(daemons) == 0:
            return HandleCommandResult(stdout="No daemons reported")
        elif format == 'json':
            data = [s.to_json() for s in daemons]
            return HandleCommandResult(stdout=json.dumps(data))
        else:
            now = datetime.datetime.utcnow()
            table = PrettyTable([
                'NAME', 'HOST', 'STATUS', 'REFRESHED', 'VERSION', 'IMAGE NAME',
                'IMAGE ID', 'CONTAINER ID'
            ],
                                border=False)
            table.align = 'l'
            table.left_padding_width = 0
            table.right_padding_width = 1
            for s in sorted(daemons, key=lambda s: s.name()):
                status = {
                    -1: 'error',
                    0: 'stopped',
                    1: 'running',
                    None: '<unknown>'
                }[s.status]

                if s.last_refresh:
                    age = to_pretty_timedelta(now - s.last_refresh) + ' ago'
                else:
                    age = '-'
                table.add_row((s.name(), ukn(s.nodename), status, age,
                               ukn(s.version), ukn(s.container_image_name),
                               ukn(s.container_image_id)[0:12],
                               ukn(s.container_id)[0:12]))

            return HandleCommandResult(stdout=table.get_string())
예제 #5
0
파일: module.py 프로젝트: yanghonggang/ceph
    def twoline_progress(self, indent=4):
        """
        e.g.

        - Eating my delicious strudel (since: 30s)
            [===============..............] (remaining: 04m)

        """
        time_remaining = self.estimated_time_remaining()
        if time_remaining:
            remaining = "(remaining: %s)" % (to_pretty_timedelta(
                timedelta(seconds=time_remaining)))
        else:
            remaining = ''
        return "{0} {1}\n{2}{3} {4}".format(self._message,
                                            self.duration_str, " " * indent,
                                            self._progress_str(30), remaining)
예제 #6
0
def nice_delta(now, t, suffix=''):
    if t:
        return to_pretty_timedelta(now - t) + suffix
    else:
        return '-'
예제 #7
0
파일: module.py 프로젝트: yanghonggang/ceph
 def duration_str(self):
     duration = time.time() - self.started_at
     return "(%s)" % (to_pretty_timedelta(timedelta(seconds=duration)))
예제 #8
0
def test_pretty_timedelta(delta: datetime.timedelta, out: str):
    assert mgr_util.to_pretty_timedelta(delta) == out