Esempio n. 1
0
 def render(self, url, method, path_entry, query_dict, clear_callback):
     plot = self._get_param(query_dict, 'plot', None)
     download = self._get_param(query_dict, 'download', None)
     clear = self._get_param(query_dict, 'clear', None)
     action = plot or download or clear
     profile_id = self._get_param(query_dict, 'profile', 'current')
     sort = self._get_param(query_dict, 'sort', 'time')
     limit = self._get_param(query_dict, 'limit', -1)
     fulldirs = self._get_param(query_dict, 'fulldirs', 0)
     nfl_filter = self._get_param(query_dict, 'nfl_filter', '').strip()
     metric_selected = self._get_param(query_dict, 'metric', 'cc')
     plot_type = self._get_param(query_dict, 'plottype', 'bar')
     download_format = self._get_param(query_dict, 'format', 'default')
     content = ''
     # GET  /__profile, POST /__profile
     if len(path_entry) == 2 and method in ['GET', 'POST']:
         log_files = self.profile_log.get_logfiles(profile_id)
         if action == 'plot':
             content, headers = self.plot(log_files, sort, limit,
                                          nfl_filter, metric_selected,
                                          plot_type)
         elif action == 'download':
             content, headers = self.download(log_files, sort, limit,
                                              nfl_filter, download_format)
         else:
             if action == 'clear':
                 self.profile_log.clear(profile_id)
                 clear_callback and clear_callback()
             content, headers = self.index_page(log_files, sort, limit,
                                                fulldirs, nfl_filter,
                                                profile_id, url)
     # GET /__profile__/all
     # GET /__profile__/current
     # GET /__profile__/profile_id
     # GET /__profile__/profile_id/
     # GET /__profile__/profile_id/account.py:50(GETorHEAD)
     # GET /__profile__/profile_id/swift/proxy/controllers
     #      /account.py:50(GETorHEAD)
     # with QUERY_STRING:   ?format=[default|json|csv|ods]
     elif len(path_entry) > 2 and method == 'GET':
         profile_id = path_entry[2]
         log_files = self.profile_log.get_logfiles(profile_id)
         pids = self.profile_log.get_all_pids()
         # return all profiles in a json format by default.
         # GET /__profile__/
         if profile_id == '':
             content = '{"profile_ids": ["' + '","'.join(pids) + '"]}'
             headers = [('content-type', self.format_dict['json'])]
         else:
             if len(path_entry) > 3 and path_entry[3] != '':
                 nfl_filter = '/'.join(path_entry[3:])
                 if path_entry[-1].find(':0') == -1:
                     nfl_filter = '/' + nfl_filter
             content, headers = self.download(log_files, sort, -1,
                                              nfl_filter, download_format)
         headers.append(('Access-Control-Allow-Origin', '*'))
     else:
         raise MethodNotAllowed(_('method %s is not allowed.') % method)
     return content, headers
Esempio n. 2
0
    def process_request(self, request):
        """Gets the requested path from the headers and
        matches it to a route, function, group and method stored in
        self.routes. The view funtion itself then gets executed to generate
        the response-data.

        If the requested path is not found in self.routes or the
        request method used is not supported by the view we return
        an error Response object.

        We also execute any "first" and "last" functions.
        """
        path = request.headers['PATH_INFO']
        method = request.headers['REQUEST_METHOD']

        #: Match to a route
        route_match = self.get_route_match(path)

        if route_match:
            kwargs, methods, group, view_function = route_match

            #: Execute any first functions for route group
            first_group_rv = self.__execute_first_groups(request, group)
            if first_group_rv is not None:
                return first_group_rv

            if method not in methods:
                raise MethodNotAllowed()
            else:
                rv = view_function(request, **kwargs)

            #: Execute any last functions for a route group. If we don't want
            #: functions without a group to be executed on top of the ones with
            #: a group, we should build and return the response here.
            last_group_rv = self.__execute_last_groups(rv, group)
            if last_group_rv is not None:
                return last_group_rv

        else:
            raise NotFound()

        return rv