winlin

refine system stat, use fgets and sscanf.

@@ -393,18 +393,15 @@ bool srs_get_disk_vmstat_stat(SrsDiskStat& r) @@ -393,18 +393,15 @@ bool srs_get_disk_vmstat_stat(SrsDiskStat& r)
393 r.ok = false; 393 r.ok = false;
394 r.sample_time = srs_get_system_time_ms(); 394 r.sample_time = srs_get_system_time_ms();
395 395
396 - for (;;) {  
397 - static char label[64];  
398 - static unsigned long value;  
399 - int ret = fscanf(f, "%64s %lu\n", label, &value);  
400 -  
401 - if (ret == EOF) {  
402 - break;  
403 - }  
404 -  
405 - if (strcmp("pgpgin", label) == 0) { 396 + static char buf[1024];
  397 + while (fgets(buf, sizeof(buf), f)) {
  398 + unsigned long value = 0;
  399 + int ret = sscanf(buf, "%*s %lu\n", &value);
  400 + srs_assert(ret == 1);
  401 +
  402 + if (strncmp(buf, "pgpgin ", 7) == 0) {
406 r.pgpgin = value; 403 r.pgpgin = value;
407 - } else if (strcmp("pgpgout", label) == 0) { 404 + } else if (strncmp(buf, "pgpgout ", 8) == 0) {
408 r.pgpgout = value; 405 r.pgpgout = value;
409 } 406 }
410 } 407 }
@@ -418,8 +415,6 @@ bool srs_get_disk_vmstat_stat(SrsDiskStat& r) @@ -418,8 +415,6 @@ bool srs_get_disk_vmstat_stat(SrsDiskStat& r)
418 415
419 bool srs_get_disk_diskstats_stat(SrsDiskStat& r) 416 bool srs_get_disk_diskstats_stat(SrsDiskStat& r)
420 { 417 {
421 - // %4d %4d %31s %u  
422 - //  
423 FILE* f = fopen("/proc/diskstats", "r"); 418 FILE* f = fopen("/proc/diskstats", "r");
424 if (f == NULL) { 419 if (f == NULL) {
425 srs_warn("open vmstat failed, ignore"); 420 srs_warn("open vmstat failed, ignore");
@@ -430,7 +425,6 @@ bool srs_get_disk_diskstats_stat(SrsDiskStat& r) @@ -430,7 +425,6 @@ bool srs_get_disk_diskstats_stat(SrsDiskStat& r)
430 r.sample_time = srs_get_system_time_ms(); 425 r.sample_time = srs_get_system_time_ms();
431 426
432 static char buf[1024]; 427 static char buf[1024];
433 -  
434 while (fgets(buf, sizeof(buf), f)) { 428 while (fgets(buf, sizeof(buf), f)) {
435 unsigned int major = 0; 429 unsigned int major = 0;
436 unsigned int minor = 0; 430 unsigned int minor = 0;
@@ -452,11 +446,9 @@ bool srs_get_disk_diskstats_stat(SrsDiskStat& r) @@ -452,11 +446,9 @@ bool srs_get_disk_diskstats_stat(SrsDiskStat& r)
452 &major, &minor, name, &rd_ios, &rd_merges, 446 &major, &minor, name, &rd_ios, &rd_merges,
453 &rd_sectors, &rd_ticks, &wr_ios, &wr_merges, 447 &rd_sectors, &rd_ticks, &wr_ios, &wr_merges,
454 &wr_sectors, &wr_ticks, &nb_current, &ticks, &aveq); 448 &wr_sectors, &wr_ticks, &nb_current, &ticks, &aveq);
  449 + srs_assert(ret == 14);
455 450
456 - if (ret == EOF) {  
457 - break;  
458 - }  
459 - 451 + // TODO: FIMXE: config it.
460 if (strcmp("sda", name) == 0) { 452 if (strcmp("sda", name) == 0) {
461 r.rd_ios += rd_ios; 453 r.rd_ios += rd_ios;
462 r.rd_merges += rd_merges; 454 r.rd_merges += rd_merges;
@@ -541,27 +533,23 @@ void srs_update_meminfo() @@ -541,27 +533,23 @@ void srs_update_meminfo()
541 SrsMemInfo& r = _srs_system_meminfo; 533 SrsMemInfo& r = _srs_system_meminfo;
542 r.ok = false; 534 r.ok = false;
543 535
544 - for (;;) {  
545 - static char label[64]; 536 + static char buf[1024];
  537 + while (fgets(buf, sizeof(buf), f)) {
546 static unsigned long value; 538 static unsigned long value;
547 - static char postfix[64];  
548 - int ret = fscanf(f, "%64s %lu %64s\n", label, &value, postfix);  
549 -  
550 - if (ret == EOF) {  
551 - break;  
552 - } 539 + int ret = sscanf(buf, "%*s %lu", &value);
  540 + srs_assert(ret == 1);
553 541
554 - if (strcmp("MemTotal:", label) == 0) { 542 + if (strncmp(buf, "MemTotal:", 9) == 0) {
555 r.MemTotal = value; 543 r.MemTotal = value;
556 - } else if (strcmp("MemFree:", label) == 0) { 544 + } else if (strncmp(buf, "MemFree:", 8) == 0) {
557 r.MemFree = value; 545 r.MemFree = value;
558 - } else if (strcmp("Buffers:", label) == 0) { 546 + } else if (strncmp(buf, "Buffers:", 8) == 0) {
559 r.Buffers = value; 547 r.Buffers = value;
560 - } else if (strcmp("Cached:", label) == 0) { 548 + } else if (strncmp(buf, "Cached:", 7) == 0) {
561 r.Cached = value; 549 r.Cached = value;
562 - } else if (strcmp("SwapTotal:", label) == 0) { 550 + } else if (strncmp(buf, "SwapTotal:", 10) == 0) {
563 r.SwapTotal = value; 551 r.SwapTotal = value;
564 - } else if (strcmp("SwapFree:", label) == 0) { 552 + } else if (strncmp(buf, "SwapFree:", 9) == 0) {
565 r.SwapFree = value; 553 r.SwapFree = value;
566 } 554 }
567 } 555 }