예제 #1
0
def get_queue_metrics(
    call: APICall, company_id, req_model: GetMetricsRequest
) -> GetMetricsResponse:
    ret = queue_bll.metrics.get_queue_metrics(
        company_id=company_id,
        from_date=req_model.from_date,
        to_date=req_model.to_date,
        interval=req_model.interval,
        queue_ids=req_model.queue_ids,
    )

    queue_dicts = {
        queue: extract_properties_to_lists(
            ["date", "avg_waiting_time", "queue_length"], data
        )
        for queue, data in ret.items()
    }
    return GetMetricsResponse(
        queues=[
            QueueMetrics(
                queue=queue,
                dates=data["date"],
                avg_waiting_times=data["avg_waiting_time"],
                queue_lengths=data["queue_length"],
            )
            if data
            else QueueMetrics(queue=queue)
            for queue, data in queue_dicts.items()
        ]
    )
예제 #2
0
 def get_iterations_data(self, iter_buckets: dict) -> dict:
     """
     Convert a list of bucket entries to `x`s array and `y`s array
     """
     return extract_properties_to_lists(
         ("x", "y"),
         iter_buckets[self.name]["buckets"],
         self._get_iterations_data_single,
     )
예제 #3
0
 def get_activity_series(active_only: bool = False) -> ActivityReportSeries:
     ret = worker_bll.stats.get_activity_report(
         company_id=company_id,
         from_date=req_model.from_date,
         to_date=req_model.to_date,
         interval=req_model.interval,
         active_only=active_only,
     )
     if not ret:
         return ActivityReportSeries(dates=[], counts=[])
     count_by_date = extract_properties_to_lists(["date", "count"], ret)
     return ActivityReportSeries(dates=count_by_date["date"],
                                 counts=count_by_date["count"])
예제 #4
0
 def _get_variant_metric_stats(
     metric: str,
     agg_names: Sequence[str],
     stats: Sequence[dict],
     variant: Optional[str] = None,
 ) -> MetricStats:
     stat_by_name = extract_properties_to_lists(agg_names, stats)
     return MetricStats(
         metric=metric,
         variant=variant,
         dates=stat_by_name["date"],
         stats=[
             AggregationStats(aggregation=name, values=aggs)
             for name, aggs in stat_by_name.items() if name != "date"
         ],
     )
예제 #5
0
            task_id=task_id,
            batch_size=min(batch_size, 10_000),
            navigate_earlier=False,
            from_key_value=from_key_value,
            metric_variants=metric_variants,
            key=key,
        )
        if not res.events:
            break
        events.extend(res.events)
        from_key_value = str(events[-1][scalar_key.field])

    key = str(key)
    variants = {
        variant: extract_properties_to_lists(["value", scalar_key.field],
                                             events,
                                             target_keys=["y", key])
        for variant, events in bucketize(events, key=itemgetter(
            "variant")).items()
    }

    call.kpis["events"] = len(events)

    scroll = ScalarMetricsIterRawScroll(
        from_key_value=str(events[-1][scalar_key.field]) if events else None,
        total=total,
        request=request,
    )

    return make_response(
        returned=len(events),