Exemple #1
0
def dorun():
    '''
    Handle the `run` command.
    '''
    loader = load_tests()

    if config.tags:
        suites = []
        for tag in config.tags:
            suites.extend(loader.suites_with_tag(tag))
    else:
        suites = loader.suites

    # Create directory to save junit and internal results in.
    mkdir_p(config.result_path)

    with open(joinpath(config.result_path, 'pickle'), 'w') as result_file,\
         open(joinpath(config.result_path, 'junit.xml'), 'w') as junit_f:

        junit_logger = result.JUnitLogger(junit_f, result_file)
        console_logger = result.ConsoleLogger()
        loggers = (junit_logger, console_logger)

        log.display(separator())
        log.bold('Running Tests')
        log.display('')
        if config.uid:
            test_item = loader.get_uid(config.uid)
            results = Runner.run_items(test_item)
        else:
            testrunner = Runner(suites, loggers)
            results = testrunner.run()
Exemple #2
0
def draw_phenogenon(**kwargs):
    '''
    output pdf to visualise phenogenon heatmaps for each hpo/moi
    '''
    import itertools
    import plotly.graph_objs as go
    import plotly.io as pio

    # log transform p values
    def log_transform(x): return x if np.isnan(x) else -math.log(x)
    log_transform = np.vectorize(log_transform)

    for moi in ('r', 'd'):
        # make folder
        outdir = os.path.join(kwargs['heatmap_outdir'], moi)
        helper.mkdir_p(outdir)
        for hpo in kwargs['hpos'][moi]:
            data = kwargs['data']['phenogenon'][moi][hpo]
            # get file name:
            outfile = os.path.join(
                outdir, '{}.pdf'.format(hpo.replace(':', '_')))
            # get zmax
            zmax = min(kwargs['zmax'], max(
                list(itertools.chain.from_iterable([i for i in data]))))
            # get title
            title = '{}-{}'.format(kwargs['hpo_db'][hpo]['name'][0], 'recessive' if moi
                                   == 'r' else 'dominant')
            # get trace
            trace = {
                'z': log_transform(data),
                'x': np.arange(0, kwargs['gnomad_cutoff'], kwargs['gnomad_step']),
                'y': np.arange(0, 60, kwargs['cadd_step']),
                'connectgaps': False,
                'type': 'heatmap',
                'showscale': True,
                'zmin': 0,
                'zauto': False
            }
            layout = {
                'title': title,
                'xaxis': {'title': 'GF'},
                'yaxis': {'title': 'CADD_phred'}
            }
            fig = go.Figure(data=[trace], layout=layout)
            pio.write_image(fig, outfile)
Exemple #3
0
    def run_test(self, testobj, fixtures=None):
        '''
        Run the given test.

        This performs the bulkwork of the testing framework.

        1. Handle setup for all fixtures required for the specific test.

        2. Run the test.

        3. Teardown the fixtures for the test which are tied locally to the\
            test.
        '''
        outdir = test_results_output_path(testobj)
        mkdir_p(outdir)
        fstdout_name = joinpath(outdir, config.constants.system_err_name)
        fstderr_name = joinpath(outdir, config.constants.system_out_name)

        # Capture the output into a file.
        with tee(fstderr_name, stderr=True, stdout=False),\
                tee(fstdout_name, stderr=False, stdout=True):
            return self._run_test(testobj, fstdout_name, fstderr_name,
                                  fixtures)
def main():

	global opts 
	parser = create_parser()
	opts, _args = parser.parse_args()
	
	if opts.database is None:
		parser.parse_args(['-h'])

	opts.output = opts.output + str(datetime.now())
	resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

	Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
	sys.excepthook = Pyro4.util.excepthook
	ns = Pyro4.naming.locateNS('128.208.4.106', 51555)
	# get the livedb object:
	uri = ns.lookup('livedb.main')
	global api
	api = Pyro4.Proxy(uri)

	mkdir_p(opts.logdir)
	logger = logging.getLogger()
	logger.setLevel(logging.DEBUG)
	formatter = logging.Formatter('%(message)s')
	loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
			maxBytes=128*1024*1024, backupCount=5)
	loghandler.setFormatter(formatter)
	logger.addHandler(loghandler)

	
	sys.stdout = open(opts.output, 'w')
	sys.stderr = sys.stdout
	
	global conn
	c = create_db()
	
 	global feeds
	feeds = ['ftr', 'rv', 'rtr']
	num2pfx = dict()

	global pfxToLoc
	pfxToLoc = dict()
	for feed in feeds:
		pfxToLoc[feed] = api.get_prefix_to_locations(feed)
			

	global num2VPseen
	num2VPseen = dict()
	for num in PREFIX_RANGE:
		num2VPseen[num] = dict()

	global pfx2PoisonList
	pfx2PoisonList = dict()
	for num in PREFIX_RANGE:
		pfx2PoisonList[num] = list()
		pfx2PoisonList[num].append(RIOT_ASN)

	global pfx2VPBeingPoisoned
	pfx2VPBeingPoisoned = dict()

	global pfx2VP
	pfx2VP = defaultdict(list)

	global pfx2VPAlreadyPoisoned
	pfx2VPAlreadyPoisoned = dict()
	for num in PREFIX_RANGE:
		pfx2VPAlreadyPoisoned[num] = set()

	global pfx2VPASNAlreadyDone
	pfx2VPASNAlreadyDone = dict()
	for num in PREFIX_RANGE:
		pfx2VPASNAlreadyDone[num] = set()

	global pfx2PoisVPNotSeenCount
	pfx2PoisVPNotSeenCount = dict()
	for num in PREFIX_RANGE:
		pfx2PoisVPNotSeenCount[num] = 0

	global vpPois_TR_path
	vpPois_TR_path = dict()
	for num in PREFIX_RANGE:
		vpPois_TR_path[num] = TR_path_object('','','','','','','')

	global vpPois_seen_prevTR
	vpPois_seen_prevTR = dict()
	for num in PREFIX_RANGE:
		vpPois_seen_prevTR[num] = False

	#signal.signal(signal.SIGUSR1, lambda sig, stack: traceback.print_stack(stack))

	signal.signal(signal.SIGUSR1, printStack)
	
	for num in PREFIX_RANGE:
		num2pfx[num] = Prefix(num, RIOT_ASN, "announced")
		num2pfx[num].up()
		announce_null(num2pfx[num])

	soft_reset(num2pfx)
	wait_cmd(POISON_INTERVAL_2)
	
	
	#initial poisoning so that the path shows up in the data feeds
	pfx_idx = 0
	for mux in MUX_NAMES:
		pfx = num2pfx[PREFIX_RANGE[pfx_idx]]
		pfx.poisonList([RIOT_ASN])
		announce_sentinel(pfx,mux)
		pfx_idx += 1

	soft_reset(num2pfx)
	global last_poison_time
	last_poison_time = int(time.time())
	wait_cmd(POISON_INTERVAL)

	poisonRound = 0
	sent_used = True
	global num_ftr_query
	num_ftr_query = NUM_FTR
 		
	while True:
		if num_ftr_query>=NUM_FTR:
			for num in PREFIX_RANGE:				
				if poisonRound%SENT_ROUND==0 and sent_used is True:
					populateDB(c,num,poisonRound,SENTINEL,"")
				else:
					populateDB(c,num,poisonRound,TEST,pfx2VPBeingPoisoned[num].rv)
				conn.commit()

				print "VPNotSeenCount: " + str(pfx2PoisVPNotSeenCount[num])
				'''
				print "vantage points:"
				for v in pfx2VP[num]:
					print v
				'''

				print "vp's already poisoned: " + str(pfx2VPAlreadyPoisoned[num])
				print "vp ASes already done: " + str(pfx2VPASNAlreadyDone[num])
				pfx2PoisonList[num] = getNextPoisoning(num,poisonRound,sent_used)
				print "poison_list: " + str(pfx2PoisonList[num])
				print "sentinel used: " + str(sent_used)

				pfx = num2pfx[num]
				pfx.poisonList(list(pfx2PoisonList[num]))
			
				for mux in MUX_NAMES:
					if PREFIX_RANGE.index(num)==MUX_NAMES.index(mux):
						pfx.update_route_map1(mux, True)
					else:
						pfx.update_route_map1(mux,False)
                                         
				pfx.up()

			if poisonRound%SENT_ROUND != 0:
				poisonRound += 1
			else:
				if sent_used is False:
				        #we just sent sentinels out
					sent_used = True
				else:
					sent_used = False
					poisonRound += 1
			
			sys.stdout.flush()
			soft_reset(num2pfx)
			last_poison_time = int(time.time())
			num_ftr_query = 1
			wait_cmd(FTR_INTERVAL)
			
		else:
			for num in PREFIX_RANGE:
				if poisonRound%SENT_ROUND==0 and sent_used is True:
					populateDB_ftr(c,num,poisonRound,"")
				else:
					populateDB_ftr(c,num,poisonRound,pfx2VPBeingPoisoned[num].rv)
				conn.commit()
			num_ftr_query += 1
			wait_cmd(FTR_INTERVAL)
Exemple #5
0
def main():

	global opts 
	parser = create_parser()
	opts, _args = parser.parse_args()
	if  opts.database is None or opts.refasn is None:
		parser.parse_args(['-h'])

	resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

	Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
	sys.excepthook = Pyro4.util.excepthook
	ns = Pyro4.naming.locateNS('128.208.4.106', 51556)
	# get the livedb object:
	uri = ns.lookup('livedb.main')
	global api
	api = Pyro4.Proxy(uri)

	mkdir_p(opts.logdir)
	logger = logging.getLogger()
	logger.setLevel(logging.DEBUG)
	formatter = logging.Formatter('%(message)s')
	loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
			maxBytes=128*1024*1024, backupCount=5)
	loghandler.setFormatter(formatter)
	logger.addHandler(loghandler)

	sys.stdout = open(opts.output, 'w')
	sys.stderr = sys.stdout

	conn = sqlite3.connect(opts.database + str(datetime.now()))
	c = conn.cursor()

	#observedPath is the raw path that you see both feeds: lists if ASs from ftr and list of ASes from rv (W in case of withdrawn rv path)
	#filteredASPath is the filtered AS path
	#asn: the ASN that we're trying to measure

	c.execute("create table if not exists ASGraph (prefix text, unix_time int, dtime text, asn int, \
                   prepend_round int, mux text, feed text, observedPath text, ipPath text, vpoint text)")
	c.execute("create index idx_pfx on ASGraph(prefix)")
	c.execute("create index idx_asn on ASGraph(asn)")
	c.execute("create index idx_pfx_path on ASGraph(prefix,observedPath)")
	c.execute("create index idx_prepend on ASGraph(prepend_round)")
	

	global feeds
	feeds = ['rv', 'ftr']
	num2pfx = dict()

	#announce 250-255 from all muxes
	for num in PREFIX_RANGE:
		num2pfx[num] = Prefix(num, 47065, "announced")

	#initial poisoning so that the path shows up in the data feeds
	for num in PREFIX_RANGE:
		pfx = num2pfx[num]
		for mux in MUX_NAMES:
			pfx.update_route_map1(mux, True)
		pfx.up()

	soft_reset(num2pfx)
	wait_cmd(1800)
		
	global pfxToLoc
	pfxToLoc = dict()
	for feed in feeds:
		pfxToLoc[feed] = api.get_prefix_to_locations(feed)

	global num2VPseen
	num2VPseen = dict()
	for num in PREFIX_RANGE:
		num2VPseen[num] = dict()

	global num2pfxMux
	num2pfxMux = dict()

	global numPrepend
	numPrepend = 0
	#for refasn store the initial path for each prefix
	for num in PREFIX_RANGE:
		populateDB(c,num,opts.refasn)
		conn.commit()

	numPrepend = 1
	while True:

		for num in PREFIX_RANGE:
			mux = num2pfxMux[num]
			print "mux for prefix " + str(num) + ": " + mux
			pfx = num2pfx[num]
			assert mux in MUX_NAMES
			pfx.set_num_prepend1(numPrepend,mux)
		
			pfx.up()

		soft_reset(num2pfx)
		wait_cmd(1800)

		for num in PREFIX_RANGE:
			populateDB(c,num,opts.refasn)
			conn.commit()
		
		numPrepend += 1
def main():
    #Parameters
    show_useful_ngrams = False
    best_cv_score = 0.

    #Where to store files measuring how models performed
    directory = "data/"
    helper.mkdir_p(directory)

    print "Extracting tweets from database"
    tweets = helper.extract_tweets(users, max_users = -1, max_tweets = 1, min_tweets = 1)

    #Can split out CV randomly or by specific terms
    print "Splitting out CV"
    #split_tweets = helper.split_out_cv_by_terms(tweets, users, cv_terms = ["husband", "wife"], train_terms = [])
    split_tweets = helper.split_out_cv_random(tweets)
    train_tweets = split_tweets["train"]
    cv_tweets = split_tweets["cv"]

    out_string = 'Running with ' + str(len(train_tweets)) + ' training tweets and ' + str(len(cv_tweets)) + ' cross-validation tweets'
    sys.stdout.write(out_string + '\n')

    #Build Ngrams for train tweets, make this general
    print "Building Train Ngrams"
    #ngrams maps the actual ngram to a unique id
    ngrams = {}
    helper.extract_ngrams(train_tweets, ngrams)
    print "Number of Ngrams " + str(len(ngrams))

    counts = [2, 6, 10]
    min_sig = [0.2, 0.7, 1.2]
    filename = directory + "Scores"

    if show_useful_ngrams:
        print_useful_ngrams(ngrams, 100, type = "T")

    print "Building Cross-Validation Ngrams"
    #useful_ngrams maps the ngram id to the column it occupies in matrix
    useful_ngrams = find_useful_ngrams(ngrams, min_count=5, min_significance=0.5)

    helper.extract_ngrams(cv_tweets, ngrams, for_cv_tweets = True)
    with open('data/ngrams.pkl', 'wb') as fid:
        cPickle.dump({"ngrams": ngrams, "useful_ngrams": useful_ngrams}, fid)

    print "Building training matrix"
    train_vars = helper.build_Xy(train_tweets, useful_ngrams)
    X_train = train_vars["X"]
    y_train = train_vars["y"]

    print "Building cross-validation matrix"
    cv_vars = helper.build_Xy(cv_tweets, useful_ngrams)
    X_cv = cv_vars["X"]
    y_cv = cv_vars["y"]

    logit_score = logistic_regression(X_train, y_train, X_cv, y_cv, train_tweets, cv_tweets, directory + "Logit")
    if logit_score > best_cv_score:
        best_cv_score = logit_score

    nb_score = naive_bayes(X_train, y_train, X_cv, y_cv, train_tweets, cv_tweets, directory + "MultiNB")
    if nb_score > nb_score:
        best_cv_score = nb_score

    print('Best CV score: %(score)f'% {"score":best_cv_score})
Exemple #7
0
def main():

	global opts 
	parser = create_parser()
	opts, _args = parser.parse_args()
	
	if opts.database is None or opts.blacklist is None:
		parser.parse_args(['-h'])

	resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

	Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
	sys.excepthook = Pyro4.util.excepthook
	ns = Pyro4.naming.locateNS('128.208.4.106', 51556)
	# get the livedb object:
	uri = ns.lookup('livedb.main')
	global api
	api = Pyro4.Proxy(uri)

	mkdir_p(opts.logdir)
	logger = logging.getLogger()
	logger.setLevel(logging.DEBUG)
	formatter = logging.Formatter('%(message)s')
	loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
			maxBytes=128*1024*1024, backupCount=5)
	loghandler.setFormatter(formatter)
	logger.addHandler(loghandler)

	
	sys.stdout = open(opts.output, 'w')
	sys.stderr = sys.stdout
	
	global conn
	c = create_db()
	
 	global feeds
	feeds = ['rv', 'ftr', 'rtr']
	num2pfx = dict()

	global pfxToLoc
	pfxToLoc = dict()
	for feed in feeds:
		pfxToLoc[feed] = api.get_prefix_to_locations(feed)

	global num2VPseen
	num2VPseen = dict()
	for num in PREFIX_RANGE:
		num2VPseen[num] = dict()

	global pfx2PoisonSet
	pfx2PoisonSet = dict()
	for num in PREFIX_RANGE:
		pfx2PoisonSet[num] = set()
		pfx2PoisonSet[num].add(RIOT_ASN)

	global pfx2VPBeingPoisoned
	pfx2VPBeingPoisoned = dict()

	global pfx2VP
	pfx2VP = defaultdict(list)

	global sent_idx
	sent_idx = 0
	
	for num in PREFIX_RANGE:
		num2pfx[num] = Prefix(num, RIOT_ASN, "announced")
		num2pfx[num].up()
		announce_null(num2pfx[num])

	soft_reset(num2pfx)
	wait_cmd(POISON_INTERVAL_2)

	#initial poisoning so that the path shows up in the data feeds
	pfx_idx = 0
	for mux in MUX_NAMES:
		pfx = num2pfx[PREFIX_RANGE[pfx_idx]]
		pfx.poisonList([RIOT_ASN])
		announce_sentinel(pfx,mux)
		pfx_idx += 1

	#last pfx is the sentinel: for now starting with the first mux
	announce_sentinel(num2pfx[PREFIX_RANGE[-1]],MUX_NAMES[sent_idx])
	soft_reset(num2pfx)
	wait_cmd(POISON_INTERVAL)
	
		
	poisonRound = 0
 		
	while True:
		if poisonRound==0:
			vpJustPoisoned = ""
		else:
			vpJustPoisoned = pfx2VPBeingPoisoned[PREFIX_RANGE[sent_idx]].rv
			
		populateDB(c,PREFIX_RANGE[-1],poisonRound,SENTINEL,vpJustPoisoned)
		conn.commit()
                          
		for num in PREFIX_RANGE[0:len(PREFIX_RANGE)-1]:
			if poisonRound==0:
				vpJustPoisoned = ""
			else:
				vpJustPoisoned = pfx2VPBeingPoisoned[num].rv								     
			populateDB(c,num,poisonRound,TEST,vpJustPoisoned)
			conn.commit()
			
			print "vantage points:"
			for v in pfx2VP[num]:
				print v

			pfx2PoisonSet[num] = getNextPoisoning(num)
			print "pset: " + str(pfx2PoisonSet[num])

			pfx = num2pfx[num]
			pfx.poisonList(list(pfx2PoisonSet[num]))
			
			for mux in MUX_NAMES:
				if PREFIX_RANGE.index(num)==MUX_NAMES.index(mux):
					pfx.update_route_map1(mux, True)
				else:
					pfx.update_route_map1(mux,False)
                                         
			pfx.up()

		sent_idx = (sent_idx+1)%len(MUX_NAMES)
		announce_sentinel(num2pfx[PREFIX_RANGE[-1]],MUX_NAMES[sent_idx])

		poisonRound += 1

		sys.stdout.flush()
		soft_reset(num2pfx)
		wait_cmd(POISON_INTERVAL)
Exemple #8
0
def main():

	global opts 
	parser = create_parser()
	opts, _args = parser.parse_args()

	opts.output = opts.output + str(datetime.now())
	resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

	Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
	sys.excepthook = Pyro4.util.excepthook
	ns = Pyro4.naming.locateNS('128.208.4.106', 51556)
	# get the livedb object:
	uri = ns.lookup('livedb.main')
	global api
	api = Pyro4.Proxy(uri)

	mkdir_p(opts.logdir)
	logger = logging.getLogger()
	logger.setLevel(logging.DEBUG)
	formatter = logging.Formatter('%(message)s')
	loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
			maxBytes=128*1024*1024, backupCount=5)
	loghandler.setFormatter(formatter)
	logger.addHandler(loghandler)

	global feeds
	feeds = ['ftr', 'rv', 'rtr']
	num2pfx = dict()

	global pfxToLoc
	pfxToLoc = dict()
	for feed in feeds:
		pfxToLoc[feed] = api.get_prefix_to_locations(feed)
	
	for num in PREFIX_RANGE:
		num2pfx[num] = Prefix(num, RIOT_ASN, "announced")
		num2pfx[num].up()
		announce_null(num2pfx[num])

	soft_reset(num2pfx)
	wait_cmd(POISON_INTERVAL_2)
	
	#initial poisoning so that the path shows up in the data feeds
	pfx_idx = 0
	for mux in MUX_NAMES:
		pfx = num2pfx[PREFIX_RANGE[pfx_idx]]
		pfx.poisonList([RIOT_ASN])
		announce_sentinel(pfx,mux)
		pfx_idx += 1

	soft_reset(num2pfx)
	wait_cmd(POISON_INTERVAL)

	numPaths = 0
	tstamp = int(time.time())
	for feed in feeds:	
		locs = pfxToLoc[feed][pfx]
		for rv in locs:
			update = api.get_path(feed, pfx, rv, 'last_update')
			if feed=='rv':
				if update.time < START_TIME:
					continue
				vp = str(rv).split(',')
				if len(vp)<2:
					continue
			elif feed=='ftr' or feed=='rtr':
				if update.time < tstamp-(30*60):
					continue
			numPaths += 1

	print numPaths
Exemple #9
0
def main():

	global opts 
	parser = create_parser()
	opts, _args = parser.parse_args()

	resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

	Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
	sys.excepthook = Pyro4.util.excepthook
	ns = Pyro4.naming.locateNS('128.208.4.106', 51556)
	# get the livedb object:
	uri = ns.lookup('livedb.main')
	global api
	api = Pyro4.Proxy(uri)

	mkdir_p(opts.logdir)
	logger = logging.getLogger()
	logger.setLevel(logging.DEBUG)
	formatter = logging.Formatter('%(message)s')
	loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
			maxBytes=128*1024*1024, backupCount=5)
	loghandler.setFormatter(formatter)
	logger.addHandler(loghandler)

	sys.stdout = open(opts.output, 'w')
	sys.stderr = sys.stdout

	db_file = opts.database + str(datetime.now())
	#db_file = "../data/mike_data/mike.db2012-04-25 00:08:59.710008"
	conn = sqlite3.connect(db_file)
	c = conn.cursor()


	c.execute("create table if not exists ASGraph (prefix text, unix_time int, dtime text, \
                   poison_round int, poisonedAS int, feed text, observedPath text, filteredASPath, vpoint text, thisVPoisoned int)")
	c.execute("create index idx_pfx on ASGraph(prefix)")
	c.execute("create index idx_asn on ASGraph(poisonedAS)")
	c.execute("create index idx_pfx_path on ASGraph(prefix,observedPath)")
	c.execute("create index idx_pfx_filpath on ASGraph(prefix,filteredASPath)")
	c.execute("create index idx_prepend on ASGraph(poison_round)")
	c.execute("create index idx_vpoint on ASGraph(vpoint)")

	num2pfx = dict()
	for num in PREFIX_RANGE:
		num2pfx[num] = Prefix(num, 47065, "announced")

        
	global feeds
	#feeds = ['rv', 'ftr']
	feeds = ['rv']

	global num2PoisonSet
	num2PoisonSet = dict()
	for num in PREFIX_RANGE:
		num2PoisonSet[num] = set()
		num2PoisonSet[num].add(47065)

	global num2VPoint
	num2VPoint = dict()
	for num in PREFIX_RANGE:
		num2VPoint[num] = "0"

	global ASPoisoned
	ASPoisoned = dict()


	for num in PREFIX_RANGE:
		pfx = num2pfx[num]
		pfx.poisonList([47065])
		pfx.up()

	soft_reset(num2pfx)
	wait_cmd(1800)
	
	
	global poisonRound
	poisonRound = 0
 
	global pfxToLoc
	pfxToLoc = dict()
	for feed in feeds:
		pfxToLoc[feed] = api.get_prefix_to_locations(feed)
		
	while True:
		
		for num in PREFIX_RANGE:
			populateDB(c,num)
			conn.commit()

		#wait_cmd(1800)
		for num in PREFIX_RANGE:
			pfx = num2pfx[num]
			f = False
			while f is False:
				f = getPoisonings(c,num)
			pfx.poisonList(list(num2PoisonSet[num]))
			pfx.up()

		soft_reset(num2pfx)
		
		poisonRound += 1
		
		wait_cmd(3600)
Exemple #10
0
def main():

	global opts 
	parser = create_parser()
	opts, _args = parser.parse_args()

	resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

	Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
	sys.excepthook = Pyro4.util.excepthook
	ns = Pyro4.naming.locateNS('128.208.4.106', 51556)
	# get the livedb object:
	uri = ns.lookup('livedb.main')
	global api
	api = Pyro4.Proxy(uri)

	mkdir_p(opts.logdir)
	logger = logging.getLogger()
	logger.setLevel(logging.DEBUG)
	formatter = logging.Formatter('%(message)s')
	loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
			maxBytes=128*1024*1024, backupCount=5)
	loghandler.setFormatter(formatter)
	logger.addHandler(loghandler)

	sys.stdout = open(opts.output, 'w')
	sys.stderr = sys.stdout

	global num2PoisonCandidates
	num2PoisonCandidates = dict()
	for num in PREFIX_RANGE:
		num2PoisonCandidates[num] = list()

	global num2commonAS
	num2commonAS = dict()
	num2commonAS[241] = [101,73]
	num2commonAS[243] = [6939,2381]
	num2commonAS[245] = [174,2637]
	num2commonAS[247] = [7922,88]
	num2commonAS[249] = [209,2722,12148]

	global num2startPoisIdx
	num2startPoisIdx = dict()
	num2startPoisIdx[241] = 3
	num2startPoisIdx[243] = 2
	num2startPoisIdx[245] = 2
	num2startPoisIdx[247] = 2
	num2startPoisIdx[249] = 3

	conn = sqlite3.connect('data/imc4.db')
	c = conn.cursor()

	#c.execute("drop table ASGraph ")
	c.execute("create table ASGraph (prefix text, unix_time int, dtime text, asn int, edge int, \
                   bfs_level int, poison_round int, startTime text, poisoning text, feed text, observedPath text, vpoint text)")
	c.execute("create index idx_pfx on ASGraph(prefix)")
	c.execute("create index idx_asn on ASGraph(asn)")
	c.execute("create index idx_pfx_path on ASGraph(prefix,observedPath)")
	c.execute("create index idx_edge on ASGraph(asn,edge)")
	

	global feeds
	feeds = ['rv', 'ftr']
	num2pfx = dict()
	for num in PREFIX_RANGE:
		num2pfx[num] = Prefix(num, 47065, "announced")

	global num2PoisonSet
	num2PoisonSet = dict()
	for num in PREFIX_RANGE:
		num2PoisonSet[num] = set()
		num2PoisonSet[num].add(47065)

	global startTime
	startTime = str(datetime.now())
	#initial poisoning so that the path shows up in the data feeds


	
	for num in PREFIX_RANGE:
		pfx = num2pfx[num]
		pfx.poisonList([47065])
		pfx.up()

	soft_reset(num2pfx)
	wait_cmd(1800)
	
	
	global num2BFSLevel
	num2BFSLevel = dict()
	for num in PREFIX_RANGE:
		num2BFSLevel[num] = 1 
	global num2PoisonRound
	num2PoisonRound = dict()
	for num in PREFIX_RANGE:
		num2PoisonRound[num] = 1 
	global pfxToLoc
	pfxToLoc = dict()
	for feed in feeds:
		pfxToLoc[feed] = api.get_prefix_to_locations(feed)
	

	
	while True:
		for num in PREFIX_RANGE:
			populateDB(c,num)
			conn.commit()

		#wait_cmd(1800)
		for num in PREFIX_RANGE:
			pfx = num2pfx[num]
			getPoisonings(c,num)
			pfx.poisonList(list(num2PoisonSet[num]))
			pfx.up()

		soft_reset(num2pfx)
		
		for num in PREFIX_RANGE:
			num2PoisonRound[num] += 1

		#for num in PREFIX_RANGE:
		#	logging.info('prefix_getPoisonings 184.164.%d.0/24 %s %s', num, num2PoisonSet[num])
		
		wait_cmd(1800)

	'''
Exemple #11
0
 def make_vm_directory(self, group_vm, subid):
     vm_dir = self.vm_dir(group_vm, subid)
     helper.mkdir_p(vm_dir)
Exemple #12
0
 def make_directories(self, group_vm):
     self.logger.debug('Start method: make_directries of Group VM[%s]' % group_vm.group_name())
     download_dir = self.group_download_dir(group_vm)
     helper.mkdir_p(download_dir)
     for subid in group_vm.subids():
         self.make_vm_directory(group_vm, subid)
Exemple #13
0
 def __init__(self, stdout, stderr):
     helper.mkdir_p(os.path.dirname(stdout))
     helper.mkdir_p(os.path.dirname(stderr))
     self.stdout = open(stdout, 'w')
     self.stderr = open(stderr, 'w')
Exemple #14
0
def main():

	global opts 
	parser = create_parser()
	opts, _args = parser.parse_args()

	resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

	Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
	sys.excepthook = Pyro4.util.excepthook
	ns = Pyro4.naming.locateNS('128.208.4.106', 51556)
	# get the livedb object:
	uri = ns.lookup('livedb.main')
	global api
	api = Pyro4.Proxy(uri)

	mkdir_p(opts.logdir)
	logger = logging.getLogger()
	logger.setLevel(logging.DEBUG)
	formatter = logging.Formatter('%(message)s')
	loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
			maxBytes=128*1024*1024, backupCount=5)
	loghandler.setFormatter(formatter)
	logger.addHandler(loghandler)

	#sys.stdout = open(opts.output, 'w')
	#sys.stderr = sys.stdout

	global num2PoisonCandidates
	num2PoisonCandidates = dict()
	for num in PREFIX_RANGE:
		num2PoisonCandidates[num] = list()

	global num2commonAS
	num2commonAS = dict()
	num2commonAS[241] = [101,73]
	num2commonAS[243] = [6939,2381]
	num2commonAS[245] = [174,2637]
	num2commonAS[247] = [7922,88]
	num2commonAS[249] = [209,2722,12148]

	global num2startPoisIdx
	num2startPoisIdx = dict()
	num2startPoisIdx[241] = 3
	num2startPoisIdx[243] = 2
	num2startPoisIdx[245] = 2
	num2startPoisIdx[247] = 2
	num2startPoisIdx[249] = 3

	conn = sqlite3.connect('data/imc3.db')
	c = conn.cursor()

	global feeds
	feeds = ['rv', 'ftr']

	global num2PoisonSet
	num2PoisonSet = dict()
	for num in PREFIX_RANGE:
		num2PoisonSet[num] = set()
		num2PoisonSet[num].add(47065)
	
	
	global num2BFSLevel
	num2BFSLevel = dict()
	for num in PREFIX_RANGE:
		num2BFSLevel[num] = 1 
	global num2PoisonRound
	num2PoisonRound = dict()
	for num in PREFIX_RANGE:
		num2PoisonRound[num] = 1 
	global pfxToLoc
	pfxToLoc = dict()
	for feed in feeds:
		pfxToLoc[feed] = api.get_prefix_to_locations(feed)


	i = 1
	while (i < 5):
		for num in PREFIX_RANGE:
			getPoisonings(c,num)

		for num in PREFIX_RANGE:
			num2PoisonRound[num] += 1
		
		i += 1
	

	'''
	while True:
		for num in PREFIX_RANGE:
			populateDB(c,num)
			conn.commit()

		#wait_cmd(1800)
		for num in PREFIX_RANGE:
			pfx = num2pfx[num]
			getPoisonings(c,num)
			pfx.poisonList(list(num2PoisonSet[num]))
			pfx.up()

		soft_reset(num2pfx)
		
		for num in PREFIX_RANGE:
			num2PoisonRound[num] += 1

		#for num in PREFIX_RANGE:
		#	logging.info('prefix_getPoisonings 184.164.%d.0/24 %s %s', num, num2PoisonSet[num])
		
		wait_cmd(1800)
	'''

	'''
	parser.add_argument('-o', '--outputpath', default='./wiki_tokenized', type=str, help='output path')
	parser.add_argument('-p', '--separator', default='[,.;]', type=str, help='characters that separate sentences')
	parser.add_argument('-n', '--number', default=-1, type=int, help='number of gram files we use')
	parser.add_argument('-a', '--alphabet', default='abcdefghijklmnopqrstuvwxyz -',
		 type=str, help='supported alphabet')
	parser.add_argument('--cores', default=6, type=int, help='number of concurrent threads')

	args = parser.parse_args()
	print(args)

	# Begin Extract List of files
	articles = [f for f in listdir(args.inputpath) if isfile(join(args.inputpath, f))]
	articles.sort()
	print len(articles), "article files found."

	mkdir_p(join(args.outputpath + "/readable_articles"))
	mkdir_p(join(args.outputpath + "/articles"))

	grams = [f for f in listdir(args.grampath) if isfile(join(args.grampath, f))]
	grams.sort()
	print len(grams), "gram files found."
	# End Extract List of files

	N = args.number
	if (N <= 0) or (N >= len(grams)): N = len(grams) # N is the number of gram files we use, after sorted by filename

	print "Loading grams dictionary..."
	Dict = {} # Global dictionary for gram-files
	gram_file_count = 0
	for gram_file in grams:
		load_data_from_json(Dict, join(args.grampath, gram_file))
Exemple #16
0
 def __init__(self, stdout, stderr):
     helper.mkdir_p(os.path.dirname(stdout))
     helper.mkdir_p(os.path.dirname(stderr))
     self.stdout = open(stdout, 'w')
     self.stderr = open(stderr, 'w')
Exemple #17
0
    plt.savefig(figurename, dpi=300)
    plt.close()


if __name__ == '__main__':
    '''
    
    '''

    # Get config details
    results_folder, title, smooth, methods = helper.read_config_PLOT()
    rawdata_folder = results_folder + '/rawdata/'
    for evaluation in ['FMAX', 'WFMAX', 'SMIN', 'NSMIN']:
        for onto in ['BPO', 'CCO', 'MFO']:
            for Type in ['LK', 'NK']:
                for mode in ['partial', 'full']:
                    specific_title = '%s_%s_%s_%s_%s.png' % (onto, title, Type,
                                                             mode, evaluation)
                    print('\nPlotting %s\n' % title)
                    helper.mkdir_p('./plots')
                    result_list = []
                    for method in methods:
                        fields = method.split('_')
                        taxon = fields[2]
                        r = getResults(method, onto, taxon, Type, mode,
                                       evaluation, results_folder)
                        result_list.append(r)
                    plotMultiple(specific_title, result_list, smooth)
    else:
        sys.exit()
Exemple #18
0
def main():

    global opts
    parser = create_parser()
    opts, _args = parser.parse_args()

    resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

    Pyro4.config.HMAC_KEY = "choffnes-cunha-javed-owning"
    sys.excepthook = Pyro4.util.excepthook
    ns = Pyro4.naming.locateNS("128.208.4.106", 51556)
    uri = ns.lookup("livedb.main")
    global api
    api = Pyro4.Proxy(uri)

    mkdir_p(opts.logdir)
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter("%(message)s")
    loghandler = logging.handlers.RotatingFileHandler(opts.logfile, maxBytes=128 * 1024 * 1024, backupCount=5)
    loghandler.setFormatter(formatter)
    logger.addHandler(loghandler)

    global feeds
    feeds = ["rv", "ftr"]

    global pfxToLoc
    pfxToLoc = dict()
    for feed in feeds:
        pfxToLoc[feed] = api.get_prefix_to_locations(feed)

    global num2PoisonAS
    num2PoisonAS = dict()
    for num in PREFIX_RANGE:
        num2PoisonAS[num] = 47065

    num2ASPoisonedThisRound = defaultdict(list)

    global pfx2VP
    pfx2VP = defaultdict(list)
    global pfx2VPtoPoison
    pfx2VPtoPoison = dict()  # the VP index to be poisoned
    for num in PREFIX_RANGE:
        pfx2VPtoPoison[num] = 0

    tstamp = int(time.time())
    for num in PREFIX_RANGE:
        pfx = "184.164." + str(num) + ".0/24"
        for feed in feeds:
            locs = pfxToLoc[feed][pfx]
            for rv in locs:
                update = api.get_path(feed, pfx, rv, "last_update")
                if not update.path:
                    continue
                if feed == "rv":
                    print update
                    if update.time < (START_TIME - 10 * 3600):
                        continue
                    vp = str(rv).split(",")
                    if len(vp) < 2:
                        continue
                if feed == "ftr":
                    if update.time < tstamp - (30 * 60):
                        continue

                path = ""
                for asn in update.path:
                    path += str(asn) + " "
                path = path.split()
                tup = getFilteredPath(path, feed)
                if tup is None:
                    continue
                filpath = tup[0]
                mux = tup[1]

                vPoint = VP(pfx, filpath, feed, mux, str(rv))
                pfx2VP[num].append(vPoint)

    """
def main():

    global opts
    parser = create_parser()
    opts, _args = parser.parse_args()

    if opts.database is None or opts.blacklist is None:
        parser.parse_args(["-h"])

    opts.output = opts.output + str(datetime.now())
    resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

    Pyro4.config.HMAC_KEY = "choffnes-cunha-javed-owning"
    sys.excepthook = Pyro4.util.excepthook
    ns = Pyro4.naming.locateNS("128.208.4.106", 51556)
    # get the livedb object:
    uri = ns.lookup("livedb.main")
    global api
    api = Pyro4.Proxy(uri)

    mkdir_p(opts.logdir)
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter("%(message)s")
    loghandler = logging.handlers.RotatingFileHandler(opts.logfile, maxBytes=128 * 1024 * 1024, backupCount=5)
    loghandler.setFormatter(formatter)
    logger.addHandler(loghandler)

    sys.stdout = open(opts.output, "w")
    sys.stderr = sys.stdout

    global conn
    c = create_db()

    global feeds
    feeds = ["ftr", "rv", "rtr"]
    num2pfx = dict()

    global pfxToLoc
    pfxToLoc = dict()
    for feed in feeds:
        pfxToLoc[feed] = api.get_prefix_to_locations(feed)

    global num2VPseen
    num2VPseen = dict()
    for num in PREFIX_RANGE:
        num2VPseen[num] = dict()

    global pfx2PoisonList
    pfx2PoisonList = dict()
    for num in PREFIX_RANGE:
        pfx2PoisonList[num] = list()
        pfx2PoisonList[num].append(RIOT_ASN)

    global pfx2VPBeingPoisoned
    pfx2VPBeingPoisoned = dict()

    global pfx2VP
    pfx2VP = defaultdict(list)

    """
	global pfx2VPOrder
	pfx2VPOrder = defaultdict(list)
	"""

    global pfx2VPAlreadyPoisoned
    pfx2VPAlreadyPoisoned = dict()
    for num in PREFIX_RANGE:
        pfx2VPAlreadyPoisoned[num] = set()

    global pfx2PoisVPNotSeenCount
    pfx2PoisVPNotSeenCount = dict()
    for num in PREFIX_RANGE:
        pfx2PoisVPNotSeenCount[num] = 0

    for num in PREFIX_RANGE:
        num2pfx[num] = Prefix(num, RIOT_ASN, "announced")
        num2pfx[num].up()
        announce_null(num2pfx[num])

    soft_reset(num2pfx)
    wait_cmd(POISON_INTERVAL_2)
    # initial poisoning so that the path shows up in the data feeds
    pfx_idx = 0
    for mux in MUX_NAMES:
        pfx = num2pfx[PREFIX_RANGE[pfx_idx]]
        pfx.poisonList([RIOT_ASN])
        announce_sentinel(pfx, mux)
        pfx_idx += 1

    soft_reset(num2pfx)
    wait_cmd(POISON_INTERVAL)

    poisonRound = 0
    sent_used = True

    while True:
        for num in PREFIX_RANGE:

            if poisonRound % SENT_ROUND == 0 and sent_used is True:
                vpJustPoisoned = ""
                populateDB(c, num, poisonRound, SENTINEL, "")
            else:
                vpJustPoisoned = pfx2VPBeingPoisoned[num].rv
                populateDB(c, num, poisonRound, TEST, vpJustPoisoned)
            conn.commit()

            print "vantage points:"
            for v in pfx2VP[num]:
                print v

            print "vp's already poisoned: " + str(pfx2VPAlreadyPoisoned[num])
            pfx2PoisonList[num] = getNextPoisoning(num, poisonRound, sent_used)
            print "poison_list: " + str(pfx2PoisonList[num])
            print "sentinel used: " + str(sent_used)

            pfx = num2pfx[num]
            pfx.poisonList(list(pfx2PoisonList[num]))

            for mux in MUX_NAMES:
                if PREFIX_RANGE.index(num) == MUX_NAMES.index(mux):
                    pfx.update_route_map1(mux, True)
                else:
                    pfx.update_route_map1(mux, False)

            pfx.up()

        if poisonRound % SENT_ROUND != 0:
            poisonRound += 1
        else:
            if sent_used is False:
                # we just sent sentinels out
                sent_used = True
            else:
                sent_used = False
                poisonRound += 1

        sys.stdout.flush()
        soft_reset(num2pfx)
        wait_cmd(POISON_INTERVAL)
Exemple #20
0
def main():
                              
                          global opts 
                          parser = create_parser()
                          opts, _args = parser.parse_args()
                          if  opts.database is None:
                              parser.parse_args(['-h'])

                          resource.setrlimit(resource.RLIMIT_AS, (2147483648L, 2147483648L))

                          Pyro4.config.HMAC_KEY = 'choffnes-cunha-javed-owning'
                          sys.excepthook = Pyro4.util.excepthook
                          ns = Pyro4.naming.locateNS('128.208.4.106', 51556)
                          uri = ns.lookup('livedb.main')
                          global api
                          api = Pyro4.Proxy(uri)
                          
                          mkdir_p(opts.logdir)
                          logger = logging.getLogger()
                          logger.setLevel(logging.DEBUG)
                          formatter = logging.Formatter('%(message)s')
                          loghandler = logging.handlers.RotatingFileHandler(opts.logfile,
                                                                            maxBytes=128*1024*1024, backupCount=5)
                          loghandler.setFormatter(formatter)
                          logger.addHandler(loghandler)

                          sys.stdout = open(opts.output, 'w')
                          sys.stderr = sys.stdout

                          global conn
                          c = create_db()
                          
                          global feeds
                          feeds = ['rv', 'ftr']
                          
                          num2pfx = dict()
                          
                          global pfxToLoc
                          pfxToLoc = dict()
                          for feed in feeds:
                              pfxToLoc[feed] = api.get_prefix_to_locations(feed)

                          global num2VPseen
                          num2VPseen = dict()
                          for num in PREFIX_RANGE:
                              num2VPseen[num] = dict()
                          for num in PREFIX_RANGE_SENT:
                              num2VPseen[num] = dict()

                          global num2PoisonAS
                          num2PoisonAS = dict()
                          for num in PREFIX_RANGE:
                              num2PoisonAS[num] = RIOT_ASN
                          
                          num2ASPoisonedThisRound = defaultdict(list)

                          global pfx2VP
                          pfx2VP = defaultdict(list)
                          global pfx2VPtoPoison
                          pfx2VPtoPoison = dict()    #the VP index to be poisoned
                          for num in PREFIX_RANGE:
                              pfx2VPtoPoison[num] = -1

                          
                          for num in PREFIX_RANGE:
                              num2pfx[num] = Prefix(num, RIOT_ASN, "announced")
                              pfx = num2pfx[num]
                              pfx.poisonList([RIOT_ASN])
                              pfx.up()
                          
                          for num in PREFIX_RANGE:
                              pfx = num2pfx[num]
                              for mux in MUX_NAMES:
                                 if PREFIX_RANGE.index(num)==MUX_NAMES.index(mux):
                                    pfx.update_route_map1(mux, True)
                                 else:
                                    pfx.update_route_map1(mux,False)
                              pfx.up()
                          
                          for num in PREFIX_RANGE_SENT:
                              num2pfx[num] = Prefix(num, RIOT_ASN, "announced")
                              pfx = num2pfx[num]
                              pfx.poisonList([RIOT_ASN])
                              pfx.up()
                          
                          for num in PREFIX_RANGE_SENT:
                              pfx = num2pfx[num]
                              for mux in MUX_NAMES:
                                 if PREFIX_RANGE_SENT.index(num)==MUX_NAMES.index(mux):
                                     pfx.update_route_map1(mux, True)
                                 else:
                                     pfx.update_route_map1(mux,False)
                              pfx.up()

                          soft_reset(num2pfx)
                          wait_cmd(POISON_INTERVAL)
                          
                          poisonRound = 0
 
                          while True:
                              for num in PREFIX_RANGE_SENT:
                                 populateDB(c,num,poisonRound,SENTINEL,"")
                                 conn.commit()
                          
                              for num  in PREFIX_RANGE:
                                 if poisonRound==0:
                                     vpJustPoisoned = ""
                                 else:
                                     vpJustPoisoned = pfx2VP[num][pfx2VPtoPoison[num]].rv
                                 populateDB(c,num,poisonRound,TEST,vpJustPoisoned)
                                 conn.commit()

                                 if poisonRound==0:
                                     for num in PREFIX_RANGE:
                                         pfx2VPtoPoison[num] = 0
                                         
                                 pfx = num2pfx[num]
                                 print num2ASPoisonedThisRound[num]
                                 vp2poison = pfx2VP[num][pfx2VPtoPoison[num]]
                                 print "vp to poison: " + str(pfx2VPtoPoison[num]) + " " + str(vp2poison)
                                 num2PoisonAS[num] = getNextPoisoning(vp2poison, num2ASPoisonedThisRound[num])
                                 if num2PoisonAS[num] > 0 and num2PoisonAS[num] not in opts.blacklist:
                                     num2ASPoisonedThisRound[num].append(num2PoisonAS[num])
                                 print "as to poison: " + str(num2PoisonAS[num])
                                 print "new poisonidx: " + str(vp2poison.poisonIdx)
                                              
                                 if vp2poison.poisonIdx==vp2poison.startingPoisonIdx:
                                     if (pfx2VPtoPoison[num]+1)==len(pfx2VP[num]):
                                        num2ASPoisonedThisRound[num] = []
                                     pfx2VPtoPoison[num] = (pfx2VPtoPoison[num]+1)%len(pfx2VP[num])
                                 print "new vp to poison: " + str(pfx2VPtoPoison[num])
                                 if num2PoisonAS[num] > 0 and num2PoisonAS[num] not in opts.blacklist:
                                     pfx.poisonList([num2PoisonAS[num]])
                                 else:
                                     pfx.poisonList([RIOT_ASN])

                                 for mux in MUX_NAMES:
                                     if PREFIX_RANGE.index(num)==MUX_NAMES.index(mux):
                                         pfx.update_route_map1(mux, True)
                                     else:
                                         pfx.update_route_map1(mux,False)
                                         
                                 pfx.up()

                              sys.stdout.flush()
                              soft_reset(num2pfx)
                              poisonRound += 1
                              wait_cmd(POISON_INTERVAL)