def api_v2_service(service): bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service(service) output = list() for s in services: output.append(s.config()[s.service]) return output
def status(service, environ): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) instances = list() urls = dict() balancers = dict() for s in services: for g in s.groups: # XXX pull in status for instance events status = g.status for i in g.instances: urls[i.id] = { 'instance': '/instance/%s/%s/%s' % (service, environ, i['id']), 'stats': '/stats/%s' % i['id'] } instances.append(i) for b in s.balancers: for i in b.instances: if i.id not in balancers: balancers[i.id] = list() balancers[i.id].append(i.balancer_state) output += servicenav(s, 'status') output += render_template('status.html', service=service, environ=environ, instances=instances, balancers=balancers, urls=urls) output += footer() return output
def api_v2_services(): bc = billow.billowCloud(regions=config.config['regions']) services = bc.list_services() output = list() for s in services: if s.service not in output: output.append(s.service) return output
def alerts_service(service, environ): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service(service) for s in services: output += servicenav(s, 'alerts') output += "NOT IMPLEMENTED (yet)" return output
def api_v1_regions_json(): bc = billow.billowCloud(regions=config.config['regions']) services = bc.list_services() output = list() for s in services: if s.region not in outoput: output.append(s.region) return json.dumps(output)
def service_info(service, environ): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) for s in services: output += servicenav(s, 'service') output += render_template('service.html', service=s.config()) output += footer() return output
def events_all(): output = header() statuslist = list() bc = billow.billowCloud(regions=config.config['regions']) for r in bc.regions: rawstatus = r.asg.get_instance_status(list(), filters={'event.code': '*'}) statuslist.extend(rawstatus) output += render_template('eventlist.html', status=statuslist) output += footer() return output
def stats_info(instance): bc = billow.billowCloud(regions=config.config['regions']) instances = list() for r in bc.regions: instances = r.asg.get_instance(instance) if instances: break if not instances: return '', 404 i = instances[0] statsurl = config.config['statsurl'] return redirect("%s%s" % (statsurl, i.private_dns_name.split('.')[0]), 302)
def stats_info(instance): bc = billow.billowCloud(regions=config.config['regions']) instances = list() for r in bc.regions: instances = r.asg.get_instance(instance) if instances: break if not instances: return '', 404 i = instances[0] statsurl = config.config['statsurl'] return redirect("%s%s" % (statsurl, str(i.id)), 302)
def instance_info(instance): output = header() bc = billow.billowCloud(regions=config.config['regions']) instances = list() for r in bc.regions: instances = r.asg.get_instance(instance) for i in instances: inst = billow.billowInstance(i.id, region=r.region) inst.push_instance_info(i) output += render_template('instance.html', instance=inst) output += footer() return output
def service_config(service, environ): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) for s in services: output += servicenav(s, 'config') sconfig = s.config() output += render_template('config.html', service=service, environ=environ, raw=yaml.safe_dump(sconfig, encoding='utf-8', allow_unicode=True)) output += footer() return output
def services(): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.list_services() svcs = list() for s in services: svc = {'service': s.service, 'environ': s.environ, 'region': s.region} svcs.append(svc) svcs.sort(key=lambda x: x['service']) output += render_template('servicelist.html', services=svcs) output += footer() return output
def events(service, environ): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) instances = list() urls = dict() for s in services: output += servicenav(s, 'events') for g in s.groups: output += render_template('event.html', group=g.group, events=g.events) output += footer() return output
def events_all(): output = header() statuslist = list() bc = billow.billowCloud(regions=config.config['regions']) for r in bc.regions: rawstatus = r.asg.get_instance_status( list(), filters = { 'event.code': '*' } ) statuslist.extend(rawstatus) output += render_template('eventlist.html', status=statuslist) output += footer() return output
def endpoint(service, environ): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) for s in services: sinfo = s.info() endpoints = get_all_endpoints(s) output += servicenav(s, 'endpoint') output += render_template('endpoint.html', service=sinfo, endpoints=endpoints) output += footer() return output
def api_v1_service_environ(service, environ): bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) output = list() for s in services: for g in s.groups: for i in g.instances: insts = g.asg.get_instance(i['id']) for inst in insts: if len(str(inst.public_dns_name)) > 0: output.append(str(inst.public_dns_name)) else: output.append(str(inst.private_dns_name)) resp = app.make_response('\n'.join(output)) resp.mimetype = "text/plain" return resp
def instance_service_info(service, environ, instance): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) inst = None for s in services: output += servicenav(s, 'instance') inst = s.get_instance(instance) if inst: output += render_template('instance.html', instance=inst, service=service, environ=environ) break output += footer() return output
def services(): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.list_services() svcs = list() for s in services: svc = { 'service': s.service, 'environ': s.environ, 'region': s.region } svcs.append(svc) svcs.sort(key=lambda x: x['service']) output += render_template('servicelist.html', services=svcs) output += footer() return output
def instances(service, environ): output = header() bc = billow.billowCloud(regions=config.config['regions']) services = bc.get_service("%s-%s" % (service, environ)) instances = list() info = dict() for s in services: for g in s.groups: for i in g.instances: info[i.id] = {} if i['public_ip_address']: info[i.id]['ip_address'] = i['public_ip_address'] else: info[i.id]['ip_address'] = i['private_ip_address'] info[i.id]['public_ip_address'] = i['public_ip_address'] info[i.id]['private_ip_address'] = i['private_ip_address'] if i['public_dns_name']: info[i.id]['dns_name'] = i['public_dns_name'] else: info[i.id]['dns_name'] = i['private_dns_name'] launch = datetime.datetime.strptime(i['launch_time'], "%Y-%m-%dT%H:%M:%S.%fZ") uptime = datetime.datetime.utcnow() - launch info[i.id]['uptime'] = str(uptime - datetime.timedelta( microseconds=uptime.microseconds)) info[i.id]['url'] = { 'instance': '/instance/%s/%s/%s' % (service, environ, i['id']), 'stats': '/stats/%s' % i.id } instances.append(i) output += servicenav(s, 'instances') output += render_template('instancelist.html', service=service, environ=environ, instances=instances, info=info) output += footer() return output