From 01f5b892785014db30db4d6b4b7c23e042c7ffe4 Mon Sep 17 00:00:00 2001 From: Nathan Scott Date: Wed, 7 Jul 2021 16:57:03 +1000 Subject: Pretty-print values in the PCP DynamicMeter code Several improvements to the way values are displayed in the PCP platform DynamicMeter implementation: - handle the initial 'caption' setting as with regular meters, this required a new meter callback because we no longer have just a single meter caption for the DynamicMeter case - if no label is provided for a metric in a configuration file use the short form metric name as a fallback - honour the suffix setting in the configuration file - convert metric values to the canonical units for htop (kbyte and seconds), and use Meter_humanUnit when it makes sense to do so. Also improves the handling of fatal string error messages in a couple of places, thanks to BenBE for the review feedback. --- DynamicMeter.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'DynamicMeter.c') diff --git a/DynamicMeter.c b/DynamicMeter.c index 7b39fdaa..3b567a53 100644 --- a/DynamicMeter.c +++ b/DynamicMeter.c @@ -70,12 +70,27 @@ static void DynamicMeter_display(const Object* cast, RichString* out) { Platform_dynamicMeterDisplay(meter, out); } +static const char* DynamicMeter_getCaption(const Meter* this) { + const ProcessList* pl = this->pl; + const DynamicMeter* meter = Hashtable_get(pl->dynamicMeters, this->param); + if (meter) + return meter->caption ? meter->caption : meter->name; + return this->caption; +} + static void DynamicMeter_getUiName(const Meter* this, char* name, size_t length) { const ProcessList* pl = this->pl; const DynamicMeter* meter = Hashtable_get(pl->dynamicMeters, this->param); if (meter) { - const char* uiName = meter->caption ? meter->caption : meter->name; - xSnprintf(name, length, "%s", uiName); + const char* uiName = meter->caption; + if (uiName) { + int len = strlen(uiName); + if (len > 2 && uiName[len-2] == ':') + len -= 2; + xSnprintf(name, length, "%.*s", len, uiName); + } else { + xSnprintf(name, length, "%s", meter->name); + } } } @@ -87,6 +102,7 @@ const MeterClass DynamicMeter_class = { }, .init = DynamicMeter_init, .updateValues = DynamicMeter_updateValues, + .getCaption = DynamicMeter_getCaption, .getUiName = DynamicMeter_getUiName, .defaultMode = TEXT_METERMODE, .maxItems = 0, -- cgit v1.2.3