erlsna is a proof-of-concept application for my Computer Scince undergraduate thesis: Social Network Analysis software for longitudinal node experience analysis on dynamic networks. paper
erlsna follows Agent-based model where individuals (vertices on graph) are mapped to agent processes.
Though not highlighed in detail in the paper, erlsna provides a PubSub mechanism for real-time notifications on individuals. See below.
erlsna has limited functionality and lacks documentation. Feel free to reach out to me if you need assistance. I intend to improve on this subject whenever I can.
- Erlang R13B03 or newer (not tested with older releases)
Rebar (not mandatory but advised)
TCP port 8082 (configurable in erlsna.app.src)
Python3 (for python driver and nntp_collector) MongoDB (for nntp_collector storage) R (for some charts) & zoo package (I think)
./autorebar # rebar clean, compile and generate ./rel/mynode/bin/mynode console
For info on TCP message syntax, see the paper, APPENDIX B. For information on analyses and example graphs, see the paper, Chapter 5.
erlsna Python3 driver
import os import erlsna api = erlsna.ERLSNA(live=True) png_path = os.path.expanduser("~/engagement_graph.png") api.engagement_analysis("firstname.lastname@example.org", with_graph_png=png_path)
For available keywords and further driver uses, refer to the erlsna.py source code.
PubSub and real time capabilities
This was developed for a demo. Currently PubSub is only available for Closeness Centrality metric. One can subscribe to an agent (through Python driver or raw TCP message over Telnet) with a condition and get notified whenever it holds true. An example:
# Telnet subscribe email@example.com > 0.123
Will notify the Telnet client whenever the agent's ("firstname.lastname@example.org") closeness centrality goes over 0.123. The publish will only happen once per going over threshold.
api = ERLSNA() api.subscribe("email@example.com", "<", 0.02)
- > : goes over given value
- < : goes below given value
- = : becomes equal to given value
- * : every time a change happens (a dummy value is expected after eg:
subscribe firstname.lastname@example.org * 0)
Used to collect data from NNTP servers for testing and demonstration, requires MongoDB to be running.
collect: collect (from where it left off) new articles from given server & group emailfixer: to fix dual-line "From:" header issue in NNTP responses, will prompt user for fixes livedump: push data to running erlsna node