Skip to main content

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:

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

Getting Started

SAND is documented with a series of Jupyter Notebooks:

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:

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:

pip install -r requirements.txt
cd docs
jupyter notebook
  • Install Cytoscape 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 for a more detailed introduction to the concept.

The Notebooks leverage Cytoscape’s RESTful API and python-igraph.

License

Copyright © Bobby Norton and Tested Minds, LLC.

Released under the Apache License, Version 2.0

Metadata

Release files for sand 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sand 0.2.1
File Size Uploaded Provenance Actions
sand-0.2.1.tar.gz 11.6 kB Without provenance Details for sand-0.2.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for sand 0.2.1
File Interpreter ABI Platform Actions
sand-0.2.1-py3-none-any.whl Python 3 none any Details for sand-0.2.1-py3-none-any.whl

Total release size: 27.3 kB

Release files / sand-0.2.1.tar.gz

Download URL sand-0.2.1.tar.gz
Size 11.6 kB
Tags Source
SHA-256 checksum
How to use checksums
05fb2c7d653ee8010b42adb3140247bce43a16bbfe286ad0f6a95a2e175846db
BLAKE2b-256 checksum
How to use checksums
feca1081f6d78e2c86e88fa875a15c3a3eb1b6a11a0aaed2fe199ae884917c41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/42.0.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.6

Release files / sand-0.2.1-py3-none-any.whl

Download URL sand-0.2.1-py3-none-any.whl
Size 15.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f64f07651bc054a5cabc338415cee9f8ddc7231d9238b13de05ac76c4c11175b
BLAKE2b-256 checksum
How to use checksums
347d581cfdf7b587e5a66fbc8c4af67abc44b858581108aaca53ae4fa81b0ed3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.21.0 setuptools/42.0.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.6

Security for sand 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page