toString2 static method

String toString2(
  1. List<Counter>? counters,
  2. String? source,
  3. String? instance
)

Converts the given counters to a string that is returned by Prometheus metrics service.

  • counters a list of counters to convert.
  • source a source (context) name.
  • instance a unique instance name (usually a host name).

Implementation

static String toString2(
    List<Counter>? counters, String? source, String? instance) {
  if (counters == null || counters.isEmpty) return '';

  var builder = '';

  for (var counter in counters) {
    var counterName = _parseCounterName(counter);
    var labels = _generateCounterLabel(counter, source, instance);

    switch (counter.type) {
      case CounterType.Increment:
        builder += '# TYPE $counterName gauge\n';
        builder +=
            '$counterName$labels ${StringConverter.toString2(counter.count)}\n';
        break;
      case CounterType.Interval:
        builder += '# TYPE ${counterName}_max gauge\n';
        builder +=
            '${counterName}_max$labels ${StringConverter.toString2(counter.max)}\n';
        builder += '# TYPE ${counterName}_min gauge\n';
        builder +=
            '${counterName}_min$labels ${StringConverter.toString2(counter.min)}\n';
        builder += '# TYPE ${counterName}_average gauge\n';
        builder +=
            '${counterName}_average$labels ${StringConverter.toString2(counter.average)}\n';
        builder += '# TYPE ${counterName}_count gauge\n';
        builder +=
            '${counterName}_count$labels ${StringConverter.toString2(counter.count)}\n';
        break;
      case CounterType.LastValue:
        builder += '# TYPE $counterName gauge\n';
        builder +=
            '$counterName$labels ${StringConverter.toString2(counter.last)}\n';
        break;
      case CounterType.Statistics:
        builder += '# TYPE ${counterName}_max gauge\n';
        builder +=
            '${counterName}_max$labels ${StringConverter.toString2(counter.max)}\n';
        builder += '# TYPE ${counterName}_min gauge\n';
        builder +=
            '${counterName}_min$labels ${StringConverter.toString2(counter.min)}\n';
        builder += '# TYPE ${counterName}_average gauge\n';
        builder +=
            '${counterName}_average$labels ${StringConverter.toString2(counter.average)}\n';
        builder += '# TYPE ${counterName}_count gauge\n';
        builder +=
            '${counterName}_count$labels ${StringConverter.toString2(counter.count)}\n';
        break;
      case CounterType
            .Timestamp: // Prometheus doesn't support non-numeric metrics
        builder += '# TYPE $counterName gauge\n'; //' untyped\n';
        builder +=
            '$counterName$labels ${StringConverter.toString2(counter.time?.millisecondsSinceEpoch)}\n';
        break;
    }
  }

  return builder;
}