📄 slstats.c
字号:
}
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> ");
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> lwIP Statistics:</b>");
if (showerr && (prflags == 0))
hsl_printf(so, " (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> </td><td valign=\"top\">\n");
hsl_printf(so, "<table cellspacing=\"2\" bgcolor=\"#CCCCCC\"><tr><td>\n");
hsl_printf(so, "<font color=\"#000000\"><b> 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 + -