Skip to content

RyanFrantz/shellac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

shellac

A REPL for Varnish's varnishlog command.

Installation

shellac is available on rubygems.org as shellac-repl. [1]

Install the gem via the gem command:

gem install shellac-repl

Running shellac

Simply call shellac top start the REPL:

shellac@varnish01 ~] $ shellac

Default request: http://localhost/
HTTP Port (varnishclient.request.port): 80
HTTP Request Path (varnishclient.request.path): /
HTTP Host Header (varnishclient.request.host): www.example.com

You may want to to modify this before calling @varnishclient.make_request!

shellac> varnishclient.request.port = 8080
=> 8080

shellac> varnishclient.request.path = '/images/shellac.png'
=> "/images/shellac.png"

shellac> varnishclient.request.host = 'www.shellac.com'
=> "www.shellac.com"

shellac> make_request

http://localhost:8080/images/shellac.png: 200 OK

=> ["-   RespHeader     Date: Tue, 09 Feb 2016 02:37:03 GMT", "-   RespHeader     Server: Apache",
"-   RespHeader     Cache-Control: max-age=60, public", "-   RespHeader     Vary: Accept-Encoding",
"-   RespHeader     Content-Encoding: gzip", "-   RespHeader     Content-Length: 736",
"-   RespHeader     X-Cnection: close", "-   RespHeader     Content-Type: application/json",
"-   RespHeader     X-Varnish: 886856589", "-   RespHeader     Age: 0",
"-   RespHeader     Via: 1.1 varnish-v4", "-   RespHeader     X-Cache-Status: MISS",
"-   RespHeader     Transfer-Encoding: chunked", "-   RespHeader     Connection: close",
"-   RespHeader     Accept-Ranges: bytes"]

shellac> varnishlog.response.date
=> "Tue, 09 Feb 2016 02:37:03 GMT"

shellac> varnishlog.response.cache_control
=> "max-age=60, public"

shellac> varnishlog.response.x_cache_status
=> "MISS"

shellac>

NOTE: shellac kindly informs you that it has set some defaults for a number of parameters (identified in parentheses). Those defaults most likely won't do anyone any good, so it's recommended to change them.

varnishclient

varnishclient is an instance of a VarnishClient object. Its job is to define the HTTP request that will be sent to Varnish as well as capture its response.

varnishclient.request

As shellac's opening preamble recommends, the default request should be modified to make a valid request through Varnish.

Set the Host header for the request via varnishclient.request.host =.

For paths other than /, use varnishclient.request.path =.

If Varnish is listening on a port other than 80, define it with varnishclient.request.port =.

Making Requests

To execute an HTTP request, call the #make_request method. shellac will output the full request's URL and the response code received by varnishclient.

shellac> make_request

http://localhost:8080/images/shellac.png: 200 OK

At any time, varnishclient's attributes can be modified and #make_request called again.

varnishlog

varnishlog is an instance of a VarnishLog object. varnishlog is used to start a 'varnishlog' subprocess in another thread before varnishclient sends its request. The output from the subprocess is collected when varnishclient returns. Using varnishlog one can view both the request Varnish received and the response that it generated.

Request/Response Headers

We can't anticipate (and therefore code) all request/response headers (i.e custom X- headers) so varnishlog dynamically looks up headers based on the method passed to #request and #response.

For single-word headers, life is really easy:

shellac> varnishlog.response.age
=> "0"

varnishlog capitalizes the header name and looks it up in a hash of all the headers.

Multi-word headers like Cache-Control and X-Cache-Status need to be specified in lowercase, replacing hyphens with underscores. varnishlog knows what to do with them:

shellac> varnishlog.response.cache_control
=> "max-age=60, public"

shellac> varnishlog.response.x_cache_status
=> "MISS"

Footnotes

[1] I am both happy and sad that there is an existing gem named shellac. I'm glad that someone else shares my sense of humor (all puns are always intended) but it gets my goat that someone beat me to the punch. 4 years ago. Return

About

A REPL for Varnish's ``varnishlog`` command.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages