Exemple #1
0
def deleteslice():
    url = "http://%s/stats/disableinsert" %\
        settings.properties['sdncontroller']
    r_ = requests.get(url=url)
    if r_.status_code != requests.codes.ok:
        logger.error(r_.text)
    else:
        logger.debug("Disable insert body: %s" % (r_.json()))

    url = "http://%s/stats/flowentry/delete" %\
        settings.properties['sdncontroller']
    logger.debug("Flows to be deleted: %s" % delflows.flows)
    for f in delflows.flows:
        logger.info("post %s: %s" % (
            url,
            f,
        ))
        r_ = requests.post(url=url,
                           headers={'content-type': 'application/json'},
                           data=json.dumps(f))
        if r_.status_code != requests.codes.ok:
            logger.error("Error in the response: %s" % r_)
            bottle.abort(500, r_)

    return bottle.HTTPResponse(body=[], status=201)
Exemple #2
0
def smosfile(name):
    logger.info("get-smosfile: %s" % (name))

    body = {'status': "ko"}
    if name in sample_files(settings.properties['samples']):
        body['status'] = "ok"

    return bottle.HTTPResponse(body=pretty_dumps(body), status=200)
Exemple #3
0
def main(argv=None):
    if not argv:
        argv = sys.argv

    try:
        parser_ = argparse.ArgumentParser(
            description='Data Preprocessing on Demand COLLECTOR-server',
            epilog='Report bugs to ' + '<*****@*****.**>',
            formatter_class=argparse.ArgumentDefaultsHelpFormatter)

        parser_.add_argument('-a',
                             '--address',
                             default='0.0.0.0',
                             help='server address')

        parser_.add_argument('-p', '--port', default=9000, help='server port')

        parser_.add_argument('-r',
                             '--reload',
                             default=False,
                             action="store_true",
                             help='reload the web-server')

        args_ = parser_.parse_args()

    except Exception as e:
        logger.error("Got an Exception parsing flags/options: %s" % (e, ))
        return False

    logger.debug("%s" % (args_, ))
    # verify the provided settings
    ret, error = verify_settings()
    if not ret:
        logger.error("Settings failure: %s" % (error, ))
        return False

    try:
        RTTMANAGER.start()
        logger.info("Starting COLLECTOR-server main cycle on %s:%s" % (
            args_.address,
            args_.port,
        ))
        bottle.run(host=args_.address,
                   port=args_.port,
                   debug=True,
                   server='paste',
                   reloader=args_.reload)

    except KeyboardInterrupt:
        logger.warning("User interruption!")

    except Exception as ex:
        logger.error("Exception: %s" % (ex, ))
        return False

    RTTMANAGER.stop()
    logger.warning("Bye Bye...")
    return True
Exemple #4
0
def smosfiles():
    logger.info("get-smosfiles")

    body = {'smosfiles': []}
    test = {
        'id': settings.properties['name'],
        'data': sample_files(settings.properties['samples'])
    }
    body['smosfiles'].append(test)

    return bottle.HTTPResponse(body=pretty_dumps(body), status=200)
 def stop(self):
     timeout = 5  # do not block for a long time!
     logger.debug("Stopping the rtt-manager service")
     self.__close()
     try:
         if self.is_alive():
             logger.debug("Joining %dsecs" % (timeout,))
             self.join(timeout=timeout)
             logger.info("rtt-manager service successfully stopped!")
     except Exception as e:
         logger.error("RunTime error: %s" % (str(e),))
Exemple #6
0
def main(argv=None):
    if not argv:
        argv = sys.argv

    try:
        parser_ = argparse.ArgumentParser(
            description='Data Preprocessing on Demand COLLECTOR-server',
            epilog='Report bugs to ' + '<*****@*****.**>',
            formatter_class=argparse.ArgumentDefaultsHelpFormatter)

        parser_.add_argument(
            '-a', '--address', default='0.0.0.0', help='server address')

        parser_.add_argument(
            '-p', '--port', default=9000, help='server port')

        parser_.add_argument(
            '-r', '--reload', default=False, action="store_true",
            help='reload the web-server')

        args_ = parser_.parse_args()

    except Exception as e:
        logger.error("Got an Exception parsing flags/options: %s" % (e,))
        return False

    logger.debug("%s" % (args_,))
    # verify the provided settings
    ret, error = verify_settings()
    if not ret:
        logger.error("Settings failure: %s" % (error,))
        return False

    try:
        RTTMANAGER.start()
        logger.info("Starting COLLECTOR-server main cycle on %s:%s" %
                    (args_.address, args_.port,))
        bottle.run(host=args_.address, port=args_.port, debug=True,
                   server='paste', reloader=args_.reload)

    except KeyboardInterrupt:
        logger.warning("User interruption!")

    except Exception as ex:
        logger.error("Exception: %s" % (ex,))
        return False

    RTTMANAGER.stop()
    logger.warning("Bye Bye...")
    return True
Exemple #7
0
def scp():
    logger.debug("post-scp")
    if bottle.request.headers['content-type'] != 'application/json':
        bottle.abort(500, "Application Type must be json!")

    logger.info("Body: %s" % (bottle.request.json))
    # We assume that only the 1 file should be transmitted!
    if len(bottle.request.json.get('data')) != 1:
        bottle.abort(500, "Unsupported data length!")

    data = bottle.request.json.get('data')[0]
    user = bottle.request.json.get('username')
    pswd = bottle.request.json.get('password')
    host = bottle.request.json.get('host')
    dest = bottle.request.json.get('destination')

    source = samples_dir(settings.properties['samples']) + '/' + data
    destination = dest + '/' + data
    logger.debug("Source: %s, Destination: %s" % (source, destination))

    body = {
        'scp': {
            'uid': data + "__" + str(time.time()),
            'starttime': time.time(),
            'endtime': None,
        }
    }
    # Create a connection to the server
    ssh = None
    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.WarningPolicy())
        ssh.connect(host, username=user, password=pswd, timeout=10)
        sftp = ssh.open_sftp()

        ret = sftp.put(source, destination)
        body['scp']['endtime'] = time.time()
        logger.debug("Result: %s" % (ret))

    except Exception as e:
        bottle.abort(500, str(e))
    finally:
        if ssh:
            ssh.close()

    return bottle.HTTPResponse(body=pretty_dumps(body), status=200)
Exemple #8
0
def submit():
    if 'application/json' not in bottle.request.headers['content-type']:
        bottle.abort(500, "Application Type must be json!")

    logger.info("post-submit: %s" % (bottle.request.json))

    owners = localize_file(bottle.request.json.get('file'))
    logger.debug("Owners: %s" % (owners, ))

    # path is a list of tuple, in which each element is a
    # source/destination value
    path = path_min_rtt(owners, bottle.request.json.get('host'))
    logger.debug("Path with minimum RTT: %s" % (path))
    body = []
    for p in path:
        # call the agent to make the copy
        url = "http://%s/scp" % p[0]
        payload = {
            "data": [bottle.request.json.get('file')],
            "username": bottle.request.json.get('username'),
            "password": bottle.request.json.get('password'),
            "host": p[1],
            "destination": bottle.request.json.get('destination')
        }
        logger.debug("post %s: %s" % (
            url,
            payload,
        ))
        r_ = requests.post(url=url,
                           headers={'content-type': 'application/json'},
                           data=json.dumps(payload))
        if r_.status_code != requests.codes.ok:
            logger.error(r_.text)
            bottle.abort(500, r_.text)
        else:
            logger.debug("Response %s body: %s" % (x, r_.json()))
            test = {
                "source": p[0],
                "destination": p[1],
                "value": r_.json().get('scp')
            }
            body.append(test)

    return bottle.HTTPResponse(body=pretty_dumps(body), status=201)
Exemple #9
0
def submit():
    if 'application/json' not in bottle.request.headers['content-type']:
        bottle.abort(500, "Application Type must be json!")

    logger.info("post-submit: %s" % (bottle.request.json))

    owners = localize_file(bottle.request.json.get('file'))
    logger.debug("Owners: %s" % (owners,))

    # path is a list of tuple, in which each element is a
    # source/destination value
    path = path_min_rtt(owners, bottle.request.json.get('host'))
    logger.debug("Path with minimum RTT: %s" % (path))
    body = []
    for p in path:
        # call the agent to make the copy
        url = "http://%s/scp" % p[0]
        payload = {
            "data": [bottle.request.json.get('file')],
            "username": bottle.request.json.get('username'),
            "password": bottle.request.json.get('password'),
            "host": p[1],
            "destination": bottle.request.json.get('destination')
        }
        logger.debug("post %s: %s" % (url, payload,))
        r_ = requests.post(
            url=url, headers={'content-type': 'application/json'},
            data=json.dumps(payload))
        if r_.status_code != requests.codes.ok:
            logger.error(r_.text)
            bottle.abort(500, r_.text)
        else:
            logger.debug("Response %s body: %s" % (x, r_.json()))
            test = {
                "source": p[0],
                "destination": p[1],
                "value": r_.json().get('scp')
            }
            body.append(test)

    return bottle.HTTPResponse(body=pretty_dumps(body), status=201)
Exemple #10
0
def smosfiles():
    logger.info("get-smosfiles")

    body = {'smosfiles': []}
    for k, v in settings.properties['peers'].items():
        logger.debug("Testbed: %s" % (k,))
        for x in v:
            r_ = requests.get(url="http://%s/smosfiles" % x)
            logger.debug("Response body: %s" % r_.json())
            test = {
                'testbed': k,
                'address': x.split(':')[0],
                'port': x.split(':')[1]
            }
            for data in r_.json()['smosfiles']:
                test['id'] = data['id']
                test['data'] = data['data']

                body['smosfiles'].append(test)

    return bottle.HTTPResponse(body=pretty_dumps(body), status=200)
Exemple #11
0
def smosfiles():
    logger.info("get-smosfiles")

    body = {'smosfiles': []}
    for k, v in settings.properties['peers'].items():
        logger.debug("Testbed: %s" % (k, ))
        for x in v:
            r_ = requests.get(url="http://%s/smosfiles" % x)
            logger.debug("Response body: %s" % r_.json())
            test = {
                'testbed': k,
                'address': x.split(':')[0],
                'port': x.split(':')[1]
            }
            for data in r_.json()['smosfiles']:
                test['id'] = data['id']
                test['data'] = data['data']

                body['smosfiles'].append(test)

    return bottle.HTTPResponse(body=pretty_dumps(body), status=200)
Exemple #12
0
def deleteslice():
    url = "http://%s/stats/disableinsert" %\
        settings.properties['sdncontroller']
    r_ = requests.get(url=url)
    if r_.status_code != requests.codes.ok:
        logger.error(r_.text)
    else:
        logger.debug("Disable insert body: %s" % (r_.json()))

    url = "http://%s/stats/flowentry/delete" %\
        settings.properties['sdncontroller']
    logger.debug("Flows to be deleted: %s" % delflows.flows)
    for f in delflows.flows:
        logger.info("post %s: %s" % (url, f,))
        r_ = requests.post(
            url=url, headers={'content-type': 'application/json'},
            data=json.dumps(f))
        if r_.status_code != requests.codes.ok:
            logger.error("Error in the response: %s" % r_)
            bottle.abort(500, r_)

    return bottle.HTTPResponse(body=[], status=201)
Exemple #13
0
def ping(host):
    logger.info("get-ping: %s" % (host))

    body = {'rtt': 0}
    try:
        cmd = "ping -c 1 -W 3 " + host
        ret = subprocess.check_output(cmd, shell=True,
                                      stderr=subprocess.STDOUT)
        ret = ret.split('\n')[-3:]
        xstats, tstats = ret[0].split(","), ret[1].split("=")[1].split("/")

        loss, pmin, avg, pmax =\
            float(xstats[2].split("%")[0]), float(tstats[0]),\
            float(tstats[1]), float(tstats[2])
        logger.debug("packet-loss=%s, min=%s, avg=%s, max=%s" %
                     (loss, pmin, avg, pmax))
        body['rtt'] = avg

    except Exception as e:
        bottle.abort(500, str(e))

    return bottle.HTTPResponse(body=pretty_dumps(body), status=200)