def update():
    distinct_names = TestMeasure.objects.exclude(
        test_run__test_suite__name="DEBUG"
    ).values(
        "test_run__test_suite__pk",
        "test_run__test_suite__name",
        "name"
    ).order_by(
        "test_run__test_suite__name",
        "name"
    ).distinct()
    for x in distinct_names:
        pk = x['test_run__test_suite__pk']
        qs = TestMeasure.objects.filter(
            config__isnull=True,
            test_run__test_suite__pk=pk,
            name=x['name']
        )
        count = qs.count()
        print "%s => %s: %s" % (
            x["test_run__test_suite__name"],
            x["name"],
            count
        )
        if count > 0:
            try:
                cnf = TestMeasureConfig.objects.get(
                    test_suite=pk,
                    name=x['name']
                )
            except TestMeasureConfig.DoesNotExist:
                cnf = TestMeasureConfig(
                    test_suite=TestSuite.objects.get(pk=pk),
                    name=x['name']
                )
                cnf.save()
            qs.update(
                config=cnf
            )
def update():
    distinct_names = TestMeasure.objects.exclude(
        test_run__test_suite__name="DEBUG").values(
            "test_run__test_suite__pk", "test_run__test_suite__name",
            "name").order_by("test_run__test_suite__name", "name").distinct()
    for x in distinct_names:
        pk = x['test_run__test_suite__pk']
        qs = TestMeasure.objects.filter(config__isnull=True,
                                        test_run__test_suite__pk=pk,
                                        name=x['name'])
        count = qs.count()
        print "%s => %s: %s" % (x["test_run__test_suite__name"], x["name"],
                                count)
        if count > 0:
            try:
                cnf = TestMeasureConfig.objects.get(test_suite=pk,
                                                    name=x['name'])
            except TestMeasureConfig.DoesNotExist:
                cnf = TestMeasureConfig(
                    test_suite=TestSuite.objects.get(pk=pk), name=x['name'])
                cnf.save()
            qs.update(config=cnf)
Exemplo n.º 3
0
 def get(self, request, *args, **kwargs):
     cnf = TestMeasureConfig.get_or_create(
         kwargs["pk"], kwargs["mname"]
     )
     cnf.reset_alarm_status()
     return HttpResponse("OK", 'text/plin')
Exemplo n.º 4
0
    def get_context_data(self, **kwargs):
        context = super(MeasureView, self).get_context_data(**kwargs)

        img_args = self.request.GET.copy()

        context['testsuite'] = TestSuite.objects.get(pk=kwargs['pk'])
        context['mname'] = kwargs['mname']
        days = self.request.GET.get("days", "7")
        try:
            days = int(days)
        except:
            days = 7
        if days not in [x[0] for x in MeasureView.by_days_choices]:
            days = 7

        context["days"] = days
        context["days_choices"] = [
            {'text': x[1], 'value': x[0], 'selected': x[0] == days}
            for x in MeasureView.by_days_choices
        ]

        img_remove_args = ["days", "cmp_ts"]

        if days != MeasureView.BY_DAYS_MANUAL:
            img_remove_args.append("from")
            img_remove_args.append("to")

        for x in img_remove_args:
            if x in img_args:
                img_args.pop(x)

        if days > 0:
            dt = timezone.now() - datetime.timedelta(days=days)
            img_args['from'] = dt.strftime('%d-%m-%Y')

        autoupdate = self.request.GET.get("autoupdate", "10")
        if autoupdate not in ["1", "10", "30", "60", ""]:
            autoupdate = "10"

        context["autoupdate"] = autoupdate


        cmp_data = []
        own_measures = []
        other_measures = []
        qs = TestMeasure.objects.exclude(
            test_run__test_suite__name="DEBUG"
        ).values(
            "test_run__test_suite__pk",
            "test_run__test_suite__name",
            "name"
        ).order_by(
            "test_run__test_suite__name",
            "name"
        ).distinct()

        ts_pk = int(kwargs['pk'])

        for m in qs:
            if (len(cmp_data) == 0 or
                cmp_data[-1]["pk"] != m["test_run__test_suite__pk"]):
                cmp_data.append({
                    "pk": m["test_run__test_suite__pk"],
                    "name": m["test_run__test_suite__name"],
                    "items": []
                })
            cmp_data[-1]["items"].append(
                '%s/%s' % (m["test_run__test_suite__pk"], m["name"])
            )
            if m['test_run__test_suite__pk'] == ts_pk:
                if m["name"] != kwargs["mname"]:
                    own_measures.append(m)
            else:
                other_measures.append(m)

        context["cmp_data"] = cmp_data
        context["cmp_data_json"] = json.dumps(cmp_data)
        context["own_measures"] = own_measures
        context["other_measures"] = other_measures

        context['measureconfig'] = TestMeasureConfig.get_or_create(
            context['testsuite'], kwargs['mname']
        )

        context['img_args'] = img_args.urlencode(safe='%/')

        context['cancel_alarm_url'] = reverse(
            'appmonitor:cancelalarm', args=[kwargs["pk"], kwargs["mname"]]
        )

        return context
Exemplo n.º 5
0
 def get(self, request, *args, **kwargs):
     cnf = TestMeasureConfig.get_or_create(kwargs["pk"], kwargs["mname"])
     cnf.reset_alarm_status()
     return HttpResponse("OK", 'text/plin')
Exemplo n.º 6
0
    def get_context_data(self, **kwargs):
        context = super(MeasureView, self).get_context_data(**kwargs)

        img_args = self.request.GET.copy()

        context['testsuite'] = TestSuite.objects.get(pk=kwargs['pk'])
        context['mname'] = kwargs['mname']
        days = self.request.GET.get("days", "7")
        try:
            days = int(days)
        except:
            days = 7
        if days not in [x[0] for x in MeasureView.by_days_choices]:
            days = 7

        context["days"] = days
        context["days_choices"] = [{
            'text': x[1],
            'value': x[0],
            'selected': x[0] == days
        } for x in MeasureView.by_days_choices]

        img_remove_args = ["days", "cmp_ts"]

        if days != MeasureView.BY_DAYS_MANUAL:
            img_remove_args.append("from")
            img_remove_args.append("to")

        for x in img_remove_args:
            if x in img_args:
                img_args.pop(x)

        if days > 0:
            dt = timezone.now() - datetime.timedelta(days=days)
            img_args['from'] = dt.strftime('%d-%m-%Y')

        autoupdate = self.request.GET.get("autoupdate", "10")
        if autoupdate not in ["1", "10", "30", "60", ""]:
            autoupdate = "10"

        context["autoupdate"] = autoupdate

        cmp_data = []
        own_measures = []
        other_measures = []
        qs = TestMeasure.objects.exclude(
            test_run__test_suite__name="DEBUG").values(
                "test_run__test_suite__pk", "test_run__test_suite__name",
                "name").order_by("test_run__test_suite__name",
                                 "name").distinct()

        ts_pk = int(kwargs['pk'])

        for m in qs:
            if (len(cmp_data) == 0
                    or cmp_data[-1]["pk"] != m["test_run__test_suite__pk"]):
                cmp_data.append({
                    "pk": m["test_run__test_suite__pk"],
                    "name": m["test_run__test_suite__name"],
                    "items": []
                })
            cmp_data[-1]["items"].append(
                '%s/%s' % (m["test_run__test_suite__pk"], m["name"]))
            if m['test_run__test_suite__pk'] == ts_pk:
                if m["name"] != kwargs["mname"]:
                    own_measures.append(m)
            else:
                other_measures.append(m)

        context["cmp_data"] = cmp_data
        context["cmp_data_json"] = json.dumps(cmp_data)
        context["own_measures"] = own_measures
        context["other_measures"] = other_measures

        context['measureconfig'] = TestMeasureConfig.get_or_create(
            context['testsuite'], kwargs['mname'])

        context['img_args'] = img_args.urlencode(safe='%/')

        context['cancel_alarm_url'] = reverse(
            'appmonitor:cancelalarm', args=[kwargs["pk"], kwargs["mname"]])

        return context
