Can not use $bytes_sent in module (complex values)

Maxim Dounin mdounin at mdounin.ru
Thu Sep 20 08:04:58 UTC 2012


Hello!

On Wed, Sep 19, 2012 at 11:11:57PM +0200, Benjamin Grössing wrote:

> Hi Vladimir, hi Maxim!
> 
> Thanks for your answers. I've had a look at the rewrite module -
> unfortunately it does not support the $bytes_sent variable either as
> configuring "if ($bytes_sent) { }" throws the error: [emerg] unknown
> "bytes_sent" variable.

Yes, this is expected as $bytes_sent isn't something available 
outside of log module.  And that's why we just need to make it 
normal variable to avoid confusion, much like it was recently done 
with $status (http://trac.nginx.org/nginx/changeset/4686/nginx).

> Nice to hear that there is a plan to include all variables in the
> complex value system - I think that would make that part a of nginx a
> lot more clear! I'd be happy if I could contribute here, but I am not
> sure about the details. Is there any guide to contributing to nginx
> available or do I just have to create a patch file and post it here?
> Can I just start with the nginx 1.2.3 source code from nginx.org?

There is no guide (probably we should write one), but posting 
patches here is a right way to go.  It's usually better to use svn 
trunk or latest devel version as a base.

Maxim Dounin

> 
> Regards
> Benjamin
> 
> 2012/9/19 Maxim Dounin <mdounin at mdounin.ru>:
> > Hello!
> >
> > On Tue, Sep 18, 2012 at 03:55:38PM +0200, Benjamin Grössing wrote:
> >
> >> Hello,
> >>
> >> I am currently working on a nginx module, that parses user defined
> >> strings for variables using ngx_http_complex_value_t. That works great
> >> with all variables defined in ngx_http_variables.c (i.e.
> >> $body_bytes_sent). However, variables as $bytes_sent do not exist here
> >> since ngx_http_log_module uses its own variable parsing system. What
> >> is the best way to use these extra variables in my module? I have
> >> thought of the following options, I am not very sure about what is the
> >> best way to go:
> >> a) Copy the ngx_http_log_module code in my own module and rename every
> >> single type and function to avoid double definitions. Reuse functions
> >> and types from there.
> >> b) Move the ngx_http_log_module code in my own module directory and
> >> compile it only there. Reuse functions and types from there.
> >> c) Write own variable parsing system, reuse a few snippets from
> >> ngx_http_variables and ngx_http_log_module, whatever fits best.
> >> d) Use complex values and try to extend the ngx_http_core_variables
> >> array to include $body_bytes_sent and the other missing variables (I
> >> don't understand why they are not included here anyway?).
> >> e) Any better way to achieve that?
> >>
> >> I'd really appreciate your help.
> >
> > All variables that are currently present only in log module should
> > really be made available as normal variables as well.  They aren't
> > yet mostly due to historical reasons (log module appeared before
> > normal variables were implemented) and the fact that most of
> > them are only usable for logging.
> >
> > No idea what would be best for your particular module, but in
> > general it's better to use complex values and what's available via
> > normal variables.  Unless you need $bytes_sent right now - it's
> > probably the best aproach, and missing variables will be available
> > once they appear in nginx.
> >
> > (The latter is something you may speedup by submitting a good
> > patch.  Most tricky part here would be to follow coding style.)
> >
> > Maxim Dounin
> >
> > _______________________________________________
> > nginx-devel mailing list
> > nginx-devel at nginx.org
> > http://mailman.nginx.org/mailman/listinfo/nginx-devel
> 
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel



More information about the nginx-devel mailing list