Esempio n. 1
0
    def generate_charts(self,
                        result=None,
                        keys=None,
                        check=None,
                        timezone='UTC'):
        keys_length = len(keys)
        data_lists = []
        data_lists = [[] for i in range(keys_length)]

        for r in result:
            time = r.get('time') if r.get('time') else r.get('t')
            time = utc_unixtime_to_localtime(time, tz=timezone)

            for i in range(keys_length):
                data = r.get(check) if r.get(check) else r

                key = keys[i].key

                value = data.get(
                    key)  # Gets to the specific key -> cpu: {'steal': 4}
                value = self.format_float(value)

                data_lists[i].append({"x": time, "y": value})

        series = []

        for i in range(keys_length):
            data = [] if len(data_lists[i]) == 0 else data_lists[i]
            chart_colors = select_colors(i)

            metric_type = {'name': keys[i].name, 'data': data, 'unit': '%'}
            metric_type.update(chart_colors)
            series.append(metric_type)

        return series
Esempio n. 2
0
    def get_global_data_after(self,
                              timestamp=None,
                              key=None,
                              enddate=None,
                              check=None,
                              timezone='UTC',
                              filtered_servers=None):
        params = {"time": {"$gte": int(timestamp)}}

        if enddate:
            params['time']["$lte"] = int(enddate)

        keys = {}

        data_lists = {}
        for server in filtered_servers:
            server_id = str(server['_id'])
            keys[server_id] = server.get('name')
            data_lists[server_id] = []

        server_ids_list = [x.get('_id') for x in filtered_servers]
        params['server_id'] = {"$in": server_ids_list}

        result = self.data_collection.find(params).sort('time', self.asc)

        for r in result:
            r_server_id = str(r['server_id'])
            time = r.get('time', 0)
            time = utc_unixtime_to_localtime(time, tz=timezone)

            key = 'used_percent' if check == 'memory' else key

            value = r.get(check, {}).get(key, 0)

            value = self.format_float(value)

            server_list = data_lists.get(r_server_id)
            server_list.append({"x": time, "y": value})

            # Dont display empty lines
            y_axis_sum = sum([x.get('y', 0) for x in data_lists[r_server_id]])
            if y_axis_sum == 0:
                data_lists[r_server_id] = []

        series = []

        for key, name in keys.items():
            _index = list(keys.keys()).index(key)
            data = [] if len(data_lists[key]) == 0 else data_lists[key]
            chart_colors = select_colors(_index)

            metric_type = {'name': name, 'data': data}
            metric_type.update(chart_colors)

            if len(data) > 0:
                series.append(metric_type)

        return series
Esempio n. 3
0
    def get_global_data_after(self, timestamp=None, metric=None, filtered_servers=None, timezone='UTC'):
        gauge = metric.get('gauge')
        key = metric.get('key')
        plugin = metric.get('plugin')

        keys = {}

        data_lists = {}
        for server in filtered_servers:
            server_id = str(server['_id'])
            keys[server_id] = server.get('name')
            data_lists[server_id] = []

        plugins = self.collection.find({'name': plugin})

        for p in plugins:
            p_server_id = str(p.get('server_id'))
            server_list = data_lists.get(p_server_id)


            result = None
            gauge_cursor = self.get_gauge_by_name(plugin=p, name=gauge)
            if gauge_cursor != None:
                if key in gauge_cursor.get('keys'):
                    result = self._get_gauge_data_after_query(timestamp, gauge=gauge_cursor)

            if result:
                for r in result:
                    time = utc_unixtime_to_localtime(r['t'], tz=timezone)
                    value = r.get(key, None)
                    server_list.append({"x": time, "y": value})

        series = []

        for server, server_name in keys.items():
            _index = keys.keys().index(server)
            data = [] if len(data_lists[server]) == 0 else data_lists[server]
            chart_colors = select_colors(_index)

            result = {
                'name': server_name,
                'data': data
            }

            result.update(chart_colors)

            if len(data) > 0:
                series.append(result)


        return series
