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
}