| | |
| | | |
| | | int status_main(int argc, char const *argv[]) |
| | | { |
| | | auto &shm = BHomeShm(); |
| | | AppArg args(argc, argv); |
| | | auto shm_name = args.Get("shm", BHomeShm().name()); |
| | | auto shm_size = std::atol(args.Get("size", "").c_str()); |
| | | if (shm_size <= 0 || shm_size > 512) { |
| | | shm_size = 50; |
| | | } |
| | | auto DisplayName = [&]() -> std::string { |
| | | if (shm_name == BHomeShm().name()) { |
| | | return "[bhome shm]"; |
| | | } else { |
| | | return shm_name; |
| | | } |
| | | }; |
| | | printf("monitoring shm : %s, size : %ldM\n", DisplayName().c_str(), shm_size); |
| | | |
| | | SharedMemory shm(shm_name, 1024 * 1024 * shm_size); |
| | | std::atomic<bool> run(true); |
| | | |
| | | auto Now = []() { return steady_clock::now(); }; |
| | |
| | | auto showStatus = [&]() { |
| | | auto next = Now(); |
| | | const uint64_t start = ToMs(next); |
| | | auto last = 0; |
| | | auto last = 0ul; |
| | | while (run) { |
| | | std::this_thread::sleep_until(next); |
| | | auto passed = ToMs(next) - start; |
| | |
| | | int nkb = left / Kb; |
| | | int nb = left - nkb * Kb; |
| | | char buf[64] = {0}; |
| | | int n = sprintf(buf, " %4dMb %4dKb %4dB", nmb, nkb, nb); |
| | | int start = (nmb > 0) ? 0 : ((nkb > 0) ? 7 : 14); |
| | | int n = sprintf(buf, " %4dM%4dK%4dB", nmb, nkb, nb); |
| | | int start = (nmb > 0) ? 0 : ((nkb > 0) ? 5 : 10); |
| | | buf[start] = sign; |
| | | return std::string(buf + start); |
| | | }; |
| | | |
| | | char buf[200] = "\n"; |
| | | auto Print = [&](bool new_line) { |
| | | int n = sprintf(buf, "\r%6ds avail : %12ld = %s %6ds", sec, cur, Pretty(cur).c_str() + 1, sec); |
| | | int n = sprintf(buf, "\r%6lds avail : %12ld = %s %6lds", sec, cur, Pretty(cur).c_str() + 1, sec); |
| | | printf("%s", buf); |
| | | if (new_line) { |
| | | auto diff = cur - last; |
| | | printf(" (%+ld = %s)\n", diff, Pretty(diff).c_str()); |
| | | printf(" (%+6ld = %s)\n", diff, Pretty(diff).c_str()); |
| | | printf("%s", buf); |
| | | } |
| | | fflush(stdout); |