<HTML><BODY><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">Benjamin,</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">it seems <span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; " data-mce-style="color: #222222; font-family: arial, sans-serif;">I used not quite neat wording, so</span> my earlier explanations might look obfuscating.</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">Basically, the indexed variable is any "automatic" variable referenced </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">thow the request->variables array. The variables of the current log </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">module do use index slots, so they always have space for the value </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">preallocated in ngx_http_init_request(). But those variables can be </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">referenced from a script or by another module neither by name since </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">they are missing from cmcf->variables_hash, nor by index,  e.g. by a </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">complex value, since they have no getter method thus are rejected in </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">ngx_http_variables_init_vars() as unknown.</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">If you modify the log module to register its variables with </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">nxg_http_add_variable() and implement correct get handlers, they would surely </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">be available everywhere like any other variable. For performance </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">reasons the log module in itself should still use its variables as </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">indexed ones, since log operations are expensive and rather frequent. </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">If you implement the generic getter method for the http variable </span><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">infrastructure, you might immediatly use it in the log module handler probably using their own machinery.</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">Hope it helps.</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">Regards,</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><span style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;">Vladimir</span><br style="color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 16.363636016845703px; " data-mce-style="color: #222222; font-family: arial, sans-serif; font-size: 16.363636016845703px;"><br><br><br>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">
        <style type="text/css"></style>
        <div id="style_13480891520000000145" class="mr_read__body">
                <base target="_self" href="https://e.mail.ru/cgi-bin/">
                
                        <div id="style_13480891520000000145_BODY">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.<br>
<br>
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<br>
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 nginx.org?<br>
<br>
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://mailman.nginx.org/mailman/listinfo/nginx-devel" 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://mailman.nginx.org/mailman/listinfo/nginx-devel" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a><br>
</div>
                        
                
                <base target="_self" href="https://e.mail.ru/cgi-bin/">
        </div>

        
</div>







</div>
</blockquote>
<br></BODY></HTML>