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;
}