Пример #1
0
 def charts(self):
     chart = LineChart(_("Messages over time"), None, Axis(_('# of Messages'), ',.1d'))
     chart.data = {
         _("Keywords"): self.es_histogram(WORKFLOW_KEYWORD),
         _("Reminders"): self.es_histogram(WORKFLOW_REMINDER),
         _("Broadcasts"): self.es_histogram(WORKFLOW_BROADCAST),
     }
     chart.data_needs_formatting = True
     chart.x_axis_uses_dates = True
     return [chart]
Пример #2
0
 def charts(self):
     chart = LineChart(_("Messages over time"), None,
                       Axis(_('# of Messages'), ',.1d'))
     chart.data = {
         _("Keywords"): self.es_histogram(WORKFLOW_KEYWORD),
         _("Reminders"): self.es_histogram(WORKFLOW_REMINDER),
         _("Broadcasts"): self.es_histogram(WORKFLOW_BROADCAST),
     }
     chart.data_needs_formatting = True
     chart.x_axis_uses_dates = True
     return [chart]
Пример #3
0
def loadtest(request):
    # The multimech results api is kinda all over the place.
    # the docs are here: http://testutils.org/multi-mechanize/datastore.html

    scripts = ["submit_form.py", "ota_restore.py"]

    tests = []
    # datetime info seems to be buried in GlobalConfig.results[0].run_id,
    # which makes ORM-level sorting problematic
    for gc in Session.query(GlobalConfig).all()[::-1]:
        gc.scripts = dict((uc.script, uc) for uc in gc.user_group_configs)
        if gc.results:
            for script, uc in gc.scripts.items():
                uc.results = filter(lambda res: res.user_group_name == uc.user_group, gc.results)
            test = {"datetime": gc.results[0].run_id, "run_time": gc.run_time, "results": gc.results}
            for script in scripts:
                test[script.split(".")[0]] = gc.scripts.get(script)
            tests.append(test)

    context = get_hqadmin_base_context(request)
    context.update({"tests": tests, "hide_filters": True})

    date_axis = Axis(label="Date", dateFormat="%m/%d/%Y")
    tests_axis = Axis(label="Number of Tests in 30s")
    chart = LineChart("HQ Load Test Performance", date_axis, tests_axis)
    submit_data = []
    ota_data = []
    total_data = []
    max_val = 0
    max_date = None
    min_date = None
    for test in tests:
        date = test["datetime"]
        total = len(test["results"])
        max_val = total if total > max_val else max_val
        max_date = date if not max_date or date > max_date else max_date
        min_date = date if not min_date or date < min_date else min_date
        submit_data.append({"x": date, "y": len(test["submit_form"].results)})
        ota_data.append({"x": date, "y": len(test["ota_restore"].results)})
        total_data.append({"x": date, "y": total})

    deployments = [row["key"][1] for row in HqDeploy.get_list(settings.SERVER_ENVIRONMENT, min_date, max_date)]
    deploy_data = [{"x": min_date, "y": 0}]
    for date in deployments:
        deploy_data.extend([{"x": date, "y": 0}, {"x": date, "y": max_val}, {"x": date, "y": 0}])
    deploy_data.append({"x": max_date, "y": 0})

    chart.add_dataset("Deployments", deploy_data)
    chart.add_dataset("Form Submission Count", submit_data)
    chart.add_dataset("OTA Restore Count", ota_data)
    chart.add_dataset("Total Count", total_data)

    context["charts"] = [chart]

    template = "hqadmin/loadtest.html"
    return render(request, template, context)
Пример #4
0
 def charts(self):
     chart = LineChart(_("Appointment Reminders"), None, None)
     chart.data = [
         {
             "key": _("% Appointments Confirmed"),
             "values": self.percent_over_time('case_data'),
         },
         {
             "key": _("% Reminders Confirmed"),
             "values": self.percent_over_time('session_data'),
         },
     ]
     chart.x_axis_uses_dates = True
     return [chart]
