⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slstats.c

📁 picoos源码。The RTOS and the TCP/IP stack will be built automatically.
💻 C
📖 第 1 页 / 共 2 页
字号:
}


static void printStatsSys(SERVLET_t so, struct stats_sys* p, int doit)
{
  if (doit)
  {
    printTabEnt(so, "sem used",  p->sem.used, 0);
    printTabEnt(so, "sem max",   p->sem.max, 0);
    printTabEnt(so, "sem err",   p->sem.err, 1);
    printTabEnt(so, "mbox used", p->mbox.used, 0);
    printTabEnt(so, "mbox max",  p->mbox.max, 0);
    printTabEnt(so, "mbox err",  p->mbox.err, 1);
    printEmptyLn(so);
  }
  else printExpMsg(so);
}


static void printStatsMem(SERVLET_t so, struct stats_mem* p, int doit, int n)
{
  int i;
  char buf[40];

  if (doit)
  {
    if (n <= 1)
    {
      printTabEnt(so, "avail", p->avail, 0);
      printTabEnt(so, "used",  p->used, 0);
      printTabEnt(so, "max",   p->max, 0);
      printTabEnt(so, "err",   p->err, 1);
    }
    else
    {
      for (i=0; i<n; i++)
      {
        sprintf(buf, "[%i].avail", i);
        printTabEnt(so, buf, p->avail, 0);
        sprintf(buf, "[%i].used", i);
        printTabEnt(so, buf, p->used, 0);
        sprintf(buf, "[%i].max", i);
        printTabEnt(so, buf, p->max, 0);
        sprintf(buf, "[%i].err", i);
        printTabEnt(so, buf, p->err, 1);
        p++;
      }
    }
    printEmptyLn(so);
  }
  else printExpMsg(so);
}



sint_t  statistics_servlet(SERVLET_t so)
{
  sint_t status, i, showerr;
  u32_t prflags, sec;
  char buffer[40];
  char *p;

  status = hsl_setStreamBufSize(so, 20000);
  if (status == SLERR_FAIL)
  {
    hsl_printf(so, "<html><body><br><br>OUT OF MEMORY<br></body></html>\n");
    return SLERR_OK;
  }
  if (status != SLERR_OK)
    return status;

  /* get (default) print flags for lwip statistics */
  showerr = (hsl_getParameterByName(so, "err") != NULL) ? 1 : 0;
  prflags = 0;
  p = hsl_getParameterByName(so, "print");
  if (p != NULL) sscanf(p, "%u", &prflags);
  else
  {
    if (lwip_stats.link.chkerr  || lwip_stats.link.lenerr  ||
        lwip_stats.link.memerr  || lwip_stats.link.rterr   ||
        lwip_stats.link.proterr || lwip_stats.link.opterr  ||
        lwip_stats.link.err)  prflags |= PR_LINK;

    if (lwip_stats.ip_frag.chkerr  || lwip_stats.ip_frag.lenerr  ||
        lwip_stats.ip_frag.memerr  || lwip_stats.ip_frag.rterr   ||
        lwip_stats.ip_frag.proterr || lwip_stats.ip_frag.opterr  ||
        lwip_stats.ip_frag.err)  prflags |= PR_IPFRAG;

    if (lwip_stats.ip.chkerr  || lwip_stats.ip.lenerr  ||
        lwip_stats.ip.memerr  || lwip_stats.ip.rterr   ||
        lwip_stats.ip.proterr || lwip_stats.ip.opterr  ||
        lwip_stats.ip.err)  prflags |= PR_IP;

    if (lwip_stats.icmp.chkerr  || lwip_stats.icmp.lenerr  ||
        lwip_stats.icmp.memerr  || lwip_stats.icmp.rterr   ||
        lwip_stats.icmp.proterr || lwip_stats.icmp.opterr  ||
        lwip_stats.icmp.err)  prflags |= PR_ICMP;

    if (lwip_stats.udp.chkerr  || lwip_stats.udp.lenerr  ||
        lwip_stats.udp.memerr  || lwip_stats.udp.rterr   ||
        lwip_stats.udp.proterr || lwip_stats.udp.opterr  ||
        lwip_stats.udp.err)  prflags |= PR_UDP;

    if (lwip_stats.tcp.chkerr  || lwip_stats.tcp.lenerr  ||
        lwip_stats.tcp.memerr  || lwip_stats.tcp.rterr   ||
        lwip_stats.tcp.proterr || lwip_stats.tcp.opterr  ||
        lwip_stats.tcp.err)  prflags |= PR_TCP;

    if (lwip_stats.pbuf.err) prflags |= PR_PBUF;
    if (lwip_stats.mem.err) prflags |= PR_MEM;

    for (i=0; i<MEMP_MAX; i++)
      if (lwip_stats.memp[i].err) prflags |= PR_MEMP;

    if (lwip_stats.sys.sem.err || lwip_stats.sys.mbox.err)
      prflags |= PR_SYS;
  }

  /* create html header */
  hsl_printf(so, "<html><head><title>System Statistics</title></head>\n");
  hsl_printf(so, "<body bgcolor=\"#FFFFFF\" text=\"#000080\" link=\"#000080\">\n");

  /* insert buttons */
  printButtons(so, prflags);

  /* print common infos */
  hsl_printf(so, "<br><table cellspacing=\"2\" bgcolor=\"#CCCCCC\"><tr><td>\n");
  hsl_printf(so, "<font color=\"#000000\"><b>&nbsp;");
  hsl_printf(so, "Common Info:</b></font></td></tr><tr><td>\n");
  hsl_printf(so, "<table cellspacing=\"8\" bgcolor=\"#E8E8E8\"><tr><td>\n");
  hsl_printf(so, "<table width=\"100%%\" cellspacing=\"0\" cellpadding=\"0\">"
                 "<tr><td width=\"240\">\n");
  hsl_printf(so, "Operating System and Version:</td><td>\n");
  hsl_printf(so, "<code>" POS_STARTUPSTRING "</code></td></tr>\n");
  if (ethnetif_g != NULL)
  {
    hsl_printf(so, "<tr><td width=\"240\">");
    hsl_printf(so, "Server IP Address / Subnet Mask:</td><td>\n<code>%s",
               ip2str(buffer, ipaddr_g));
    hsl_printf(so, " / %s</code></td></tr>\n",
               ip2str(buffer, netmask_g));
    hsl_printf(so, "<tr><td width=\"240\">Server MAC Address:</td><td>\n");
    hsl_printf(so, "<code>%02x-%02x-%02x-%02x-%02x-%02x",
               ethnetif_g->hwaddr[0], ethnetif_g->hwaddr[1],
               ethnetif_g->hwaddr[2], ethnetif_g->hwaddr[3],
               ethnetif_g->hwaddr[4], ethnetif_g->hwaddr[5]);
    hsl_printf(so, "</code></td></tr>\n");
  }
  hsl_printf(so, "<tr><td width=\"240\">\nSystem Uptime:</td><td>\n");
  sec = jiffies / HZ;
  hsl_printf(so, "<code>%u hours, %u minutes and %u seconds</code>\n",
             sec / 3600, (sec / 60) % 60, sec % 60);
  hsl_printf(so, "</td></tr></table>\n");
  hsl_printf(so, "</td></tr></table>\n");
  hsl_printf(so, "</td></tr></table><br><br>\n");
  /*-----------------------------------------------------*/
  hsl_printf(so, "<table><tr><td valign=\"top\">\n");
  hsl_printf(so, "<table cellspacing=\"2\" bgcolor=\"#CCCCCC\"><tr><td>\n");
  hsl_printf(so, "<font color=\"#000000\"><b>&nbsp;lwIP Statistics:</b>");
  if (showerr && (prflags == 0))
    hsl_printf(so, " &nbsp; &nbsp; &nbsp; (no errors)");
  hsl_printf(so, "</font></td></tr><tr><td>\n");
  hsl_printf(so, "<table cellspacing=\"8\" bgcolor=\"#E8E8E8\"><tr><td>\n");
  hsl_printf(so, "<table width=\"100%%\" bgcolor=\"#E8E8E8\""
                 " cellspacing=\"0\" cellpadding=\"0\">\n");
  printLink(so, prflags ^ PR_LINK, "stats.link");
  printStatsProto(so, &lwip_stats.link, prflags & PR_LINK);
  printLink(so, prflags ^ PR_IPFRAG, "stats.ipfrag");
  printStatsProto(so, &lwip_stats.ip_frag, prflags & PR_IPFRAG);
  printLink(so, prflags ^ PR_IP, "stats.ip");
  printStatsProto(so, &lwip_stats.ip, prflags & PR_IP);
  printLink(so, prflags ^ PR_ICMP, "stats.icmp");
  printStatsProto(so, &lwip_stats.icmp, prflags & PR_ICMP);
  printLink(so, prflags ^ PR_UDP, "stats.udp");
  printStatsProto(so, &lwip_stats.udp, prflags & PR_UDP);
  printLink(so, prflags ^ PR_TCP, "stats.tcp");
  printStatsProto(so, &lwip_stats.tcp, prflags & PR_TCP);
  printLink(so, prflags ^ PR_PBUF, "stats.pbuf");
  printStatsPbuf(so, &lwip_stats.pbuf, prflags & PR_PBUF);
  printLink(so, prflags ^ PR_MEM, "stats.mem");
  printStatsMem(so, &lwip_stats.mem, prflags & PR_MEM, 1);
  printLink(so, prflags ^ PR_MEMP, "stats.memp");
  printStatsMem(so, lwip_stats.memp, prflags & PR_MEMP, MEMP_MAX);
  printLink(so, prflags ^ PR_SYS, "stats.sys");
  printStatsSys(so, &lwip_stats.sys, prflags & PR_SYS);
  hsl_printf(so, "</table></td></tr></table>\n");
  hsl_printf(so, "</td></tr></table>\n");
  if (prflags & PR_MEMP)
  {
    hsl_printf(so, "</td><td>&nbsp; &nbsp; &nbsp;</td><td valign=\"top\">\n");
    hsl_printf(so, "<table cellspacing=\"2\" bgcolor=\"#CCCCCC\"><tr><td>\n");
    hsl_printf(so, "<font color=\"#000000\"><b>&nbsp;HELP: memp index numbers</b>");
    hsl_printf(so, "</font></td></tr><tr><td>\n");
    hsl_printf(so, "<table cellspacing=\"8\" bgcolor=\"#E8E8E8\"><tr><td>\n");
    hsl_printf(so, "<table width=\"100%%\" bgcolor=\"#E8E8E8\""
                   " cellspacing=\"0\" cellpadding=\"0\">\n");
    hsl_printf(so, "[0] : MEMP_NUM_PBUF - number of memp struct pbuf<br>\n");
    hsl_printf(so, "[1] : MEMP_RAW_PCB - number of raw connection PCBs<br>\n");
    hsl_printf(so, "[2] : MEMP_UDP_PCB - number of UDP protocol control blocks<br>\n");
    hsl_printf(so, "[3] : MEMP_TCP_PCB - number of simulatenously active TCP connections<br>\n");
    hsl_printf(so, "[4] : MEMP_TCP_PCB_LISTEN - number of listening TCP connections<br>\n");
    hsl_printf(so, "[5] : MEMP_TCP_SEG - number of simultaneously queued TCP segments<br>\n");
    hsl_printf(so, "[6] : MEMP_NETBUF - number of struct netbuf<br>\n");
    hsl_printf(so, "[7] : MEMP_NETCONN - number of struct netconn<br>\n");
    hsl_printf(so, "[8] : MEMP_API_MSG - number of struct api_msg<br>\n");
    hsl_printf(so, "[9] : MEMP_TCPIP_MSG - number of struct tcpip_msg<br>\n");
    hsl_printf(so, "[10] : MEMP_SYS_TIMEOUT - number of simulateously active timeouts\n");
    hsl_printf(so, "</table></td></tr></table>\n");
    hsl_printf(so, "</td></tr></table>\n");
  }
  hsl_printf(so, "</td></tr></table><br><br>\n");

  /* insert buttons */
  printButtons(so, prflags);

  /* create html footer */
  hsl_printf(so, "</body></html>\n");

  return SLERR_OK;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -