Exemple #1
0
 def _send_messages(self, changelog_metadata: list):
     self.changelog_metadata_messages_to_send.update(changelog_metadata)
     while self.changelog_metadata_messages_to_send:
         meta = self.changelog_metadata_messages_to_send.pop()
         events = extract_events_from_changelog_metadata(meta)
         for event in events:
             self._send_resource_event(meta.resource, event)
Exemple #2
0
 def _send_messages(self, changelog_metadata: list):
     self.changelog_metadata_messages_to_send.update(changelog_metadata)
     while self.changelog_metadata_messages_to_send:
         meta = self.changelog_metadata_messages_to_send.pop()
         events = extract_events_from_changelog_metadata(meta)
         for event in events:
             self._send_resource_event(meta.resource, event)
Exemple #3
0
def _build_updated_resources_dict(registry: Registry) -> dict:
    result = defaultdict(list)
    for meta in registry.changelog.values():
        events = extract_events_from_changelog_metadata(meta)
        for event in events:
            result[event].append(meta.resource)
    return result
Exemple #4
0
def purge_varnish_after_commit_hook(success: bool, registry: Registry,
                                    request: IRequest):
    """Send PURGE requests for all changed resources to Varnish."""
    varnish_url = registry.settings.get('adhocracy.varnish_url')
    if not (success and varnish_url):
        return
    changelog_metadata = registry.changelog.values()
    errcount = 0
    for meta in changelog_metadata:
        events = extract_events_from_changelog_metadata(meta)
        if events == []:
            continue
        path = resource_path(meta.resource)
        url = varnish_url + request.script_name + path
        for event in events:
            headers = {'X-Purge-Host': request.host}
            headers['X-Purge-Regex'] = '/?\??[^/]*'
            try:
                resp = requests.request('PURGE', url, headers=headers)
                if resp.status_code != 200:
                    logger.warning(
                        'Varnish responded %s to purge request for %s',
                        resp.status_code, path)
            except RequestException as err:
                logger.error(
                    'Couldn\'t send purge request for %s to Varnish: %s',
                    path, exception_to_str(err))
                errcount += 1
                if errcount >= 3:  # pragma: no cover
                    logger.error('Giving up on purge requests')
                    return
Exemple #5
0
def purge_varnish_after_commit_hook(success: bool, registry: Registry,
                                    request: IRequest):
    """Send PURGE requests for all changed resources to Varnish."""
    varnish_url = registry.settings.get('adhocracy.varnish_url')
    if not (success and varnish_url):
        return
    changelog_metadata = registry.changelog.values()
    errcount = 0
    for meta in changelog_metadata:
        events = extract_events_from_changelog_metadata(meta)
        if events == []:
            continue
        path = resource_path(meta.resource)
        url = varnish_url + request.script_name + path
        for event in events:
            headers = {'X-Purge-Host': request.host}
            headers['X-Purge-Regex'] = '/?\??.*$'
            try:
                resp = requests.request('PURGE', url, headers=headers)
                if resp.status_code != 200:
                    logger.warning(
                        'Varnish responded %s to purge request for %s',
                        resp.status_code, path)
            except RequestException as err:
                logger.error(
                    'Couldn\'t send purge request for %s to Varnish: %s', path,
                    exception_to_str(err))
                errcount += 1
                if errcount >= 3:  # pragma: no cover
                    logger.error('Giving up on purge requests')
                    return
 def _build_updated_resources_dict(self) -> dict:
     """Utility method used by several subclasses."""
     result = defaultdict(list)
     changelog_meta = self.request.registry.changelog.values()
     for meta in changelog_meta:
         events = extract_events_from_changelog_metadata(meta)
         for event in events:
             result[event].append(meta.resource)
     return result
 def _build_updated_resources_dict(self) -> dict:
     """Utility method used by several subclasses."""
     result = defaultdict(list)
     changelog_meta = self.request.registry.changelog.values()
     for meta in changelog_meta:
         events = extract_events_from_changelog_metadata(meta)
         for event in events:
             result[event].append(meta.resource)
     return result
Exemple #8
0
 def _send_messages(self, changelog_metadata: list):
     metadata = [x._replace(modified_appstructs=None)  # remove non hashable
                 for x in changelog_metadata]
     self.changelog_metadata_messages_to_send.update(metadata)
     while self.changelog_metadata_messages_to_send:
         meta = self.changelog_metadata_messages_to_send.pop()
         events = extract_events_from_changelog_metadata(meta)
         for event in events:
             self._send_resource_event(meta.resource, event)
Exemple #9
0
 def _send_messages(self, changelog_metadata: list):
     metadata = [
         x._replace(modified_appstructs=None)  # remove non hashable
         for x in changelog_metadata
     ]
     self.changelog_metadata_messages_to_send.update(metadata)
     while self.changelog_metadata_messages_to_send:
         meta = self.changelog_metadata_messages_to_send.pop()
         events = extract_events_from_changelog_metadata(meta)
         for event in events:
             self._send_resource_event(meta.resource, event)