maestro-server/analytics-maestro

View on GitHub
nootebooks/Drawing - Graphio.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "import requests\n",
    "import json\n",
    "\n",
    "# If You like to test, can put url of data app and any entry app\n",
    "url = '10.168.20.20:5010'\n",
    "entries = ['5b68a0ecea0637002f6a4e34', '5b97f3583cdad83c6c25aa56']\n",
    "rolesa = '5b688de7ea0637002f6a4e30'\n",
    "\n",
    "#url = 'localhost:5010'\n",
    "#entries = ['5b340835b3bad96ea3a82eff']\n",
    "#rolesa = '593f49be42d3ed97390f25a7'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "pipeline = [\n",
    "    {'$match': {'_id': {'$in': entries}, 'roles._id': rolesa}},\n",
    "    {\n",
    "        '$graphLookup': {\n",
    "            'from': 'applications',\n",
    "            'startWith': '$deps._id',\n",
    "            'connectFromField': 'deps._id',\n",
    "            'connectToField': '_id',\n",
    "            'as': 'nodes',\n",
    "            'maxDepth': 10,\n",
    "            'depthField': 'steps'\n",
    "        }\n",
    "    },\n",
    "    {'$project': {\n",
    "                    'name': 1, 'family': 1, \n",
    "                    'servers': 1,\n",
    "                    'datacenters': 1,\n",
    "                    'deps._id': 1, 'deps.endpoint': 1, \n",
    "                    'nodes._id': 1, 'nodes.deps': 1, \n",
    "                    'nodes.steps': 1, 'nodes.name': 1, \n",
    "                    'nodes.family': 1, 'nodes.servers': 1,\n",
    "                    'nodes.provider': 1, 'nodes.datacenters': 1\n",
    "                 }\n",
    "    }\n",
    "];\n",
    "\n",
    "jpipeline = json.dumps(pipeline)\n",
    "\n",
    "data = requests.post('http://%s/aggregate' % url, json={'entity': 'applications', 'pipeline': jpipeline})\n",
    "data = data.json()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<networkx.classes.digraph.DiGraph at 0x7f6affe9b6d8>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sys\n",
    "import os\n",
    "import numpy as np\n",
    "cwd = os.getcwd()\n",
    "spltted = cwd.split('/')[:-1]\n",
    "sys.path.append('/'.join(spltted))\n",
    "\n",
    "import networkx as nx\n",
    "from app.services.gridOrchestrator import GridOrchestrator\n",
    "from app.libs.network.baseNetwork import BaseNetwork\n",
    "from app.libs.histograms.histogram import Histogram\n",
    "from app.libs.histograms.grid import GridHistogram\n",
    "from app.libs.drawing.areaSVG import DrawArea\n",
    "from app.libs.drawing.layoutSVG import DrawLayout\n",
    "\n",
    "from app.libs.transformDict import append_servers, transform_dict\n",
    "\n",
    "from svgwrite import Drawing\n",
    "\n",
    "network = BaseNetwork()\n",
    "network.make(data.get('items')).get_graph()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "class DrawTemplateSVG(object):\n",
    "    def __init__(self, tmax, servers, grid, darea=DrawArea):\n",
    "        pass\n",
    "        \n",
    "    def draw_app(self, item):\n",
    "        pass\n",
    "    \n",
    "\n",
    "    def add(self, symbol):\n",
    "        self.dwg.add(symbol)\n",
    "\n",
    "    def save(self):\n",
    "        self.dwg.save()\n",
    "        return self.dwg.tostring()\n",
    "\n",
    "    def draw_connect(self, node1, node2, details={}):\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-------------------------\n"
     ]
    },
    {
     "ename": "AttributeError",
     "evalue": "'DrawTemplateSVG' object has no attribute 'dwg'",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-21-8ddf23ebcb02>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     23\u001b[0m \u001b[0mLayout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw_nodes\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 25\u001b[0;31m \u001b[0mLayout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m/var/app/analytics-maestro/app/libs/drawing/layoutSVG.py\u001b[0m in \u001b[0;36msave\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     46\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     47\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 48\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdrawer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-20-4482585cdeaa>\u001b[0m in \u001b[0;36msave\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdwg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     14\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdwg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtostring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mAttributeError\u001b[0m: 'DrawTemplateSVG' object has no attribute 'dwg'"
     ],
     "output_type": "error"
    }
   ],
   "source": [
    "from IPython.display import SVG, display\n",
    "from functools import reduce\n",
    "from app.repository.externalMaestroData import ExternalMaestroData\n",
    "\n",
    "print(\"-------------------------\")\n",
    "Orchestration = GridOrchestrator(network.graph)\n",
    "Orchestration.create(entries)\n",
    "\n",
    "\n",
    "och = Orchestration.get_mapping()\n",
    "\n",
    "servers_id = reduce(append_servers, och[1].values(), [])\n",
    "servers_id = list(set(servers_id)) #remove duplicate\n",
    "query = {\"_id\": servers_id}\n",
    "ExternalRequest = ExternalMaestroData(owner_id=rolesa, graph_id=\"asda\")\n",
    "result = ExternalRequest.get_request(path=\"servers\", query=query)\n",
    "\n",
    "servers = transform_dict(result)\n",
    "\n",
    "Layout = DrawLayout(*och, servers, DrawTemplateSVG)\n",
    "\n",
    "Layout.draw_connections(network.graph.edges(data='endpoint'))\n",
    "Layout.draw_nodes()\n",
    "\n",
    "Layout.save()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    ""
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "an",
   "language": "python",
   "name": "an"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3.0
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}