Exemplo n.º 1
0
    def _render_latest_data(self):
        """Render the latest data with sparkline for each timeseries."""
        date = tslib.date_from_utc_ts(self._computation.last_logical_ts)
        print('\033[K\rAt {date} (@{resolution}, Δ: {lag}):'.format(
            date=white(self._render_date(date), bold=True),
            resolution=tslib.render_delta(self._computation.resolution)
            if self._computation.resolution else '-',
            lag=tslib.render_delta_from_now(date)))

        if not len(self._sparks):
            print('(no data)')
            return 2

        for tsid, spark in self._sparks.items():
            metadata = self._computation.get_metadata(tsid)
            print(u'\033[K\r{repr:<60}: [{spark:10s}] '.format(
                repr=utils.timeseries_repr(metadata) or '',
                spark=self._render_spark_line(spark)),
                  end='')
            value = spark[-1]
            if type(value) == int:
                print('\033[;1m{0:>10d}\033[;0m'.format(value))
            elif type(value) == float:
                print('\033[;1m{0:>10.2f}\033[;0m'.format(value))
            else:
                print('{:>10s}'.format('-'))

        return len(self._sparks) + 1
Exemplo n.º 2
0
    def _render_latest_data(self):
        """Render the latest data with sparkline for each timeseries."""
        date = tslib.date_from_utc_ts(self._computation.last_logical_ts)
        print('\033[K\rAt {date} (@{resolution}, Δ: {lag}):'.format(
            date=white(self._render_date(date), bold=True),
            resolution=tslib.render_delta(self._computation.resolution)
            if self._computation.resolution else '-',
            lag=tslib.render_delta_from_now(date)))

        if not len(self._sparks):
            print('(no data)')
            return 2

        for tsid, spark in self._sparks.items():
            metadata = self._computation.get_metadata(tsid)
            print(u'\033[K\r{repr:<60}: [{spark:10s}] '
                  .format(repr=utils.timeseries_repr(metadata) or '',
                          spark=self._render_spark_line(spark)),
                  end='')
            value = spark[-1]
            if type(value) == int:
                print('\033[;1m{0:>10d}\033[;0m'.format(value))
            elif type(value) == float:
                print('\033[;1m{0:>10.2f}\033[;0m'.format(value))
            else:
                print('{:>10s}'.format('-'))

        return len(self._sparks) + 1
Exemplo n.º 3
0
    def _render_latest_events(self):
        """Render the latest events emitted by the computation.

        TODO(mpetazzoni): render custom events/alert events differently and
        support alert event schema v3.
        """
        print('\nEvents:')

        def maybe_json(v):
            if isinstance(v, six.string_types):
                return json.loads(v)
            return v

        for event in self._events:
            ets = self._computation.get_metadata(event.tsid)
            contexts = json.loads(ets.get('sf_detectInputContexts', '{}'))

            values = maybe_json(event.properties.get('inputs', '{}'))
            values = ' | '.join([
                u'{name} ({key}): {value}'.format(
                    name=white(contexts[k].get('identifier', k)),
                    key=','.join([
                        u'{0}:{1}'.format(dim_name, dim_value)
                        for dim_name, dim_value in v.get('key', {}).items()
                    ]),
                    value=v['value']) for k, v in values.items()
            ])

            date = tslib.date_from_utc_ts(event.timestamp_ms)
            is_now = event.properties['is']

            print(u' {mark} {date} [{incident}]: {values}'.format(
                mark=green(u'✓') if is_now == 'ok' else red(u'✗'),
                date=white(self._render_date(date), bold=True),
                incident=event.properties['incidentId'],
                values=values))

        return 2 + len(self._events)
Exemplo n.º 4
0
    def _render_latest_events(self):
        """Render the latest events emitted by the computation.

        TODO(mpetazzoni): render custom events/alert events differently and
        support alert event schema v3.
        """
        print('\nEvents:')

        def maybe_json(v):
            if isinstance(v, six.string_types):
                return json.loads(v)
            return v

        for event in self._events:
            ets = self._computation.get_metadata(event.tsid)
            contexts = json.loads(ets.get('sf_detectInputContexts', '{}'))

            values = maybe_json(event.properties.get('inputs', '{}'))
            values = ' | '.join([
                u'{name} ({key}): {value}'.format(
                    name=white(contexts[k].get('identifier', k)),
                    key=','.join([u'{0}:{1}'.format(dim_name, dim_value)
                                  for dim_name, dim_value
                                  in v.get('key', {}).items()]),
                    value=v['value'])
                for k, v in values.items()])

            date = tslib.date_from_utc_ts(event.timestamp_ms)
            is_now = event.properties['is']

            print(u' {mark} {date} [{incident}]: {values}'
                  .format(mark=green(u'✓') if is_now == 'ok' else red(u'✗'),
                          date=white(self._render_date(date), bold=True),
                          incident=event.properties['incidentId'],
                          values=values))

        return 2 + len(self._events)