Exemplo n.º 1
0
    def obj_create(self, bundle, **kwargs):
        url, clusters = bundle.data['url'], bundle.data['clusters']
        purger = VarnishPurger()

        if not isinstance(clusters, list):
            clusters = [clusters]

        servers = ServerExtractor().extract_servers_by_clusters(LogicalCluster.objects.filter(name__in=clusters))
        raise ImmediateHttpResponse(self.create_json_response(purger.purge_url(url, servers), HttpResponse))
Exemplo n.º 2
0
    def obj_create(self, bundle, **kwargs):
        url, clusters = bundle.data['url'], bundle.data['clusters']
        purger = VarnishPurger()

        if not isinstance(clusters, list):
            clusters = [clusters]

        servers = ServerExtractor().extract_servers_by_clusters(
            LogicalCluster.objects.filter(name__in=clusters))
        raise ImmediateHttpResponse(
            self.create_json_response(purger.purge_url(url, servers),
                                      HttpResponse))
Exemplo n.º 3
0
 def test_should_report_error_on_generic_exception(self):
     expected_error = "Unexpected error: Unknown error, url=http://example.com/modified_resource/"
     servers = [VarnishServer(ip='127.0.0.4')]
     response = VarnishPurger().purge_url(
         'http://example.com/modified_resource/', servers)
     self.assertEqual(1, len(response['error']))
     self.assertEqual(expected_error, response['error']['127.0.0.4'])
Exemplo n.º 4
0
 def test_should_report_error_on_bad_status_line(self):
     expected_error = "Bad status line from varnish server, url=http://example.com/modified_resource/"
     servers = [VarnishServer(ip='127.0.0.3')]
     response = VarnishPurger().purge_url(
         'http://example.com/modified_resource/', servers)
     self.assertEqual(1, len(response['error']))
     self.assertEqual(expected_error, response['error']['127.0.0.3'])
Exemplo n.º 5
0
Arquivo: api.py Projeto: yenaing/vaas
    def obj_create(self, bundle, **kwargs):
        try:
            if not bundle.request.user.is_staff:
                raise Unauthorized()
        except Unauthorized as e:
            self.unauthorized_result(e)

        url, clusters = bundle.data['url'], bundle.data['clusters']
        purger = VarnishPurger()

        if not isinstance(clusters, list):
            clusters = [clusters]

        servers = ServerExtractor().extract_servers_by_clusters(
            LogicalCluster.objects.filter(name__in=clusters))
        raise ImmediateHttpResponse(
            self.create_json_response(purger.purge_url(url, servers),
                                      HttpResponse))
Exemplo n.º 6
0
 def test_should_purge_active_varnishes(self, response_mock):
     expected_message = "varnish http response code: 200, url=http://example.com/modified_resource/"
     servers = [
         VarnishServer(ip='127.0.0.1'),
         VarnishServer(ip='127.0.0.2')
     ]
     response = VarnishPurger().purge_url(
         'http://example.com/modified_resource/', servers)
     self.assertEqual(2, len(response['success']))
     self.assertEqual(expected_message, response['success']['127.0.0.1'])
Exemplo n.º 7
0
    def test_should_purge_active_varnishes(self, request_mock):
        expected_message_varnish1 = [
            "varnish http response code: 200, url=http://example.com/modified_resource/, headers=[('Host', 'example.com'), ('header1', 'value1')], server=127.0.0.1:80",  # noqa
            "varnish http response code: 200, url=http://example.com/modified_resource/, headers=[('Host', 'example.com'), ('header1', 'value2')], server=127.0.0.1:80"  # noqa
        ]
        expected_message_varnish2 = [
            "varnish http response code: 200, url=http://example.com/modified_resource/, headers=[('Host', 'example.com'), ('header1', 'value1')], server=127.0.0.2:80",  # noqa
            "varnish http response code: 200, url=http://example.com/modified_resource/, headers=[('Host', 'example.com'), ('header1', 'value2')], server=127.0.0.2:80"  # noqa
        ]
        servers = [
            VarnishServer(ip='127.0.0.1'),
            VarnishServer(ip='127.0.0.2')
        ]
        result = VarnishPurger().purge_url(
            'http://example.com/modified_resource/',
            servers,
            headers={'header1': ['value1', 'value2']})  # noqa

        calls = [
            call('PURGE',
                 '/modified_resource/',
                 body='',
                 headers={
                     'header1': 'value1',
                     'Host': 'example.com'
                 }),
            call('PURGE',
                 '/modified_resource/',
                 body='',
                 headers={
                     'header1': 'value2',
                     'Host': 'example.com'
                 }),
            call('PURGE',
                 '/modified_resource/',
                 body='',
                 headers={
                     'header1': 'value1',
                     'Host': 'example.com'
                 }),
            call('PURGE',
                 '/modified_resource/',
                 body='',
                 headers={
                     'header1': 'value2',
                     'Host': 'example.com'
                 })
        ]
        request_mock.assert_has_calls(calls, any_order=True)

        self.assertEqual(2, len(result['success']))
        self.assertCountEqual(expected_message_varnish1,
                              result['success']['127.0.0.1'])
        self.assertCountEqual(expected_message_varnish2,
                              result['success']['127.0.0.2'])
Exemplo n.º 8
0
    def obj_create(self, bundle, **kwargs):
        try:
            if not bundle.request.user.is_staff:
                raise Unauthorized()
        except Unauthorized as e:
            self.unauthorized_result(e)
        self.is_valid(bundle)
        if bundle.errors:
            raise ImmediateHttpResponse(response=self.error_response(bundle.request, bundle.errors))
        url, clusters, headers = bundle.data['url'], bundle.data['clusters'], bundle.data.get('headers')
        purger = VarnishPurger()

        if not isinstance(clusters, list):
            clusters = [clusters]

        servers = ServerExtractor().extract_servers_by_clusters(LogicalCluster.objects.filter(name__in=clusters))
        purger_result = purger.purge_url(url, servers, headers)
        if len(purger_result.get("error")) > 0:
            raise ImmediateHttpResponse(self.create_json_response(purger_result, HttpApplicationError))
        raise ImmediateHttpResponse(self.create_json_response(purger_result, HttpResponse))
Exemplo n.º 9
0
 def test_should_provided_host_header_should_be_passed_tu_purged_server(
         self, request_mock):
     servers = [VarnishServer(ip='127.0.0.1')]
     response = VarnishPurger().purge_url(
         'http://example.com/modified_resource/',
         servers,
         headers={'Host': ['foo.com']})  # noqa
     request_mock.assert_called_with('PURGE',
                                     '/modified_resource/',
                                     body='',
                                     headers={'Host': 'foo.com'})
Exemplo n.º 10
0
 def test_should_prepare_headers_combinations(self):
     excepted_result = [{
         'header2': 'val1',
         'header1': 'val1'
     }, {
         'header2': 'val1',
         'header1': 'val2'
     }, {
         'header2': 'val2',
         'header1': 'val1'
     }, {
         'header2': 'val2',
         'header1': 'val2'
     }]
     headers = {"header1": ["val1", "val2"], "header2": ["val1", "val2"]}
     result = VarnishPurger().prepare_headers_combinations(headers)
     self.assertCountEqual(result, excepted_result)
Exemplo n.º 11
0
def purge_view(request):
    if request.method == 'POST':
        form = PurgeForm(request.POST)
        if form.is_valid():
            cluster = LogicalCluster.objects.get(pk=form.cleaned_data['cluster'].pk)
            servers = ServerExtractor().extract_servers_by_clusters([cluster])
            result = VarnishPurger().purge_url(form.cleaned_data['url'], servers)
            messages.warning(
                request,
                'Url {} purged from cluster {} - cleaned {} server(s), errors occurred for {} server(s)'.format(
                    form.cleaned_data['url'], cluster.name, len(result['success']), len(result['error'])
                )
            )
            return HttpResponseRedirect('/')
    else:
        form = PurgeForm()

    return render(request, 'purge_form.html', {'form': form, 'has_permission': True})