mirror of
https://github.com/otakuto/crazydiskinfo.git
synced 2025-07-26 02:48:32 +00:00
fix buggy n/a values
This commit is contained in:
parent
4538295434
commit
e8d09408a3
1 changed files with 139 additions and 58 deletions
197
main.cpp
197
main.cpp
|
@ -43,10 +43,12 @@ public:
|
||||||
std::string model;
|
std::string model;
|
||||||
std::string firmware;
|
std::string firmware;
|
||||||
std::string serial;
|
std::string serial;
|
||||||
uint64_t size;
|
//TODO
|
||||||
uint64_t powerOnCount;
|
//use std::optional
|
||||||
uint64_t powerOnHour;
|
std::pair<bool, uint64_t> size;
|
||||||
double temperature;
|
std::pair<bool, uint64_t> powerOnCount;
|
||||||
|
std::pair<bool, uint64_t> powerOnHour;
|
||||||
|
std::pair<bool, double> temperature;
|
||||||
|
|
||||||
std::vector<Attribute> attribute;
|
std::vector<Attribute> attribute;
|
||||||
|
|
||||||
|
@ -65,14 +67,45 @@ public:
|
||||||
serial = data->serial;
|
serial = data->serial;
|
||||||
|
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
sk_disk_get_size(skdisk, &value);
|
if (!sk_disk_get_size(skdisk, &value))
|
||||||
size = value;
|
{
|
||||||
sk_disk_smart_get_power_cycle(skdisk, &value);
|
std::get<0>(size) = true;
|
||||||
powerOnCount = value;
|
std::get<1>(size) = value;
|
||||||
sk_disk_smart_get_power_on(skdisk, &value);
|
}
|
||||||
powerOnHour = value / (1000llu * 60llu * 60llu);
|
else
|
||||||
sk_disk_smart_get_temperature(skdisk, &value);
|
{
|
||||||
temperature = (double)(value - 273150llu) / 1000.0;
|
std::get<0>(size) = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sk_disk_smart_get_power_cycle(skdisk, &value))
|
||||||
|
{
|
||||||
|
std::get<0>(powerOnCount) = true;
|
||||||
|
std::get<1>(powerOnCount) = value;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::get<0>(powerOnCount) = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sk_disk_smart_get_power_on(skdisk, &value))
|
||||||
|
{
|
||||||
|
std::get<0>(powerOnHour) = true;
|
||||||
|
std::get<1>(powerOnHour) = value / (1000llu * 60llu * 60llu);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::get<0>(powerOnHour) = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sk_disk_smart_get_temperature(skdisk, &value))
|
||||||
|
{
|
||||||
|
std::get<0>(temperature) = true;
|
||||||
|
std::get<1>(temperature) = (double)(value - 273150llu) / 1000.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::get<0>(temperature) = false;
|
||||||
|
}
|
||||||
|
|
||||||
sk_disk_smart_parse_attributes(skdisk, [](SkDisk * skdisk, SkSmartAttributeParsedData const * data, void * userdata)
|
sk_disk_smart_parse_attributes(skdisk, [](SkDisk * skdisk, SkSmartAttributeParsedData const * data, void * userdata)
|
||||||
{
|
{
|
||||||
|
@ -173,11 +206,20 @@ void drawDeviceBar(WINDOW * window, std::vector<SMART> const & smartList, int se
|
||||||
mvwprintw(window, 0, x, "%-7s", healthToString(smartToHealth(smartList[i])).c_str());
|
mvwprintw(window, 0, x, "%-7s", healthToString(smartToHealth(smartList[i])).c_str());
|
||||||
wattroff(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smartList[i]))));
|
wattroff(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smartList[i]))));
|
||||||
|
|
||||||
wattrset(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(smartList[i].temperature))));
|
if (std::get<0>(smartList[i].temperature))
|
||||||
mvwprintw(window, 1, x, "%.1f ", smartList[i].temperature);
|
{
|
||||||
waddch(window, ACS_DEGREE);
|
wattrset(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smartList[i].temperature)))));
|
||||||
waddstr(window, "C");
|
mvwprintw(window, 1, x, "%.1f ", smartList[i].temperature);
|
||||||
wattroff(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(smartList[i].temperature))));
|
waddch(window, ACS_DEGREE);
|
||||||
|
waddstr(window, "C");
|
||||||
|
wattroff(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smartList[i].temperature)))));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mvwprintw(window, 1, x, "-- ");
|
||||||
|
waddch(window, ACS_DEGREE);
|
||||||
|
waddstr(window, "C");
|
||||||
|
}
|
||||||
|
|
||||||
if (i == select)
|
if (i == select)
|
||||||
{
|
{
|
||||||
|
@ -203,27 +245,35 @@ void drawStatus(WINDOW * window, SMART const & smart)
|
||||||
{
|
{
|
||||||
wresize(window, 10 + smart.attribute.size(), STATUS_WIDTH);
|
wresize(window, 10 + smart.attribute.size(), STATUS_WIDTH);
|
||||||
wborder(window, '|', '|', '-', '-', '+', '+', '+', '+');
|
wborder(window, '|', '|', '-', '-', '+', '+', '+', '+');
|
||||||
|
if (std::get<0>(smart.size))
|
||||||
{
|
{
|
||||||
std::vector<std::string> unit = {{"Byte", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}};
|
std::vector<std::string> unit = {{"Byte", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}};
|
||||||
int u = 0;
|
int u = 0;
|
||||||
double size = smart.size;
|
double size = std::get<1>(smart.size);
|
||||||
while (true)
|
while (true)
|
||||||
{
|
|
||||||
double old = size;
|
|
||||||
size /= 1024;
|
|
||||||
if (size < 1.0)
|
|
||||||
{
|
{
|
||||||
size = old;
|
double old = size;
|
||||||
break;
|
size /= 1024;
|
||||||
|
if (size < 1.0)
|
||||||
|
{
|
||||||
|
size = old;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++u;
|
||||||
}
|
}
|
||||||
++u;
|
char s[STATUS_WIDTH];
|
||||||
|
int len = snprintf(s, STATUS_WIDTH, " %s [%.1f %s] ", smart.model.c_str(), size, unit[u].c_str());
|
||||||
|
wattrset(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
|
mvwprintw(window, 0, (STATUS_WIDTH - len) / 2, "%s", s);
|
||||||
|
wattroff(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
}
|
}
|
||||||
char s[STATUS_WIDTH];
|
else
|
||||||
int len = snprintf(s, STATUS_WIDTH, " %s [%.1f %s] ", smart.model.c_str(), size, unit[u].c_str());
|
{
|
||||||
|
char s[STATUS_WIDTH];
|
||||||
wattrset(window, COLOR_PAIR(4) | A_BOLD);
|
int len = snprintf(s, STATUS_WIDTH, " %s [--] ", smart.model.c_str());
|
||||||
mvwprintw(window, 0, (STATUS_WIDTH - len) / 2, "%s", s);
|
wattrset(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
wattroff(window, COLOR_PAIR(4) | A_BOLD);
|
mvwprintw(window, 0, (STATUS_WIDTH - len) / 2, "%s", s);
|
||||||
|
wattroff(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
}
|
}
|
||||||
|
|
||||||
wattrset(window, COLOR_PAIR(4));
|
wattrset(window, COLOR_PAIR(4));
|
||||||
|
@ -250,32 +300,59 @@ void drawStatus(WINDOW * window, SMART const & smart)
|
||||||
mvwprintw(window, 3, 2 + ((sizeof("| |") - healthToString(smartToHealth(smart)).length()) / 2), "%s", healthToString(smartToHealth(smart)).c_str());
|
mvwprintw(window, 3, 2 + ((sizeof("| |") - healthToString(smartToHealth(smart)).length()) / 2), "%s", healthToString(smartToHealth(smart)).c_str());
|
||||||
wattroff(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smart))));
|
wattroff(window, COLOR_PAIR(1 + static_cast<int>(smartToHealth(smart))));
|
||||||
|
|
||||||
wattrset(window, COLOR_PAIR(4));
|
if (std::get<0>(smart.temperature))
|
||||||
mvwprintw(window, 5, 1, "Temperature");
|
{
|
||||||
wattroff(window, COLOR_PAIR(4));
|
wattrset(window, COLOR_PAIR(4));
|
||||||
wattrset(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(smart.temperature))));
|
mvwprintw(window, 5, 1, "Temperature");
|
||||||
mvwprintw(window, 6, 2, " %0.1f ", smart.temperature);
|
wattroff(window, COLOR_PAIR(4));
|
||||||
waddch(window, ACS_DEGREE);
|
wattrset(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smart.temperature)))));
|
||||||
waddstr(window, "C ");
|
mvwprintw(window, 6, 2, " %0.1f ", std::get<1>(smart.temperature));
|
||||||
wattroff(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(smart.temperature))));
|
waddch(window, ACS_DEGREE);
|
||||||
|
waddstr(window, "C ");
|
||||||
|
wattroff(window, COLOR_PAIR(1 + static_cast<int>(temperatureToHealth(std::get<1>(smart.temperature)))));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mvwprintw(window, 5, 1, "Temperature");
|
||||||
|
mvwprintw(window, 6, 2, " -- ");
|
||||||
|
waddch(window, ACS_DEGREE);
|
||||||
|
waddstr(window, "C ");
|
||||||
|
}
|
||||||
|
|
||||||
wattrset(window, COLOR_PAIR(4));
|
if (std::get<0>(smart.powerOnCount))
|
||||||
mvwprintw(window, 2, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Count:");
|
{
|
||||||
wattrset(window, COLOR_PAIR(4) | A_BOLD);
|
wattrset(window, COLOR_PAIR(4));
|
||||||
wprintw(window, " %llu ", smart.powerOnCount);
|
mvwprintw(window, 2, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Count:");
|
||||||
wattroff(window, COLOR_PAIR(4) | A_BOLD);
|
wattroff(window, COLOR_PAIR(4));
|
||||||
wattrset(window, COLOR_PAIR(4));
|
wattrset(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
wprintw(window, "count");
|
wprintw(window, " %llu ", std::get<1>(smart.powerOnCount));
|
||||||
|
wattroff(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
|
wattrset(window, COLOR_PAIR(4));
|
||||||
|
wprintw(window, "count");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mvwprintw(window, 2, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Count:");
|
||||||
|
wprintw(window, " -- count");
|
||||||
|
}
|
||||||
|
|
||||||
wattrset(window, COLOR_PAIR(4));
|
if (std::get<0>(smart.powerOnHour))
|
||||||
mvwprintw(window, 3, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Hours:");
|
{
|
||||||
wattroff(window, COLOR_PAIR(4));
|
wattrset(window, COLOR_PAIR(4));
|
||||||
wattrset(window, COLOR_PAIR(4) | A_BOLD);
|
mvwprintw(window, 3, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Hours:");
|
||||||
wprintw(window, " %llu ", smart.powerOnHour);
|
wattroff(window, COLOR_PAIR(4));
|
||||||
wattroff(window, COLOR_PAIR(4) | A_BOLD);
|
wattrset(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
wattrset(window, COLOR_PAIR(4));
|
wprintw(window, " %llu ", std::get<1>(smart.powerOnHour));
|
||||||
wprintw(window, "hours");
|
wattroff(window, COLOR_PAIR(4) | A_BOLD);
|
||||||
wattroff(window, COLOR_PAIR(4));
|
wattrset(window, COLOR_PAIR(4));
|
||||||
|
wprintw(window, "hours");
|
||||||
|
wattroff(window, COLOR_PAIR(4));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mvwprintw(window, 3, (int)(STATUS_WIDTH * (3.0 / 5)), "Power On Hours:");
|
||||||
|
wprintw(window, " -- hours");
|
||||||
|
}
|
||||||
|
|
||||||
wattrset(window, COLOR_PAIR(7));
|
wattrset(window, COLOR_PAIR(7));
|
||||||
mvwprintw(window, 8, 1, " Status ID AttributeName Current Worst Threshold Raw Values ");
|
mvwprintw(window, 8, 1, " Status ID AttributeName Current Worst Threshold Raw Values ");
|
||||||
|
@ -340,7 +417,9 @@ int main()
|
||||||
smart_ret = sk_disk_smart_is_available(skdisk, &b);
|
smart_ret = sk_disk_smart_is_available(skdisk, &b);
|
||||||
sk_disk_free(skdisk);
|
sk_disk_free(skdisk);
|
||||||
if (smart_ret < 0)
|
if (smart_ret < 0)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (b)
|
if (b)
|
||||||
{
|
{
|
||||||
smartList.push_back(SMART(std::string("/dev/") + std::string(e->d_name)));
|
smartList.push_back(SMART(std::string("/dev/") + std::string(e->d_name)));
|
||||||
|
@ -375,10 +454,12 @@ int main()
|
||||||
doupdate();
|
doupdate();
|
||||||
};
|
};
|
||||||
update();
|
update();
|
||||||
|
|
||||||
{
|
{
|
||||||
struct sigaction s = {{actionWINCH}};
|
struct sigaction s = {{actionWINCH}};
|
||||||
sigaction(SIGWINCH, &s, nullptr);
|
sigaction(SIGWINCH, &s, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
switch (wgetch(windowDeviceBar))
|
switch (wgetch(windowDeviceBar))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue