<HTML><BODY>Wed, 19 Sep 2012 23:11:57 +0200 от Benjamin Grössing <mailtogroe@gmail.com>:<br>
<blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;" class="mailru-blockquote"><div id=""><div class="js-helper js-readmsg-msg"><div id="style_13480891520000000145" class="mr_read__body"><div id="style_13480891520000000145_BODY"><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; " data-mce-style="color: #222222; font-family: arial, sans-serif;">2012/9/20 Benjamin Grössing <</span><a style="color: rgb(17, 85, 204); font-family: arial, sans-serif; " href="mailto:mailtogroe@gmail.com" data-mce-href="mailto:mailtogroe@gmail.com" data-mce-style="color: #1155cc; font-family: arial, sans-serif;">mailtogroe@gmail.com</a><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; " data-mce-style="color: #222222; font-family: arial, sans-serif;">>:</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; " data-mce-style="color: #222222; font-family: arial, sans-serif;"><div class="im" style="color: rgb(80, 0, 80); font-family: arial, sans-serif; " data-mce-style="color: #500050; font-family: arial, sans-serif;">Hi Vladimir, hi Maxim!<br><br>Thanks for your answers. I've had a look at the rewrite module -<br>unfortunately it does not support the $bytes_sent variable either as<br>configuring "if ($bytes_sent) { }" throws the error: [emerg] unknown<br>"bytes_sent" variable.</div></div></div></div></div></blockquote><br><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">Yes, this is what the indexed variables are. They have no name at </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">runtime and accessed by the index into the request->variables array by the </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">script engine that is to evaluate a complex value and if conditionals. </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">This is faster to do, since it helps to avoid the cmcf->variables_hash </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">lookup and a memory allocation at evaluation time having the space for </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">the value reserved at the request initialization time. But the index </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">value must be known to the rewrite module at the configuration time.<br><br></span><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;" class="mailru-blockquote"><div id=""><div class="js-helper js-readmsg-msg"><div id="style_13480891520000000145" class="mr_read__body"><div id="style_13480891520000000145_BODY"><div class="im" style="color: rgb(80, 0, 80); font-family: arial, sans-serif; " data-mce-style="color: #500050; font-family: arial, sans-serif;">Nice to hear that there is a plan to include all variables in the<br>complex value system - I think that would make that part a of nginx a<br>lot more clear! I'd be happy if I could contribute here, but I am not</div></div></div></div></div></blockquote><br><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">One way to make the log module varaibles known to the rewite module is</span> <span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">to register 'em with ngx_http_add_variable(). But this way they loose </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">in performance, not to say this would be not quite consistent with </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">their semantics that is "automatic" wrt the request.<br><br></span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">Another way is to make the log module use cmcf->variables as the </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">global registry for the indexed variables just like the rewrite module </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">does, and only rely on the script engine to evaluate 'em.  This way </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">the log module variables would be available to rewrite module </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">remaining the light-weight indexed ones. This will also help to avoid </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">the dependency on the module initialization sequence.<br><br></span><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;" class="mailru-blockquote"><div id=""><div class="js-helper js-readmsg-msg"><div id="style_13480891520000000145" class="mr_read__body"><div id="style_13480891520000000145_BODY"><div class="im" style="color: rgb(80, 0, 80); font-family: arial, sans-serif; " data-mce-style="color: #500050; font-family: arial, sans-serif;">sure about the details. Is there any guide to contributing to nginx<br>available or do I just have to create a patch file and post it here?<br>Can I just start with the nginx 1.2.3 source code from <a style="color: rgb(17, 85, 204); " href="http://nginx.org/" target="_blank" data-mce-href="http://nginx.org/" data-mce-style="color: #1155cc;">nginx.org</a>?<br><br></div></div></div></div></div></blockquote><br><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">I guess the patch sent to this list would do as long as it applies to</span> <span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">any svn branch. The code base will change while you are working on the </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">feature, so your patch will anyways have to be merged.<br><br></span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">Regards,<br></span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; ">Vladimir<br><br></span><blockquote style="border-left:1px solid #0857A6; margin:10px; padding:0 0 0 10px;" class="mailru-blockquote"><div id=""><div class="js-helper js-readmsg-msg"><div id="style_13480891520000000145" class="mr_read__body"><div id="style_13480891520000000145_BODY">
Regards<br>
Benjamin<br><br>
2012/9/19 Maxim Dounin <<a href="sentmsg?compose&To=mdounin@mdounin.ru">mdounin@mdounin.ru</a>>:<br>
> Hello!<br>
><br>
> On Tue, Sep 18, 2012 at 03:55:38PM +0200, Benjamin Grössing wrote:<br>
><br>
>> Hello,<br>
>><br>
>> I am currently working on a nginx module, that parses user defined<br>
>> strings for variables using ngx_http_complex_value_t. That works great<br>
>> with all variables defined in ngx_http_variables.c (i.e.<br>
>> $body_bytes_sent). However, variables as $bytes_sent do not exist here<br>
>> since ngx_http_log_module uses its own variable parsing system. What<br>
>> is the best way to use these extra variables in my module? I have<br>
>> thought of the following options, I am not very sure about what is the<br>
>> best way to go:<br>
>> a) Copy the ngx_http_log_module code in my own module and rename every<br>
>> single type and function to avoid double definitions. Reuse functions<br>
>> and types from there.<br>
>> b) Move the ngx_http_log_module code in my own module directory and<br>
>> compile it only there. Reuse functions and types from there.<br>
>> c) Write own variable parsing system, reuse a few snippets from<br>
>> ngx_http_variables and ngx_http_log_module, whatever fits best.<br>
>> d) Use complex values and try to extend the ngx_http_core_variables<br>
>> array to include $body_bytes_sent and the other missing variables (I<br>
>> don't understand why they are not included here anyway?).<br>
>> e) Any better way to achieve that?<br>
>><br>
>> I'd really appreciate your help.<br>
><br>
> All variables that are currently present only in log module should<br>
> really be made available as normal variables as well.  They aren't<br>
> yet mostly due to historical reasons (log module appeared before<br>
> normal variables were implemented) and the fact that most of<br>
> them are only usable for logging.<br>
><br>
> No idea what would be best for your particular module, but in<br>
> general it's better to use complex values and what's available via<br>
> normal variables.  Unless you need $bytes_sent right now - it's<br>
> probably the best aproach, and missing variables will be available<br>
> once they appear in nginx.<br>
><br>
> (The latter is something you may speedup by submitting a good<br>
> patch.  Most tricky part here would be to follow coding style.)<br>
><br>
> Maxim Dounin<br>
><br>
> _______________________________________________<br>
> nginx-devel mailing list<br>
> <a href="sentmsg?compose&To=nginx%2ddevel@nginx.org">nginx-devel@nginx.org</a><br>
> <a href="http://e.mail.ru/cgi-bin/link?refresh=1&check=1&cnf=4a801b&url=http%3A%2F%2Fmailman.nginx.org%2Fmailman%2Flistinfo%2Fnginx-devel&msgid=13480891520000000145" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br><br>
_______________________________________________<br>
nginx-devel mailing list<br><a href="sentmsg?compose&To=nginx%2ddevel@nginx.org">nginx-devel@nginx.org</a><br><a href="http://e.mail.ru/cgi-bin/link?refresh=1&check=1&cnf=4a801b&url=http%3A%2F%2Fmailman.nginx.org%2Fmailman%2Flistinfo%2Fnginx-devel&msgid=13480891520000000145" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br></div></div></div></div></blockquote>
<br></BODY></HTML>