def get_metrics(host, port, key, api_type, metrics, headers=None, timeout=5): assert host, 'host' assert port, 'port' assert key, 'key' assert api_type, 'api_type' assert metrics, 'metrics' data = dict() endpoint = 'http://%s:%s' % (host, port) security = rpc.Security(key) hsp = rpc.HttpServiceProxy(endpoint, security=security, headers=headers) getters = { 'cpu': get_cpu_stat, 'la': get_la_stat, 'mem': get_mem_info, 'net': get_net_stat, 'io': get_io_stat, } for metric in metrics: try: data.update({metric: getters[metric](hsp, api_type, timeout=timeout)}) except (urllib2.URLError, urllib2.HTTPError, socket.timeout): raise except: msg = "Endpoint: %s, metric '%s' failed: %s" % (endpoint, metric, helper.exc_info()) LOG.warning(msg) continue return data
def get(host=None, port=None, key=None, os_type=None, metrics=None, proxy=None): assert (host or proxy) and port and key and os_type and metrics if proxy: host = proxy['host'] port = proxy['port'] headers = proxy['headers'] else: headers = None endpoint = 'http://%s:%s' % (host, port) security = rpc.Security(cryptotool.decrypt_key(key)) hsp = rpc.HttpServiceProxy(endpoint, security=security, headers=headers) data = dict() if 'cpu' in metrics: try: data.update(ScalarizrAPI._get_cpu_stat(hsp, os_type)) except Exception as e: if type(e) in (urllib2.URLError, socket.timeout): raise e LOG.warning('%s:%s scalarizr api CPU failed: %s' % (host, port, helper.exc_info())) if 'la' in metrics: try: data.update(ScalarizrAPI._get_la_stat(hsp, os_type)) except Exception as e: if type(e) in (urllib2.URLError, socket.timeout): raise e LOG.warning('%s:%s scalarizr api LA failed: %s' % (host, port, helper.exc_info())) if 'mem' in metrics: try: data.update(ScalarizrAPI._get_mem_info(hsp, os_type)) except Exception as e: if type(e) in (urllib2.URLError, socket.timeout): raise e LOG.warning('%s:%s scalarizr api MEM failed: %s' % (host, port, helper.exc_info())) if 'net' in metrics: try: data.update(ScalarizrAPI._get_net_stat(hsp, os_type)) except Exception as e: if type(e) in (urllib2.URLError, socket.timeout): raise e LOG.warning('%s:%s scalarizr api NET failed: %s' % (host, port, helper.exc_info())) return data
def answer_error(environ, start_response): try: server_id = environ['HTTP_X_SERVER_ID'] crypto_key = lib.world.server_properties[server_id]['scalarizr.key'] security = rpc.Security(cryptotool.decrypt_key(crypto_key)) data = json.loads( security.decrypt_data(environ['wsgi.input'].readline())) server = lib.world.servers[server_id] assert 'params' in data assert 'method' in data assert 'id' in data, 'id' if data['method'] == 'status': assert 'cached' in data['params'], 'cached' repos = { 'latest': { 'linux': 'http://repo.scalr.net/apt-plain latest/', 'windows': 'http://repo.scalr.net/win/latest', }, 'stable': { 'linux': 'http://repo.scalr.net/apt-plain stable/', 'windows': 'http://repo.scalr.net/win/stable', } } utcnow = datetime.utcnow() status = { 'server_id': server_id, 'repository': 'stable', 'repo_url': repos['stable'][server['os_type']], 'executed_at': utcnow.strftime('%a %d %b %Y %H:%M:%S UTC'), 'state': u'error', 'error': u'Cool error', } answer = {'result': status} elif data['method'] == 'update': answer = {'result': 777} lib.update_count.setdefault(server_id, 0) lib.update_count[server_id] += 1 else: assert False, 'method' response = security.encrypt_data(json.dumps(answer)) start_response('201 OK', [('Content-Type', 'text/html')]) yield response except: yield str(sys.exc_info())
def answer(environ, start_response): try: server_id = environ['HTTP_X_SERVER_ID'] crypto_key = lib.world.server_properties[server_id]['scalarizr.key'] security = rpc.Security(cryptotool.decrypt_key(crypto_key)) data = json.loads( security.decrypt_data(environ['wsgi.input'].readline())) server = lib.world.servers[server_id] assert 'params' in data assert 'method' in data assert 'id' in data, 'id' if data['method'] == 'status': assert 'cached' in data['params'], 'cached' repos = { 'latest': { 'linux': 'http://apt.scalr.net/debian scalr/', 'windows': 'http://win.scalr.net', }, 'stable': { 'linux': 'http://apt-delayed.scalr.net/debian scalr/', 'windows': 'http://win-delayed.scalr.net', } } status = { 'server_id': server_id, 'repository': 'stable', 'repo_url': repos['stable'][server['os_type']], 'executed_at': 'Mon 22 Sep 2014 12:00:00 UTC', 'state': '', 'error': '', } answer = {'result': status} elif data['method'] == 'update': answer = {'result': 777} lib.update_ok[server_id] = True else: assert False, 'method' response = security.encrypt_data(json.dumps(answer)) start_response('201 OK', [('Content-Type', 'text/html')]) yield response except: yield str(sys.exc_info())
def get_metrics(host, port, key, api_type, metrics, headers=None, timeout=5): assert host, 'host' assert port, 'port' assert key, 'key' assert api_type, 'api_type' assert metrics, 'metrics' data = dict() endpoint = 'http://%s:%s' % (host, port) security = rpc.Security(key) hsp = rpc.HttpServiceProxy(endpoint, security=security, headers=headers) getters = { 'cpu': get_cpu_stat, 'la': get_la_stat, 'mem': get_mem_info, 'net': get_net_stat, 'io': get_io_stat, } for metric in metrics: data.update({metric: getters[metric](hsp, api_type, timeout=timeout)}) return data
def answer(environ, start_response): server_id = environ['HTTP_X_SERVER_ID'] crypto_key = lib.world.server_properties[server_id]['scalarizr.key'] security = rpc.Security(cryptotool.decrypt_key(crypto_key)) data = json.loads(security.decrypt_data(environ['wsgi.input'].readline())) responses = { 'cpu_stat': { 'user': 10, 'nice': 10, 'system': 10, 'idle': 10, }, 'load_average': [ 1, 1, 1, ], 'mem_info': { 'total_swap': 1024, 'avail_swap': 1024, 'total_real': 1024, 'total_free': 1024, 'shared': 1024, 'buffer': 1024, 'cached': 1024, }, 'net_stats': { 'eth0': { 'receive': { 'bytes': 1024, 'packets': 1024, 'errors': 0, }, 'transmit': { 'bytes': 1024, 'packets': 1024, 'errors': 0, }, }, }, 'disk_stats': { 'sda1': { 'read': { 'num': 10, 'sectors': 10, 'bytes': 10, }, 'write': { 'num': 10, 'sectors': 10, 'bytes': 10, }, }, }, } result = {'result': responses[data['method']]} response = security.encrypt_data(json.dumps(result)) start_response('201 OK', [('Content-Type', 'text/html')]) yield response
def __init__(self, host, port, key, headers=None): endpoint = 'http://%s:%s' % (host, port) security = rpc.Security(key) super(SzrUpdClient, self).__init__(endpoint, security=security, headers=headers)