Commit 248f0619 authored by Romain Courteaud's avatar Romain Courteaud

Add profiler support to trace surykatka execution.

parent 284fb88f
......@@ -49,6 +49,9 @@ setup(
"dev": ["pytest", "black", "pyflakes", "mock", "httpretty"]
},
entry_points={
"console_scripts": ["surykatka=surykatka.cli:runSurykatka "]
"console_scripts": [
"surykatka=surykatka.cli:runSurykatka ",
"surykatkastat=surykatka.cli:runStats ",
]
},
)
......@@ -55,6 +55,9 @@ from .bot import create_bot
default="plain",
show_default=True,
)
@click.option(
"--profile", help="Profiler data path", type=click.Path(exists=False)
)
def runSurykatka(
run,
sqlite,
......@@ -65,6 +68,7 @@ def runSurykatka(
configuration,
reload,
output,
profile,
):
mapping = {}
......@@ -85,7 +89,28 @@ def runSurykatka(
mapping["RELOAD"] = str(reload)
mapping["FORMAT"] = output
bot = create_bot(cfgfile=configuration, mapping=mapping)
return bot.run(run)
if profile is None:
return bot.run(run)
else:
import cProfile
return cProfile.runctx(
"bot.run(run)", globals(), locals(), filename=profile
)
@click.command(short_help="Stats profiler bot data.")
@click.option("--stats", type=click.Choice(["cumul", "time"]))
@click.argument("profile", type=click.Path(exists=True, dir_okay=False))
def runStats(stats, profile):
click.echo("Profile bot execution")
import pstats
profile_stats = pstats.Stats(profile)
if stats == "time":
profile_stats.sort_stats("time", "calls").print_stats(30)
else:
profile_stats.sort_stats("cumulative").print_stats(30)
if __name__ == "__main__":
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment