
digraph {
	// cli
	CLI -> "Rest API" [style=dotted, color=blue];
	"Rest API" -> CLI [style=dotted, color=red];

	// dashboard app
	Dashboard -> "Rest API" [style=dotted, color=blue];
	"Rest API" -> Dashboard [style=dotted, color=red];

	"Rest API" -> "Server Context" [style=dotted, color=blue];

	"Server Context" [shape=box];
	"Server Context" -> ACL [dir=both, color=blue];
	"Server Context" -> Auth [dir=both, color=blue];
	"Server Context" -> Backends [dir=both, color=blue];
	"Server Context" -> Bridge [dir=both, color=blue];
	"Server Context" -> Gateway [dir=both, color=blue];
	"Server Context" -> Metrix [dir=both, color=blue];
	"Server Context" -> "Cluster Dispatcher" [dir=both, style=dotted, color=blue];
	"Server Context" -> "Rule Engine" [dir=both, color=blue];

	"Cluster Dispatcher" -> Dispatcher [dir=both, color=red, style=dotted];

	Dispatcher -> Listeners [dir=both];
	Listeners -> Sessions [dir=both];

	Dispatcher -> Backends [dir=both];
	Backends -> Memory [color=red, style=dotted];
	"Persistent Storage" [shape=cylinder];
	Backends -> "Persistent Storage" [color=red, style=dotted];

	// ACL app
	ACL -> Listeners [dir=both];
	ACL -> "ACL File";
	"ACL Database" [shape=cylinder];
	ACL -> "ACL Database" [style=dotted, color=red];

	// auth app
	Auth -> Listeners [dir=both];
	Auth -> "Password File";
	"Auth Database" [shape=cylinder];
	Auth -> "Auth Database" [style=dotted, color=red];

	// mqtt bridge app
	Dispatcher -> Bridge [dir=both];

	// gateway app
	Dispatcher -> Gateway [dir=both];
	ExternalProtocols [shape=record, label="{ CoAP | Stomp | MQTT-SN | LwM2M }"];
	Gateway -> ExternalProtocols [style=dotted, color=red];

	// monitor app
	Dispatcher -> Metrix [dir=both];
	Metrix -> Promethous [style=dotted, color=red];
	Metrix -> SysTree;

	// rule engine app
	Dispatcher -> "Rule Engine" [dir=both];
	"Forward Database" [shape=cylinder];
	"Rule Engine" -> "Forward Database" [style=dotted, color=red];
}
