Skip to content

Commit

Permalink
Merge pull request #1 from maestro-server/rp-5
Browse files Browse the repository at this point in the history
RP 5 - Invert the relation of servers and applications (BREAK CHANGE)
  • Loading branch information
Signorini committed Nov 28, 2018
2 parents 12e196a + 88da0cb commit 2cf9105
Show file tree
Hide file tree
Showing 13 changed files with 170 additions and 173 deletions.
4 changes: 2 additions & 2 deletions app/libs/dcApp.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ def byServer(server, dft='premise'):
return dft

@staticmethod
def byApps(node, lservers):
def byApps(node):
obj = node
servers = node.get('servers', [])

if len(servers) > 0:
obj = lservers.get(servers[0])
obj = servers[0]

return DcApps.byServer(obj)
24 changes: 10 additions & 14 deletions app/libs/dcServer.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,20 @@

class DcServers(object):

def __init__(self, servers=[]):
self._servers = servers
def __init__(self):
self.allowed = ['aws', 'openstack', 'azure']

def byServer(self, app, servers=[], dft='premise'):
def findDC(self, app, dft='premise'):
servers = app.get('servers', [])
dc = []

if len(servers) > 0:
return self.findDC(servers)
for server in servers:
itns = DcApps.byServer(server).capitalize()
dc.append(itns)

dc = set(dc)
return ', '.join(dc)

if 'datacenters' in app:
dc = app.get('datacenters')
Expand All @@ -25,14 +31,4 @@ def byServer(self, app, servers=[], dft='premise'):
return dft


def findDC(self, servers):
dc = []

for svs in servers:
ss = self._servers.get(svs)
itns = DcApps.byServer(ss).capitalize()
dc.append(itns)

dc = set(dc)
return ', '.join(dc)

25 changes: 10 additions & 15 deletions app/libs/drawing/helpers/drawApplications.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@
from app.libs.matrix_rotation.calGrid.factoryCalGrid import FactoryCalGrid

class HelperDrawApplication(HelperDraw):
def __init__(self, size, servers, microCal=MicroCalSingle):
def __init__(self, size, microCal=MicroCalSingle):

self._microsingle = microCal()

self._apps = []
self._servers = servers
self._calGrid = None
self._pos = None
self._nsize = None
Expand All @@ -38,7 +37,8 @@ def template_apps(self, family, node):

family = self.slug(family)
asset = '%s.%s' % (family, catsize)
template = DcApps.byApps(node, self._servers)

template = DcApps.byApps(node)

self._calGrid = FactoryCalGrid.zero(self._size)
self.cal_ajust()
Expand Down Expand Up @@ -89,23 +89,18 @@ def sorted_servers(self, servers, family):

prepared = []

for id_server in servers:
details = self._servers.get(id_server)
for server in servers:

if details:
cpu = details.get('cpu', 1)
memory = details.get('memory', 1)
if isinstance(server, dict):
cpu = server.get('cpu', 1)
memory = server.get('memory', 1)
score = ScoreServer.make_score(cpu, memory)

ss = {k: details.get(k, None) for k in (
'hostname', 'ipv4_private', 'ipv4_public', 'datacenters', 'services', 'storage', 'cpu', 'memory',
'environment', 'role', 'os')}

family = self.slug(family)
ss['asset'] = '%s.%s' % (family, ScoreServer.val_score(score))
ss['score'] = score
server['asset'] = '%s.%s' % (family, ScoreServer.val_score(score))
server['score'] = score

prepared.append(ss)
prepared.append(server)

prepared = sorted(prepared, key=itemgetter('score'), reverse=True)
return prepared
Expand Down
6 changes: 3 additions & 3 deletions app/libs/drawing/helpers/drawTooltips.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@


class HelperDrawTooltips(HelperDraw):
def __init__(self, size, off, servers, dcServers=DcServers):
def __init__(self, size, off, dcServers=DcServers):
self._text = []
self._pos = None
self._app = None
self._off = off

self._font_size = 12
self._dcServers = dcServers(servers)
self._dcServers = dcServers()
super().__init__(size)

def execute(self, app):
self._app = app

servers = self._app.get('servers', [])
dc = self._dcServers.byServer(self._app, servers)
dc = self._dcServers.findDC(self._app)

props = {k: self._app.get(k, None) for k in ('name', 'provider', 'family', 'environment', 'language', 'cluster')}

Expand Down
8 changes: 4 additions & 4 deletions app/libs/drawing/layoutSVG.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@


class DrawLayout(object):
def __init__(self, grid, index, servers={}, draw=DrawTemplateSVG):
def __init__(self, grid, index, draw=DrawTemplateSVG):

self._grid = self.parser_json_grid(grid)
self._index = index
Expand All @@ -12,7 +12,7 @@ def __init__(self, grid, index, servers={}, draw=DrawTemplateSVG):

