import email.utils
import os.path
import time
plugins_release = '2.3.3'
mib_release = '1.0.1'
release_notes = 'news/release-%s.html' % plugins_release.replace('.', '-')
site_url = 'https://www.monitoring-plugins.org/'
feeds = """These project news articles are also available as an
[RSS feed][rss]{: rel="alternate" type="application/rss+xml" }. Additional
stuff is posted to [Twitter][twitter], so you might want to [follow us][follow]
there as well.
[rss]: rss.xml "RSS Feed"
[twitter]: https://twitter.com/ "Twitter"
[follow]: https://twitter.com/intent/follow?screen_name=monitorplugins "Follow Us"
"""
page = {
"description": "Standard monitoring plugins for Nagios and compatible monitoring solutions.",
"keywords": "Nagios, Icinga, Shinken, Naemon, Sensu, Monitoring, Official, Plugins, Open, Source, Free, Software"
}
#
# RSS Feed
#
_RSS = """
%s
%s
%s
en-us
webmaster@monitoring-plugins.org
%s
%s
Poole
http://blogs.law.harvard.edu/tech/rss
%s
"""
_RSS_ITEM = """
-
%s
%s
%s
%s
%s
"""
def hook_postconvert_rss():
items = []
posts = [p for p in pages if 'date' in p]
posts.sort(key=lambda p: p.date, reverse=True)
for p in posts:
link = '%s/%s' % (site_url.rstrip('/'), p.url)
desc = hx(p.html)
date = time.mktime(time.strptime('%s 12' % p.date, '%Y-%m-%d %H'))
date = email.utils.formatdate(date)
items.append(_RSS_ITEM % (p.title, link, desc, link, date))
items = ''.join(items)
title = 'Monitoring Plugins'
link = '%s/news/' % site_url.rstrip('/')
desc = 'Announcements published by the Monitoring Plugins Development Team.'
date = email.utils.formatdate()
rss = _RSS % (title, link, desc, date, date, items)
fp = open(os.path.join(output, 'rss.xml'), 'w')
fp.write(rss.encode('utf-8'))
fp.close()
#
# News
#
def hook_preconvert_news():
posts_per_page = 10
posts = [p for p in pages if 'date' in p]
posts.sort(key=lambda p: p.date, reverse=True)
n_news_pages = len(posts) / posts_per_page
if len(posts) % posts_per_page > 0:
n_news_pages += 1
for i, chunk in enumerate(next_news_chunk(posts, posts_per_page)):
content = make_news_page(chunk, i) + make_news_footer(n_news_pages, i)
if i == 0:
p = Page('news/index.md',
virtual=content,
menu=2,
title='News',
parent='Home')
else:
p = Page('news/%d.md' % (i + 1),
virtual=content,
title='News Page %d' % (i + 1),
parent='News')
pages.append(p)
def make_news_page(posts, current_index):
marker = ''
if current_index == 0:
title = 'News'
teaser = ['# ' + title, feeds]
else:
title = 'News Page %d' % (current_index + 1)
teaser = ['# ' + title]
for p in posts:
source = list()
author = p.author.encode('ascii', 'xmlcharrefreplace')
timestamp = time.strptime(p.date, '%Y-%m-%d')
author_date = author + ', ' + time.strftime('%B %-e, %Y', timestamp)
teaser.append('## %s' % p.title)
teaser.append('*%s*' % author_date)
teaser.append('%s' % p.source.split(marker, 1)[0].rstrip())
teaser.append('Read more »' % p.url)
source.append('# %s' % p.title)
source.append('*%s*' % author_date)
source.append(p.source.replace(marker, '', 1))
p.source = '\n'.join(source)
p['parent'] = title
return '\n'.join(teaser) + '\n\n'
def make_news_footer(n_news_pages, current_index):
if n_news_pages == 1:
return ''
footer = list()
if current_index != 0:
previous = 'index' if current_index == 1 else str(current_index)
footer.append('[First](news/index.html)')
footer.append('[Previous](news/%s.html)' % previous)
if n_news_pages <= 20:
for i in range(n_news_pages):
if i == current_index:
footer.append('%d' % (i + 1))
elif i == 0:
footer.append('[1](news/index.html)')
else:
footer.append('[%d](news/%d.html)' % (i + 1, i + 1))
if current_index != n_news_pages - 1:
footer.append('[Next](news/%d.html)' % (current_index + 2))
footer.append('[Last](news/%d.html)' % n_news_pages)
return ' '.join(footer) + '\n{: #news-footer }\n'
def next_news_chunk(posts, posts_per_page):
index = 0
while len(posts[index:]) > 0:
yield posts[index:index + posts_per_page]
index += posts_per_page
#
# Menu and Breadcrumb Navigation
#
def menu():
menu_pages = [p for p in pages if 'menu' in p]
menu_pages.sort(key=lambda p: int(p['menu']))
for p in menu_pages:
if p.title == page.title:
print('%s' % hx(p.title))
else:
print('%s' % (p.url, hx(p.title)))
def breadcrumb():
stable = 'Stable release: %s' \
% (release_notes, plugins_release)
parents = {p.title: (p.url, p.get('parent')) for p in pages}
title = page.title
crumbs = hx(title)
while parents[title][1] is not None:
title = parents[title][1]
url = parents[title][0]
crumbs = '%s » %s' % (url, hx(title), crumbs)
if crumbs == hx(page.title):
crumbs = ' ' + stable
return crumbs
#
# Miscellaneous
#
def list_kids():
kids = [(p.url, p.title) for p in pages if p.get('parent') == page.title]
for kid in sorted(kids):
print('* [%s](%s)' % (kid[1], kid[0]))
def copyright_years(since=None):
this_year = time.gmtime().tm_year
if since is not None and int(since) != this_year:
return str(since) + '–' + str(this_year)
else:
return str(this_year)
# vim:set expandtab softtabstop=4 shiftwidth=4 textwidth=80: