1 #include "cll1-0.6.2.h"
5 extern const char *version
;
6 extern const char *stats_html_signature
;
8 extern char *html_log_dir
;
9 extern int row_odd_even
;
12 extern long long int line
;
14 const char *tr_odd_even(void);
15 /* implemented in prometheus.c */
28 void parse_ip_log(int argc
, char **argv
)
30 char *month
, *year
, *str
, *name
="(undefined)", *ptr
, *ptr2
, *filename
;
31 long traffic
=0l, traffic_month
, total
=0, guaranted
;
32 int col
, col2
, y_ok
, m_ok
, accept_month
, i
=1, any_month
=0, lmsid
;
33 char mstr
[4], ystr
[5];
36 string(filename
,STRLEN
);
38 if(argv
[1][1]=='l') /* -l */
42 puts("Missing parameter(s)!\nUsage: prometheus -l Mmm YYYY (Mmm=Jan-Dec or Year, YYYY=year)");
48 if(eq(month
,"Year")) any_month
=1;
54 time_t t
= time(NULL
) - 3600*24 ; /* yesterday's timestamp*/
55 struct tm
*timep
= localtime(&t
);
57 if(argv
[1][1]=='m') /* -m yestarday - month */
59 strftime(mstr
, 4, "%b", timep
);
61 strftime(ystr
, 5, "%Y", timep
);
64 else /* -y yesterday - year */
68 strftime(ystr
, 5, "%Y", timep
);
72 printf("Analysing traffic for %s %s ...\n",month
,year
);
74 /* sorry... next release of C<<1 header file will include for_path_files(name,path) { } macro */
75 sprintf(str
,"%s %s/",ls
,log_dir
);
79 if(strstr(str
,".log"))
81 ptr
=strrchr(str
,'\n');
83 sprintf(filename
,"%s/%s",log_dir
,str
);
84 printf("Parsing %s ...",filename
);
92 valid_columns(ptr
,_
,'\t',col
) switch(col
)
94 case 2: name
= ptr
;break;
95 case 3: traffic
= atol(ptr
);break;
96 /* column number - was 7, now 11...*/
101 case 11: if(isalpha(*ptr
)) /* character, not numeric string = date, just one*/
103 valid_columns(ptr2
,ptr
,' ',col2
) switch(col2
)
105 case 2: if(any_month
|| eq(ptr2
,month
)) m_ok
= 1; break;
106 case 5: if(eq(ptr2
,year
)) y_ok
= 1; break;
111 if(col
== 7) guaranted
= atol(ptr
);
112 if(col
== 10) lmsid
= atoi(ptr
);
118 traffic_month
+= traffic
;
122 done
; /* ugly macro end */
128 iplog
->guaranted
= guaranted
;
129 iplog
->traffic
= traffic_month
;
130 iplog
->lmsid
= lmsid
;
131 insert(iplog
,iplogs
,desc_order_by
,traffic
);
132 printf(" %ld MB\n",iplog
->traffic
);
136 puts(" no records.");
140 sprintf(str
,"%s/%s-%s.html",html_log_dir
,year
,month
);
141 printf("Writing %s ... ",str
);
145 fprintf(f
, "<table class=\"decorated last\"><thead>\n\
146 <tr><th colspan=\"2\">%s %s</th>\n\
147 <th style=\"text-align: right\">lms</th>\n\
148 <th colspan=\"2\">Data transfers</th>\n\
149 <th style=\"text-align: right\">Min.speed</th>\n\
150 </tr></thead><tbody>\n ",
154 for_each(iplog
, iplogs
)
158 fprintf(f
, "%s<td style=\"text-align: right\">%d</td>\n\
159 <td style=\"text-align: left\"><a class=\"blue\" target=\"_blank\" href=\"%s%s.log\">%s</td>\n\
160 <td style=\"text-align: right\">",
161 tr_odd_even(), i
++, log_url
, iplog
->name
, iplog
->name
);
164 /*base URL will be configurable soon ... */
165 fprintf(f
, "<a class=\"blue\" target=\"_blank\" href=\"%s%d\">%04d</a>\n", lms_url
, iplog
->lmsid
, iplog
->lmsid
);
167 else if(iplog
->lmsid
== 0)
171 fprintf(f
, "<td style=\"text-align: right\">%ld MB</td>\n\
172 <td style=\"text-align: right\"><strong>%ld GB</strong></td>\n\
173 <td style=\"text-align: right\">%ld kb/s</th></tr>\n",
174 iplog
->traffic
, iplog
->traffic
>>10, iplog
->guaranted
);
175 total
+=iplog
->traffic
>>10;
180 fprintf(f
,"</tbody><thead><tr>\
181 <th colspan=\"3\" style=\"text-align: left\">Total:</th>\
182 <th colspan=\"2\" style=\"text-align: right\"><strong>%ld GB</strong></th>\
183 <th style=\"text-align: right\"><strong>%Ld kb/s</strong></th></tr>\n", total
, line
);
184 fputs("</thead></table>\n", f
);
189 fputs("<a name=\"erp\"></a><p><table class=\"decorated last\">\n\
190 <caption>Enterprise Resource Planning (ERP)</caption>\n\
192 <th>Analytic category</th>\n\
193 <th colspan=\"2\" style=\"text-align: center\">Active Classes</th>\n\
194 <th colspan=\"2\" style=\"text-align: center\">Data transfers</th>\n\
195 </tr></thead><tbody>\n",f
);
197 if_exists(iplog
,iplogs
,iplog
->l
>=total
/4)
199 fprintf(f
,"%s<td>Top 25%% of traffic</td>\n", tr_odd_even());
200 fprintf(f
,"<td style=\"text-align: right\">%d</td>\n\
201 <td style=\"text-align: right\">%d %%</td>\n\
202 <td style=\"text-align: right\">%ld GB</td>\n\
203 <td style=\"text-align: right\">%d %%</td></tr>\n",
204 iplog
->i
, (100*iplog
->i
+50)/i
, iplog
->l
, (int)((100*iplog
->l
+50)/total
));
207 if_exists(iplog
,iplogs
,iplog
->i
==10)
209 fprintf(f
,"%s<td>Top 10 downloaders</td>\n", tr_odd_even());
210 fprintf(f
,"<td style=\"text-align: right\"><strong>10</strong></td>\n\
211 <td style=\"text-align: right\">%d %%</td>\n\
212 <td style=\"text-align: right\">%ld GB</td>\n\
213 <td style=\"text-align: right\">%d %%</td></tr>\n",
214 (100*iplog
->i
+50)/i
, iplog
->l
, (int)((100*iplog
->l
+50)/total
));
217 if_exists(iplog
,iplogs
,iplog
->l
>=total
/2)
219 fprintf(f
,"%s<td>Top 50%% of traffic</td>\n", tr_odd_even());
220 fprintf(f
,"<td style=\"text-align: right\">%d</td>\n\
221 <td style=\"text-align: right\">%d %%</td>\n\
222 <td style=\"text-align: right\">%ld GB</td>\n\
223 <td style=\"text-align: right\"><strong>%d %%</strong></td></tr>\n",
224 iplog
->i
,(100*iplog
->i
+50)/i
,iplog
->l
,(int)((100*iplog
->l
+50)/total
));
227 if_exists(iplog
,iplogs
,iplog
->l
>=4*total
/5)
229 fprintf(f
,"%s<td>Top 80%% of traffic</td>\n",tr_odd_even());
230 fprintf(f
,"<td style=\"text-align: right\">%d</td>\n\
231 <td style=\"text-align: right\">%d %%</td>\n\
232 <td style=\"text-align: right\">%ld GB</td>\n\
233 <td style=\"text-align: right\"><strong>%d %%</strong></td></tr>\n",
234 iplog
->i
, (100*iplog
->i
+50)/i
, iplog
->l
, (int)((100*iplog
->l
+50)/total
));
237 if_exists (iplog
,iplogs
,iplog
->i
>=i
/5)
239 fprintf(f
,"%s<td>Top 20%% downloaders</td>\n",tr_odd_even());
240 fprintf(f
,"<td style=\"text-align: right\">%d</td>\n\
241 <td style=\"text-align: right\"><strong>%d %%</strong></td>\n\
242 <td style=\"text-align: right\">%ld GB</td>\n\
243 <td style=\"text-align: right\">%d %%</td></tr>\n",
244 iplog
->i
, (100*iplog
->i
+50)/i
, iplog
->l
, (int)((100*iplog
->l
+50)/total
));
247 if_exists(iplog
,iplogs
,iplog
->i
>=i
/4)
249 fprintf(f
,"%s<td>Top 25%% downloaders</td>\n", tr_odd_even());
250 fprintf(f
,"<td style=\"text-align: right\">%d</td>\n\
251 <td style=\"text-align: right\">%d %%</td>\n\
252 <td style=\"text-align: right\">%ld GB</td>\n\
253 <td style=\"text-align: right\">%d %%</td></tr>\n",
254 iplog
->i
, (100*iplog
->i
+50)/i
, iplog
->l
, (int)((100*iplog
->l
+50)/total
));
257 if_exists(iplog
,iplogs
,iplog
->i
>=i
/2)
259 fprintf(f
,"%s<td>Top 50%% downloaders</td>\n",tr_odd_even());
260 fprintf(f
,"<td style=\"text-align: right\">%d</td>\n\
261 <td style=\"text-align: right\"><strong>%d %%</strong></td>\n\
262 <td style=\"text-align: right\">%ld GB</td>\n\
263 <td style=\"text-align: right\">%d %%</td></tr>\n",
264 iplog
->i
, (100*iplog
->i
+50)/i
, iplog
->l
, (int)((100*iplog
->l
+50)/total
));
267 if_exists(iplog
,iplogs
,iplog
->i
>=4*i
/5)
269 fprintf(f
,"%s<td>Top 80%% downloaders</td>\n",tr_odd_even());
270 fprintf(f
,"<td style=\"text-align: right\">%d</td>\n\
271 <td style=\"text-align: right\">%d %%</td>\n\
272 <td style=\"text-align: right\">%ld GB</td>\n\
273 <td style=\"text-align: right\">%d %%</td></tr>\n",
274 iplog
->i
, (100*iplog
->i
+50)/i
, iplog
->l
, (int)((100*iplog
->l
+50)/total
));
277 fprintf(f
,"</tbody><thead><tr><th><a class=\"blue\" target=\"_blank\" href=\"%sERP.log\">All users, all traffic</a></th>\n", log_url
);
278 fprintf(f
,"<th style=\"text-align: right\">%d</th>\n\
279 <th style=\"text-align: right\">100 %%</th>\n\
280 <th style=\"text-align: right\">%ld GB</th>\n\
281 <th style=\"text-align: right\">100 %%</th></tr>\n",i
-1,total
);
282 fputs("</thead></table>\n", f
);
285 fprintf(f
, stats_html_signature
, version
);
This page took 0.635335 seconds and 5 git commands to generate.