Any way to invoke code from VCL after a request has been serviced?

Ryan Burn rnickb731 at gmail.com
Fri May 12 02:33:57 CEST 2017


>From the free function, is there any way to get the status code or
other properties of the request? I tried using VRT_r_obj_status with a
stored reference to the context, but that doesn't seem to work since
some of the request's resources have already been reclaimed:

https://github.com/rnburn/varnish-opentracing/blob/master/opentracing/src/trace.cpp#L22

Is there any other place something like the status would be stored?


On Mon, May 8, 2017 at 11:13 AM, Reza Naghibi <reza at varnish-software.com> wrote:
> Sorry, email misfire.
>
> You can do this in a VMOD via PRIV_TASK:
>
> https://varnish-cache.org/docs/trunk/reference/vmod.html#private-pointers
>
> It might make sense to track this stuff in some kind of struct, in which
> case, put it into *priv and then register a *free callback. Otherwise, just
> put a dummy value into the *priv. *free will get called after the request is
> done and you can put your custom code in there.
>
> --
> Reza Naghibi
> Varnish Software
>
> On Mon, May 8, 2017 at 11:10 AM, Reza Naghibi <reza at varnish-software.com>
> wrote:
>>
>> You can do this in a VMOD via PRIV_TASK:
>>
>>
>> --
>> Reza Naghibi
>> Varnish Software
>>
>> On Fri, May 5, 2017 at 10:15 PM, Ryan Burn <rnickb731 at gmail.com> wrote:
>>>
>>> Hello,
>>> From VCL, is it possible to execute code that runs after a request has
>>> been processed?
>>>
>>> I'm looking into writing a module that enables Varnish for distributed
>>> tracing using the OpenTracing project [opentracing.io]. This requires
>>> invoking code at the beginning of a request to start a span and insert
>>> tracing context into the request's headers and invoking code after a
>>> request's been processed to finish the span and measure how long it
>>> took to process.
>>>
>>> I recently did a similar project for nginx
>>> [github.com/rnburn/nginx-opentracing]. Nginx provides an
>>> NGX_HTTP_LOG_PHASE [www.nginxguts.com/2011/01/phases/] that allows you
>>> to set up handlers run after requests are serviced. Can anything
>>> equivalent be done using VCL?
>>>
>>> I image you could accomplish this by subscribing and regularly reading
>>> from Varnish's shared memory log, but I'd much rather do it directly
>>> if possible.
>>>
>>> Thanks, Ryan
>>>
>>> _______________________________________________
>>> varnish-misc mailing list
>>> varnish-misc at varnish-cache.org
>>> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
>>
>>
>



More information about the varnish-misc mailing list