toString2 static method
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;
}