@cryptotaxi247 / netdata-1 / commits / fdc28d505

fix for apps.plugin when update_every is not 1

Costa Tsaousis (ktsaou) committed Jul 8, 2016 at 03:49 UTC fdc28d5054fc44bb096357f5c114dc0f0edd31ba
1 file changed +34 -32
src/apps_plugin.c
+34 -32
@@ -708,35 +708,35 @@ int read_proc_pid_stat(struct pid_stat *p) {
708
709 last = p->minflt_raw;
710 p->minflt_raw = strtoull(procfile_lineword(ff, 0, 9+i), NULL, 10);
711 - p->minflt = (p->minflt_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
711 + p->minflt = (p->minflt_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
712
713 last = p->cminflt_raw;
714 p->cminflt_raw = strtoull(procfile_lineword(ff, 0, 10+i), NULL, 10);
715 - p->cminflt = (p->cminflt_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
715 + p->cminflt = (p->cminflt_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
716
717 last = p->majflt_raw;
718 p->majflt_raw = strtoull(procfile_lineword(ff, 0, 11+i), NULL, 10);
719 - p->majflt = (p->majflt_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
719 + p->majflt = (p->majflt_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
720
721 last = p->cmajflt_raw;
722 p->cmajflt_raw = strtoull(procfile_lineword(ff, 0, 12+i), NULL, 10);
723 - p->cmajflt = (p->cmajflt_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
723 + p->cmajflt = (p->cmajflt_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
724
725 last = p->utime_raw;
726 p->utime_raw = strtoull(procfile_lineword(ff, 0, 13+i), NULL, 10);
727 - p->utime = (p->utime_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
727 + p->utime = (p->utime_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
728
729 last = p->stime_raw;
730 p->stime_raw = strtoull(procfile_lineword(ff, 0, 14+i), NULL, 10);
731 - p->stime = (p->stime_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
731 + p->stime = (p->stime_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
732
733 last = p->cutime_raw;
734 p->cutime_raw = strtoull(procfile_lineword(ff, 0, 15+i), NULL, 10);
735 - p->cutime = (p->cutime_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
735 + p->cutime = (p->cutime_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
736
737 last = p->cstime_raw;
738 p->cstime_raw = strtoull(procfile_lineword(ff, 0, 16+i), NULL, 10);
739 - p->cstime = (p->cstime_raw - last) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
739 + p->cstime = (p->cstime_raw - last) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
740
741 // p->priority = strtoull(procfile_lineword(ff, 0, 17+i), NULL, 10);
742 // p->nice = strtoull(procfile_lineword(ff, 0, 18+i), NULL, 10);
@@ -861,31 +861,31 @@ int read_proc_pid_io(struct pid_stat *p) {
861
862 last = p->io_logical_bytes_read_raw;
863 p->io_logical_bytes_read_raw = strtoull(procfile_lineword(ff, 0, 1), NULL, 10);
864 - p->io_logical_bytes_read = (p->io_logical_bytes_read_raw - last) * (update_every * 1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
864 + p->io_logical_bytes_read = (p->io_logical_bytes_read_raw - last) * (1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
865
866 last = p->io_logical_bytes_written_raw;
867 p->io_logical_bytes_written_raw = strtoull(procfile_lineword(ff, 1, 1), NULL, 10);
868 - p->io_logical_bytes_written = (p->io_logical_bytes_written_raw - last) * (update_every * 1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
868 + p->io_logical_bytes_written = (p->io_logical_bytes_written_raw - last) * (1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
869
870 last = p->io_read_calls_raw;
871 p->io_read_calls_raw = strtoull(procfile_lineword(ff, 2, 1), NULL, 10);
872 - p->io_read_calls = (p->io_read_calls_raw - last) * (update_every * 1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
872 + p->io_read_calls = (p->io_read_calls_raw - last) * (1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
873
874 last = p->io_write_calls_raw;
875 p->io_write_calls_raw = strtoull(procfile_lineword(ff, 3, 1), NULL, 10);
876 - p->io_write_calls = (p->io_write_calls_raw - last) * (update_every * 1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
876 + p->io_write_calls = (p->io_write_calls_raw - last) * (1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
877
878 last = p->io_storage_bytes_read_raw;
879 p->io_storage_bytes_read_raw = strtoull(procfile_lineword(ff, 4, 1), NULL, 10);
880 - p->io_storage_bytes_read = (p->io_storage_bytes_read_raw - last) * (update_every * 1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
880 + p->io_storage_bytes_read = (p->io_storage_bytes_read_raw - last) * (1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
881
882 last = p->io_storage_bytes_written_raw;
883 p->io_storage_bytes_written_raw = strtoull(procfile_lineword(ff, 5, 1), NULL, 10);
884 - p->io_storage_bytes_written = (p->io_storage_bytes_written_raw - last) * (update_every * 1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
884 + p->io_storage_bytes_written = (p->io_storage_bytes_written_raw - last) * (1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
885
886 last = p->io_cancelled_write_bytes_raw;
887 p->io_cancelled_write_bytes_raw = strtoull(procfile_lineword(ff, 6, 1), NULL, 10);
888 - p->io_cancelled_write_bytes = (p->io_cancelled_write_bytes_raw - last) * (update_every * 1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
888 + p->io_cancelled_write_bytes = (p->io_cancelled_write_bytes_raw - last) * (1000000 * 100) / (p->io_collected_usec - p->last_io_collected_usec);
889
890 if(unlikely(global_iterations_counter == 1)) {
891 p->io_logical_bytes_read = 0;
@@ -1349,25 +1349,25 @@ void process_exited_processes() {
1349
1350 unsigned long long rate;
1351
1352 - rate = (p->utime_raw + p->cutime_raw) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1352 + rate = (p->utime_raw + p->cutime_raw) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1353 remove_exited_child_from_parent(&rate, (pp)?&pp->cutime:NULL, (init)?&init->cutime:NULL, p, pp, 3);
1354 p->cutime_raw = 0;
1355 - p->utime_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (update_every * 1000000 * 100);
1355 + p->utime_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (1000000 * 100);
1356
1357 - rate = (p->stime_raw + p->cstime_raw) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1357 + rate = (p->stime_raw + p->cstime_raw) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1358 remove_exited_child_from_parent(&rate, (pp)?&pp->cstime:NULL, (init)?&init->cstime:NULL, p, pp, 4);
1359 p->cstime_raw = 0;
1360 - p->stime_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (update_every * 1000000 * 100);
1360 + p->stime_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (1000000 * 100);
1361
1362 - rate = (p->minflt_raw + p->cminflt_raw) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1362 + rate = (p->minflt_raw + p->cminflt_raw) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1363 remove_exited_child_from_parent(&rate, (pp)?&pp->cminflt:NULL, (init)?&init->cminflt:NULL, p, pp, 1);
1364 p->cminflt_raw = 0;
1365 - p->minflt_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (update_every * 1000000 * 100);
1365 + p->minflt_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (1000000 * 100);
1366
1367 - rate = (p->majflt_raw + p->cmajflt_raw) * (update_every * 1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1367 + rate = (p->majflt_raw + p->cmajflt_raw) * (1000000 * 100) / (p->stat_collected_usec - p->last_stat_collected_usec);
1368 remove_exited_child_from_parent(&rate, (pp)?&pp->cmajflt:NULL, (init)?&init->cmajflt:NULL, p, pp, 2);
1369 p->cmajflt_raw = 0;
1370 - p->majflt_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (update_every * 1000000 * 100);
1370 + p->majflt_raw = rate * (p->stat_collected_usec - p->last_stat_collected_usec) / (1000000 * 100);
1371 }
1372 }
1373
@@ -1392,6 +1392,8 @@ void link_all_processes_to_their_parents(void) {
1392 }
1393 else if(unlikely(p->ppid != 0))
1394 error("pid %d %s states parent %d, but the later does not exist.", p->pid, p->comm, p->ppid);
1395 +
1396 + p->sortlist = 0;
1397 }
1398 }
1399
@@ -1432,12 +1434,10 @@ void collect_data_for_pid(pid_t pid) {
1434
1435 struct pid_stat *p = get_pid_entry(pid);
1436 if(unlikely(!p || p->read)) return;
1437 + p->read = 1;
1438
1439 // fprintf(stderr, "Reading process %d (%s), sortlist %d\n", p->pid, p->comm, p->sortlist);
1440
1438 - p->read = 1;
1439 - p->sortlist = 0;
1440 -
1441 // --------------------------------------------------------------------
1442 // /proc/<pid>/stat
1443
@@ -1523,8 +1523,10 @@ void collect_data_for_pid(pid_t pid) {
1523 // --------------------------------------------------------------------
1524 // done!
1525
1526 - if(p->ppid && all_pids[p->ppid] && !all_pids[p->ppid]->read)
1527 - error("read process %d (%s), but its parent %d (%s) is not read\n", p->pid, p->comm, all_pids[p->ppid]->pid, all_pids[p->ppid]->comm);
1526 +#ifdef NETDATA_INTERNAL_CHECKS
1527 + if(unlikely(all_pids_count && p->ppid && all_pids[p->ppid] && !all_pids[p->ppid]->read))
1528 + fprintf(stderr, "Read process %d (%s) sortlisted %d, but its parent %d (%s) sortlisted %d, is not read\n", p->pid, p->comm, p->sortlist, all_pids[p->ppid]->pid, all_pids[p->ppid]->comm, all_pids[p->ppid]->sortlist);
1529 +#endif
1530
1531 // mark it as updated
1532 p->updated = 1;
@@ -2042,7 +2044,7 @@ void send_collected_data_to_netdata(struct target *root, const char *type, unsig
2044 // here we try to eliminate them by disabling childs processing either for specific dimensions
2045 // or entirely. Of course, either way, we disable it just a single iteration.
2046
2045 - unsigned long long max = update_every * processors * 100 * 100;
2047 + unsigned long long max = processors * hz * 100;
2048 unsigned long long utime = 0, cutime = 0, stime = 0, cstime = 0, minflt = 0, cminflt = 0, majflt = 0, cmajflt = 0;
2049
2050 for (w = root; w ; w = w->next) {
@@ -2086,7 +2088,7 @@ void send_collected_data_to_netdata(struct target *root, const char *type, unsig
2088
2089 #ifdef NETDATA_INTERNAL_CHECKS
2090 log_date(stderr);
2089 - fprintf(stderr, "Reduced processes utilization (without childs) by %0.2f%% (CPU was %llu)\n", (float)((utime + stime - max * 100.0)/(float)max), (utime + stime) / 100);
2091 + fprintf(stderr, "Reduced processes utilization (without childs) by %0.2f%% (CPU was %llu)\n", (float)(((utime + stime - max) * 100.0)/(float)max), (utime + stime) / 100);
2092 #endif
2093 }
2094
@@ -2443,14 +2445,14 @@ int main(int argc, char **argv)
2445
2446 all_pids_sortlist = calloc(sizeof(pid_t), (size_t)pid_max);
2447 if(!all_pids_sortlist) {
2446 - error("Cannot allocate %lu bytes of memory.", sizeof(pid_t) * pid_max);
2448 + error("Cannot allocate %zu bytes of memory.", sizeof(pid_t) * pid_max);
2449 printf("DISABLE\n");
2450 exit(1);
2451 }
2452
2453 all_pids = calloc(sizeof(struct pid_stat *), (size_t) pid_max);
2454 if(!all_pids) {
2453 - error("Cannot allocate %lu bytes of memory.", sizeof(struct pid_stat *) * pid_max);
2455 + error("Cannot allocate %zu bytes of memory.", sizeof(struct pid_stat *) * pid_max);
2456 printf("DISABLE\n");
2457 exit(1);
2458 }