[Klone-users] hooks
Oleg Kobyakovskiy
ok at dev.speedflow.com
Thu Sep 11 06:24:34 EDT 2008
Hello Tomas,
thank you very much for help, but still not working.
I put hooks function into .kl1 file.
Got your code for connection to DB (using PostgreSQL).
I'm using Klone 2.1.0.
My top-level Makefile is:
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
-include Makefile.conf
KLONE_VERSION ?= 2.1.0
KLONE_CONF_ARGS ?= \
--prefix=$(DESTDIR) \
--enable_hooks \
--libs=$(DESTDIR)
WEBAPP_CFLAGS ?= -I$(KLONE_APP_TOP) -I$(KLONE_SRC)
WEBAPP_LDADD ?=
WEBAPP_LDFLAGS ?= -lpq
-include build/mk/klone-app.mk
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
As you can see I've added enable_hooks key to Makefile (I did it for
configure step before and have error).
Also I've changed your code for PQsetdbLogin as:
dbg_err_ifm ((pg_conn = PQsetdbLogin(...))) == NULL,"connection error:
setdbLogin");
And didn't see the message in logs,
Then I've added 2 rows in .kl1 to see if this function run:
info ("Before login");
dbg_err_ifm (1,"Before login");
But see nothing like this in logs.
Only what I see in logs is:
Sep 11 13:17:25 ok : [wrn][13597:broker.c:105:broker_create] CGI support
disabled, use --enable_cgi to enable it
Sep 11 13:17:25 ok : [wrn][13597:broker.c:112:broker_create] File system
support disabled, use --enable_fs to enable it
So I think hooks are not wokring for me. Somewhere I'm wrong, but I don not
know where.
My .kl1 file is:
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
<%!
#include <klone/klone.h>
#include <postgresql/libpq-fe.h>
#include <u/libu.h>
PGconn *pg_conn;
PGresult *res;
int pg_connect(void) {
// e.g. connect to postgres DB
info ("Before login");
dbg_err_ifm (1,"Before login");
dbg_err_ifm ((pg_conn = PQsetdbLogin(...)) == NULL,"connection error:
setdbLogin");
dbg_err_ifm (PQstatus(pg_conn) != CONNECTION_OK,
"connection error: %s", PQerrorMessage(pg_conn));
info("pg (%s:%s) connected on socket %d", PQhost(pg_conn),
PQport(pg_conn),
PQsocket(pg_conn));
return 0;
err:
return ~0;
}
int child_init(void)
{
/* a new child has been forked, tear-up the always on DB connection
*/
pg_connect();
return 0;
}
int child_term(void) {
PQfinish(pg_conn);
return 0;
}
void hooks_setup(void)
{
/* set hooks */
hook_child_init( child_init );
hook_child_term( child_term );
}
%>
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
And it's placed in webapp/www/
Any ideas?
Thanks a lot,
Oleg.
On Thu, Sep 11, 2008 at 1:12 AM, thomas fossati <tho at koanlogic.com> wrote:
> Hi Oleg,
>
> On Sep 10, 2008, at 10:26 PM, Oleg Kobyakovskiy wrote:
>
>> reading manual about hooks and see next:
>> "Developers can let Klone call their own functions on interesting events
>> (see below). To enable this functionality Klone must be configured with
>> –enable_hooks. When compiled this way Klone will call hooks_setup() to gived
>> the user the opportunity to register his hooks."
>> So I tried to configure klone with --enable_hooks flag. But got this
>> error:
>>
>> [err] Failed command: 'enable_hooks'!
>>
>
> which klone version are you using ?
>
> Could you please provide your top-level Makefile ?
>
> I'd like to make the connection to DB in child_init process.
>> Looks like I don't connect there. How can I see is it connected or not?
>>
>
> 1) write the code that handles DB connection setup:
>
> int your_db_init_func(void)
> {
> // e.g. connect to postgres DB
>
> dbg_err_if (PQsetdbLogin(...) == NULL);
>
> dbg_err_ifm (PQstatus(...) != CONNECTION_OK,
> "connection error: %s", PQerrorMessage(...));
>
> info("pg (%s:%s) connected on socket %d", PQhost(...), PQport(...),
> PQsocket(...));
>
> return 0;
> err:
> return ~0;
> }
>
> 2) provide a lib with an hooks_setup() function:
>
> void hooks_setup(void)
> {
> (void) hook_child_init(your_db_init_func);
> // perhaps other hooks (e.g. db connection teardown, ...)
> return;
> }
>
> and let it link to the kloned executable by adding the path of the lib via
> WEBAPP_LDADD.
>
> See http://www.koanlogic.com/download/klone/klapp-auth-simple-1.2.0.tar.gz -
> expecially auth-hooks/auth_hooks.c and Makefile - as a starting point.
>
> Also in some examples I found something like dbg_err_if.
>> What is it and where can I foud info about error debuging?
>>
>
> dbg_xxx_if comes from libu's carpal module: please see
> http://wiki.koanlogic.com/doku.php?id=libu_carpal for an overview.
>
> Basically when you configure your klapp with --enable_debug, a log message
> with priority DEBUG is routed through syslog (*) in case a dbg_xxx_if
> assertion fails. Note that "carpals" with log level > debug are always
> logged (even if --enable_debug is not specified).
>
> (*) In your kloned.conf add something like:
>
> log
> {
> type syslog
> syslog.facility LOG_LOCAL7
> }
>
> and make sure your /etc/syslog.conf has a line like:
>
> local7.* /var/log/kloned.conf
>
> Hope it helps, t.
>
>
> _______________________________________________
> Klone-users mailing list
> Klone-users at koanlogic.com
> http://koanlogic.com/cgi-bin/mailman/listinfo/klone-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://koanlogic.com/pipermail/klone-users/attachments/20080911/498db2b4/attachment.html
More information about the klone-users
mailing list