Beispiel #1
0
void net_collect(char * tags) {

	gettimeofday(&tv2, NULL);

	char data[16] = "";

	perfstat_id_t name;
	perfstat_netinterface_t *ub;
	int nnetinterface, i;
	nnetinterface = perfstat_netinterface(NULL, NULL,
			sizeof(perfstat_netinterface_t), 0);

	ub = malloc(sizeof(perfstat_netinterface_t) * nnetinterface);



	strcpy(name.name, "");
	if (perfstat_netinterface(&name, ub, sizeof(perfstat_netinterface_t),
			nnetinterface) >= 0) {
		for (i = 0; i < nnetinterface; i++) {

			/* IN */
			char * tagsin = mktag(tags, sin, ub[i].name);
			/* bytes */
			sprintf(data, "%8llu", ub[i].ibytes);
			sendCollectedData(tv2.tv_sec, "proc.net.bytes", data, tagsin);
			/* errors */
			 sprintf(data, "%8llu", ub[i].ierrors);
			 sendCollectedData(tv2.tv_sec, "proc.net.errs", data, tagsin);
			free(tagsin);

			/* OUT */
			char * tagsout = mktag(tags, sout, ub[i].name);
			/* bytes */
			sprintf(data, "%8llu", ub[i].obytes);
			sendCollectedData(tv2.tv_sec, "proc.net.bytes", data, tagsout);
			/* errors */
			sprintf(data, "%8llu", ub[i].oerrors);
			sendCollectedData(tv2.tv_sec, "proc.net.errs", data, tagsout);
			free(tagsout);
		}
	}
	free(ub);
}
Beispiel #2
0
int render_line(int buf, int uline)
{
	if(bufs[buf].lpt[uline])
	{
		int pline;
		for(pline=0;pline<bufs[buf].lpl[uline];pline++)
			free(bufs[buf].lpt[uline][pline]);
		free(bufs[buf].lpt[uline]);
	}
	if( // this is quite a complicated conditional, so I've split it up.  It handles conference mode, quiet mode and debug mode
		(bufs[buf].conf&&(
			(bufs[buf].lm[uline]==JOIN)
			||(bufs[buf].lm[uline]==PART)
			||(bufs[buf].lm[uline]==NICK)
			||(bufs[buf].lm[uline]==MODE)
			||(bufs[buf].lm[uline]==QUIT)
			)
		)
		||
			(quiet&&(bufs[buf].lq[uline]==QUIET))
		||
			(!debug&&(bufs[buf].lq[uline]==DEBUG))
		)
	{
		bufs[buf].lpt[uline]=NULL;
		bufs[buf].lpl[uline]=0;
		return(0);
	}
	char *tag=strdup(bufs[buf].ltag[uline]?bufs[buf].ltag[uline]:"");
	bool mergetype=((bufs[buf].lm[uline]==JOIN)&&*tag)||(bufs[buf].lm[uline]==PART)||(bufs[buf].lm[uline]==QUIT);
	bool merged=false;
	if(merge&&(bufs[buf].type==CHANNEL)&&mergetype)
	{
		int prevline=uline;
		while(1)
		{
			if(--prevline<0)
			{
				prevline+=bufs[buf].nlines;
				if(!bufs[buf].filled) break;
			}
			if(fabs(difftime(bufs[buf].ts[prevline], bufs[buf].ts[uline]))>5) break;
			if(bufs[buf].lm[prevline]==bufs[buf].lm[uline])
			{
				if((bufs[buf].lm[uline]==QUIT)&&strcmp(bufs[buf].lt[uline], bufs[buf].lt[prevline])) break;
				const char *ltag=bufs[buf].ltag[prevline];
				if(!ltag) ltag="";
				if((bufs[buf].lm[uline]==JOIN)&&!*ltag) break;
				size_t nlen=strlen(tag)+strlen(ltag)+2;
				char *ntag=malloc(nlen);
				snprintf(ntag, nlen, "%s=%s", ltag, tag);
				free(tag);
				tag=ntag;
				int pline;
				for(pline=0;pline<bufs[buf].lpl[prevline];pline++)
					free(bufs[buf].lpt[prevline][pline]);
				free(bufs[buf].lpt[prevline]);
				bufs[buf].lpt[prevline]=NULL;
				bufs[buf].lpl[prevline]=0;
				merged=true;
				continue;
			}
			break;
		}
	}
	char *message=strdup(bufs[buf].lt[uline]);
	char *proc;size_t l,i;
	init_char(&proc, &l, &i);
	char stamp[STAMP_LEN];
	timestamp(stamp, bufs[buf].ts[uline]);
	colour c={.fore=7, .back=0, .hi=false, .ul=false};
	switch(bufs[buf].lm[uline])
	{
		case MSG:
		{
			c=c_msg[bufs[buf].ls[uline]?0:1];
			char mk[6]="<%s> ";
			if(show_prefix&&bufs[buf].lp[uline])
			{
				mk[0]=mk[3]=bufs[buf].lp[uline];
			}
			crush(&tag, maxnlen);
			char *ntag=mktag(mk, tag);
			free(tag);
			tag=ntag;
		}
		break;
		case NOTICE:
		{
			c=c_notice[bufs[buf].ls[uline]?0:1];
			if(*tag)
			{
				crush(&tag, maxnlen);
				char *ntag=mktag("(%s) ", tag);
				free(tag);
				tag=ntag;
			}
		}
		break;
		case PREFORMAT:
			c=c_notice[bufs[buf].ls[uline]?0:1];
		break;
		case ACT:
		{
			c=c_actn[bufs[buf].ls[uline]?0:1];
			crush(&tag, maxnlen);
			char *ntag=mktag("* %s ", tag);
			free(tag);
			tag=ntag;
		}
		break;
		case JOIN:
			c=c_join[bufs[buf].ls[uline]?0:1];
			if(tag&&*tag)
			{
				free(message);
				const char *bn=bufs[buf].bname;
				if(!bn) bn="the channel";
				size_t l=16+strlen(bn);
				message=malloc(l);
				if(merged)
					snprintf(message, l, "have joined %s", bufs[buf].bname);
				else
					snprintf(message, l, "has joined %s", bufs[buf].bname);
			}
			goto eqtag;
		case PART:
			c=c_part[bufs[buf].ls[uline]?0:1];
			if(tag&&*tag)
			{
				free(message);
				const char *bn=bufs[buf].bname;
				if(!bn) bn="the channel";
				size_t l=16+strlen(bn);
				message=malloc(l);
				if(merged)
					snprintf(message, l, "have left %s", bufs[buf].bname);
				else
					snprintf(message, l, "has left %s", bufs[buf].bname);
			}
			goto eqtag;
		case QUIT:
			c=c_quit[bufs[buf].ls[uline]?0:1];
			if(tag&&*tag)
			{
				const char *bn=bufs[buf].bname;
				if(!bn) bn="the channel";
				size_t l=16+strlen(bn)+strlen(message);
				char *nmessage=malloc(l);
				if(merged)
					snprintf(nmessage, l, "have left %s (%s)", bufs[buf].bname, message);
				else
					snprintf(nmessage, l, "has left %s (%s)", bufs[buf].bname, message);
				free(message);
				message=nmessage;
			}
			goto eqtag;
		case QUIT_PREFORMAT:
			c=c_quit[bufs[buf].ls[uline]?0:1];
		break;
		case NICK:
		{
			c=c_nick[bufs[buf].ls[uline]?0:1];
			eqtag:
			if(!merge)
				crush(&tag, maxnlen);
			char *ntag=mktag("=%s= ", tag);
			free(tag);
			tag=ntag;
		}
		break;
		case MODE:
			c=c_nick[bufs[buf].ls[uline]?0:1];
		break;
		case STA:
			c=c_status;
		break;
		case ERR:
			c=c_err;
		break;
		case UNK:
			c=c_unk;
		break;
		case UNK_NOTICE:
			c=c_unk;
			if(*tag)
			{
				crush(&tag, maxnlen);
				char *ntag=mktag("(%s) ", tag);
				free(tag);
				tag=ntag;
			}
		break;
		case UNN:
			c=c_unn;
		break;
		default:
		break;
	}
	int x=wordline(stamp, 0, &proc, &l, &i, c);
	x=wordline(tag, indent?x:0, &proc, &l, &i, c);
	free(tag);
	wordline(message, indent?x:0, &proc, &l, &i, c);
	free(message);
	bufs[buf].lpl[uline]=0;
	bufs[buf].lpt[uline]=NULL;
	bufs[buf].lpc[uline]=c;
	char *curr=strtok(proc, "\n");
	while(curr)
	{
		int pline=bufs[buf].lpl[uline]++;
		char **nlpt=realloc(bufs[buf].lpt[uline], bufs[buf].lpl[uline]*sizeof(char *));
		if(!nlpt)
		{
			add_to_buffer(0, ERR, NORMAL, 0, false, "realloc failed; buffer may be corrupted", "render_buffer: ");
			free(proc);
			return(1);
		}
		(bufs[buf].lpt[uline]=nlpt)[pline]=strdup(curr);
		curr=strtok(NULL, "\n");
	}
	free(proc);
	return(0);
}