self._max_x = max(self._grid, key=int)
self._max_y = max(self._grid[firstcol], key=int)
self.setup_drawer(draw, servers)
self.setup_drawer(draw)

def parser_json_grid(self, grid):
output_dict = {}
Expand All @@ -27,9 +27,9 @@ def parser_json_grid(self, grid):
return output_dict


def setup_drawer(self, draw, servers):
def setup_drawer(self, draw):
tmax = (self._max_x, self._max_y)
self.drawer = draw(tmax, servers, self._grid)
self.drawer = draw(tmax, self._grid)

def draw_nodes(self):
for _, node in self._index.items():
Expand Down
7 changes: 3 additions & 4 deletions app/libs/drawing/templateSVG.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@


class DrawTemplateSVG(object):
def __init__(self, tmax, servers, grid, darea=DrawArea, symbols=SymbolAssets, m3d=Matrix3D):
def __init__(self, tmax, grid, darea=DrawArea, symbols=SymbolAssets, m3d=Matrix3D):
self._off = (2.2, 2.5)
size = 100
self._size = (size, size * 1.9)
Expand All @@ -25,7 +25,6 @@ def __init__(self, tmax, servers, grid, darea=DrawArea, symbols=SymbolAssets, m3
self.dwg.viewbox(*viewp)

self._symbols = symbols(self.dwg)
self._servers = servers

self.setup()

Expand Down Expand Up @@ -96,7 +95,7 @@ def draw_app(self, item):
self.draw_tooltips(node)

def draw_execute(self, pos, node):
hDrawApp = HelperDrawApplication(self._size, self._servers)
hDrawApp = HelperDrawApplication(self._size)
hDrawApp.execute(pos, node)

pSymb = hDrawApp.get_apps()
Expand All @@ -109,7 +108,7 @@ def draw_tooltips(self, node):
_id = "tool-" + node.get('_id')
g = self._symbols.create_group(_id)

hDrawTooltips = HelperDrawTooltips(self._size, self._off, self._servers)
hDrawTooltips = HelperDrawTooltips(self._size, self._off)
hDrawTooltips.execute(node)

ltxt = hDrawTooltips.get_text()
Expand Down
36 changes: 22 additions & 14 deletions app/libs/transformDict.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@


def transform_dict(obj):
trans = {}

for item in obj:
k = item.get('_id')
trans[k] = item

return trans

def append_servers(base, current):
server = current[3].get('servers')
if server:
base += server
return base
def enrichment_apps_servers(mapper, servers):

for server in servers:
apps = server.get('applications')

dserver = {k: server.get(k, None) for k in (
'hostname', 'ipv4_private', 'ipv4_public', 'datacenters', 'services', 'storage', 'cpu', 'memory',
'environment', 'role', 'os')}

append_apps(mapper, apps, dserver)


def append_apps(mapper, apps, server):

for app in apps:
app_id = app.get('_id')

if app_id in mapper:
servers = mapper[app_id][3].get('servers', [])
servers.append(server)

mapper[app_id][3]['servers'] = servers
4 changes: 2 additions & 2 deletions app/tasks/draw_bussiness.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@


@celery.task(name="draw.bussiness")
def task_draw_bussiness(owner_id, graph_id, grid, index, edges, servers):
def task_draw_bussiness(owner_id, graph_id, grid, index, edges):

Layout = DrawLayout(grid, index, servers)
Layout = DrawLayout(grid, index)

Layout.draw_connections(edges)
Layout.draw_nodes()
Expand Down
15 changes: 6 additions & 9 deletions app/tasks/enrichment_apps.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@

from functools import reduce
from app import celery
from .draw_bussiness import task_draw_bussiness
from app.libs.transformDict import append_servers, transform_dict
from app.libs.transformDict import enrichment_apps_servers
from app.repository.externalMaestroOwneredData import ExternalMaestroOwneredData


@celery.task(name="enrichment.apps")
def task_enrichment(owner_id, graph_id, grid, index, edges):

servers_id = reduce(append_servers, index.values(), [])
servers_id = list(set(servers_id)) #remove duplicate
query = {"_id": servers_id}

app_ids = list(index.keys())
query = {"applications._id": app_ids}

result = ExternalMaestroOwneredData(graph_id, owner_id)\
.list_request(path="servers", query=query)\
.get_results('items')

servers = transform_dict(result)

draw_id = task_draw_bussiness.delay(owner_id, graph_id, grid, index, edges, servers)
enrichment_apps_servers(index, result)
draw_id = task_draw_bussiness.delay(owner_id, graph_id, grid, index, edges)

return {'draw_id': str(draw_id), 'graph_id': graph_id, 'owner_id': owner_id}
Loading

0 comments on commit 2cf9105

Please sign in to comment.