123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /*
- htop - LoadAverageMeter.c
- (C) 2004-2011 Hisham H. Muhammad
- Released under the GNU GPLv2+, see the COPYING file
- in the source distribution for its full text.
- */
- #include "config.h" // IWYU pragma: keep
- #include "LoadAverageMeter.h"
- #include "CRT.h"
- #include "Machine.h"
- #include "Object.h"
- #include "Platform.h"
- #include "RichString.h"
- #include "XUtils.h"
- static const int LoadAverageMeter_attributes[] = {
- LOAD_AVERAGE_ONE,
- LOAD_AVERAGE_FIVE,
- LOAD_AVERAGE_FIFTEEN
- };
- static const int LoadMeter_attributes[] = {
- LOAD
- };
- static const int OK_attributes[] = {
- METER_VALUE_OK
- };
- static const int Medium_attributes[] = {
- METER_VALUE_WARN
- };
- static const int High_attributes[] = {
- METER_VALUE_ERROR
- };
- static void LoadAverageMeter_updateValues(Meter* this) {
- Platform_getLoadAverage(&this->values[0], &this->values[1], &this->values[2]);
- // only show bar for 1min value
- this->curItems = 1;
- // change bar color and total based on value
- if (this->values[0] < 1.0) {
- this->curAttributes = OK_attributes;
- this->total = 1.0;
- } else if (this->values[0] < this->host->activeCPUs) {
- this->curAttributes = Medium_attributes;
- this->total = this->host->activeCPUs;
- } else {
- this->curAttributes = High_attributes;
- this->total = 2 * this->host->activeCPUs;
- }
- xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%.2f/%.2f/%.2f", this->values[0], this->values[1], this->values[2]);
- }
- static void LoadAverageMeter_display(const Object* cast, RichString* out) {
- const Meter* this = (const Meter*)cast;
- char buffer[20];
- int len;
- len = xSnprintf(buffer, sizeof(buffer), "%.2f ", this->values[0]);
- RichString_appendnAscii(out, CRT_colors[LOAD_AVERAGE_ONE], buffer, len);
- len = xSnprintf(buffer, sizeof(buffer), "%.2f ", this->values[1]);
- RichString_appendnAscii(out, CRT_colors[LOAD_AVERAGE_FIVE], buffer, len);
- len = xSnprintf(buffer, sizeof(buffer), "%.2f ", this->values[2]);
- RichString_appendnAscii(out, CRT_colors[LOAD_AVERAGE_FIFTEEN], buffer, len);
- }
- static void LoadMeter_updateValues(Meter* this) {
- double five, fifteen;
- Platform_getLoadAverage(&this->values[0], &five, &fifteen);
- // change bar color and total based on value
- if (this->values[0] < 1.0) {
- this->curAttributes = OK_attributes;
- this->total = 1.0;
- } else if (this->values[0] < this->host->activeCPUs) {
- this->curAttributes = Medium_attributes;
- this->total = this->host->activeCPUs;
- } else {
- this->curAttributes = High_attributes;
- this->total = 2 * this->host->activeCPUs;
- }
- xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%.2f", this->values[0]);
- }
- static void LoadMeter_display(const Object* cast, RichString* out) {
- const Meter* this = (const Meter*)cast;
- char buffer[20];
- int len;
- len = xSnprintf(buffer, sizeof(buffer), "%.2f ", this->values[0]);
- RichString_appendnAscii(out, CRT_colors[LOAD], buffer, len);
- }
- const MeterClass LoadAverageMeter_class = {
- .super = {
- .extends = Class(Meter),
- .delete = Meter_delete,
- .display = LoadAverageMeter_display,
- },
- .updateValues = LoadAverageMeter_updateValues,
- .defaultMode = TEXT_METERMODE,
- .supportedModes = METERMODE_DEFAULT_SUPPORTED,
- .maxItems = 3,
- .total = 100.0,
- .attributes = LoadAverageMeter_attributes,
- .name = "LoadAverage",
- .uiName = "Load average",
- .description = "Load averages: 1 minute, 5 minutes, 15 minutes",
- .caption = "Load average: "
- };
- const MeterClass LoadMeter_class = {
- .super = {
- .extends = Class(Meter),
- .delete = Meter_delete,
- .display = LoadMeter_display,
- },
- .updateValues = LoadMeter_updateValues,
- .defaultMode = TEXT_METERMODE,
- .supportedModes = METERMODE_DEFAULT_SUPPORTED,
- .maxItems = 1,
- .total = 100.0,
- .attributes = LoadMeter_attributes,
- .name = "Load",
- .uiName = "Load",
- .description = "Load: average of ready processes in the last minute",
- .caption = "Load: "
- };
|