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
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
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)
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)