int nt_trav_user(ntrack_t *nt, int32_t off_count, int32_t max_count, void *udata, nt_trav_user_cb_t callback) { int i, res, count; count = 0; for(i = off_count; i<nt->ui_count; i++) { user_info_t *ui = &nt->ui_base[i]; if(max_count && count >= max_count) { break; } count ++; if(!magic_valid(ui->magic)) { continue; } /* check ui use api */ ui = nt_get_user_by_id(nt, ui->id, ui->magic); if(!ui) { nt_error("[%d %d] not found.\n", ui->id, ui->magic); continue; } res = callback(ui, udata); if(res < 0) { nt_warn("stoped as " FMT_USER_STR " return: %d\n", FMT_USER(ui), res); return 0; } } return count; }
FILE *open_and_lock(const char *fn) { FILE *fp = fopen(fn, "w+"); if(!fp) { nt_error("open '%s' failed: %s\n", fn, strerror(errno)); return NULL; } return fp; }
static int flush_lock(void) { fd_lock = open(fn_stat_lock, O_RDONLY); if(fd_lock == -1) { nt_error("open lock file [%s]\n", fn_stat_lock); return -1; } return 0; }
static int dump_to_file(FILE *fp, char *id, uint64_t recv, uint64_t xmit) { int n; n = fprintf(fp, "[%s] %ld %llu %llu\n", id, time(NULL), recv, xmit); if(n<0) { nt_error("err %p: %s\n", fp, strerror(errno)); } return n; }
static int trav_priv_init(trav_priv_t *ptrav, const char *fname) { FILE *fp = open_and_lock(fname); if(!fp) { nt_error("open and lock file: %s failed.\n", fname); exit(-1); } ptrav->fp = fp; return 0; }
int nt_trav_flow(ntrack_t *nt, int32_t off_count, int32_t max_count, void *udata, nt_trav_flow_cb_t callback) { int i, res, count; count = 0; for(i = off_count; i<nt->fi_count; i++) { flow_info_t *fi = &nt->fi_base[i]; if(max_count && count >= max_count) { break; } count ++; /* touch node */ if(!magic_valid(fi->magic)) { continue; } /* check fi use api */ fi = nt_get_flow_by_id(nt, fi->id, fi->magic); if(!fi) { nt_error("[%d %d] not found.\n", fi->id, fi->magic); continue; } res = callback(fi, udata); if(res < 0) { nt_warn("stoped as " FMT_FLOW_STR " return: %d\n", FMT_FLOW(fi), res); return 0; } } return count; }
int nt_df(int argc, char** argv, char** env) { int ret = EXIT_SUCCESS; if(argc != 2) { ret = nt_error("Wrong # of arguments for %s: %d", __FUNCTION__, argc); } else { char *s = argv[1]; struct statfs st; if (statfs(s, &st) < 0) { ret = EXIT_FAILURE; } else { // D,total,used,available,block_size printf("D,%lld,%lld,%lld,%d", ((long long)st.f_blocks * (long long)st.f_bsize) / 1024, ((long long)(st.f_blocks - (long long)st.f_bfree) * st.f_bsize) / 1024, ((long long)st.f_bfree * (long long)st.f_bsize) / 1024, (int) st.f_bsize); } } return ret; }