void in_update(iline inp)
{
	height=max(height, 5); // anything less than this is /silly/
	width=max(width, 30); // widths less than 30 break things, and are /also silly/
	resetcol();
	locate(height-1, 1);
	// tab strip
	int mbw = (width-1)/nbufs;
	if(mbw>1)
	{
		int b;
		for(b=0;b<nbufs;b++)
		{
			colour c={7, hilite_tabstrip?5:0, false, false};
			setcolour(c);
			putchar(' ');
			// (status) {server} [channel] <user>
			char brack[2]={'!', '!'};
			switch(bufs[b].type)
			{
				case STATUS:
					brack[0]='(';brack[1]=')';
				break;
				case SERVER:
					brack[0]='{';brack[1]='}';
				break;
				case CHANNEL:
					brack[0]='[';brack[1]=']';
				break;
				case PRIVATE:
					brack[0]='<';brack[1]='>';
				break;
			}
			if(b==cbuf)
			{
				c.back=2; // green
				c.hi=true;
			}
			else if(b==bufs[cbuf].server)
			{
				c.back=4; // blue
				c.ul=true;
			}
			if(bufs[b].hi_alert%2)
			{
				c.fore=6; // cyan
				c.hi=true;
			}
			else if(bufs[b].alert)
			{
				c.fore=1; // red
				c.hi=true;
			}
			if((!LIVE(b)) && (c.fore!=6))
			{
				c.fore=3; // yellow
				c.hi=true;
			}
			setcolour(c);
			putchar(brack[0]);
			if(mbw>3)
			{
				char *tab=strdup(bufs[b].bname);
				if(bufs[b].type==SERVER)
				{
					scrush(&tab, mbw-3);
				}
				else
				{
					crush(&tab, mbw-3);
				}
				printf("%s", tab);
				free(tab);
			}
			if(mbw>2)
				putchar(brack[1]);
			c.fore=7;
			c.back=hilite_tabstrip?5:0;
			c.hi=c.ul=false;
			setcolour(c);
		}
	}
	else
	{
		setcolour((colour){.fore=0, .back=1, .hi=true, .ul=false});
		printf("buf %u [0 to %u]", cbuf, nbufs-1);
	}