Пример #5
0
 def charts(self):
     chart = LineChart(_("Appointment Reminders"), None, None)
     chart.data = [
         {
             "key": _("% Appointments Confirmed"),
             "values": self.percent_over_time('case_data'),
         },
         {
             "key": _("% Reminders Confirmed"),
             "values": self.percent_over_time('session_data'),
         },
     ]
     chart.x_axis_uses_dates = True
     return [chart]
Пример #6
0
 def charts(self):
     rows = self.rows
     date_index = len(self.place_types)
     startdate = self.datespan.startdate
     enddate = self.datespan.enddate
     date_axis = Axis(label="Date", dateFormat="%b %d")
     tests_axis = Axis(label="Number of Tests")
     chart = LineChart("Number of Tests Per Day", date_axis, tests_axis)
     for row in rows:
         data_points = []
         for n, day in enumerate(self.daterange(startdate, enddate)):
             x = day
             y = 0 if row[date_index + n + 1] == "--" else row[date_index + n + 1]
             data_points.append({'x': x, 'y': y['sort_key']})
         chart.add_dataset(row[date_index-1] + "(" + row[date_index] + ")", data_points)
     return [chart]
Пример #7
0
 def charts(self):
     rows = self.rows
     date_index = len(self.place_types)
     startdate = self.datespan.startdate
     enddate = self.datespan.enddate
     date_axis = Axis(label="Date", dateFormat="%b %d")
     tests_axis = Axis(label="Number of Tests")
     chart = LineChart("Number of Tests Per Day", date_axis, tests_axis)
     for row in rows:
         data_points = []
         for n, day in enumerate(self.daterange(startdate, enddate)):
             x = day
             y = 0 if row[date_index + n + 1] == "--" else row[date_index + n + 1]
             data_points.append({'x': x, 'y': y['sort_key']})
         chart.add_dataset(row[date_index-1] + "(" + row[date_index] + ")", data_points)
     return [chart]
Пример #8
0
def loadtest(request):
    # The multimech results api is kinda all over the place.
    # the docs are here: http://testutils.org/multi-mechanize/datastore.html

    db_settings = settings.DATABASES["default"]
    db_settings['PORT'] = db_settings.get('PORT', '') or '5432'
    db_url = "postgresql://{USER}:{PASSWORD}@{HOST}:{PORT}/{NAME}".format(
        **db_settings)
    engine = create_engine(db_url)
    session = sessionmaker(bind=engine)
    current = session()

    scripts = ['submit_form.py', 'ota_restore.py']

    tests = []
    # datetime info seems to be buried in GlobalConfig.results[0].run_id,
    # which makes ORM-level sorting problematic
    for gc in current.query(GlobalConfig).all()[::-1]:
        gc.scripts = dict((uc.script, uc) for uc in gc.user_group_configs)
        if gc.results:
            for script, uc in gc.scripts.items():
                uc.results = filter(
                    lambda res: res.user_group_name == uc.user_group,
                    gc.results)
            test = {
                'datetime': gc.results[0].run_id,
                'run_time': gc.run_time,
                'results': gc.results,
            }
            for script in scripts:
                test[script.split('.')[0]] = gc.scripts.get(script)
            tests.append(test)

    context = get_hqadmin_base_context(request)
    context.update({
        "tests": tests,
        "hide_filters": True,
    })

    date_axis = Axis(label="Date", dateFormat="%m/%d/%Y")
    tests_axis = Axis(label="Number of Tests in 30s")
    chart = LineChart("HQ Load Test Performance", date_axis, tests_axis)
    submit_data = []
    ota_data = []
    total_data = []
    max_val = 0
    max_date = None
    min_date = None
    for test in tests:
        date = test['datetime']
        total = len(test['results'])
        max_val = total if total > max_val else max_val
        max_date = date if not max_date or date > max_date else max_date
        min_date = date if not min_date or date < min_date else min_date
        submit_data.append({'x': date, 'y': len(test['submit_form'].results)})
        ota_data.append({'x': date, 'y': len(test['ota_restore'].results)})
        total_data.append({'x': date, 'y': total})

    deployments = [
        row['key'][1] for row in HqDeploy.get_list(settings.SERVER_ENVIRONMENT,
                                                   min_date, max_date)
    ]
    deploy_data = [{'x': min_date, 'y': 0}]
    for date in deployments:
        deploy_data.extend([{
            'x': date,
            'y': 0
        }, {
            'x': date,
            'y': max_val
        }, {
            'x': date,
            'y': 0
        }])
    deploy_data.append({'x': max_date, 'y': 0})

    chart.add_dataset("Deployments", deploy_data)
    chart.add_dataset("Form Submission Count", submit_data)
    chart.add_dataset("OTA Restore Count", ota_data)
    chart.add_dataset("Total Count", total_data)

    context['charts'] = [chart]

    template = "hqadmin/loadtest.html"
    return render(request, template, context)
