def metric_recordings_deleted(self, bbb_api_latency_metric):
     logging.debug("Requesting via API recordings deleted data")
     metric = GaugeMetricFamily('bbb_recordings_deleted', "Total number of BigBlueButton recordings deleted")
     recording_deleted_data, recording_deleted_latency = execution_duration(api.get_recordings)("deleted")
     metric.add_metric([], len(recording_deleted_data))
     self.histogram_data_recording_deleted_latency.add(recording_deleted_latency)
     bbb_api_latency_metric.add_metric(["getRecordings", "state=deleted"],
                                       self.histogram_data_recording_deleted_latency.get_buckets(),
                                       self.histogram_data_recording_deleted_latency.sum)
     return metric
    def metric_recordings_processing(self, bbb_api_latency_metric):
        logging.debug("Requesting via API recordings processing data")
        histogram = GaugeMetricFamily('bbb_recordings_processing', "Total number of BigBlueButton recordings processing")
        recording_processing_data, recording_processing_latency = execution_duration(api.get_recordings)("processing")
        histogram.add_metric([], len(recording_processing_data))
        self.histogram_data_recording_processing_latency.add(recording_processing_latency)
        bbb_api_latency_metric.add_metric(["getRecordings", "state=processing"],
                                          self.histogram_data_recording_processing_latency.get_buckets(),
                                          self.histogram_data_recording_processing_latency.sum)

        return histogram
Exemple #3
0
    def collect(self):
        logging.info("Collecting metrics from BigBlueButton API")

        logging.debug("Requesting via API meetings data")
        meetings, meetings_data_latency = execution_duration(
            api.get_meetings)()

        bbb_api_latency = HistogramMetricFamily(
            'bbb_api_latency',
            "BigBlueButton API call latency",
            labels=['endpoint', 'parameters'])
        self.histogram_data_meetings_latency.add(meetings_data_latency)
        bbb_api_latency.add_metric(
            ["getMeetings", ""],
            self.histogram_data_meetings_latency.get_buckets(),
            self.histogram_data_meetings_latency.sum)

        yield self.metric_meetings(meetings)
        yield self.metric_participants(meetings)
        yield self.metric_meetings_listeners(meetings)
        yield self.metric_meetings_voice_participants(meetings)
        yield self.metric_meetings_video_participants(meetings)

        yield self.metric_meetings_participant_clients(meetings)

        if settings.RECORDINGS_METRICS_ENABLE:
            yield self.metric_recordings_processing(bbb_api_latency)
            yield self.metric_recordings_processed_data(bbb_api_latency)
            yield self.metric_recordings_published(bbb_api_latency)
            yield self.metric_recordings_unpublished(bbb_api_latency)
            yield self.metric_recordings_deleted(bbb_api_latency)

        yield bbb_api_latency

        bbb_api_up = GaugeMetricFamily(
            'bbb_api_up', "1 if BigBlueButton API is responding 0 otherwise")
        bbb_api_up.add_metric([], 1 if settings._api_up else 0)

        yield bbb_api_up

        yield self.metric_participants_histogram(meetings)
        yield self.metric_listeners_histogram(meetings)
        yield self.metric_voice_participants_histogram(meetings)
        yield self.metric_video_participants_histogram(meetings)

        bbb_exporter = GaugeMetricFamily("bbb_exporter",
                                         "BigBlueButton Exporter version",
                                         labels=["version"])
        bbb_exporter.add_metric([settings.VERSION], 1)
        yield bbb_exporter

        logging.info("Finished collecting metrics from BigBlueButton API")
