Metadata-Version: 2.0
Name: sand
Version: 0.1.2
Summary: SAND: System Architecture as a Network of Dependencies
Home-page: https://github.com/testedminds/sand
Author: Bobby Norton
Author-email: bobby@testedminds.com
License: Apache License 2.0
Keywords: Architecture,Network,Graph
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: System Administrators
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Utilities
Classifier: Environment :: Console
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: POSIX
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Requires-Dist: bokeh (==0.12.6)
Requires-Dist: cairocffi (==0.8.0)
Requires-Dist: numpy (==1.13.1)
Requires-Dist: pandas (==0.20.2)
Requires-Dist: py2cytoscape (==0.6.2)
Requires-Dist: python-igraph (==0.7.1.post6)

SAND
----

Python code and notebooks to model System Architecture as a Network of Dependencies
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SAND uses Python and Jupyter Notebooks to explore applications of
representing system architecture as a directed graph, or network, of
engineered artifacts and their relationships to one another.

Engineered artifacts are vertices in the graph. For a software library,
the artifacts are functions and the dependencies are function calls. For
RESTful microservices, an artifact is a service and the dependencies are
API calls.

Directed edges represent the dependencies and their transpose, impact.

Imagine we have two microservices, A and B.

If B calls A, then B has a dependency on A. The creator of A might not
know that B is a client, so the dependency relationship is directed.

The transpose of this relationship is that A impacts or influences B:
Non backwards-compatible changes in A's interface that B calls can break
B. Changes in B do not impact A, so once again, the edge is directed.

This simple model proves to be extremely powerful in describing
arbitrarily complicated system architectures. The SAND library and
accompanying Jupyter Notebooks provide working examples of visualization
and analysis.

Installation
------------

``pip install sand``

You might also want to clone this git repo to follow along with the
examples below:

.. code:: bash

    git clone git@github.com:testedminds/sand.git
    cd sand

Getting Started
---------------

SAND is documented with a series of Jupyter Notebooks:

-  `Loading Network Data <./docs/Loading%20network%20data.ipynb>`__
-  `Matrix Visualization with
   Bokeh <./docs/Matrix%20visualization%20with%20Bokeh.ipynb>`__
-  `Network Visualization with
   Cytoscape <./docs/Visualization%20with%20Cytoscape.ipynb>`__

Running in Docker
~~~~~~~~~~~~~~~~~

You can run these notebooks via Docker to experiment. Assuming you have
a ``docker-machine`` running and you've cloned the ``sand`` repo:

.. code:: bash

    git clone git@github.com:testedminds/sand.git
    docker pull testedminds/sand
    make docker-docs
    # And after the container starts...
    make docker-open

When the notebook opens in your browser, you will see the Notebook
Dashboard, which will show a list of the notebooks and data in the
``docs`` directory.

These commands translate to:

::

    docker run -d -p 80:8888 -v `pwd`/docs:/opt/sand --rm --name sand testedminds/sand:latest \
                    jupyter notebook --allow-root --ip 0.0.0.0 --no-browser --NotebookApp.token=''

    open http://192.168.99.100

This is a useful technique to quickly explore network data anywhere on
your local filesystem.

Running locally
~~~~~~~~~~~~~~~

To run the notebooks locally without Docker:

.. code:: bash

    pip install -r requirements.txt
    cd docs
    jupyter notebook

-  `Install Cytoscape <http://cytoscape.org/>`__ to run the optional
   Cytoscape examples. Start Cytoscape up and close the welcome screen.
   You probably want to check "Don't show again" in the lower left.

Learn More
----------

See a presentation from Bobby Norton at `Windy City
GraphDB <https://github.com/bobbyno/windy-city-graphdb-9-22-16/blob/master/windy_city_graphdb_presentation.ipynb>`__
for a more detailed introduction to the concept.

The Notebooks leverage `Cytoscape's RESTful
API <http://apps.cytoscape.org/apps/cyrest>`__ and
`python-igraph <http://igraph.org/python/>`__.

License
-------

Copyright © Bobby Norton and `Tested Minds,
LLC <http://www.testedminds.com>`__.

Released under the `Apache License, Version 2.0 <./LICENSE.txt>`__


