@lafferty-lounge/route-cache

0.2.1 • Public • Published

The router-cache module

The router cache module takes an list of domains, each with a list of urls. The domains and urls are defined using regex.

When calling getRoute on a route cache instance the domain will be tested against all of the hosts in the hosts array that is passed in. If it matches a host regex then the routes in that host will be tested for a match in order until one is found. When a host/route match is found then the destination will be returned and the result will be cached.

Since it's not feasible to cache every single request the domain/url combinations have a weighted priority. Requests with the lowest entries will not be cleared from the cache. The weight is based on total number of requests and requests per minute.

Updating the routes will clear the cache for obvious reasons so if you're looking for super high performance then this may not be the best application to use if you're going to be updating routes very frequently.

let routes = {
  hosts: [
    {
      name: 'catch-all',
      description: `This is is a high priority catch all for things like letsencrypt`,
      match: '.*',
      routes: [
        {
          name: 'letsencrypt directory',
          match: '/.well_known',
          target: {
            url: 'http://cert-generator',
            ca: 'test-ca',
            protocols: ['http']
          }
        }
      ]
    },
    {
      name: 'lafferty-lounge',
      match: 'lafferty-lounge\\.com',
      description: 'lafferty lounge routes',
      routes: [
        {
          name: 'api-server',
          match: '^/api/v1/*',
          description: 'This is the lafferty lounge api server',
          target: {
            url: 'http://lafferty-lounge-api-server-v1',
            ca: 'test-ca',
            protocols: ['http']
          }
        }
      ]
    }
  ]
};
let cache = new Cache();
cache.updateRoutes(routes);
expect(cache.getRoute('test.com', '/abc/def')).toEqual({
  url: null,
  protocols: ['http', 'https']
});
expect(cache.getRoute('test.com', '/.well_known')).toEqual({
  url: 'http://cert-generator',
  ca: 'test-ca',
  protocols: ['http']
});
expect(cache.getRoute('lafferty-lounge.com', '/abc/def')).toEqual({
  url: null,
  protocols: ['http', 'https']
});
expect(
  cache.getRoute('lafferty-lounge.com', '/api/v1/hello/there')
).toEqual({
  url: 'http://lafferty-lounge-api-server-v1',
  ca: 'test-ca',
  protocols: ['http']
});

Readme

Keywords

none

Package Sidebar

Install

npm i @lafferty-lounge/route-cache

Weekly Downloads

1

Version

0.2.1

License

WTFPL

Last publish

Collaborators

  • lafferty-lounge