Hi,
I'd like to clean up our instance of Confluence, removing some of the plugins we don't need. I want to remove the plugins in the test environment, then try and get a list of pages with broken macros..
Is there any plugins / user macros that can obtain such a list?
Thanks,
m.w
You can use macroName: in the search to find pages using a specific macro.
Listing pages with broken macros is a bit harder though.
Hi Mark,
I thought something like this would be useful, so I whipped up a short python script:
import xmlrpclib import codecs confluenceUrl = "https://<your-server>" server = xmlrpclib.ServerProxy(confluenceUrl + '/rpc/xmlrpc') username = 'username' password = 'password' token = server.confluence2.login(username, password) spaceSummary = server.confluence2.getSpaces(token) for space in spaceSummary: log = "" log += "<hr>\n" log += "<p>Searching in space " + space["name"] + " - " + space["key"] + "</p>\n" log += "<hr>\n" print log with codecs.open('logfile.html', 'a', encoding='utf-8') as f: f.write(log) f.close() spacePages = server.confluence2.getPages(token, space["key"]) for page in spacePages: pageContent = server.confluence2.renderContent(token, "", page["id"], "", {'style': 'clean'}) if '<span class="error">Unknown macro:' in pageContent: log = "" log += "<p>Page " + page["title"] + " has broken macros!</p>\n" log += "<p>Page ID: " + page["id"] + "</p>\n" log += '<p>Page URL: <a href="' + page["url"] + '">' + page["url"] + '</a></p><p> </p>\n' log += "<p>----</p>\n" print log with codecs.open('logfile.html', 'a', encoding='utf-8') as f: f.write(log) f.close()
It will go through every page on your site and see whether it has broken macros on it and outputs the results with links to the pages in an HTML file. I would run it off-hours (or on your test instance) since it hits the server pretty hard, but we have a fairly good size instance and it only took about 5-10 minutes to run. I only tested it with plain Python 2.7.8 and Confluence 5.5, but it should work fine on other versions.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Doesn't work in Cloud.
Traceback (most recent call last): File "./pythonConfluenceBrokenMacros.py", line 10, in <module> token = server.confluence2.login(username, password) File "/usr/lib64/python2.7/xmlrpclib.py", line 1240, in __call__ return self.__send(self.__name, args) File "/usr/lib64/python2.7/xmlrpclib.py", line 1599, in __request verbose=self.__verbose File "/usr/lib64/python2.7/xmlrpclib.py", line 1280, in request return self.single_request(host, handler, request_body, verbose) File "/usr/lib64/python2.7/xmlrpclib.py", line 1328, in single_request response.msg, xmlrpclib.ProtocolError: <ProtocolError for XXXXXX.atlassian.net/rpc/xmlrpc: 404 Not Found>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
It seems like you might be missing the full context Path. Usually Cloud instances are XXXXXX.atlassian.net/wiki
Try updating your URL to that and hopefully it should work.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
@Stephen Deutsch, spot on. Correcting the URL got it to run. Although I now get a 504 time out after a few minutes.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
@Stephen Deutsch: Nice example.
Does anyone know whether something like this is possible through the REST API as well, since XML-RPC is now a deprecated API?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
For python 3.x you need to replace
import xmlrpclib
server = xmlrpclib.ServerProxy(confluenceUrl + '/rpc/xmlrpc')
with
from xmlrpc import client
server = client.ServerProxy(confluenceUrl + '/rpc/xmlrpc')
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
There is a plugin that can remove a macro from every page in your confluence instance. You can even replace it with a different string/macro. You might want to check that out. It also lists the occurences of that macro.
https://marketplace.atlassian.com/plugins/at.rumpelcoder.confluence.search-and-replace
It doesn't list broken macros. I don't think there is a possibility fot that.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.