| // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'package:analysis_server/src/analytics/percentile_calculator.dart'; | |
| /// Data about the requests that have been responded to that have the same | |
| /// method. | |
| class RequestData { | |
| /// The name of the requests. | |
| final String method; | |
| /// The percentile calculator for latency times. The _latency time_ is the | |
| /// time from when the client sent the request until the time the server | |
| /// started processing the request. | |
| final PercentileCalculator latencyTimes = PercentileCalculator(); | |
| /// The percentile calculator for response times. The _response time_ is the | |
| /// time from when the server started processing the request until the time | |
| /// the response was sent. | |
| final PercentileCalculator responseTimes = PercentileCalculator(); | |
| /// A table mapping the names of fields in a request's parameters to the | |
| /// percentile calculators related to the value of the parameter (such as the | |
| /// length of a list). | |
| final Map<String, PercentileCalculator> additionalPercentiles = {}; | |
| /// A table mapping the name of a field in a request's parameters and the name | |
| /// of an enum constant to the number of times that the given constant was | |
| /// used as the value of the field. | |
| final Map<String, Map<String, int>> additionalEnumCounts = {}; | |
| /// Initialize a newly create data holder for requests with the given | |
| /// [method]. | |
| RequestData(this.method); | |
| /// Record the occurrence of the enum constant with the given [enumName] for | |
| /// the field with the given [name]. | |
| void addEnumValue<E>(String name, String enumName) { | |
| var counts = additionalEnumCounts.putIfAbsent(name, () => {}); | |
| counts[enumName] = (counts[enumName] ?? 0) + 1; | |
| } | |
| /// Record a [value] for the field with the given [name]. | |
| void addValue(String name, int value) { | |
| additionalPercentiles | |
| .putIfAbsent(name, PercentileCalculator.new) | |
| .addValue(value); | |
| } | |
| } |