summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcluster-cman.py5
-rw-r--r--lib.py226
-rw-r--r--lib_edges.py132
-rw-r--r--lib_nodes.py67
-rw-r--r--lib_subgraphs.py23
5 files changed, 236 insertions, 217 deletions
diff --git a/cluster-cman.py b/cluster-cman.py
index 4d6e498..f51a217 100755
--- a/cluster-cman.py
+++ b/cluster-cman.py
@@ -17,7 +17,10 @@ conveniently using XDot: http://code.google.com/p/jrfonseca/wiki/XDot
from sys import argv
from os.path import splitext
-from lib import *
+from lib import LibDot, SubgraphInvisible, EdgeInvisible, main
+from lib_subgraphs import *
+from lib_nodes import *
+from lib_edges import *
FONT = 'Inconsolata'
diff --git a/lib.py b/lib.py
index f5b6f8d..fd39ce2 100644
--- a/lib.py
+++ b/lib.py
@@ -4,7 +4,7 @@
# Author: Jan Pokorný <jpokorny at redhat dot com>
# Distributed under GPLv2+; generated content under CC-BY-SA 3.0
# (to view a copy, visit http://creativecommons.org/licenses/by-sa/3.0/)
-"""Elements library incl. visual aspects"""
+"""Custom wrapping of pydot"""
from sys import path
from os.path import expanduser, extsep
@@ -47,6 +47,7 @@ class LibMeta(type):
__all__.append(name)
super(LibMeta, cls).__init__(name, bases, attrs)
old_init = cls.__init__
+
def new_init(self, *args, **kwargs):
subgraphs = kwargs.pop('_subgraphs', ())
nodes = kwargs.pop('_nodes', ())
@@ -74,6 +75,7 @@ class LibMeta(type):
class LibDot(Dot):
__metaclass__ = LibMeta
+
def __init__(self, *args, **kwargs):
kwargs.setdefault('graph_type', 'digraph')
super(LibDot, self).__init__(*args, **kwargs)
@@ -82,48 +84,20 @@ class LibDot(Dot):
class LibSubgraph(Subgraph):
__metaclass__ = LibMeta
+
def __init__(self, *args, **kwargs):
super(LibSubgraph, self).__init__(*args, **kwargs)
#self.set_suppress_disconnected(True)
-class LibNode(Node):
- __metaclass__ = LibMeta
-
-
-class LibEdge(Edge):
- __metaclass__ = LibMeta
-
-
-#
-# Subgraph inheritance
-#
-
-
-class SubgraphImportant(LibSubgraph):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('fillcolor', '#eaeaea')
- kwargs.setdefault('style', 'bold, filled, rounded')
- super(SubgraphImportant, self).__init__(*args, **kwargs)
-
-
-class SubgraphStandard(LibSubgraph):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('fillcolor', '#f5f5f5')
- kwargs.setdefault('style', 'filled, rounded')
- super(SubgraphStandard, self).__init__(*args, **kwargs)
-
-
class SubgraphInvisible(LibSubgraph):
def __init__(self, *args, **kwargs):
kwargs.setdefault('style', 'invis')
super(SubgraphInvisible, self).__init__(*args, **kwargs)
-
-#
-# Node inheritance
-#
+class LibNode(Node):
+ __metaclass__ = LibMeta
class NodeInvisible(LibNode):
@@ -132,68 +106,10 @@ class NodeInvisible(LibNode):
super(LibNode, self).__init__(*args, **kwargs)
-class Program(LibNode):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('shape', 'box')
- kwargs.setdefault('style', 'filled')
- super(Program, self).__init__(*args, **kwargs)
-
-
-class Agent(Program):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('fillcolor', 'lavenderblush')
- kwargs.setdefault('style', 'filled')
- super(Agent, self).__init__(*args, **kwargs)
-
-
-class Library(Program):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('fillcolor', 'lavenderblush')
- kwargs.setdefault('style', 'filled')
- super(Library, self).__init__(*args, **kwargs)
-
-
-class Executable(Program):
- pass
-
-
-class Daemon(Executable):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('fillcolor', 'cornsilk')
- kwargs.setdefault('style', 'filled')
- super(Daemon, self).__init__(*args, **kwargs)
-
-
-class Artefact(LibNode):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('shape', 'box3d')
- kwargs.setdefault('fillcolor', 'wheat')
- kwargs.setdefault('style', 'filled')
- super(Artefact, self).__init__(*args, **kwargs)
-
-
-class Device(LibNode):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('shape', 'box3d')
- kwargs.setdefault('fillcolor', 'wheat')
- kwargs.setdefault('style', 'filled')
- super(Device, self).__init__(*args, **kwargs)
-
-
-class StorageDevice(Device):
- def __init__(self, *args, **kwargs):
- super(StorageDevice, self).__init__(*args, **kwargs)
-
-
-class FenceDevice(Device):
- def __init__(self, *args, **kwargs):
- super(FenceDevice, self).__init__(*args, **kwargs)
+class LibEdge(Edge):
+ __metaclass__ = LibMeta
-#
-# Edge inheritance
-#
-
class EdgeInvisible(LibEdge):
def __init__(self, *args, **kwargs):
kwargs.setdefault('style', 'invis')
@@ -201,129 +117,6 @@ class EdgeInvisible(LibEdge):
super(EdgeInvisible, self).__init__(*args, **kwargs)
-class DBUS(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('style', 'dotted')
- super(DBUS, self).__init__(*args, **kwargs)
-
-
-class OddjobExec(DBUS):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('label', 'oddjob\nexec')
- super(OddjobExec, self).__init__(*args, **kwargs)
-
-
-class HTTPS(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('style', 'bold')
- super(HTTPS, self).__init__(*args, **kwargs)
-
-
-class LuciHTTPS(HTTPS):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('label', 'port 8084')
- super(LuciHTTPS, self).__init__(*args, **kwargs)
-
-
-class ApplicationSpecificProtocol(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('style', 'dashed')
- super(ApplicationSpecificProtocol, self).__init__(*args, **kwargs)
-
-
-class RICCIRPC(ApplicationSpecificProtocol):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('label', 'port 11111')
- super(RICCIRPC, self).__init__(*args, **kwargs)
-
-
-class SNMP(ApplicationSpecificProtocol):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('label', 'port 161')
- super(SNMP, self).__init__(*args, **kwargs)
-
-
-class CIM(ApplicationSpecificProtocol):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('label', 'port 898[89]')
- super(CIM, self).__init__(*args, **kwargs)
-
-
-class Consume(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('color', 'darkgreen')
- kwargs.setdefault('fontcolor', 'darkgreen')
- super(Consume, self).__init__(*args, **kwargs)
-
-
-class ConsumeReversed(Consume):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('dir', 'back')
- super(ConsumeReversed, self).__init__(*reversed(args), **kwargs)
-
-
-class Produce(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('color', 'orangered')
- kwargs.setdefault('fontcolor', 'orangered')
- super(Produce, self).__init__(*args, **kwargs)
-
-
-class Delegate(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('color', 'navy')
- kwargs.setdefault('fontcolor', 'navy')
- #kwargs.setdefault('dir', 'both')
- super(Delegate, self).__init__(*args, **kwargs)
-
-
-class FencedBy(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('color', 'red')
- kwargs.setdefault('dir', 'back')
- super(FencedBy, self).__init__(*args, **kwargs)
-
-
-# peer-to-peer (1:1 hence constraint='false')
-class Exchange(LibEdge):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('color', 'saddlebrown')
- kwargs.setdefault('fontcolor', 'saddlebrown')
- kwargs.setdefault('dir', 'both')
- kwargs.setdefault('constraint', 'false')
- super(Exchange, self).__init__(*args, **kwargs)
-
-
-# data bus
-class Databus(Exchange):
- def __init__(self, *args, **kwargs):
- kwargs.setdefault('color', 'saddlebrown')
- kwargs.setdefault('fontcolor', 'saddlebrown')
- super(Databus, self).__init__(*args, **kwargs)
-
-
-# mixing
-
-class DelegateOddjobExec(Delegate, OddjobExec):
- pass
-
-
-class DelegateRICCIRPC(Delegate, RICCIRPC):
- pass
-
-
-class DelegateLuciHTTPS(Delegate, LuciHTTPS):
- pass
-
-
-class DelegateSNMP(Delegate, SNMP):
- pass
-
-
-class DelegateCIM(Delegate, CIM):
- pass
-
-
#
# main-helpers
#
@@ -489,4 +282,5 @@ def main(graph, argv, *args, **kws):
ext = argv[1] if len(argv) > 1 else 'pdf'
fmt = {'dot': 'raw'}.get(ext, ext)
output += extsep + ext
- gen_graph(graph, **kws).write(output, format=fmt, prog=['dot'].extend(args))
+ gen_graph(graph, **kws).write(output, format=fmt,
+ prog=['dot'].extend(args))
diff --git a/lib_edges.py b/lib_edges.py
new file mode 100644
index 0000000..603ad7b
--- /dev/null
+++ b/lib_edges.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+# vim: set fileencoding=UTF-8:
+# Copyright 2013 Red Hat, Inc.
+# Author: Jan Pokorný <jpokorny at redhat dot com>
+# Distributed under GPLv2+; generated content under CC-BY-SA 3.0
+# (to view a copy, visit http://creativecommons.org/licenses/by-sa/3.0/)
+"""Edge library incl. visual aspects"""
+
+from lib import LibEdge
+
+
+class DBUS(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('style', 'dotted')
+ super(DBUS, self).__init__(*args, **kwargs)
+
+
+class OddjobExec(DBUS):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('label', 'oddjob\nexec')
+ super(OddjobExec, self).__init__(*args, **kwargs)
+
+
+class HTTPS(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('style', 'bold')
+ super(HTTPS, self).__init__(*args, **kwargs)
+
+
+class LuciHTTPS(HTTPS):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('label', 'port 8084')
+ super(LuciHTTPS, self).__init__(*args, **kwargs)
+
+
+class ApplicationSpecificProtocol(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('style', 'dashed')
+ super(ApplicationSpecificProtocol, self).__init__(*args, **kwargs)
+
+
+class RICCIRPC(ApplicationSpecificProtocol):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('label', 'port 11111')
+ super(RICCIRPC, self).__init__(*args, **kwargs)
+
+
+class SNMP(ApplicationSpecificProtocol):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('label', 'port 161')
+ super(SNMP, self).__init__(*args, **kwargs)
+
+
+class CIM(ApplicationSpecificProtocol):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('label', 'port 898[89]')
+ super(CIM, self).__init__(*args, **kwargs)
+
+
+class Consume(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('color', 'darkgreen')
+ kwargs.setdefault('fontcolor', 'darkgreen')
+ super(Consume, self).__init__(*args, **kwargs)
+
+
+class ConsumeReversed(Consume):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('dir', 'back')
+ super(ConsumeReversed, self).__init__(*reversed(args), **kwargs)
+
+
+class Produce(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('color', 'orangered')
+ kwargs.setdefault('fontcolor', 'orangered')
+ super(Produce, self).__init__(*args, **kwargs)
+
+
+class Delegate(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('color', 'navy')
+ kwargs.setdefault('fontcolor', 'navy')
+ #kwargs.setdefault('dir', 'both')
+ super(Delegate, self).__init__(*args, **kwargs)
+
+
+class FencedBy(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('color', 'red')
+ kwargs.setdefault('dir', 'back')
+ super(FencedBy, self).__init__(*args, **kwargs)
+
+
+# peer-to-peer (1:1 hence constraint='false')
+class Exchange(LibEdge):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('color', 'saddlebrown')
+ kwargs.setdefault('fontcolor', 'saddlebrown')
+ kwargs.setdefault('dir', 'both')
+ kwargs.setdefault('constraint', 'false')
+ super(Exchange, self).__init__(*args, **kwargs)
+
+
+# data bus
+class Databus(Exchange):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('color', 'saddlebrown')
+ kwargs.setdefault('fontcolor', 'saddlebrown')
+ super(Databus, self).__init__(*args, **kwargs)
+
+
+# mixing
+
+class DelegateOddjobExec(Delegate, OddjobExec):
+ pass
+
+
+class DelegateRICCIRPC(Delegate, RICCIRPC):
+ pass
+
+
+class DelegateLuciHTTPS(Delegate, LuciHTTPS):
+ pass
+
+
+class DelegateSNMP(Delegate, SNMP):
+ pass
+
+
+class DelegateCIM(Delegate, CIM):
+ pass
diff --git a/lib_nodes.py b/lib_nodes.py
new file mode 100644
index 0000000..a033031
--- /dev/null
+++ b/lib_nodes.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+# vim: set fileencoding=UTF-8:
+# Copyright 2013 Red Hat, Inc.
+# Author: Jan Pokorný <jpokorny at redhat dot com>
+# Distributed under GPLv2+; generated content under CC-BY-SA 3.0
+# (to view a copy, visit http://creativecommons.org/licenses/by-sa/3.0/)
+"""Node library incl. visual aspects"""
+
+from lib import LibNode
+
+
+class Program(LibNode):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('shape', 'box')
+ kwargs.setdefault('style', 'filled')
+ super(Program, self).__init__(*args, **kwargs)
+
+
+class Agent(Program):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('fillcolor', 'lavenderblush')
+ kwargs.setdefault('style', 'filled')
+ super(Agent, self).__init__(*args, **kwargs)
+
+
+class Library(Program):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('fillcolor', 'lavenderblush')
+ kwargs.setdefault('style', 'filled')
+ super(Library, self).__init__(*args, **kwargs)
+
+
+class Executable(Program):
+ pass
+
+
+class Daemon(Executable):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('fillcolor', 'cornsilk')
+ kwargs.setdefault('style', 'filled')
+ super(Daemon, self).__init__(*args, **kwargs)
+
+
+class Artefact(LibNode):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('shape', 'box3d')
+ kwargs.setdefault('fillcolor', 'wheat')
+ kwargs.setdefault('style', 'filled')
+ super(Artefact, self).__init__(*args, **kwargs)
+
+
+class Device(LibNode):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('shape', 'box3d')
+ kwargs.setdefault('fillcolor', 'wheat')
+ kwargs.setdefault('style', 'filled')
+ super(Device, self).__init__(*args, **kwargs)
+
+
+class StorageDevice(Device):
+ def __init__(self, *args, **kwargs):
+ super(StorageDevice, self).__init__(*args, **kwargs)
+
+
+class FenceDevice(Device):
+ def __init__(self, *args, **kwargs):
+ super(FenceDevice, self).__init__(*args, **kwargs)
diff --git a/lib_subgraphs.py b/lib_subgraphs.py
new file mode 100644
index 0000000..9d74e42
--- /dev/null
+++ b/lib_subgraphs.py
@@ -0,0 +1,23 @@
+#!/usr/bin/env python
+# vim: set fileencoding=UTF-8:
+# Copyright 2013 Red Hat, Inc.
+# Author: Jan Pokorný <jpokorny at redhat dot com>
+# Distributed under GPLv2+; generated content under CC-BY-SA 3.0
+# (to view a copy, visit http://creativecommons.org/licenses/by-sa/3.0/)
+"""Subgraph library incl. visual aspects"""
+
+from lib import LibSubgraph
+
+
+class SubgraphImportant(LibSubgraph):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('fillcolor', '#eaeaea')
+ kwargs.setdefault('style', 'bold, filled, rounded')
+ super(SubgraphImportant, self).__init__(*args, **kwargs)
+
+
+class SubgraphStandard(LibSubgraph):
+ def __init__(self, *args, **kwargs):
+ kwargs.setdefault('fillcolor', '#f5f5f5')
+ kwargs.setdefault('style', 'filled, rounded')
+ super(SubgraphStandard, self).__init__(*args, **kwargs)