Пример #9
0
def loadtest(request):
    # The multimech results api is kinda all over the place.
    # the docs are here: http://testutils.org/multi-mechanize/datastore.html

    db_settings = settings.DATABASES["default"]
    db_settings['PORT'] = db_settings.get('PORT', '') or '5432'
    db_url = "postgresql://{USER}:{PASSWORD}@{HOST}:{PORT}/{NAME}".format(
        **db_settings
    )
    engine = create_engine(db_url)
    session = sessionmaker(bind=engine)
    current = session()

    scripts = ['submit_form.py', 'ota_restore.py']

    tests = []
    # datetime info seems to be buried in GlobalConfig.results[0].run_id,
    # which makes ORM-level sorting problematic
    for gc in current.query(GlobalConfig).all()[::-1]:
        gc.scripts = dict((uc.script, uc) for uc in gc.user_group_configs)
        if gc.results:
            for script, uc in gc.scripts.items():
                uc.results = filter(
                    lambda res: res.user_group_name == uc.user_group,
                    gc.results
                )
            test = {
                'datetime': gc.results[0].run_id,
                'run_time': gc.run_time,
                'results': gc.results,
            }
            for script in scripts:
                test[script.split('.')[0]] = gc.scripts.get(script)
            tests.append(test)

    context = get_hqadmin_base_context(request)
    context.update({
        "tests": tests,
        "hide_filters": True,
    })

    date_axis = Axis(label="Date", dateFormat="%m/%d/%Y")
    tests_axis = Axis(label="Number of Tests in 30s")
    chart = LineChart("HQ Load Test Performance", date_axis, tests_axis)
    submit_data = []
    ota_data = []
    total_data = []
    max_val = 0
    max_date = None
    min_date = None
    for test in tests:
        date = test['datetime']
        total = len(test['results'])
        max_val = total if total > max_val else max_val
        max_date = date if not max_date or date > max_date else max_date
        min_date = date if not min_date or date < min_date else min_date
        submit_data.append({'x': date, 'y': len(test['submit_form'].results)})
        ota_data.append({'x': date, 'y': len(test['ota_restore'].results)})
        total_data.append({'x': date, 'y': total})

    deployments = [row['key'][1] for row in HqDeploy.get_list(settings.SERVER_ENVIRONMENT, min_date, max_date)]
    deploy_data = [{'x': min_date, 'y': 0}]
    for date in deployments:
        deploy_data.extend([{'x': date, 'y': 0}, {'x': date, 'y': max_val}, {'x': date, 'y': 0}])
    deploy_data.append({'x': max_date, 'y': 0})

    chart.add_dataset("Deployments", deploy_data)
    chart.add_dataset("Form Submission Count", submit_data)
    chart.add_dataset("OTA Restore Count", ota_data)
    chart.add_dataset("Total Count", total_data)

    context['charts'] = [chart]

    template = "hqadmin/loadtest.html"
    return render(request, template, context)
