def test_influx_db_query_when_get_events_list_then_query_api_called(
        monkeypatch):
    query = (
        f'from(bucket:"{read_bucket}") '
        f"|> range(start: -30d, stop: now()) "
        f'|> filter(fn:(r) => r._measurement == "api_call")                   '
        f'|> filter(fn: (r) => r["organisation_id"] == "{org_id}") '
        f'|> drop(columns: ["organisation", "organisation_id", "type", "project", "project_id"])'
        f"|> aggregateWindow(every: 24h, fn: sum)")
    mock_influxdb_client = mock.MagicMock()
    monkeypatch.setattr(app_analytics.influxdb_wrapper, "influxdb_client",
                        mock_influxdb_client)

    mock_query_api = mock.MagicMock()
    mock_influxdb_client.query_api.return_value = mock_query_api

    # When
    get_event_list_for_organisation(org_id)

    # Then
    mock_query_api.query.assert_called_once_with(org=influx_org, query=query)
Esempio n. 2
0
def organisation_info(request, organisation_id):
    organisation = get_object_or_404(Organisation, pk=organisation_id)

    template = loader.get_template("sales_dashboard/organisation.html")
    max_seats_form = MaxSeatsForm({
        "max_seats": (0 if (organisation.has_subscription() is False) else
                      organisation.subscription.max_seats)
    })

    event_list, labels = get_event_list_for_organisation(organisation_id)

    context = {
        "organisation": organisation,
        "max_seats_form": max_seats_form,
        "event_list": event_list,
        "traits": mark_safe(json.dumps(event_list["traits"])),
        "identities": mark_safe(json.dumps(event_list["identities"])),
        "flags": mark_safe(json.dumps(event_list["flags"])),
        "labels": mark_safe(json.dumps(labels)),
        "api_calls": {
            # TODO: this could probably be reduced to a single influx request
            #  rather than 3
            range_: get_events_for_organisation(organisation_id,
                                                date_range=range_)
            for range_ in ("24h", "7d", "30d")
        },
    }

    # If self hosted and running without an Influx DB data store, we dont want to/cant show usage
    if settings.INFLUXDB_TOKEN:
        event_list, labels = get_event_list_for_organisation(organisation_id)
        context["event_list"] = event_list
        context["traits"] = mark_safe(json.dumps(event_list["traits"]))
        context["identities"] = mark_safe(json.dumps(event_list["identities"]))
        context["flags"] = mark_safe(json.dumps(event_list["flags"]))
        context["labels"] = mark_safe(json.dumps(labels))

    return HttpResponse(template.render(context, request))
Esempio n. 3
0
def organisation_info(request, organisation_id):
    organisation = get_object_or_404(Organisation, pk=organisation_id)
    event_list, labels = get_event_list_for_organisation(organisation_id)
    template = loader.get_template("sales_dashboard/organisation.html")
    context = {
        "organisation": organisation,
        "event_list": event_list,
        "traits": mark_safe(json.dumps(event_list["traits"])),
        "identities": mark_safe(json.dumps(event_list["identities"])),
        "flags": mark_safe(json.dumps(event_list["flags"])),
        "labels": mark_safe(json.dumps(labels)),
    }

    return HttpResponse(template.render(context, request))
Esempio n. 4
0
def organisation_info(request, organisation_id):
    organisation = get_object_or_404(Organisation, pk=organisation_id)
    event_list, labels = get_event_list_for_organisation(organisation_id)
    template = loader.get_template("sales_dashboard/organisation.html")
    context = {
        "organisation": organisation,
        "event_list": event_list,
        "traits": mark_safe(json.dumps(event_list["traits"])),
        "identities": mark_safe(json.dumps(event_list["identities"])),
        "flags": mark_safe(json.dumps(event_list["flags"])),
        "labels": mark_safe(json.dumps(labels)),
        "api_calls": {
            # TODO: this could probably be reduced to a single influx request
            #  rather than 3
            range_: get_events_for_organisation(organisation_id,
                                                date_range=range_)
            for range_ in ("24h", "7d", "30d")
        },
    }

    return HttpResponse(template.render(context, request))