コード例 #1
0
ファイル: collector_test.py プロジェクト: yunstanford/plop
    def disabled_test_collect_threads(self):
        start = time.time()
        def a(end):
            while time.time() < end: pass
        def thread1_func():
            a(time.time() + 0.2)
        def thread2_func():
            a(time.time() + 0.3)
        collector = Collector(interval=0.01, mode='prof')
        collector.start()
        thread1 = threading.Thread(target=thread1_func)
        thread2 = threading.Thread(target=thread2_func)
        thread1.start()
        thread2.start()
        a(time.time() + 0.1)
        while thread1.isAlive(): pass
        while thread2.isAlive(): pass
        thread1.join()
        thread2.join()
        end = time.time()
        collector.stop()
        elapsed = end - start
        self.assertTrue(0.3 < elapsed < 0.4, elapsed)

        counts = self.filter_stacks(collector)

        expected = {
            ('a', 'test_collect_threads'): 10,
            ('a', 'thread1_func'): 20,
            ('a', 'thread2_func'): 30,
            }
        self.check_counts(counts, expected)
コード例 #2
0
ファイル: collector_test.py プロジェクト: yunstanford/plop
    def test_collector(self):
        start = time.time()
        def a(end):
            while time.time() < end: pass
            c(time.time() + 0.1)
        def b(end):
            while time.time() < end: pass
            c(time.time() + 0.1)
        def c(end):
            while time.time() < end: pass
        collector = Collector(interval=0.01, mode='prof')
        collector.start()
        a(time.time() + 0.1)
        b(time.time() + 0.2)
        c(time.time() + 0.3)
        end = time.time()
        collector.stop()
        elapsed = end - start
        self.assertTrue(0.8 < elapsed < 0.9, elapsed)

        counts = self.filter_stacks(collector)
        
        expected = {
            ('a', 'test_collector'): 10,
            ('c', 'a', 'test_collector'): 10,
            ('b', 'test_collector'): 20,
            ('c', 'b', 'test_collector'): 10,
            ('c', 'test_collector'): 30,
            }
        self.check_counts(counts, expected)

        # cost depends on stack depth; for this tiny test I see 40-80usec
        time_per_sample = float(collector.sample_time) / collector.samples_taken
        self.assertTrue(time_per_sample < 0.000100, time_per_sample)
コード例 #3
0
ファイル: dispatch.py プロジェクト: carrotor/sparklebox
    def prepare(self):
        starlight.data.reset_statistics()
        self.did_trigger_update = starlight.update.check_version()

        super().prepare()

        if self.get_argument("profile", None) and os.environ.get("ALLOW_PROFILING"):
            self.collector = Collector()
            self.collector.start()
コード例 #4
0
    def initialize(self):
        self.session = self.application.my_settings.get("db_session")()
        self.graph = Graph()

        if self.get_argument("_profile", False):
            self.perf_collector = Collector()
            self.perf_trace_uuid = str(uuid4())
            self.perf_collector.start()
        else:
            self.perf_collector = None
            self.perf_trace_uuid = None

        self._request_start_time = datetime.utcnow()
        stats.incr("requests")
        stats.incr("requests_{}".format(self.__class__.__name__))
コード例 #5
0
    def __call__(self, environ, start_response):
        if not self.should_profile():
            return self.application(environ, start_response)

        collector = Collector()
        collector.start()
        start = time.time()
        try:
            return self.application(environ, start_response)
        finally:
            stop = time.time()
            collector.stop()

            try:
                self.save_data(environ, start, stop, collector)
            except Exception as e:
                self.logger.exception(e)
コード例 #6
0
ファイル: profile.py プロジェクト: zorro0799/viewfinder
    def start_profile(callback):
        ProfileHandler.waiters.append(callback)
        if ProfileHandler.profile_running:
            return

        logging.info('starting profiler, will run for %ds' %
                     ProfileHandler.DURATION)
        ProfileHandler.profile_running = True
        collector = Collector()
        collector.start(ProfileHandler.DURATION)

        yield gen.Task(IOLoop.current().add_timeout,
                       datetime.timedelta(seconds=ProfileHandler.DURATION))
        collector.stop()
        data = repr(dict(collector.stack_counts))
        for waiter in ProfileHandler.waiters:
            waiter(data)
        logging.info('finished profile collection')
        ProfileHandler.profile_running = False
