#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
# conditions defined in the file COPYING, which is part of this source code package.
"""
Note: this plugin intentionally has not been ported to Python3.
To actually port it we would have to decide how to deal with different versions of mailman
and which packages to use.
Currently we take the guts of the installed mailman binary itself which is not quite
portable of course.
"""

__version__ = "2.1.0p23"

# This Checkmk-Agent plugin gathers information about mailinglists hosted
# by the local mailman instance.

# Needed if you have located your mailman python modules not in default
# python module paths
import sys
sys.path.append("/usr/local/mailman")
sys.path.append("/usr/lib/mailman")

# Set to True to filter out all "hidden" mailinglists
only_advertised = True

from Mailman import Utils, MailList  # type: ignore[import] # pylint: disable=import-error

# 1. list memberships
sys.stdout.write('<<<mailman_lists>>>\n')
total_members = set([])
for name in sorted(Utils.list_names()):
    mlist = MailList.MailList(name, lock=0)
    if only_advertised and not mlist.advertised:
        continue

    rmembers = mlist.getRegularMemberKeys()
    dmembers = mlist.getDigestMemberKeys()
    members = rmembers + dmembers
    total_members.update(members)

    sys.stdout.write('%s %d\n' % (name, len(members)))
sys.stdout.write('TOTAL %d\n' % len(total_members))