Пример #10
0
    def get_chart(self, rows, x_label, y_label, data_provider):
        def _get_label_with_percentage(row):
            return "%s [%s%%]" % (row[0], str(float(row[-1]['html'][:-1])))

        if isinstance(data_provider,
                      (ClosedMotherCasesBreakdown, ClosedChildCasesBreakdown)):
            chart = PieChart('', '', [{
                'label': _get_label_with_percentage(row),
                'value': float(row[-1]['html'][:-1])
            } for row in rows])
        elif isinstance(data_provider, NutritionBirthWeightDetails):
            chart = PieChart('BirthWeight', '', [{
                'label':
                "%s [%s%%]" %
                (row[0]['html'], str(float(row[-1]['html'][:-1]))),
                'value':
                float(row[-1]['html'][:-1])
            } for row in rows[1:]], ['red', 'green'])
        elif isinstance(data_provider, DeliveryPlaceDetailsExtended):
            chart = PieChart('', '', [{
                'label': _get_label_with_percentage(row),
                'value': float(row[-1]['html'][:-1])
            } for row in rows[1:]])
        elif isinstance(data_provider,
                        (PostnatalCareOverview, ImmunizationOverview)):
            chart = MultiBarChart('',
                                  x_axis=Axis(x_label),
                                  y_axis=Axis(y_label, '.2%'))
            chart.rotateLabels = -45
            chart.marginBottom = 120
            if isinstance(data_provider, ImmunizationOverview):
                chart.stacked = True
                chart.add_dataset('Percentage',
                                  [{
                                      'x': row[0]['html'],
                                      'y': float(row[3]['html'][:-1]) / 100
                                  } for row in rows],
                                  color='green')
                chart.add_dataset('Dropout Percentage',
                                  [{
                                      'x': row[0]['html'],
                                      'y': float(row[-1]['html'][:-1]) / 100
                                  } for row in rows],
                                  color='red')
            else:
                chart.add_dataset('Percentage',
                                  [{
                                      'x': row[0]['html'],
                                      'y': float(row[-1]['html'][:-1]) / 100
                                  } for row in rows])
        elif isinstance(data_provider, AnteNatalCareServiceOverviewExtended):
            chart1 = MultiBarChart('',
                                   x_axis=Axis(x_label),
                                   y_axis=Axis(y_label, '.2%'))
            chart2 = MultiBarChart('',
                                   x_axis=Axis(x_label),
                                   y_axis=Axis(y_label, '.2%'))
            chart1.rotateLabels = -45
            chart2.rotateLabels = -45
            chart1.marginBottom = 120
            chart2.marginBottom = 120
            chart1.add_dataset('Percentage',
                               [{
                                   'x': row[0]['html'],
                                   'y': float(row[-1]['html'][:-1]) / 100
                               } for row in rows[1:6]])
            chart2.add_dataset('Percentage',
                               [{
                                   'x': row[0]['html'],
                                   'y': float(row[-1]['html'][:-1]) / 100
                               } for row in rows[6:12]])
            return [chart1, chart2]
        elif isinstance(data_provider, ChildrenDeathsByMonth):
            chart = LineChart('Seasonal Variation of Child Deaths',
                              x_axis=Axis(x_label, dateFormat="%B"),
                              y_axis=Axis(y_label, '.2%'))
            chart.rotateLabels = -45
            chart.marginBottom = 120
            months_mapping = dict(
                (v, k) for k, v in enumerate(calendar.month_abbr))
            chart.add_dataset(
                'Percentage',
                [{
                    'x': datetime.date(1, months_mapping[row[0][:3]], 1),
                    'y': float(row[-1]['html'][:-1]) / 100
                } for row in rows])
        else:
            chart = PieChart('', '', [{
                'label':
                "%s [%s%%]" %
                (row[0]['html'], str(float(row[-1]['html'][:-1]))),
                'value':
                float(row[-1]['html'][:-1])
            } for row in rows])
        return [chart]