Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 02 Jan 2005 23:30:20 +0300
From:      "Andrew P." <infofarmer@mail.ru>
To:        cpghost@cordula.ws
Cc:        questions@freebsd.org
Subject:   Re: basic freebsd programming
Message-ID:  <41D859DC.5080400@mail.ru>
In-Reply-To: <20050102194539.GG2583@bsdbox.farid-hajji.net>
References:  <41D8395E.4020803@mail.ru> <20050102194539.GG2583@bsdbox.farid-hajji.net>

next in thread | previous in thread | raw e-mail | index | archive | help
cpghost@cordula.ws wrote:
> On Sun, Jan 02, 2005 at 09:11:42PM +0300, Andrew P. wrote:
> 
>>The ones that are the most interesting for me now is how to
>>write small daemons best and how to read ipfw info from a program.
>>
>>Of course I can refresh my C skills and gain some Unix-coding knowledge 
>>by reading a couple' thousand pages, but I don't feel like it's 
>>necessary for what I want to write - just a basic statistics collector.
> 
> why not just go for a scripted solution in Perl or Python?
> 

Well, I am going to dump all the ipfw counters to disk
(and process some data) in a loop of a single second.
Perl adds too much overhead for this task.

> 
>>Should I explore FreeBSD source code or is there some solid piece of 
>>documentation?
> 
> 
> That's not necessary. If you want to write that in C, you'll have
> to familiarize yourself with the popen(3) call for executing a program
> and capturing its output. Then you need a few string processing functions
> like str*(3) sscanf() etc... to parse the output (that's the tricky part).
> Finally you will need a small example of a client and server in C that
> uses the sockets API (that's pretty generic and not FreeBSD-specific at
> all, just google for it). Combine all this and voila, you've got your
> nice monitoring app in C.
> 

As a matter of fact, I already do have a functional C program,
processing and dumping data, which it gets from stdin. So I have
a shell loop, invoking `ipfw show | c_program` every 10 seconds.
But it seems to be ineffective. What I'm thinking about is a
closer-to-real-time daemon dumper.

> Alternatively, you could extract the info directly from the kernel
> by performing exactly the same steps that your utility program (ipfw...)
> does, but it's overkill for such a simple app.
> 

ipfw show takes up to 0.1s and 500kb to run on my system. Which
is great for manual checks, but almost unacceptable for continuous
monitoring on a server under heavy load. I guess I'll have to learn
how to look up the counters in the kernel.

Thanks anyway!

Best wishes,
Andrew P.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41D859DC.5080400>