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: