コード例 #1
0
    utils.exit_unless_accessible(args.calls)
    utils.setup_logging(verbosity=args.verbose)

    # Load graph database (remove duplicates)
    df_all = df_from_csv_file(args.calls)
    df = df_all.drop_duplicates()

    from_fun, to_fun = args.from_function, args.to_function
    left, right = search_settings(args.direction, args.cutoff)

    merge_on = ["caller_filename", "caller_function", "callee_filename", "callee_function"]
    chains_df_right = pd.DataFrame(columns=merge_on)
    if right:
        chains_df_right = find_chains_directed_df(df, from_fun, to_fun, right)

    chains_df_left = pd.DataFrame(columns=merge_on)
    if left:
        chains_df_left = find_chains_directed_df(df, from_fun, to_fun, left)

    _LOGGER.info("Generating the results...")
    df_chains = pd.concat([chains_df_left, chains_df_right]).drop_duplicates()
    df_chains = pd.merge(df_all, df_chains, on=merge_on, how='inner')
    if args.out.endswith(".csv"):
        df_to_csv_file(df_chains, args.out)
    else:
        grapher = Grapher(args.out)
        grapher.graph(df_chains)
        grapher.render(args.out)

    _LOGGER.info("Done")