示例#1
0
 def wrapped_target(*args, **kwargs):
     with silk_meta_profiler():
         try:
             func_code = six.get_function_code(target)
         except AttributeError:
             raise NotImplementedError(
                 'Profile not implemented to decorate type %s' %
                 target.__class__.__name__)
         line_num = func_code.co_firstlineno
         file_path = func_code.co_filename
         func_name = target.__name__
         if not self.name:
             self.name = func_name
         self.profile = {
             'func_name': func_name,
             'name': self.name,
             'file_path': file_path,
             'line_num': line_num,
             'dynamic': self._dynamic,
             'start_time': timezone.now(),
             'request': DataCollector().request
         }
         self._start_queries()
     try:
         result = target(*args, **kwargs)
     except Exception:
         self.profile['exception_raised'] = True
         raise
     finally:
         with silk_meta_profiler():
             self.profile['end_time'] = timezone.now()
             self._finalise_queries()
     return result
示例#2
0
文件: profiler.py 项目: Gluriurl/silk
 def wrapped_target(*args, **kwargs):
     with silk_meta_profiler():
         try:
             func_code = six.get_function_code(target)
         except AttributeError:
             raise NotImplementedError('Profile not implemented to decorate type %s' % target.__class__.__name__)
         line_num = func_code.co_firstlineno
         file_path = func_code.co_filename
         func_name = target.__name__
         if not self.name:
             self.name = func_name
         self.profile = {
             'func_name': func_name,
             'name': self.name,
             'file_path': file_path,
             'line_num': line_num,
             'dynamic': self._dynamic,
             'start_time': timezone.now(),
             'request': DataCollector().request
         }
         self._start_queries()
     try:
         result = target(*args, **kwargs)
     except Exception:
         self.profile['exception_raised'] = True
         raise
     finally:
         with silk_meta_profiler():
             self.profile['end_time'] = timezone.now()
             self._finalise_queries()
     return result
示例#3
0
    def test_method_as_str(self):
        # noinspection PyShadowingNames
        def foo(_):
            pass

        # noinspection PyUnresolvedReferences
        with patch.object(MyClass, 'foo', foo):
            profile_function_or_method('tests.test_dynamic_profiling',
                                       'MyClass.foo', 'test')
            dc = mock_data_collector()
            with patch('silk.profiling.profiler.DataCollector',
                       return_value=dc) as mock_DataCollector:
                MyClass().foo()
                self.assertEqual(
                    mock_DataCollector.return_value.register_profile.
                    call_count, 1)
                call_args = mock_DataCollector.return_value.register_profile.call_args[
                    0][0]
                self.assertDictContainsSubset(
                    {
                        'func_name': foo.__name__,
                        'dynamic': True,
                        'file_path': source_file_name(),
                        'name': 'test',
                        'line_num': six.get_function_code(foo).co_firstlineno
                    }, call_args)
示例#4
0
 def test_func_as_str(self):
     name = foo.__name__
     line_num = six.get_function_code(foo).co_firstlineno
     profile_function_or_method('tests.test_dynamic_profiling', 'foo', 'test')
     dc = mock_data_collector()
     with patch('silk.profiling.profiler.DataCollector', return_value=dc) as mock_DataCollector:
         foo()
         self.assertEqual(mock_DataCollector.return_value.register_profile.call_count, 1)
         call_args = mock_DataCollector.return_value.register_profile.call_args[0][0]
         self.assertDictContainsSubset({
             'func_name': name,
             'dynamic': True,
             'file_path': source_file_name(),
             'name': 'test',
             'line_num': line_num
         }, call_args)
示例#5
0
    def test_method_as_str(self):
        # noinspection PyShadowingNames
        def foo(_):
            pass

        # noinspection PyUnresolvedReferences
        with patch.object(MyClass, 'foo', foo):
            profile_function_or_method('tests.test_dynamic_profiling', 'MyClass.foo', 'test')
            dc = mock_data_collector()
            with patch('silk.profiling.profiler.DataCollector', return_value=dc) as mock_DataCollector:
                MyClass().foo()
                self.assertEqual(mock_DataCollector.return_value.register_profile.call_count, 1)
                call_args = mock_DataCollector.return_value.register_profile.call_args[0][0]
                self.assertDictContainsSubset({
                    'func_name': foo.__name__,
                    'dynamic': True,
                    'file_path': source_file_name(),
                    'name': 'test',
                    'line_num': six.get_function_code(foo).co_firstlineno
                }, call_args)
示例#6
0
 def test_func_as_str(self):
     name = foo.__name__
     line_num = six.get_function_code(foo).co_firstlineno
     profile_function_or_method('tests.test_dynamic_profiling', 'foo',
                                'test')
     dc = mock_data_collector()
     with patch('silk.profiling.profiler.DataCollector',
                return_value=dc) as mock_DataCollector:
         foo()
         self.assertEqual(
             mock_DataCollector.return_value.register_profile.call_count, 1)
         call_args = mock_DataCollector.return_value.register_profile.call_args[
             0][0]
         self.assertDictContainsSubset(
             {
                 'func_name': name,
                 'dynamic': True,
                 'file_path': source_file_name(),
                 'name': 'test',
                 'line_num': line_num
             }, call_args)