Esempio n. 4
0
    def get_global_data_after(self,
                              timestamp=None,
                              enddate=None,
                              key=None,
                              timezone='UTC',
                              check=None,
                              filtered_servers=None):
        keys = {}
        data_lists = {}
        process_ids_list = []
        series = []
        server_ids_list = [x.get('_id') for x in filtered_servers]

        filter_proceses_params = {
            'name': key,
            'server': {
                "$in": server_ids_list
            }
        }
        all_processes = self.collection.find(filter_proceses_params)
        for process in all_processes:
            process_id = str(process['_id'])
            name = ''
            server = filter(lambda x: x['_id'] == process['server'],
                            filtered_servers)
            if len(server) > 0:
                name = server[0].get('name')

            keys[process_id] = name
            data_lists[process_id] = []
            process_ids_list.append(process_id)

        params = {"t": {"$gte": int(timestamp)}}
        if enddate:
            params['t']["$lte"] = int(enddate)
        params['server_id'] = {"$in": server_ids_list}

        result = self.data_collection.find(params).sort('t', self.asc)
        for r in result:
            time = r.get('time') if r.get('time') else r.get('t')

            time = utc_unixtime_to_localtime(time, tz=timezone)

            data = r.get('data', [])
            for d in data:
                process_id = str(d['p'])
                if process_id in process_ids_list:
                    time = utc_unixtime_to_localtime(r['t'], tz=timezone)
                    key = 'c' if check == 'cpu' else 'm'

                    value = d.get(key)
                    value = self.format_float(value)

                    data_lists[process_id].append({"x": time, "y": value})

        for key, name in keys.items():
            _index = keys.keys().index(key)
            data = [] if len(data_lists[key]) == 0 else data_lists[key]
            chart_colors = select_colors(_index)

            metric_type = {'name': name, 'data': data}
            metric_type.update(chart_colors)

            if len(data) > 0:
                series.append(metric_type)

        return series
Esempio n. 5
0
    def get_global_device_data_after(self,
                                     timestamp=None,
                                     enddate=None,
                                     check=None,
                                     key=None,
                                     timezone="UTC",
                                     filtered_servers=None):
        params = {"t": {"$gte": int(timestamp)}}

        if enddate:
            params['t']["$lte"] = int(enddate)

        keys = {}
        series = []
        data_lists = {}
        datamodel = volumes_model if check == 'disk' else interfaces_model
        devices = datamodel.get_all_for_servers_list(servers=filtered_servers)

        for device in devices:
            data_collection = datamodel.get_data_collection()
            params['device_id'] = device['_id']
            result = data_collection.find(params).sort('t', self.asc)

            if result.clone().count() > 0:
                device_server_id = device['server_id']
                device_server = None
                for server in filtered_servers:
                    if server['_id'] == device_server_id:
                        device_server = server

                # Server exists
                if device_server != None:
                    _id = str(device['_id'])
                    keys[_id] = u"{server}.{device}".format(
                        server=device_server.get('name', ""),
                        device=device.get('name'))
                    data_lists[_id] = []

                    for r in result:
                        time = utc_unixtime_to_localtime(r.get('t', 0),
                                                         tz=timezone)
                        value = r.get(key, 0)
                        value = self.format_float(value)
                        data_lists[_id].append({"x": time, "y": value})

                # Dont display empty lines
                y_axis_sum = sum([x.get('y', 0) for x in data_lists[_id]])
                if y_axis_sum == 0:
                    data_lists[_id] = []

        for _id, name in keys.items():
            _index = list(keys.keys()).index(_id)
            data = [] if len(data_lists[_id]) == 0 else data_lists[_id]
            chart_colors = select_colors(_index)

            metric_type = {
                'name': name,
                'data': data,
            }
            metric_type.update(chart_colors)

            if len(data) > 0:
                series.append(metric_type)

        return series