コード例 #7
0
ファイル: util.py プロジェクト: tecknicaltom/merou
    def initialize(self, *args: Any, **kwargs: Any) -> None:
        self.graph = Graph()
        self.session = self.settings["session"]()  # type: Session
        self.template_engine = self.settings[
            "template_engine"]  # type: FrontendTemplateEngine
        self.plugins = get_plugin_proxy()
        session_factory = SingletonSessionFactory(self.session)
        self.usecase_factory = create_graph_usecase_factory(
            settings(), self.plugins, session_factory)

        if self.get_argument("_profile", False):
            self.perf_collector = Collector()
            self.perf_trace_uuid = str(uuid4())  # type: Optional[str]
            self.perf_collector.start()
        else:
            self.perf_collector = None
            self.perf_trace_uuid = None

        self._request_start_time = datetime.utcnow()
コード例 #8
0
    def initialize(self, *args, **kwargs):
        # type: (*Any, **Any) -> None
        self.graph = Graph()
        self.session = kwargs["session"]()  # type: Session
        self.template_env = kwargs["template_env"]  # type: Environment
        self.usecase_factory = kwargs[
            "usecase_factory"]  # type: UseCaseFactory

        if self.get_argument("_profile", False):
            self.perf_collector = Collector()
            self.perf_trace_uuid = str(uuid4())  # type: Optional[str]
            self.perf_collector.start()
        else:
            self.perf_collector = None
            self.perf_trace_uuid = None

        self._request_start_time = datetime.utcnow()

        stats.log_rate("requests", 1)
        stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
コード例 #9
0
ファイル: util.py プロジェクト: Warrelis/merou
    def initialize(self, *args, **kwargs):
        # type: (*Any, **Any) -> None
        self.graph = Graph()
        self.session = self.settings["session"]()  # type: Session
        self.template_engine = self.settings[
            "template_engine"]  # type: FrontendTemplateEngine
        self.plugins = get_plugin_proxy()
        session_factory = SingletonSessionFactory(self.session)
        self.usecase_factory = create_graph_usecase_factory(
            settings(), self.plugins, session_factory)

        if self.get_argument("_profile", False):
            self.perf_collector = Collector()
            self.perf_trace_uuid = str(uuid4())  # type: Optional[str]
            self.perf_collector.start()
        else:
            self.perf_collector = None
            self.perf_trace_uuid = None

        self._request_start_time = datetime.utcnow()

        stats.log_rate("requests", 1)
        stats.log_rate("requests_{}".format(self.__class__.__name__), 1)
        logging.error("initialized")
コード例 #10
0
 def get(self):
     self.collector = Collector()
     self.collector.start()
     IOLoop.instance().add_timeout(datetime.timedelta(seconds=60),
                                   self.finish_profile)
コード例 #11
0
def main():
    """
    Set up environment for processing
    """
    parser = argparse.ArgumentParser(description='X12 Validation')
    parser.add_argument('--config-file',
                        '-c',
                        action='store',
                        dest="configfile",
                        default=None)
    parser.add_argument('--log-file',
                        '-l',
                        action='store',
                        dest="logfile",
                        default=None)
    parser.add_argument('--map-path',
                        '-m',
                        action='store',
                        dest="map_path",
                        default=None,
                        type=check_map_path_arg)
    parser.add_argument('--verbose', '-v', action='count')
    parser.add_argument('--debug', '-d', action='store_true')
    parser.add_argument('--quiet', '-q', action='store_true')
    parser.add_argument('--html', '-H', action='store_true')
    parser.add_argument('--exclude-external-codes',
                        '-x',
                        action='append',
                        dest="exclude_external",
                        default=[],
                        help='External Code Names to ignore')
    parser.add_argument('--charset',
                        '-s',
                        choices=('b', 'e'),
                        help='Specify X12 character set: b=basic, e=extended')
    #parser.add_argument('--background', '-b', action='store_true')
    #parser.add_argument('--test', '-t', action='store_true')
    parser.add_argument('--profile',
                        action='store_true',
                        help='Profile the code with plop')
    parser.add_argument('input_files', nargs='*')
    args = parser.parse_args()

    logger = logging.getLogger('pyx12')
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')

    stdout_hdlr = logging.StreamHandler()
    stdout_hdlr.setFormatter(formatter)
    logger.addHandler(stdout_hdlr)
    logger.setLevel(logging.INFO)

    param = params.params(args.configfile)
    if args.debug:
        logger.setLevel(logging.DEBUG)
        param.set('debug', True)
    if args.verbose and args.verbose > 0:
        logger.setLevel(logging.DEBUG)
    if args.quiet:
        logger.setLevel(logging.ERROR)
    fd_997 = None
    fd_html = None
    flag_997 = True
    param.set('exclude_external_codes', ','.join(args.exclude_external))
    if args.map_path:
        param.set('map_path', args.map_path)

    if args.logfile:
        try:
            hdlr = logging.FileHandler(args.logfile)
            hdlr.setFormatter(formatter)
            logger.addHandler(hdlr)
        except IOError:
            logger.exception('Could not open log file: %s' % (args.logfile))

    for src_filename in args.input_files:
        try:
            if not os.path.isfile(src_filename):
                logger.error('Could not open file "%s"' % (src_filename))
                continue
            #fd_src = open(src_filename, 'U')
            if flag_997:
                fd_997 = tempfile.TemporaryFile()
            if args.html:
                if os.path.splitext(src_filename)[1] == '.txt':
                    target_html = os.path.splitext(src_filename)[0] + '.html'
                else:
                    target_html = src_filename + '.html'
                fd_html = open(target_html, 'w')

            if args.profile:
                from plop.collector import Collector
                p = Collector()
                p.start()
                if x12n_document.x12n_document(param=param,
                                               src_file=src_filename,
                                               fd_997=fd_997,
                                               fd_html=fd_html,
                                               fd_xmldoc=None,
                                               map_path=args.map_path):
                    sys.stderr.write('%s: OK\n' % (src_filename))
                else:
                    sys.stderr.write('%s: Failure\n' % (src_filename))
                #import profile
                #prof_str = 'pyx12.x12n_document.x12n_document(param, src_filename, ' \
                #        + 'fd_997, fd_html, None, None)'
                #print prof_str
                #print param
                #profile.run(prof_str, 'pyx12.prof')
                p.stop()
                try:
                    pfile = os.path.splitext(
                        os.path.basename(src_filename))[0] + '.plop.out'
                    pfull = os.path.join(
                        os.path.expanduser('~/.plop.profiles'), pfile)
                    print(pfull)
                    with open(pfull, 'w') as fdp:
                        fdp.write(repr(dict(p.stack_counts)))
                except Exception:
                    logger.exception('Failed to write profile data')
                    sys.stderr.write('%s: bad profile save\n' % (src_filename))
            else:
                if x12n_document.x12n_document(param=param,
                                               src_file=src_filename,
                                               fd_997=fd_997,
                                               fd_html=fd_html,
                                               fd_xmldoc=None,
                                               map_path=args.map_path):
                    sys.stderr.write('%s: OK\n' % (src_filename))
                else:
                    sys.stderr.write('%s: Failure\n' % (src_filename))
            if flag_997 and fd_997.tell() != 0:
                fd_997.seek(0)
                if os.path.splitext(src_filename)[1] == '.txt':
                    target_997 = os.path.splitext(src_filename)[0] + '.997'
                else:
                    target_997 = src_filename + '.997'
                codecs.open(target_997, mode='w',
                            encoding='ascii').write(fd_997.read())

            if fd_997:
                fd_997.close()
            if fd_html:
                fd_html.close()
        except IOError:
            logger.exception('Could not open files')
            return False
        except KeyboardInterrupt:
            print("\n[interrupt]")

    return True
コード例 #12
0
def get_and_run_plop_collector():
    from plop.collector import Collector
    collector = Collector()
    collector.start()
    return collector
コード例 #13
0
ファイル: handlers.py プロジェクト: ocoperations/stubo-app
 def __init__(self, application, request, **kwargs):
     super(PlopProfileHandler, self).__init__(application, request,
                                              **kwargs)
     self.interval = 60
     self.output = '/tmp/plop.out'
     self.collector = Collector()
コード例 #14
0
 def process_view(self, request, view_func, _, __):
     'process a single view, adding the collector'
     request.collector = Collector()
     request.collector.start()
     request.plop_filename = self.get_filename(view_func)
コード例 #15
0
ファイル: perf.py プロジェクト: fmeyer/tornadoperf
 async def get(self):
     self.collector = Collector()
     self.collector.start()
     return await self.finish_profile()