Exemple #4
0
    def collect(self):
        logging.info("Collecting metrics from BigBlueButton API")

        logging.debug("Requesting via API meetings data")
        meetings, meetings_data_latency = execution_duration(
            api.get_meetings)()

        no_meetings = len(meetings)
        no_participants = reduce(
            lambda total, meeting: total + int(meeting['participantCount']),
            meetings, 0)
        no_listeners = reduce(
            lambda total, meeting: total + int(meeting['listenerCount']),
            meetings, 0)
        no_voice_participants = reduce(
            lambda total, meeting: total + int(meeting['voiceParticipantCount']
                                               ), meetings, 0)
        no_video_participants = reduce(
            lambda total, meeting: total + int(meeting['videoCount']),
            meetings, 0)
        participants_by_client = self._get_participant_count_by_client(
            meetings)

        bbb_api_latency = HistogramMetricFamily(
            'bbb_api_latency',
            "BigBlueButton API call latency",
            labels=['endpoint', 'parameters'])
        self.histogram_data_meetings_latency.add(meetings_data_latency)
        bbb_api_latency.add_metric(
            ["getMeetings", ""],
            self.histogram_data_meetings_latency.get_buckets(),
            self.histogram_data_meetings_latency.sum)

        bbb_meetings = GaugeMetricFamily('bbb_meetings',
                                         "Number of BigBlueButton meetings")
        bbb_meetings.add_metric([], no_meetings)
        yield bbb_meetings

        bbb_meetings_participants = GaugeMetricFamily(
            'bbb_meetings_participants',
            "Total number of participants in all BigBlueButton meetings")
        bbb_meetings_participants.add_metric([], no_participants)
        yield bbb_meetings_participants

        bbb_meetings_listeners = GaugeMetricFamily(
            'bbb_meetings_listeners',
            "Total number of listeners in all BigBlueButton meetings")
        bbb_meetings_listeners.add_metric([], no_listeners)
        yield bbb_meetings_listeners

        bbb_meetings_voice_participants = GaugeMetricFamily(
            'bbb_meetings_voice_participants',
            "Total number of voice participants in all BigBlueButton "
            "meetings")
        bbb_meetings_voice_participants.add_metric([], no_voice_participants)
        yield bbb_meetings_voice_participants

        bbb_meetings_video_participants = GaugeMetricFamily(
            'bbb_meetings_video_participants',
            "Total number of video participants in all BigBlueButton "
            "meetings")

        bbb_meetings_video_participants.add_metric([], no_video_participants)
        yield bbb_meetings_video_participants

        bbb_meetings_participant_clients = GaugeMetricFamily(
            'bbb_meetings_participant_clients',
            "Total number of participants in all BigBlueButton "
            "meetings by client",
            labels=["type"])
        for client, num in participants_by_client.items():
            bbb_meetings_participant_clients.add_metric([client.lower()], num)
        yield bbb_meetings_participant_clients

        logging.debug("Requesting via API recordings processing data")
        bbb_recordings_processing = GaugeMetricFamily(
            'bbb_recordings_processing',
            "Total number of BigBlueButton recordings processing")
        recording_processing_data, recording_processing_latency = execution_duration(
            api.get_recordings)("processing")
        bbb_recordings_processing.add_metric([],
                                             len(recording_processing_data))
        self.histogram_data_recording_processing_latency.add(
            recording_processing_latency)
        bbb_api_latency.add_metric(
            ["getRecordings", "state=processing"],
            self.histogram_data_recording_processing_latency.get_buckets(),
            self.histogram_data_recording_processing_latency.sum)
        yield bbb_recordings_processing

        logging.debug("Requesting via API recordings processed data")
        recordings_processed_data = GaugeMetricFamily(
            'bbb_recordings_processed',
            "Total number of BigBlueButton recordings processed")
        recording_processed_data, recording_processed_latency = execution_duration(
            api.get_recordings)("processed")
        recordings_processed_data.add_metric([], len(recording_processed_data))
        self.histogram_data_recording_processed_latency.add(
            recording_processed_latency)
        bbb_api_latency.add_metric(
            ["getRecordings", "state=processed"],
            self.histogram_data_recording_processed_latency.get_buckets(),
            self.histogram_data_recording_processed_latency.sum)
        yield recordings_processed_data

        logging.debug("Requesting via API recordings published data")
        recordings_published = GaugeMetricFamily(
            'bbb_recordings_published',
            "Total number of BigBlueButton recordings published")
        recording_published_data, recording_published_latency = execution_duration(
            api.get_recordings)("published")
        recordings_published.add_metric([], len(recording_published_data))
        self.histogram_data_recording_published_latency.add(
            recording_published_latency)
        bbb_api_latency.add_metric(
            ["getRecordings", "state=published"],
            self.histogram_data_recording_published_latency.get_buckets(),
            self.histogram_data_recording_published_latency.sum)
        yield recordings_published

        logging.debug("Requesting via API recordings unpublished data")
        recordings_unpublished = GaugeMetricFamily(
            'bbb_recordings_unpublished',
            "Total number of BigBlueButton recordings unpublished")
        recording_unpublished_data, recording_unpublished_latency = execution_duration(
            api.get_recordings)("unpublished")
        recordings_unpublished.add_metric([], len(recording_unpublished_data))
        self.histogram_data_recording_unpublished_latency.add(
            recording_unpublished_latency)
        bbb_api_latency.add_metric(
            ["getRecordings", "state=unpublished"],
            self.histogram_data_recording_unpublished_latency.get_buckets(),
            self.histogram_data_recording_unpublished_latency.sum)
        yield recordings_unpublished

        logging.debug("Requesting via API recordings deleted data")
        recordings_deleted = GaugeMetricFamily(
            'bbb_recordings_deleted',
            "Total number of BigBlueButton recordings deleted")
        recording_deleted_data, recording_deleted_latency = execution_duration(
            api.get_recordings)("deleted")
        recordings_deleted.add_metric([], len(recording_deleted_data))
        self.histogram_data_recording_deleted_latency.add(
            recording_deleted_latency)
        bbb_api_latency.add_metric(
            ["getRecordings", "state=deleted"],
            self.histogram_data_recording_deleted_latency.get_buckets(),
            self.histogram_data_recording_deleted_latency.sum)
        yield recordings_deleted

        bbb_api_up = GaugeMetricFamily(
            'bbb_api_up', "1 if BigBlueButton API is responding 0 otherwise")
        bbb_api_up.add_metric([], 1 if settings._api_up else 0)

        yield bbb_api_up
        yield bbb_api_latency

        logging.info("Finished collecting metrics from BigBlueButton API")
    def collect(self):
        logging.info("Collecting metrics from BigBlueButton API")

        logging.debug("Requesting via API meetings data")
        meetings, meetings_data_latency = execution_duration(
            api.get_meetings)()

        bbb_api_latency = HistogramMetricFamily(
            'bbb_api_latency',
            "BigBlueButton API call latency",
            labels=['endpoint', 'parameters'])
        self.histogram_data_meetings_latency.add(meetings_data_latency)
        bbb_api_latency.add_metric(
            ["getMeetings", ""],
            self.histogram_data_meetings_latency.get_buckets(),
            self.histogram_data_meetings_latency.sum)

        yield self.metric_meetings(meetings)
        yield self.metric_participants(meetings)
        yield self.metric_meetings_listeners(meetings)
        yield self.metric_meetings_voice_participants(meetings)
        yield self.metric_meetings_video_participants(meetings)

        yield self.metric_meetings_participant_clients(meetings)

        if settings.RECORDINGS_METRICS_ENABLE:
            yield self.metric_recordings_unpublished(bbb_api_latency)

            if self.recordings_metrics_from_disk:
                yield self.metric_recordings_processing_from_disk()
                yield self.metric_recordings_published_from_disk()

                # There is a slight race condition here since in order to calculate deleted recordings we need
                # the number of published recordings
                yield self.metric_recordings_deleted_from_disk()

                # This is an additional metric that is only available if recordings_metrics_from_disk is enabled
                # since this data isn't available via the API
                yield self.metric_recordings_unprocessed_from_disk()

            else:
                # Perform expensive API calls - this will increase the latency of the scrape
                yield self.metric_recordings_processing(bbb_api_latency)
                yield self.metric_recordings_published(bbb_api_latency)
                yield self.metric_recordings_deleted(bbb_api_latency)

        yield bbb_api_latency

        bbb_api_up = GaugeMetricFamily(
            'bbb_api_up', "1 if BigBlueButton API is responding 0 otherwise")
        bbb_api_up.add_metric([], 1 if settings._api_up else 0)

        yield bbb_api_up

        yield self.metric_participants_histogram(meetings)
        yield self.metric_listeners_histogram(meetings)
        yield self.metric_voice_participants_histogram(meetings)
        yield self.metric_video_participants_histogram(meetings)

        bbb_exporter = GaugeMetricFamily("bbb_exporter",
                                         "BigBlueButton Exporter version",
                                         labels=["version"])
        bbb_exporter.add_metric([settings.VERSION], 1)
        yield bbb_exporter

        logging.info("Finished collecting metrics from BigBlueButton API")