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.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.