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)
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
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
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()
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()
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()