Exemplo n.º 7
0
def plot_png(argsdict):
    django.setup()
    timezone.activate(timezone.get_current_timezone())

    pk = qdict.get("test_suite_pk")
    mname = qdict.get("measure_name")

    test_suite = TestSuite.objects.get(pk=pk)
    fullscreen = qdict.get("fs", False)

    cmp_args = qdict.get("cmp")
    if cmp_args:
        cmp_args = cmp_args.split("/")
    else:
        cmp_args = [None, None]

    cmp_pk = cmp_args[0]
    cmp_mname = cmp_args[1]
    t_from = parse_date_arg(qdict.get("from"))
    t_to = parse_date_arg(qdict.get("to"))

    if t_from is None:
        t_from = timezone.now() - timedelta(days=7)

    if not (pk and mname):
        raise Exception(
            "You must specify at least test_suite_pk and measure_name"
        )

    config = TestMeasureConfig.get_or_create(pk, mname)
    targetvalue = config.failure_threshold

    try:
        targetvalue = float(targetvalue)
    except:
        targetvalue = None

    dates = []
    measures = []

    extra_filters = {}
    if t_from:
        extra_filters['started__gte'] = t_from

    if t_to:
        extra_filters['ended__lte'] = t_to

    max_measure = 0
    items = TestMeasure.objects.filter(
        test_run__test_suite__pk = pk,
        name = mname,
        success = 1,
        **extra_filters
    ).order_by("started", "ended")

    if len(items) == 0:
        return ""

    fig, ax = plt.subplots()

    alarmstate=0
    if config.alarm_status == TestMeasureConfig.ALARM_STATUS_ALARM:
        ax.set_axis_bgcolor((1, 0.5, 0.5))
        alarmstate=1

    try:
        xsize = int(argsdict.get('xsize', 800))
    except ValueError:
        xsize = 800
    if xsize < 800:
        xsize = 800

    try:
        ysize = int(argsdict.get('ysize', 600))
    except ValueError:
        ysize = 600
    if ysize < 600:
        ysize = 600

    fig.set_size_inches(xsize/DPI, ysize/DPI)


    for item in items:
        dates.append(timezone.make_naive(item.started))
        diff = (item.ended - item.started).total_seconds()
        measures.append(diff)
        if diff > max_measure:
            max_measure = diff

    min_date = dates[0]
    max_date = dates[-1]

    ax.plot_date(
        dates, measures,
        label=u'%s: %s' % (test_suite.name, config.name),
        marker="x",
        linestyle="-"
    )

    if cmp_pk and cmp_mname:
        cmp_testsuite = TestSuite.objects.get(pk=cmp_pk)
        cmp_items = TestMeasure.objects.filter(
            test_run__test_suite__pk = cmp_pk,
            name = cmp_mname,
            success = 1,
            **extra_filters
        ).order_by("started", "ended")
        if len(cmp_items) > 0:
            dates2 = []
            measures2 = []
            for item in cmp_items:
                dates2.append(timezone.make_naive(item.started))
                diff = (item.ended - item.started).total_seconds()
                measures2.append(diff)
                if diff > max_measure:
                    max_measure = diff
            ax.plot_date(
                dates2, measures2,
                label=u'%s: %s' % (cmp_testsuite.name, cmp_mname),
                marker="x",
                linestyle="-",
                color='g'
            )


    if targetvalue:
        plt.axhline(
            targetvalue, 0, 1, None,
            color="r",
            label=u"Alarmtærskel"
        )
        if targetvalue > max_measure:
            max_measure = targetvalue

    # Plot the legends
    ax.legend(numpoints=1, loc='upper left', fontsize='x-small')

    # Configure axes and grid
    ax.xaxis.set_major_formatter(DateFormatter("%Y-%m-%d %H:%M"))

    yaxis_scale = 1.1 if fullscreen else 1.2

    ax.set_ylim(bottom = 0, top = max_measure * yaxis_scale)
    ax.set_xlim(
        min_date - datetime.timedelta(minutes = 15),
        max_date + datetime.timedelta(minutes = 15)
    )
    ax.grid(True)

    fig.autofmt_xdate()

    fname = u"_".join([
        unicode(x).replace("/", "_") for x in [
            pk, mname, cmp_pk, cmp_mname, targetvalue, xsize, ysize
        ] if x
    ]) + ".png"

    full_path_fname = os.path.join(settings.STATIC_ROOT, "plots", fname)

    fig.tight_layout()

    if fullscreen:
        location_cnf = ConfigurationValue.get_or_create_default(
            u"lokation", u"Ukendt lokation"
        )
        ax.set_title(
            u"%s(%s) - %s: %s\n" % (
                platform.node(), location_cnf.value, test_suite.name, mname
            ) +
            u"Kontaktperson(er): %s" % ", ".join(
                [x.full_name() for x in test_suite.contactpersons.all()]
            ),
            fontsize='x-small'
        )
        fig.subplots_adjust(top=0.90)

    fig.savefig(full_path_fname, format='png', dpi=DPI)

    result = QueryDict('', mutable=True, encoding='utf8')
    result.update({
        'fname': full_path_fname,
        'alarm': alarmstate
    })

    return result.urlencode(safe='/%')
