# git repo at ssh://git@git.linaro.org/people/mike.holmes/DependanceMap.git import csv import pandas as pd pd.set_option('display.max_rows',None) pd.set_option('display.max_columns',None) import io import requests from collections import defaultdict import argparse parser = argparse.ArgumentParser(description='Pull from JIre Engineers spreadsheet data to genrate graphs') parser.add_argument("--teams", default=False, action='store_true', help="generate teams dependance") parser.add_argument("--dependance", default=False, action='store_true',help="generate project dependance") parser.add_argument("--relates", default=False, action='store_true',help="generate project relates") parser.add_argument("--company", default=False, action='store_true',help="generate company relationship") parser.add_argument("--projects", default=False, action='store_true', help="generate projects") parser.add_argument("--governing_group", default=False, action='store_true', help="generate governing groups") parser.add_argument("--department_group", default=False, action='store_true', help="generate department groups") parser.add_argument("--all_projects", default=False, action='store_true', help="list all projects") parser.add_argument("--verbose", default=False, action='store_true', help="verbose") parser.add_argument("--filter_list", default=[], nargs='+', help="filter out a node name, such as team, project or member") parser.add_argument("--include_list", default=[], nargs='+', help="filter out a node name, such as team, project or member") parser.add_argument("--center_on", help="center on a specific node which can be a company, team or project") args = parser.parse_args() if (args.verbose == 1): print("// ",args) print("") print ("digraph G {") print ("rankdir=RL") print ("node [style=rounded]") #twopi paramiters print ("overlap=false") if (args.center_on): print ("root=\"", args.center_on,"\"", sep='') def filter_node(data, filter_list): if (args.verbose == 1): print (data) print("") print ("filtering for ",filter_list) if filter_list: if 'Assignee Company' in data.columns: data_filter = data['Assignee Company'].isin(filter_list) data = data[~data_filter] if 'Assignee Team' in data.columns: data_filter = data['Assignee Team'].isin(filter_list) data = data[~data_filter] if 'Assignee Department' in data.columns: data_filter = data['Assignee Department'].isin(filter_list) data = data[~data_filter] if 'Project' in data.columns: data_filter = data['Project'].isin(filter_list) data = data[~data_filter] if 'project' in data.columns: data_filter = data['project'].isin(filter_list) data = data[~data_filter] if 'linked' in data.columns: data_filter = data['linked'].isin(filter_list) data = data[~data_filter] if (args.verbose == 1): print (data) print("") return(data) if (args.governing_group == 1): #from URL with csv file url = 'https://docs.google.com/spreadsheets/d/e/2PACX-1vSGKF1LA9ONNq1S3ZTb-7hk-kJ7XlXdVQKDFmFJbTpLa0u_cVqTTjHkA8TdxougbN_DvmdiVbsZJ9UY/pub?gid=1685920531&single=true&output=csv' data = pd.read_csv(url) mylist = defaultdict(list) print ("//cluster governance") data = filter_node(data, args.filter_list) for row in data.index: #same Governing Entity if data['Governing Entity'][row]: mylist[data['Governing Entity'][row]].append(data['project name'][row]) for gov in mylist: print ( "") print (" subgraph ", "cluster_",gov.replace(" ", "_")," {", sep='') for x in range(len(mylist[gov])): print (" \"", mylist[gov][x], "\";", sep='') print (" label = \"",gov.replace(" ", "_"),"\"", sep='') print (" }", sep='') print("") if (args.department_group == 1): url ="https://docs.google.com/spreadsheets/d/e/2PACX-1vSGKF1LA9ONNq1S3ZTb-7hk-kJ7XlXdVQKDFmFJbTpLa0u_cVqTTjHkA8TdxougbN_DvmdiVbsZJ9UY/pub?gid=1268085837&single=true&output=csv" data = pd.read_csv(url) mylist = defaultdict(list) print ("//cluster departments") filter_node(data, args.filter_list) for row in data.index: #same Governing Entity if data['Assignee Department'][row]: mylist[data['Assignee Department'][row]].append(data['Assignee Team'][row]) print("") for gov in mylist: print ( "") print (" subgraph ", "cluster_",gov.replace(" ", "_")," {", sep='') for x in range(len(mylist[gov])): print (" \"", mylist[gov][x], "\";", sep='') print (" label = \"",gov.replace(" ", "_"),"\"", sep='') print (" }", sep='') url="https://docs.google.com/spreadsheets/d/e/2PACX-1vSGKF1LA9ONNq1S3ZTb-7hk-kJ7XlXdVQKDFmFJbTpLa0u_cVqTTjHkA8TdxougbN_DvmdiVbsZJ9UY/pub?gid=954864288&single=true&output=csv" data = pd.read_csv(url) data = filter_node(data, args.filter_list) print("") if (args.teams == 1): print ("//generate Teams with a with a unique shape and colour") for row in data.index: print (" \"", data['Assignee Team'][row],"\"", " [", "fillcolor=yellow, style=\"rounded,filled\", shape=diamond","]", sep='') if (args.all_projects== 1): print("") print ("//generate projects with a unique shape and colour") for row in data.index: print (" \"", data['Project'][row],"\"", " [", "shape=box","]", sep='') print("") if (args.teams == 1): print("") print ("//generate team members in a project") url="https://docs.google.com/spreadsheets/d/e/2PACX-1vSGKF1LA9ONNq1S3ZTb-7hk-kJ7XlXdVQKDFmFJbTpLa0u_cVqTTjHkA8TdxougbN_DvmdiVbsZJ9UY/pub?gid=954864288&single=true&output=csv" data = pd.read_csv(url) data = filter_node(data, args.filter_list) for row in data.index: #generate the graph for assignee team print (" \"", data['Assignee Team'][row],"\"", " -> ", "\"", data['Project'][row],"\"", " [", "taillabel=\"E", int(data['COUNTUNIQUE of Assignee'][row]),"\"", " weight=", data['COUNTUNIQUE of Assignee'][row]," style=dashed"," color=red","]", sep='') print("") url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSGKF1LA9ONNq1S3ZTb-7hk-kJ7XlXdVQKDFmFJbTpLa0u_cVqTTjHkA8TdxougbN_DvmdiVbsZJ9UY/pub?gid=1744118841&single=true&output=csv" data = pd.read_csv(url,names=["project", "linked", "depends_on", "relates_to"],skiprows=2) data = filter_node(data, args.filter_list) data.fillna(0, inplace=True) #generate the graph for relates to and depends on if (args.relates == 1): print("") print ("//generate relates to links") for row in data.index: if data['relates_to'][row]: print (" \"", data['project'][row],"\"", " -> ", "\"", data['linked'][row],"\"", " [", "label=\"R", int(data['relates_to'][row]),"\"", " weight=", data['relates_to'][row]," color=blue", " style=dotted ","]", sep='') if (args.dependance == 1): print("") print ("//generate depends on links") for row in data.index: if data['depends_on'][row]: print (" \"",data['project'][row],"\"", " -> ", "\"",data['linked'][row],"\""," [", " taillabel=\"D", int(data['depends_on'][row]),"\"", " weight=",data['depends_on'][row], "]", sep='' ) print("") url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSGKF1LA9ONNq1S3ZTb-7hk-kJ7XlXdVQKDFmFJbTpLa0u_cVqTTjHkA8TdxougbN_DvmdiVbsZJ9UY/pub?gid=1310895524&single=true&output=csv" data = pd.read_csv(url) data = filter_node(data, args.filter_list) if (args.company == 1): print("") print ("// generate the graph for assignee teams to projects") for row in data.index: print (" \"", data['Assignee Company'][row],"\"", " -> ", "\"", data['Project'][row],"\"", " [", "taillabel=\"", int(data['COUNTUNIQUE of Assignee'][row]),"\"", " weight=", data['COUNTUNIQUE of Assignee'][row]," style=dashed"," color=azure3","]", sep='') if (args.company == 1): print("") print ("// generate company shape and colour") #remove duplicates data.drop_duplicates(subset="Assignee Company", keep = 'first', inplace = True) for row in data.index: #generate the graph for assignee team print (" \"", data['Assignee Company'][row],"\"", " [", "fillcolor=azure, style=\"rounded,filled\", shape=diamond","]", sep='') print ("}")