- if_exists(iplog,iplogs,iplog->l>=total/2)\r
- {\r
- fprintf(f,"%s<td>Top 50%% of traffic</td>\n", tr_odd_even());\r
- fprintf(f,"<td style=\"text-align: right\">%d</td>\n\\r
-<td style=\"text-align: right\">%d %%</td>\n\\r
-<td style=\"text-align: right\">%ld G</td>\n\\r
-<td style=\"text-align: right\"><strong>%d %%</strong></td></tr>\n",\r
- iplog->i,(100*iplog->i+50)/i,iplog->l,(int)((100*iplog->l+50)/total));\r
- }\r
-\r
- if_exists(iplog,iplogs,iplog->l>=4*total/5)\r
- {\r
- fprintf(f,"%s<td>Top 80%% of traffic</td>\n",tr_odd_even());\r
- fprintf(f,"<td style=\"text-align: right\">%d</td>\n\\r
-<td style=\"text-align: right\">%d %%</td>\n\\r
-<td style=\"text-align: right\">%ld G</td>\n\\r
-<td style=\"text-align: right\"><strong>%d %%</strong></td></tr>\n",\r
- iplog->i,(100*iplog->i+50)/i,iplog->l,(int)((100*iplog->l+50)/total));\r
- }\r
-\r
- if_exists (iplog,iplogs,iplog->i>=i/5)\r
- {\r
- fprintf(f,"%s<td>Top 20%% downloaders</td>\n",tr_odd_even());\r
- fprintf(f,"<td style=\"text-align: right\">%d</td>\n\\r
-<td style=\"text-align: right\"><strong>%d %%</strong></td>\n\\r
-<td style=\"text-align: right\">%ld G</td>\n\\r
-<td style=\"text-align: right\">%d %%</td></tr>\n",\r
- iplog->i,(100*iplog->i+50)/i,iplog->l,(int)((100*iplog->l+50)/total));\r
- }\r
-\r
- if_exists(iplog,iplogs,iplog->i>=i/4)\r
- {\r
- fprintf(f,"%s<td>Top 25%% downloaders</td>\n", tr_odd_even());\r
- fprintf(f,"<td style=\"text-align: right\">%d</td><td style=\"text-align: right\">%d %%</td><td style=\"text-align: right\">%ld G</td><td style=\"text-align: right\">%d %%</td></tr>\n",iplog->i,(100*iplog->i+50)/i,iplog->l,(int)((100*iplog->l+50)/total));\r
- }\r
-\r
- if_exists(iplog,iplogs,iplog->i>=i/2)\r
- {\r
- fprintf(f,"%s<td>Top 50%% downloaders</td>\n",tr_odd_even());\r
- fprintf(f,"<td style=\"text-align: right\">%d</td>\n\\r
-<td style=\"text-align: right\"><strong>%d %%</strong></td>\n\\r
-<td style=\"text-align: right\">%ld G</td><td style=\"text-align: right\">%d %%</td></tr>\n",iplog->i,(100*iplog->i+50)/i,iplog->l,(int)((100*iplog->l+50)/total));\r
- }\r
-\r
- if_exists(iplog,iplogs,iplog->i>=4*i/5)\r
- {\r
- fprintf(f,"%s<td>Top 80%% downloaders</td>\n",tr_odd_even());\r
- fprintf(f,"<td style=\"text-align: right\">%d</td><td style=\"text-align: right\">%d %%</td><td style=\"text-align: right\">%ld G</td><td style=\"text-align: right\">%d %%</td></tr>\n",iplog->i,(100*iplog->i+50)/i,iplog->l,(int)((100*iplog->l+50)/total));\r
- }\r
-\r
- fprintf(f,"</tbody><thead><tr>\n\\r
-<th>All users, all traffic</th>\n\\r
-<th style=\"text-align: right\">%d</th>\n\\r
-<th style=\"text-align: right\">100 %%</th>\n\\r
-<th style=\"text-align: right\">%ld G</th>\n\\r
-<th style=\"text-align: right\">100 %%</th></tr>\n",i-1,total);\r
- fputs("</thead></table>\n", f);\r
- }\r
-\r
- fprintf(f, stats_html_signature, version);\r
- fclose(f);\r
- puts(" done.");\r
- }\r
- else\r
- {\r
- perror(str);\r
- }\r
-}\r
-\r
-void append_log(struct IP *self) /*using global variables*/\r
-{\r
- char *d, *str;\r
- FILE *f; \r
-\r
- date(d); /* this is typical cll1.h macro - prints current date */ \r
- string(str,STRLEN); \r
- sprintf(str,"%s/%s.log", log_dir, self->name);\r
- f=fopen(str,"a");\r
- if(f)\r
- {\r
- fprintf(f,"%ld\t%s\t%Lu\t%Lu\t%Lu\t%Lu\t%d\t%d\t%d\t%d\t%s",\r
- time(NULL), self->name, self->traffic, self->direct, self->proxy,\r
- self->upload, self->min, self->max, self->desired, self->lmsid, d); /* d = date*/\r
- fclose(f);\r
- }\r
- else\r
- {\r
- perror(str);\r
- }\r
-}\r
-\r
-\r
-/*-----------------------------------------------------------------*/\r
-/* Are you looking for int main(int argc, char **argv) ? :-)) */\r
-/*-----------------------------------------------------------------*/\r
-\r
-program\r
-{\r
- int i=0;\r
- FILE *f=NULL;\r
- char *str, *ptr, *d;\r
- char *substring;\r
- int class_count=0,ip_count=0;\r
- int parent=1;\r
- int just_flush=FALSE;\r
- int nodelay=FALSE;\r
- int just_preview=FALSE; /* preview - generate just stats */\r
- int just_logs=FALSE; /* just parse logs */\r
- int run=FALSE;\r
- int total=0;\r
- \r
- char *chain_forward, *chain_postrouting;\r
- char *althosts=NULL;\r
- \r
- printf("\n\\r
-Prometheus QoS - \"fair-per-IP\" Quality of Service setup utility.\n\\r
-Version %s - Copyright (C)2005-2012 Michael Polak (xChaos)\n\\r
-iptables-restore & burst tunning & classify modification by Ludva\n\\r
-Credit: CZFree.Net, Martin Devera, Netdave, Aquarius, Gandalf\n\n",version);\r
-\r
- /*----- Boring... we have to check command line options first: ----*/\r
- \r
- arguments\r
- {\r
- argument("-c") { nextargument(config); }\r
- argument("-h") { nextargument(althosts);}\r
- argument("-d") { run=TRUE; dry_run=TRUE; }\r
- argument("-f") { run=TRUE; just_flush=TRUE; }\r
- argument("-9") { run=TRUE; just_flush=9; }\r
- argument("-p") { run=TRUE; just_preview=TRUE; }\r
- argument("-r") { run=TRUE; }\r
- argument("-n") { run=TRUE; nodelay=TRUE; }\r
- argument("-l") { just_logs=TRUE; }\r
- argument("-m") { just_logs=TRUE; }\r
- argument("-y") { just_logs=TRUE; }\r
- argument("-?") { help(); exit(0); }\r
- argument("--help") { help(); exit(0); }\r
- argument("-v") { exit(0); } \r
- argument("--version") { exit(0); } \r
- }\r
- \r
- if(dry_run)\r
- {\r
- puts("*** THIS IS JUST DRY RUN ! ***\n");\r
- }\r
-\r
- date(d); /* this is typical cll1.h macro - prints current date */\r