Exemplo n.º 8
0
def plot_png(argsdict):
    django.setup()
    timezone.activate(timezone.get_current_timezone())

    pk = qdict.get("test_suite_pk")
    mname = qdict.get("measure_name")

    test_suite = TestSuite.objects.get(pk=pk)
    fullscreen = qdict.get("fs", False)

    cmp_args = qdict.get("cmp")
    if cmp_args:
        cmp_args = cmp_args.split("/")
    else:
        cmp_args = [None, None]

    cmp_pk = cmp_args[0]
    cmp_mname = cmp_args[1]
    t_from = parse_date_arg(qdict.get("from"))
    t_to = parse_date_arg(qdict.get("to"))

    if t_from is None:
        t_from = timezone.now() - timedelta(days=7)

    if not (pk and mname):
        raise Exception(
            "You must specify at least test_suite_pk and measure_name")

    config = TestMeasureConfig.get_or_create(pk, mname)
    targetvalue = config.failure_threshold

    try:
        targetvalue = float(targetvalue)
    except:
        targetvalue = None

    dates = []
    measures = []

    extra_filters = {}
    if t_from:
        extra_filters['started__gte'] = t_from

    if t_to:
        extra_filters['ended__lte'] = t_to

    max_measure = 0
    items = TestMeasure.objects.filter(test_run__test_suite__pk=pk,
                                       name=mname,
                                       success=1,
                                       **extra_filters).order_by(
                                           "started", "ended")

    if len(items) == 0:
        return ""

    fig, ax = plt.subplots()

    alarmstate = 0
    if config.alarm_status == TestMeasureConfig.ALARM_STATUS_ALARM:
        ax.set_axis_bgcolor((1, 0.5, 0.5))
        alarmstate = 1

    try:
        xsize = int(argsdict.get('xsize', 800))
    except ValueError:
        xsize = 800
    if xsize < 800:
        xsize = 800

    try:
        ysize = int(argsdict.get('ysize', 600))
    except ValueError:
        ysize = 600
    if ysize < 600:
        ysize = 600

    fig.set_size_inches(xsize / DPI, ysize / DPI)

    for item in items:
        dates.append(timezone.make_naive(item.started))
        diff = (item.ended - item.started).total_seconds()
        measures.append(diff)
        if diff > max_measure:
            max_measure = diff

    min_date = dates[0]
    max_date = dates[-1]

    ax.plot_date(dates,
                 measures,
                 label=u'%s: %s' % (test_suite.name, config.name),
                 marker="x",
                 linestyle="-")

    if cmp_pk and cmp_mname:
        cmp_testsuite = TestSuite.objects.get(pk=cmp_pk)
        cmp_items = TestMeasure.objects.filter(test_run__test_suite__pk=cmp_pk,
                                               name=cmp_mname,
                                               success=1,
                                               **extra_filters).order_by(
                                                   "started", "ended")
        if len(cmp_items) > 0:
            dates2 = []
            measures2 = []
            for item in cmp_items:
                dates2.append(timezone.make_naive(item.started))
                diff = (item.ended - item.started).total_seconds()
                measures2.append(diff)
                if diff > max_measure:
                    max_measure = diff
            ax.plot_date(dates2,
                         measures2,
                         label=u'%s: %s' % (cmp_testsuite.name, cmp_mname),
                         marker="x",
                         linestyle="-",
                         color='g')

    if targetvalue:
        plt.axhline(targetvalue, 0, 1, None, color="r", label=u"Alarmtærskel")
        if targetvalue > max_measure:
            max_measure = targetvalue

    # Plot the legends
    ax.legend(numpoints=1, loc='upper left', fontsize='x-small')

    # Configure axes and grid
    ax.xaxis.set_major_formatter(DateFormatter("%Y-%m-%d %H:%M"))

    yaxis_scale = 1.1 if fullscreen else 1.2

    ax.set_ylim(bottom=0, top=max_measure * yaxis_scale)
    ax.set_xlim(min_date - datetime.timedelta(minutes=15),
                max_date + datetime.timedelta(minutes=15))
    ax.grid(True)

    fig.autofmt_xdate()

    fname = u"_".join([
        unicode(x).replace("/", "_")
        for x in [pk, mname, cmp_pk, cmp_mname, targetvalue, xsize, ysize] if x
    ]) + ".png"

    full_path_fname = os.path.join(settings.STATIC_ROOT, "plots", fname)

    fig.tight_layout()

    if fullscreen:
        location_cnf = ConfigurationValue.get_or_create_default(
            u"lokation", u"Ukendt lokation")
        ax.set_title(
            u"%s(%s) - %s: %s\n" %
            (platform.node(), location_cnf.value, test_suite.name, mname) +
            u"Kontaktperson(er): %s" %
            ", ".join([x.full_name()
                       for x in test_suite.contactpersons.all()]),
            fontsize='x-small')
        fig.subplots_adjust(top=0.90)

    fig.savefig(full_path_fname, format='png', dpi=DPI)

    result = QueryDict('', mutable=True, encoding='utf8')
    result.update({'fname': full_path_fname, 'alarm': alarmstate})

    return result.urlencode(safe='/%')