Skip to main content

Introduction

collective.warmup has been created to warm up web application’s caches upon start and restart.

It works by reading a configuration file containing a list of urls that are then invoked.

collective.warmup is inspired by Gil Forcada’s warmup_plone.py script.

Why not a simple bash script?

While the basic use case is very simple, collective.warmup offers the following extra features:

  • Verifies the correctness of the response body (e.g. contains a certain string)

  • Can operate in crawl mode, following links in pages to warm up all related pages

  • Can filter out certain urls according to a general definition

Installation

collective.warmup can be installed in two ways:

  • As a normal python package via pip

  • Inside a buildout, with optional integration with Plone

Dependencies

Manual installation

To install it (using virtualenv, on a GNU/Debian machine):

$ sudo apt-get install build-essential python-dev python-lxml python-virtualenv libxml2-dev libxslt1-dev
$ virtualenv warmup && cd warmup && souce bin/activate
(warmup) $ pip install collective.warmup

and launch it with:

(warmup) $ bin/warmup <path/file.ini>

Alternative installation with buildout

To integrate collective.warmup in a buildout with Plone, add this to your configuration:

[buildout]
...
parts =
    ...
    warmup


[instance]
...
eggs +=
    collective.warmup


[instance]
environment-vars +=
    WARMUP_BIN ${buildout:directory}/bin/warmup
    WARMUP_INI ${buildout:directory}/warmup.ini
    WARMUP_HEALTH_THRESHOLD 50000


[warmup]
recipe = zc.recipe.egg:scripts
eggs = collective.warmup

After executing the buildout you will find the warmup script in the bin directory.

In this example, the script will be executed automatically by the Zope instance each time it is started.

Configuration file

This is a sample warmup.ini configuration:

[warmup]
enabled = True
sleep = 2
base_url = http://localhost
logfile = /path/to/warmup.log

urls =
    Home page


[config]
max_attempts = 2
base_path = mysite


[Home page]
path = ${config:base_path}/
max_attempts = ${config:max_attempts}
check_exists =
    Welcome
check_not_exists =
    p0wned by
follow_links = True
ignore_middle =
    @@
    ++theme++
    #
    ?
ignore_end =
    .css
    .js
    .png
    .jpg
    .jpeg
    .gif
    .xml
    RSS
    .ico

Options

Global [warmup]

enableTrue or False

If False, the script will do nothing when invoked.

sleepinteger

The number of seconds the script waits between url retrievals. Defaults to 2.

base_urla valid URL (don’t forget the protocol!)

The base URL to check (all paths in the various URL sections are relative to this URL).

log_filea filesystem path

The file where the logs will be written.

urlsa list of sections (separated by newline)

The URLs that we want to check. Each URL must have its own section in the configuration file (see below) and we reference these sections here (do not put real URLs here!). It also set an order for the checks (which are executed sequentially).

URL section

max_attemptsinteger

The maximum number of attempts to check the url. Defaults to 2

paththe path to check

The path will be added to the base_url parameter in order to retrieve the page url

check_existslist of strings

A list of strings that must be present in the page

check_not_existslist of strings

A list of strings that must not be present in the page

follow_linksTrue or False

If True the script will follow the links in the page and will perform the same checks for each link.

ignore_middlelist of strings

If follow_links is True, the links containing one of these strings will be ignored

ignore_endlist of strings

If follow_links is True, the links ending with one of these strings will be ignored

Health check

In order not to mark backend healthy too early by the load-balancer, before proper warmup, this package defines a browser view called @@health.check which can be used within your load-balancer probe mechanism. See bellow a Varnish configuration example:

backend instance_1 {
    .host = "localhost";
    .port = "8081";
    .probe = {
         .url = "/health.check";
         .interval = 5s;
         .timeout = 1s;
         .window = 5;
         .threshold = 3;
     }
}

This way Varnish will mark the Zope instance backend healthy when ZODB cache-size is bigger than WARMUP_HEALTH_THRESHOLD. If you do not define the WARMUP_HEALTH_THRESHOLD environment variable, the Zope instance backend will be marked healthy as soon as Zope will be able to handle requests.

Credits

Abstract Website

Changelog

1.2 (2016-09-08)

  • Check for write permissions within logfile and fallback to a temporary file if can’t write instead of sys.exit [avoinea]

  • Add @@health.check browser view to be used with load-balancer health-check in order not to mark backend healthy too early before proper warmup. [avoinea]

  • Avoid zombie processes. [jone]

  • Add zcml:condition for Plone 3 compatibility [gborelli]

1.1 (2014-07-18)

  • Python 2.4 support [gborelli]

1.0 (2014-04-06)

  • First release

Release files for collective.warmup 1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for collective.warmup 1.2
File Size Uploaded
collective.warmup-1.2.tar.gz 23.5 kB Details

Release files / collective.warmup-1.2.tar.gz

Download URL collective.warmup-1.2.tar.gz
Size 23.5 kB
Tags Source
SHA-256 checksum
How to use checksums
b635cd75d00c5c1d81ae834a570161be35f3754c86bb9f78864bfc9d3cdbfaa5
BLAKE2b-256 checksum
How to use checksums
867e3b2fec3c51ff3c90a6f96546362fe71e016eb0e43216ce89244b1caeaa78
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.2 This release

1 release file

1.1

1 release file

1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page