ikiwiki/ plugins/ contrib/ verboserpc (third party plugin)

Plugin: verboserpc
Author: Louis
Included in ikiwiki: no
Enabled by default: no
Included in goodstuff: no
Currently enabled: yes

Debugging external plugins is a pain, as soon as RPC is involved… This kind-of plugin tries to make it a little bit less painful.

It acts as a proxy between Ikiwiki and the plugin (which, for the record, is an executable program communicating with Ikiwiki using XML RPC on standard input/output), and logs everithing on standard error.

# Example

A sample output of a wiki compilation is shown below.

    $ ikiwiki --setup wiki.setup --refresh --verbose
    -> <?xml version="1.0" encoding="utf-8"?><methodCall><methodName>import</methodName><params></params></methodCall>
    <- <?xml version='1.0'?>
    <- <methodCall>
    <- <methodName>hook</methodName>
    <- <params>
    <- <param>
    <- <value><string>call</string></value>
    <- </param>
    <- <param>
    <- <value><string>getsetup</string></value>
    <- </param>
    <- <param>
    <- <value><string>type</string></value>
    <- </param>
    <- <param>
    <- <value><string>getsetup</string></value>
    <- </param>
    <- <param>
    <- <value><string>id</string></value>
    <- </param>
    <- <param>
    <- <value><string>foo</string></value>
    <- </param>
    <- <param>
    <- <value><string>last</string></value>
    <- </param>
    <- <param>
    <- <value><boolean>0</boolean></value>
    <- </param>
    <- </params>
    <- </methodCall>
    -> <?xml version="1.0" encoding="utf-8"?><methodResponse><params><param><value><string>1</string></value></param></params></methodResponse>
    <- <?xml version='1.0'?>
    <- <methodResponse>
    <- <params>
    <- <param>
    <- <value><struct>
    <- <member>
    <- <name>null</name>
    <- <value><string></string></value>
    <- </member>
    <- </struct></value>
    <- </param>
    <- </params>
    <- </methodResponse>
    rebuilding wiki..
    scanning index.mdwn
    building index.mdwn
    done

# Enabling the plugin

Let us say you want to debug a plugin `foo`, located somewhere in your `libdir`.

1. Do not not enable plugin `foo` in the ikiwiki setup file.
2. Create a symbolic link named `foo.verboserpc` in one of your `libdir`, linking to the `verboserpc` plugin.
3. In your setup file, enable plugin `foo.verboserpc`.

That's it. When called, the `verboserpc` plugin will be called as `foo.verboserpc`, and will run program `foo`, while transmitting (to Ikiwiki and `foo`) and logging (to standard error) any input/output.

# Does it work?

Well… External plugins are still a pain to debug, even with this tool. If your plugin is written using python, and you are using the `proxy`, it might be useless, since this proxy already have an option to log RPC calls (by giving `debug_fn=sys.stderr.write` as an option to the constructor of `IkiWikiProcedureProxy`).

I am not sure that this plugin is the solution to the problem of debugging external plugins. I am still publishing it here, hoping that someone might improve it into something useful…

# Download and install

Code and documentation can be found here : https://spalax.frama.io/gresille-ikiwiki/verboserpc.