示例#1
0
    def calculate_alert_properties(self, alert_summary, series_signature):
        prev_range = series_signature.max_back_window
        if not prev_range:
            prev_range = settings.PERFHERDER_ALERTS_MAX_BACK_WINDOW
        new_range = series_signature.fore_window
        if not new_range:
            new_range = settings.PERFHERDER_ALERTS_FORE_WINDOW

        prev_data = PerformanceDatum.objects.filter(
            signature=series_signature,
            push_timestamp__lte=alert_summary.prev_push.time).order_by(
                '-push_timestamp')
        prev_values = prev_data.values_list('value', flat=True)[:prev_range]

        new_data = PerformanceDatum.objects.filter(
            signature=series_signature,
            push_timestamp__gt=alert_summary.prev_push.time).order_by(
                'push_timestamp')
        new_values = new_data.values_list('value', flat=True)[:new_range]

        if not prev_data or not new_data:
            raise InsufficientAlertCreationData

        prev_value = sum(prev_values) / len(prev_values)
        new_value = sum(new_values) / len(new_values)

        return get_alert_properties(prev_value, new_value,
                                    series_signature.lower_is_better)
    def calculate_alert_properties(self, alert_summary, series_signature):
        prev_range = series_signature.max_back_window
        if not prev_range:
            prev_range = settings.PERFHERDER_ALERTS_MAX_BACK_WINDOW
        new_range = series_signature.fore_window
        if not new_range:
            new_range = settings.PERFHERDER_ALERTS_FORE_WINDOW

        prev_data = PerformanceDatum.objects.filter(
            signature=series_signature,
            push_timestamp__lte=alert_summary.prev_push.time).order_by(
                '-push_timestamp')
        prev_values = prev_data.values_list('value', flat=True)[:prev_range]

        new_data = PerformanceDatum.objects.filter(
            signature=series_signature,
            push_timestamp__gt=alert_summary.prev_push.time).order_by(
                'push_timestamp')
        new_values = new_data.values_list('value', flat=True)[:new_range]

        if not prev_data or not new_data:
            raise InsufficientAlertCreationData

        prev_value = sum(prev_values) / len(prev_values)
        new_value = sum(new_values) / len(new_values)

        return get_alert_properties(prev_value, new_value,
                                    series_signature.lower_is_better)
示例#3
0
    def create(self, request, *args, **kwargs):
        data = request.data
        if 'summary_id' not in data or 'signature_id' not in data:
            return Response(
                {
                    "message":
                    "Summary and signature ids necessary "
                    "to create alert"
                },
                status=HTTP_400_BAD_REQUEST)

        summary = PerformanceAlertSummary.objects.get(id=data['summary_id'])
        signature = PerformanceSignature.objects.get(id=data['signature_id'])

        prev_range = signature.max_back_window
        if not prev_range:
            prev_range = settings.PERFHERDER_ALERTS_MAX_BACK_WINDOW
        new_range = signature.fore_window
        if not new_range:
            new_range = settings.PERFHERDER_ALERTS_FORE_WINDOW

        prev_data = PerformanceDatum.objects.filter(
            signature=signature,
            result_set_id__lte=summary.prev_result_set_id).order_by(
                '-push_timestamp').values_list('value', flat=True)[:prev_range]
        new_data = PerformanceDatum.objects.filter(
            signature=signature,
            result_set_id__gt=summary.prev_result_set_id).order_by(
                'push_timestamp').values_list('value', flat=True)[:new_range]
        if not prev_data or not new_data:
            return Response(
                {"message": "Insufficient data to create an "
                 "alert"},
                status=HTTP_400_BAD_REQUEST)

        prev_value = sum(prev_data) / len(prev_data)
        new_value = sum(new_data) / len(new_data)

        alert_properties = get_alert_properties(prev_value, new_value,
                                                signature.lower_is_better)

        alert, _ = PerformanceAlert.objects.get_or_create(
            summary=summary,
            series_signature=signature,
            defaults={
                'is_regression': alert_properties.is_regression,
                'manually_created': True,
                'amount_pct': alert_properties.pct_change,
                'amount_abs': alert_properties.delta,
                'prev_value': prev_value,
                'new_value': new_value,
                't_value': 1000
            })
        return Response({"alert_id": alert.id})
    def create(self, request, *args, **kwargs):
        data = request.data
        if 'summary_id' not in data or 'signature_id' not in data:
            return Response({"message": "Summary and signature ids necessary "
                             "to create alert"}, status=HTTP_400_BAD_REQUEST)

        summary = PerformanceAlertSummary.objects.get(
            id=data['summary_id'])
        signature = PerformanceSignature.objects.get(
            id=data['signature_id'])

        prev_range = signature.max_back_window
        if not prev_range:
            prev_range = settings.PERFHERDER_ALERTS_MAX_BACK_WINDOW
        new_range = signature.fore_window
        if not new_range:
            new_range = settings.PERFHERDER_ALERTS_FORE_WINDOW

        prev_data = PerformanceDatum.objects.filter(
            signature=signature,
            push_timestamp__lte=summary.prev_push.time).order_by(
                '-push_timestamp').values_list('value', flat=True)[:prev_range]
        new_data = PerformanceDatum.objects.filter(
            signature=signature,
            push_timestamp__gt=summary.prev_push.time).order_by(
                'push_timestamp').values_list('value', flat=True)[:new_range]
        if not prev_data or not new_data:
            return Response({"message": "Insufficient data to create an "
                             "alert"}, status=HTTP_400_BAD_REQUEST)

        prev_value = sum(prev_data)/len(prev_data)
        new_value = sum(new_data)/len(new_data)

        alert_properties = get_alert_properties(prev_value, new_value,
                                                signature.lower_is_better)

        alert, _ = PerformanceAlert.objects.get_or_create(
            summary=summary,
            series_signature=signature,
            defaults={
                'is_regression': alert_properties.is_regression,
                'manually_created': True,
                'amount_pct': alert_properties.pct_change,
                'amount_abs': alert_properties.delta,
                'prev_value': prev_value,
                'new_value': new_value,
                't_value': 1000
            })
        return Response({"alert_id": alert.id})