def varnish_invalidate_url(url, hostname=None):
    if not hostname:
        hostname = settings.MAIN_HOSTNAME

    ban_path = r'obj.http.x-url ~ ^(?i)(%(url)s(/*)(\\?.*)?)$ && obj.http.x-host ~ ^((?i)(.*\\.)?%(host)s(:[0-9]*)?)$'

    # Varnish needs it quoted, but has a wonky way of encoding URLs :/
    url = urllib.unquote(url)
    url = urllib.quote(url, safe=VARNISH_SAFE)
    if type(url) != unicode:
        url = url.decode('utf-8')
    ban_cmd = (ban_path % {'url': url, 'host': hostname}).encode('utf-8')
    manager = VarnishManager(settings.VARNISH_MANAGEMENT_SERVERS)
    manager.run('ban', ban_cmd, secret=settings.VARNISH_SECRET)
Esempio n. 2
0
def get_varnish_dash_modules():
    """
    Using python-varnish and the Django settings, attempt to create a 
    VarnishDashboardModule for every varnish server. 
    
    Returns a list of modules, or an empty list.
    
    In the __init__ method of your custom dashboard add: 
    
    self.children.extend(get_varnish_dash_modules())
    
    Note it says extend not append.
    """
    from varnish import VarnishManager
    from django.conf import settings
    server_modules = []
    
    for server in getattr(settings,'VARNISH_MANAGEMENT_ADDRS', ()):
        try:
            manager = VarnishManager((server,))
            stats = manager.run('stats')[0][0]
            server_modules.append(VarnishDashboardModule(server, stats))
        except Exception, e:
            if settings.DEBUG:
                raise
            else:
                continue
Esempio n. 3
0
 def verify(self):
     host = self.option.host
     port = self.option.port
     thost = host + ":" + str(port)
     try:
         conn = VarnishManager((thost, ))
         vcl_list = conn.run('vcl.list')
     except Exception, e:
         self.result.error = "连接发生错误: {error}".format(error=str(e))
         return
Esempio n. 4
0
class VarnishTests(unittest.TestCase):
    def setUp(self):
        self.manager = VarnishManager((ADDR,))

    def test_ping(self):
        result = self.manager.run('ping')[0][0]
        self.assertEqual(len(result), 2)
        self.assert_(map(lambda x: isinstance(x, float), (True,True)))

    def test_purge(self):
        resp = self.manager.run(
            'purge.url', 'http://%s/myrandomurl/.*' % WEB_ADDR)[0][0]
        self.assertEqual(resp.status, 200)

    def test_ban(self):
        regex = '^/banned/*'
        self.manager.run('ban.url', regex)
        self.assert_(regex, str(self.manager.run('ban.list')))

    def test_multiple(self):
        result = self.manager.run(( ('ping',None),('ping',None) ))
        self.assertEqual(result[0][0], result[0][1])

    def tearDown(self):
        self.manager.close()
Esempio n. 5
0
class VarnishTests(unittest.TestCase):
    def setUp(self):
        self.manager = VarnishManager((ADDR,))

    def test_ping(self):
        result = self.manager.run('ping')[0][0]
        self.assertEqual(len(result), 2)
        self.assert_(map(lambda x: isinstance(x, float), (True,True)))

    def test_purge(self):
        resp = self.manager.run(
            'purge.url', 'http://%s/myrandomurl/.*' % WEB_ADDR)[0][0]
        self.assertEqual(resp.status, 200)

    def test_ban(self):
        regex = '^/banned/*'
        self.manager.run('ban.url', regex)
        self.assert_(regex, str(self.manager.run('ban.list')))

    def test_multiple(self):
        result = self.manager.run(( ('ping',None),('ping',None) ))
        self.assertEqual(result[0][0], result[0][1])

    def tearDown(self):
        self.manager.close()
Esempio n. 6
0
class VarnishTests(unittest.TestCase):
    def setUp(self):
        self.manager = VarnishManager((ADDR,))
    
    def test_ping(self):
        result = self.manager.run('ping')[0][0]
        self.assertEqual(len(result), 2)
        self.assert_(map(lambda x: isinstance(x, float), (True,True)))
        
    def test_threading(self):
        self.manager.run(('ban.url', '^/myrandomurl/$'), threaded=True)
        self.assert_(self.manager.run('ban.list')[0][0].endswith('^/myrandomurl/$\n'))
        
    def test_stats(self):
        self.assert_(isinstance(self.manager.run('stats')[0][0], dict))
        
    def test_multiple(self):
        result = self.manager.run(( ('ping',None),('ping',None) ))
        self.assertEqual(result[0][0], result[0][1])
        
    def tearDown(self):
        self.manager.close()
Esempio n. 7
0
class VarnishTests(unittest.TestCase):
    def setUp(self):
        self.manager = VarnishManager((ADDR, ))

    def test_ping(self):
        result = self.manager.run('ping')[0][0]
        self.assertEqual(len(result), 2)
        self.assert_(map(lambda x: isinstance(x, float), (True, True)))

    def test_threading(self):
        self.manager.run(('purge.url', '^/myrandomurl/$'), threaded=True)
        self.assert_(
            self.manager.run('purge.list')[0][0].endswith('^/myrandomurl/$\n'))

    def test_stats(self):
        self.assert_(isinstance(self.manager.run('stats')[0][0], dict))

    def test_multiple(self):
        result = self.manager.run((('ping', None), ('ping', None)))
        self.assertEqual(result[0][0], result[0][1])

    def tearDown(self):
        self.manager.close()