コード例 #1
0
 def _on_stats_callback(self, data):
     results = {}
     datapoints = {}
     for result in data.get('results', []):
         for series in result.get('series', []):
             # Get machine_id in order to groub results by it.
             cpu = series.get('tags', {}).get('cpu')
             if not cpu:
                 log.error('%s: no cpu', self.__class__.__name__)
                 continue
             machine_id = series.get('tags', {}).get('machine_id')
             if not machine_id:
                 log.error('%s: no machine_id', self.__class__.__name__)
                 continue
             # Get datapoints.
             if not datapoints.get(machine_id):
                 datapoints[machine_id] = {}
             for value in series.get('values', []):
                 if value[1]:
                     timestamp = iso_to_seconds(value[0])
                     if not datapoints[machine_id].get(timestamp):
                         datapoints[machine_id][timestamp] = set()
                     datapoints[machine_id][timestamp].add(cpu)
     for machine_id, points in datapoints.items():
         if not results.get(machine_id):
             results[machine_id] = {'datapoints': []}
         for timestamp, cpus in points.items():
             results[machine_id]['datapoints'].append(((len(cpus),
                                                        int(timestamp))))
     return results
コード例 #2
0
ファイル: handlers.py プロジェクト: ghoul008/mist.api
 def _on_stats_callback(self, data):
     """Process series returned by InfluxDB."""
     results = {}
     for result in data.get('results', []):
         if result.get('error'):
             raise BadRequestError(result['error'])
         for series in result.get('series', []):
             # Get series name and columns.
             measurement = series.get('name', self.measurement)
             columns = series.get('columns', [])
             # Get tags, if exist.
             tags = '.'.join([
                 '%s=%s' % (key, val)
                 for key, val in series.get('tags', {}).items()
             ])
             for value in series.get('values', []):
                 timestamp = iso_to_seconds(value[0])
                 for index, point in enumerate(value):
                     if index == 0:  # Skip the "time" column.
                         continue
                     if isinstance(point, string_types):  # Skip tags.
                         continue
                     name = measurement.upper()
                     column = columns[index]
                     if tags:
                         id = '%s.%s.%s' % (measurement, tags, column)
                         name += ' %s' % ' '.join(
                             list(series['tags'].values()))
                     else:
                         id = '%s.%s' % (measurement, column)
                     name += ' %s' % column.replace('_', ' ')
                     if id not in results:
                         results[id] = {
                             'name': name,
                             'column': column,
                             'measurement': measurement,
                             'datapoints': [],
                             'max_value': None,
                             'min_value': None,
                             'priority': 0,
                             'unit': '',
                         }
                     results[id]['datapoints'].append(((point, timestamp)))
     return results
コード例 #3
0
 def _on_stats_callback(self, data):
     results = {}
     for result in data.get('results', []):
         for series in result.get('series', []):
             # Get series name and columns.
             measurement = series.get('name', self.measurement)
             columns = series.get('columns', [])
             # Get machine_id in order to groub results by it.
             machine_id = series.get('tags', {}).get('machine_id')
             if not machine_id:
                 log.error('%s: no machine_id', self.__class__.__name__)
                 continue
             # Get datapoints.
             for value in series.get('values', []):
                 timestamp = iso_to_seconds(value[0])
                 for index, point in enumerate(value):
                     if index == 0:
                         continue
                     column = columns[index]
                     name = measurement.upper()
                     name += ' %s' % column.replace('_', ' ')
                     if machine_id not in results:
                         results[machine_id] = {
                             'id': '%s.%s' % (measurement, column),
                             'name': machine_id,
                             'column': column,
                             'measurement': measurement,
                             'datapoints': [],
                             'max_value': None,
                             'min_value': None,
                             'priority': 0,
                             'unit': '',
                         }
                     results[machine_id]['datapoints'].append((
                         (point,
                          int(timestamp))))
     return results