diff options
-rwxr-xr-x | cluster-cman.py | 5 | ||||
-rw-r--r-- | lib.py | 226 | ||||
-rw-r--r-- | lib_edges.py | 132 | ||||
-rw-r--r-- | lib_nodes.py | 67 | ||||
-rw-r--r-- | lib_subgraphs.py | 23 |
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' @@ -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) |