File name: visit/viewstat.wel (8,192 bytes) Text file viewer v1.2
    1 : #!/bin/wel
    2 : 
    3 : /*  viewstat.wel
    4 : 
    5 :     통계 기록 막대 그래프 보기(서광현)
    6 : 
    7 :     수정: 2000/12/29
    8 : 
    9 : */
   10 : 
   11 : function dump_login(string msg)
   12 : {
   13 : /"<html>
   14 : <body bgcolor={$Qbcolor} onLoad='document.input.Qpasswd.focus()'>
   15 : <center>
   16 : <br>
   17 : <table border=2 cellspacing=0 width=540 bgcolor=#c0c0c0>
   18 : <tr><td>
   19 :   <table border=1 cellspacing=1 bgcolor=#d0d0d0 width=100%>
   20 :    <tr><td align=center bgcolor=#000080>
   21 :        <font color=#ffffff><b>방문 통계 그래프 보기</b></font></td></tr>
   22 :    <tr><td height=150>
   23 :     <table border=0 cellspacing=0 width=100%>
   24 :     <form name='input' method='POST' action='viewstat.wel'>
   25 :     <tr><td width=50% align=right><b>데이터베이스명: </b></td>
   26 :      <td><input type=text name='Qdb' value='{$Qdb}' width=16></td></tr>
   27 :     <tr><td width=50% align=right><b>테 이 블 명: </b></td>
   28 :      <td><input type=text name='Qtable' value='{$Qtable}' width=16></td></tr>
   29 :     <tr><td width=50% align=right><b>암 호: </b></td>
   30 :      <td><input type=password name='Qpasswd' value='' width=16></td></tr>
   31 :     <tr><td colspan=2 align=center>{$msg}&nbsp;</td></tr>
   32 :     <tr><td colspan=2 align=center>
   33 :     <input type='submit' value=' 기 록 보 기 '></td></tr>
   34 :     </table></td></tr></form>
   35 :   </table>
   36 :   <table border=1 cellspacing=1 bgcolor=#d0d0d0 width=100%>
   37 :    <tr><td align=center bgcolor=#000080>
   38 :       <font color=#ffffff><b>Query 변수 설명</b></font></td></tr>
   39 :    <tr><td>
   40 :     <table border=0 cellspacing=0 width=100%>
   41 :     <tr><td><pre><font size=2>
   42 :  Qhost -----&gt; 연결할 mSQL 서버의 주소(초기값: {$Qhost})
   43 :  Qdb -------&gt; data base name(초기값: {$Qdb})
   44 :  Qtable ----&gt; table name(초기값: {$Qtable})
   45 :  Qlevel ----&gt; 막대 그래프의 눈금수(1에서 20까지 범위, 초기값: {$Qlevel})
   46 :  Qdot ------&gt; 막대 그래프의 눈금의 크기(pixel단위, 초기값: {$Qdot})
   47 :  Qrefresh --&gt; 분단위의 갱신 주기(0이면 refresh하지 않음, 초기값: {$Qbcolor})
   48 :  Qbcolor ---&gt; 본문의 배경색(초기값: {$Qbcolor})
   49 :  Qtext -----&gt; 본문의 글자색(초기값: {$Qtext})
   50 :  Qpasswd ---&gt; 암호</font></pre>
   51 :     </table></td></tr>
   52 :   </table></td></tr>
   53 : </table>
   54 : </center>
   55 : </body>
   56 : </html>
   57 : "/
   58 :  return;
   59 : }
   60 : 
   61 : function print_style()
   62 :  {
   63 :    print("<style type='text/css'><!-- \n",
   64 :          "#tr { font-size:8pt; font-family:'굴림'; letter-spacing:-1; color:#000000; padding-top:1px; padding-right:1px; }\n",
   65 :          "#td { text-align: center; font-size:",Qdot,"px; padding-top:2px; }\n",
   66 :          "#f1 { background-color:#f00000;font-size:",Qdot,"px; line-height:",Qdot+2,"px; }\n",
   67 :          "#f2 { background-color:#000080;font-size:",Qdot,"px; line-height:",Qdot+2,"px; }\n",
   68 :          "#f3 { background-color:#c0c0c0;font-size:",Qdot,"px; line-height:",Qdot+2,"px; }\n",
   69 :          " --></style>\n");
   70 :    return;
   71 :  }
   72 : 
   73 : function Print_BarGraph(string title, string arrayname, int snumber, int enumber, int highlight)
   74 : {
   75 :   max= min= parser(arrayname~"[snumber]");
   76 :   for(i=snumber+1; i<=enumber; i++)
   77 :    {
   78 :      cnt= parser(arrayname~"[i]");
   79 :      if(cnt>max) max= cnt;
   80 :       else if(cnt<min) min= cnt;
   81 :    }
   82 :   range= max - min;
   83 :   print("<font size=3 color=#ff5050><b>", title, "</b></font><br>\n");
   84 :   print("<table border=1 cellspacing=0 bgcolor=#f0f0f0 width=100%><tr><td>");
   85 :   print("<table border=1 cellspacing=0 cellpadding=0 width=100%>\n");
   86 :   if(range==0) bar= 0;
   87 :   if(Qlevel<1 || Qlevel>20) Qlevel= 10;
   88 :   print("<tr>\n");
   89 :   for(i=snumber; i<=enumber; i++)
   90 :    {
   91 :      print("<td id=td>");
   92 :      if(range>0) bar= real(parser(arrayname~"[i]")-min) / range * Qlevel;
   93 :      if(bar<Qlevel)
   94 :       {
   95 :          print("<font id=f3>");
   96 :          for(j=Qlevel; j>bar; j--) print("&nbsp;&nbsp;<br>");
   97 :          print("</font>");
   98 :       }
   99 :      if(bar>0)
  100 :       {
  101 :          if(i==highlight) fkind= "f1"; else fkind= "f2";
  102 :          print("<font id=", fkind, ">");
  103 :          for(j=bar; j>=1; j--) print("&nbsp;&nbsp;<br>");
  104 :          print("</font>");
  105 :       }
  106 :      print("</td>\n");
  107 :    }
  108 :   print("</tr>\n");
  109 :   print("<tr align=center bgcolor=#e8e450 id=tr>");
  110 :   for(i=snumber; i<=enumber; i++)
  111 :    {
  112 :       print("<td>");
  113 :       if(i!=highlight) print(name[i]);
  114 :         else print("<font color=red>", name[i], "</font>");
  115 :       print("</td>");
  116 :    }
  117 :   print("</tr>\n<tr align=center bgcolor=#50d090 id=tr>");
  118 :   for(i=snumber; i<=enumber; i++)
  119 :    {
  120 :       print("<td>");
  121 :       if(i!=highlight) print(parser(arrayname~"[i]"));
  122 :         else print("<font color=red>", parser(arrayname~"[i]"), "</font>");
  123 :       print("</td>");
  124 :    }
  125 :   print("</tr>\n</table>\n</td></tr></table>\n");
  126 :   return;
  127 : }
  128 : 
  129 : free name[31];
  130 : int dcnt[31], hcnt[23], wcnt[6];
  131 : 
  132 : function int dump_graph()
  133 : {
  134 :   qstr= "select * from " ~ Qtable;
  135 :   socket= msqlConnect(Qhost);
  136 :   if(socket==MSQL_ERR)
  137 :     {
  138 :        print("mSQL 서버 '", Qhost, "'를 연결할 수 없습니다!!!\n");
  139 :        return(-1);
  140 :     }
  141 :   if(msqlSelectDB(socket, Qdb)==MSQL_ERR)
  142 :     {
  143 :        print("데이터 베이스 '", Qdb,"'를 개방할 수 없습니다!!!\n");
  144 :        return(-1);
  145 :     }
  146 :   if(msqlQuery(socket, qstr)==MSQL_ERR)
  147 :     {
  148 :        print("Query 에러: ", qstr, "\n");
  149 :        return(-1);
  150 :     }
  151 : 
  152 :   result= msqlStoreResult();
  153 :   fields_count= msqlNumFields(result);
  154 :   row= msqlFetchRow(result);
  155 : 
  156 :   di= hi= wi= 0;
  157 :   for(j=0; j<fields_count; j++)
  158 :     {
  159 :        if(j<=31) dcnt[di++]= row[j];
  160 :          else if(j<=55) hcnt[hi++]= row[j];
  161 :            else if(j<=62) wcnt[wi++]= row[j];
  162 :              else if(j==63) total= row[j];
  163 :                else if(j==64) fdate= row[j];
  164 :                  else if(j==65) ldate= row[j];
  165 :     }
  166 :   msqlFreeResult(result);
  167 :   msqlClose(socket);
  168 : 
  169 :   server= getenv("SERVER_NAME");
  170 :   cy= iyear(), cm= imonth(), cd= iday();
  171 :   print("<font color=#f0f000><b>http://", server, "</b></font>");
  172 :   print("<font size=2>(", date(3), " ", time(3), ")</font><br>\n");
  173 : 
  174 :   print("<table border=0 cellspacing=10><tr align=center><td colspan=2 nowrap>");
  175 : 
  176 :     first= left(fdate,4) ~ "/" ~ mid(fdate,5,2) ~ "/" ~ mid(fdate,7,2)
  177 :          ~ "-" ~ mid(fdate,9,2) ~ ":" ~ mid(fdate,11,2) ~ ":" ~ mid(fdate,13);
  178 :     last=  left(ldate,4) ~ "/" ~ mid(ldate,5,2) ~ "/" ~ mid(ldate,7,2)
  179 :         ~ "-" ~ mid(ldate,9,2) ~ ":" ~ mid(ldate,11,2) ~ ":" ~ mid(ldate,13);
  180 :     title= "일자별 접속통계<font color=#f0f000>(총 "
  181 :          ~ total ~ "건, </b><font size=2>"
  182 :          ~  first ~ "부터 " ~ last ~ "까지</font><b>)</font>";
  183 :     arrayname= "dcnt", snumber= 1, enumber= 31, highlight= cd;
  184 :     for(i=snumber; i<=enumber; i++) name[i]= i;
  185 :     Print_BarGraph(title, arrayname, snumber, enumber, highlight);
  186 : 
  187 :   print("</td></tr>\n<tr align=center><td nowrap>");
  188 : 
  189 :     title= "시간대별 접속통계";
  190 :     arrayname= "hcnt", snumber= 0, enumber= 23, highlight= left(time(0),2);
  191 :     for(i=snumber; i<=enumber; i++) name[i]= i;
  192 :     Print_BarGraph(title, arrayname, snumber, enumber, highlight);
  193 : 
  194 :   print("</td><td nowrap>");
  195 : 
  196 :     title= "요일별 접속통계", week= "일월화수목금토";
  197 :     arrayname= "wcnt", snumber= 0, enumber= 6, highlight= iweek(cy, cm, cd);
  198 :     for(i=snumber; i<=enumber; i++) name[i]= mid(week,i*2+1,2);
  199 :     Print_BarGraph(title, arrayname, snumber, enumber, highlight);
  200 : 
  201 :   print("</td></tr></table>");
  202 :   return(0);
  203 : }
  204 : 
  205 : Qhost= "";          // host name의 초기값
  206 : Qdb= "visit";       // data base name의 초기값
  207 : Qtable= "stat";     // table name의 초기값
  208 : Qlevel= 10;         // graph의 level 초기값
  209 : Qrefresh= 0;        // refresh주기 초기값(분단위, 0이면 refresh하지 않음)
  210 : Qbcolor= "#000000"; // 본문 배경색 초기값
  211 : Qtext= "#ffffff";   // 본문 문자색 초기값
  212 : Qdot=8;             // graph의 한 블럭의 크기(pixel단위)
  213 : 
  214 : varcnt= htmlquery("GET") + htmlquery("POST");
  215 : Qrefresh*= 60; // 분단위로 변환
  216 : if(varcnt==0) dump_login("");
  217 :  else
  218 :   {
  219 :      passwd= decode(cgipasswd, "", "@cgipasswd");
  220 :      if(Qpasswd!=passwd)
  221 :       {
  222 :          msg= "<font color=#f00000><b>암호가 일치하지 않습니다!</b></font>";
  223 :          dump_login(msg);
  224 :       }
  225 :      else
  226 :       {
  227 :          print("<html>\n<head>\n");
  228 :          if(Qrefresh>0)
  229 :            print("<meta http-equiv=refresh content=", Qrefresh, ">\n");
  230 :          print_style();
  231 :          print("</head>\n");
  232 :          print("<body bgcolor=", Qbcolor, " text=", Qtext, "><center>");
  233 :          rt= dump_graph();
  234 :          if(rt!=0) print("비정상적으로 종료되었습니다.!!!");
  235 :          print("</center></body></html>\n");
  236 :          print("<!-- Runtime: ", runtime()/1000000.0, "sec -->");
  237 :       }
  238 :   }
  239 : 
  240 : //////////////////////////// 프로그램 종료 /////////////////////////////
File name: visit/viewstat.wel (8,192 bytes) Wesoft Corp. ⓒ 2001 All rights reserved.