def print_redundant_rows(roots, stats_file, args): cond_list = args['prefix'] stats_file.write("\t<queryOnlyToQuery>\n") if args['plot_loop']: [r, r_loop] = util.calculateAllActions(roots, cond_list, count_loop=True) d1 = float(sum(r) - sum(r_loop)) d2 = float(sum(r_loop)) d3 = float(args['readTotal'] - args['readInClosure'] - d1) d4 = float(args['readInClosure'] - d2) stats_file.write("\t\t<otherNoLoop>%f</otherNoLoop>\n" % (d3 / float(len(roots)))) stats_file.write( "\t\t<queryOnlyToQueryNoLoop>%f</queryOnlyToQueryNoLoop>\n" % (d1 / float(len(roots)))) stats_file.write("\t\t<otherInLoop>%f</otherInLoop>\n" % (d4 / float(len(roots)))) stats_file.write( "\t\t<queryOnlyToQueryInLoop>%f</queryOnlyToQueryInLoop>\n" % (d2 / float(len(roots)))) else: r = util.calculateAllActions(roots, cond_list) stats_file.write("\t\t<queryOnlyToQuery>%f</queryOnlyToQuery>\n" % (float(sum(r)) / float(len(roots)))) stats_file.write( "\t\t<other>%f</other>\n" % (float(args['readTotal'] - sum(r)) / float(len(roots)))) stats_file.write("\t</queryOnlyToQuery>\n")
def print_query_cards(roots, stats_file, args): stats_file.write("\t<queryCard>\n") if args['plot_loop']: cond_list = args['prefix_limited'][:] [r_limited, r_limited_loop] = util.calculateAllActions(roots, cond_list, count_loop=True) print r_limited print r_limited_loop cond_list = args['prefix_scale'][:] [r_scale, r_scale_loop] = util.calculateAllActions(roots, cond_list, count_loop=True) d1 = float(sum(r_scale)-sum(r_scale_loop)) d2 = float(sum(r_scale_loop)) d3 = float(sum(r_limited) - sum(r_limited_loop)) d4 = float(sum(r_limited_loop)) stats_file.write("\t\t<boundedNoLoop>%f</boundedNoLoop>\n"%(d3/float(len(roots)))) stats_file.write("\t\t<unboundedNoLoop>%f</unboundedNoLoop>\n"%(d1/float(len(roots)))) stats_file.write("\t\t<boundedInLoop>%f</boundedInLoop>\n"%(d4/float(len(roots)))) stats_file.write("\t\t<unboundedInLoop>%f</unboundedInLoop>\n"%(d2/float(len(roots)))) else: cond_list = args['prefix_limited'][:] r_limited = util.calculateAllActions(roots, cond_list) cond_list = args['prefix_scale'][:] r_scale = util.calculateAllActions(roots, cond_list) stats_file.write("\t\t<scaleCard>%f</scaleCard>\n"%(float(sum(r_scale))/float(len(roots)))) stats_file.write("\t\t<limitedCard>%f</limitedCard>\n"%(float(sum(r_limited))/float(len(roots)))) stats_file.write("\t</queryCard>\n")
def print_field_assignment(roots, stats_file, args): cond_list = args['prefix'][:] fields = util.collectAllTags(roots, cond_list) print "fields = " print fields field_const = [] field_funcdep = [] field_no_input = [] data = {} for f in fields: cond_list = args['prefix'][:] cond_list.append(f) r = util.calculateAllActions(roots, cond_list, to_float=False) only_from_const = True only_from_otherq = True for k in r: if k != None and ("query" in k or "util_func" in k or "user_input" in k): only_from_const = False break for k in r: if k != None and ("user_input" in k or "util_func" in k or "const" in k): only_from_otherq = False break if only_from_const: field_const.append(f) if only_from_otherq: field_funcdep.append(f) uses_user_input = False for k in r: if k != None and "user_input" in k: uses_user_input = True break if uses_user_input == False: field_no_input.append(f) for f in args['tableFields']: if f not in fields: field_no_input.append(f) if "created_at" not in f and "updated_at" not in f and "created_on" not in f and "updated_on" not in f: chs = f.split(".") if chs[1] != "id": field_const.append(f) stats_file.write("\t<fieldOnlyConst>\n") stats_file.write("\t\t<onlyConst>%d</onlyConst>\n" % len(field_const)) stats_file.write("\t\t<onlyOtherQuery>%d</onlyOtherQuery>\n" % len(field_funcdep)) stats_file.write("\t\t<otherWithoutInput>%d</otherWithoutInput>\n" % (len(field_no_input) - len(field_const))) stats_file.write("\t\t<hasInput>%d</hasInput>\n" % (len(args['tableFields']) - len(field_no_input))) stats_file.write("\t</fieldOnlyConst>\n") stats_file.write("\t<fieldNoInput>\n") stats_file.write("\t\t<noInput>%d</noInput>\n" % len(field_no_input)) stats_file.write("\t\t<hasInput>%d</hasInput>\n" % (len(args['tableFields']) - len(field_no_input))) stats_file.write("\t</fieldNoInput>\n")
def print_field_assignment(roots, stats_file, args): cond_list = args['prefix'][:] fields = util.collectAllTags(roots, cond_list) print "fields = " print fields field_const = [] field_funcdep = [] field_no_input = [] data = {} for f in fields: cond_list = args['prefix'][:] cond_list.append(f) r = util.calculateAllActions(roots, cond_list, to_float=False) only_from_const = True only_from_otherq = True for k in r: if k != None and ("query" in k or "util_func" in k or "user_input" in k): only_from_const = False break for k in r: if k != None and ("user_input" in k or "util_func" in k or "const" in k): only_from_otherq = False break if only_from_const: field_const.append(f) if only_from_otherq: field_funcdep.append(f) uses_user_input = False for k in r: if k != None and "user_input" in k: uses_user_input = True break if uses_user_input == False: field_no_input.append(f) for f in args['tableFields']: if f not in fields: field_no_input.append(f) if "created_at" not in f and "updated_at" not in f and "created_on" not in f and "updated_on" not in f: chs = f.split(".") if chs[1] != "id": field_const.append(f) stats_file.write("\t<fieldOnlyConst>\n") stats_file.write("\t\t<onlyConst>%d</onlyConst>\n"%len(field_const)) stats_file.write("\t\t<onlyOtherQuery>%d</onlyOtherQuery>\n"%len(field_funcdep)) stats_file.write("\t\t<otherWithoutInput>%d</otherWithoutInput>\n"%(len(field_no_input)-len(field_const))) stats_file.write("\t\t<hasInput>%d</hasInput>\n"%(len(args['tableFields'])-len(field_no_input))) stats_file.write("\t</fieldOnlyConst>\n") stats_file.write("\t<fieldNoInput>\n") stats_file.write("\t\t<noInput>%d</noInput>\n"%len(field_no_input)) stats_file.write("\t\t<hasInput>%d</hasInput>\n"%(len(args['tableFields'])-len(field_no_input))) stats_file.write("\t</fieldNoInput>\n")
def print_redundant_rows(roots, stats_file, args): cond_list = args['prefix'] stats_file.write("\t<queryOnlyToQuery>\n") if args['plot_loop']: [r, r_loop] = util.calculateAllActions(roots, cond_list, count_loop=True) d1 = float(sum(r)-sum(r_loop)) d2 = float(sum(r_loop)) d3 = float(args['readTotal']-args['readInClosure']-d1) d4 = float(args['readInClosure']-d2) stats_file.write("\t\t<otherNoLoop>%f</otherNoLoop>\n"%(d3/float(len(roots)))) stats_file.write("\t\t<queryOnlyToQueryNoLoop>%f</queryOnlyToQueryNoLoop>\n"%(d1/float(len(roots)))) stats_file.write("\t\t<otherInLoop>%f</otherInLoop>\n"%(d4/float(len(roots)))) stats_file.write("\t\t<queryOnlyToQueryInLoop>%f</queryOnlyToQueryInLoop>\n"%(d2/float(len(roots)))) else: r = util.calculateAllActions(roots, cond_list) stats_file.write("\t\t<queryOnlyToQuery>%f</queryOnlyToQuery>\n"%(float(sum(r))/float(len(roots)))) stats_file.write("\t\t<other>%f</other>\n"%(float(args['readTotal']-sum(r))/float(len(roots)))) stats_file.write("\t</queryOnlyToQuery>\n")
def print_query_cards(roots, stats_file, args): stats_file.write("\t<queryCard>\n") if args['plot_loop']: cond_list = args['prefix_limited'][:] [r_limited, r_limited_loop] = util.calculateAllActions(roots, cond_list, count_loop=True) print r_limited print r_limited_loop cond_list = args['prefix_scale'][:] [r_scale, r_scale_loop] = util.calculateAllActions(roots, cond_list, count_loop=True) d1 = float(sum(r_scale) - sum(r_scale_loop)) d2 = float(sum(r_scale_loop)) d3 = float(sum(r_limited) - sum(r_limited_loop)) d4 = float(sum(r_limited_loop)) stats_file.write("\t\t<boundedNoLoop>%f</boundedNoLoop>\n" % (d3 / float(len(roots)))) stats_file.write("\t\t<unboundedNoLoop>%f</unboundedNoLoop>\n" % (d1 / float(len(roots)))) stats_file.write("\t\t<boundedInLoop>%f</boundedInLoop>\n" % (d4 / float(len(roots)))) stats_file.write("\t\t<unboundedInLoop>%f</unboundedInLoop>\n" % (d2 / float(len(roots)))) else: cond_list = args['prefix_limited'][:] r_limited = util.calculateAllActions(roots, cond_list) cond_list = args['prefix_scale'][:] r_scale = util.calculateAllActions(roots, cond_list) stats_file.write("\t\t<scaleCard>%f</scaleCard>\n" % (float(sum(r_scale)) / float(len(roots)))) stats_file.write("\t\t<limitedCard>%f</limitedCard>\n" % (float(sum(r_limited)) / float(len(roots)))) stats_file.write("\t</queryCard>\n")
def print_redundant_table(roots, stats_file, args): cond_list = args['prefix'][:] tables = util.collectAllTags(roots, cond_list) data = {} print tables for t in tables: cond_list = args['prefix'][:] cond_list.append(t) r = util.calculateAllActions(roots, cond_list, to_float=False) data[t] = len(r) stats_file.write("\t<redundantTable>\n") for k, v in data.items(): stats_file.write("\t\t<%s>%d</%s>\n" % (k, v, k)) stats_file.write("\t</redundantTable>\n")
def print_redundant_table(roots, stats_file, args): cond_list = args['prefix'][:] tables = util.collectAllTags(roots, cond_list) data = {} print tables for t in tables: cond_list = args['prefix'][:] cond_list.append(t) r = util.calculateAllActions(roots, cond_list, to_float=False) data[t] = len(r) stats_file.write("\t<redundantTable>\n") for k,v in data.items(): stats_file.write("\t\t<%s>%d</%s>\n"%(k,v,k)) stats_file.write("\t</redundantTable>\n")
def print_branch_on_query_stats(roots, stats_file, args): data = {} tags = [] cond_list = args['prefix'][:] tags = util.collectAllTags(roots, cond_list) print tags for t in tags: cond_list = args['prefix'][:] cond_list.append(t) r = util.calculateAllActions(roots, cond_list) data[t] = sum(r) #util.getAverage(r) stats_file.write("\t<branchOnQueryType>\n") for k, v in data.items(): stats_file.write("\t\t<%s>%f</%s>\n" % (k, v, k)) stats_file.write("\t</branchOnQueryType>\n")
def print_branch_on_query_stats(roots, stats_file, args): data = {} tags = [] cond_list = args['prefix'][:] tags = util.collectAllTags(roots, cond_list) print tags for t in tags: cond_list = args['prefix'][:] cond_list.append(t) r = util.calculateAllActions(roots, cond_list) data[t] = sum(r)#util.getAverage(r) stats_file.write("\t<branchOnQueryType>\n") for k,v in data.items(): stats_file.write("\t\t<%s>%f</%s>\n"%(k,v,k)) stats_file.write("\t</branchOnQueryType>\n")
def print_general_stats(roots, stats_file, args): data = {} data_std = {} for g in args['contents']: cond_list = args['prefix'][:] #prefix[:] cond_list.append(g) r = util.calculateAllActions(roots, cond_list) data[g] = util.getAverage(r) data_std[g] = util.getStd(r) stats_file.write("\t<queryGeneral>\n") stats_file.write("\t\t<readQuery>%f</readQuery>\n"%(data["readTotal"])) #stats_file.write("\t\t<readTotal>%d</readTotal>\n"%(data["readTotal"]*len(roots))) stats_file.write("\t\t<writeQuery>%f</writeQuery>\n"%(data["writeTotal"])) #stats_file.write("\t\t<writeTotal>%d</writeTotal>\n"%(data["writeTotal"]*len(roots))) stats_file.write("\t</queryGeneral>\n") stats_file.write("\t<queryInLoop>\n") stats_file.write("\t\t<queryInLoop>%f</queryInLoop>\n"%(data["queryInClosure"])) stats_file.write("\t\t<queryNotInLoop>%f</queryNotInLoop>\n"%(data["readTotal"]+data["writeTotal"]-data["queryInClosure"])) stats_file.write("\t</queryInLoop>\n") return [data['queryTotal']*len(roots), data['readTotal']*len(roots), data['queryInClosure']*len(roots), data['queryReadInClosure']*len(roots)]