diff --git a/lam/HISTORY b/lam/HISTORY index 9b633bac..66c9296f 100644 --- a/lam/HISTORY +++ b/lam/HISTORY @@ -1,6 +1,7 @@ August 2011 3.5.0 - New module "General information": shows internal data about accounts (e.g. creation time) - inetOrgPerson: New attributes o, employeeNumber, initials + - Server information shows data from cn=monitor - LAM Pro: -> Automount: allow to create automount maps -> Password policy: allow to (un)lock accounts diff --git a/lam/templates/serverInfo.php b/lam/templates/serverInfo.php index b0b8341b..505625cd 100644 --- a/lam/templates/serverInfo.php +++ b/lam/templates/serverInfo.php @@ -3,7 +3,7 @@ $Id$ This code is part of LDAP Account Manager (http://www.ldap-account-manager.org/) - Copyright (C) 2009 - 2010 Roland Gruber + Copyright (C) 2009 - 2011 Roland Gruber This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -84,53 +84,249 @@ if ($result) { } } +// get additional information if monitoring is enabled +$monitorResult = searchLDAP('cn=monitor', 'objectClass=*', array('*', '+')); +$monitorEntries = array(); +for ($i = 0; $i < sizeof($monitorResult); $i++) { + $monitorEntries[$monitorResult[$i]['dn']] = array_change_key_case($monitorResult[$i], CASE_LOWER); +} +$monitorEntries = array_change_key_case($monitorEntries, CASE_LOWER); + include 'main_header.php'; echo '
'; $tabindex = 1; $container = new htmlTable(); +$spacer = new htmlSpacer('20px', null); $container->addElement(new htmlTitle(_("Server information")), true); $container->addElement(new htmlOutputText('' . _("Managed suffixes") . '', false)); -$container->addElement(new htmlSpacer('20px', null)); +$container->addElement($spacer); $container->addElement(new htmlOutputText($namingContexts), true); $container->addElement(new htmlOutputText('' . _("LDAP version") . '', false)); -$container->addElement(new htmlSpacer('20px', null)); +$container->addElement($spacer); $container->addElement(new htmlOutputText($supportedldapversion), true); if ($configcontext != '') { $container->addElement(new htmlOutputText('' . _("Config suffix") . '', false)); - $container->addElement(new htmlSpacer('20px', null)); + $container->addElement($spacer); $container->addElement(new htmlOutputText($configcontext), true); } $container->addElement(new htmlOutputText('' . _("Schema suffix") . '', false)); -$container->addElement(new htmlSpacer('20px', null)); +$container->addElement($spacer); $container->addElement(new htmlOutputText($subschemasubentry), true); if ($dynamicSubtrees != '') { $container->addElement(new htmlOutputText('' . _("Dynamic subtrees") . '', false)); - $container->addElement(new htmlSpacer('20px', null)); + $container->addElement($spacer); $container->addElement(new htmlOutputText($dynamicSubtrees), true); } $container->addElement(new htmlOutputText('' . _("SASL mechanisms") . '', false)); -$container->addElement(new htmlSpacer('20px', null)); +$container->addElement($spacer); $container->addElement(new htmlOutputText($supportedsaslmechanisms), true); if ($vendorname != '') { $container->addElement(new htmlOutputText('' . _("Vendor name") . '', false)); - $container->addElement(new htmlSpacer('20px', null)); + $container->addElement($spacer); $container->addElement(new htmlOutputText($vendorname), true); } if ($vendorversion != '') { $container->addElement(new htmlOutputText('' . _("Vendor version") . '', false)); - $container->addElement(new htmlSpacer('20px', null)); + $container->addElement($spacer); $container->addElement(new htmlOutputText($vendorversion), true); } +// monitoring information +if (isset($monitorEntries['cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Name") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=monitor']['monitoredinfo'])), true); +} +if (isset($monitorEntries['cn=listeners,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Listeners") . '', false)); + $container->addElement($spacer); + $listeners = array(); + $l = 0; + while (isset($monitorEntries['cn=listener ' . $l . ',cn=listeners,cn=monitor'])) { + $listeners[] = $monitorEntries['cn=listener ' . $l . ',cn=listeners,cn=monitor']['monitorconnectionlocaladdress'][0]; + $l++; + } + $container->addElement(new htmlOutputText(implode(', ', $listeners)), true); +} +if (isset($monitorEntries['cn=backends,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Backends") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=backends,cn=monitor']['monitoredinfo'])), true); +} +if (isset($monitorEntries['cn=overlays,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Overlays") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=overlays,cn=monitor']['monitoredinfo'])), true); +} +if (isset($monitorEntries['cn=max file descriptors,cn=connections,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Max. file descriptors") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=max file descriptors,cn=connections,cn=monitor']['monitorcounter'])), true); +} + +// server statistics +if (isset($monitorEntries['cn=time,cn=monitor']) || isset($monitorEntries['cn=statistics,cn=monitor'])) { + $container->addElement(new htmlSubTitle(_('Server statistics')), true); + if (isset($monitorEntries['cn=entries,cn=statistics,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("LDAP entries") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=entries,cn=statistics,cn=monitor']['monitorcounter'])), true); + } + if (isset($monitorEntries['cn=referrals,cn=statistics,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Referrals") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=referrals,cn=statistics,cn=monitor']['monitorcounter'])), true); + } + if (isset($monitorEntries['cn=start,cn=time,cn=monitor'])) { + $time = formatLDAPTimestamp($monitorEntries['cn=start,cn=time,cn=monitor']['monitortimestamp'][0]); + $container->addElement(new htmlOutputText('' . _("Start time") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText($time), true); + } + if (isset($monitorEntries['cn=current,cn=time,cn=monitor'])) { + $time = formatLDAPTimestamp($monitorEntries['cn=current,cn=time,cn=monitor']['monitortimestamp'][0]); + $container->addElement(new htmlOutputText('' . _("Server time") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText($time), true); + } + if (isset($monitorEntries['cn=uptime,cn=time,cn=monitor'])) { + $uptime = $monitorEntries['cn=uptime,cn=time,cn=monitor']['monitoredinfo'][0]; + $days = floor($uptime / (3600 * 24)); + $daysRest = $uptime - ($days * 3600 * 24); + $hours = floor($daysRest / 3600); + $hoursRest = $daysRest - ($hours * 3600); + $minutes = floor($hoursRest / 60); + $container->addElement(new htmlOutputText('' . _("Uptime") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText($days . ':' . $hours . ':' . $minutes), true); + } +} + +// connection statistics +if (isset($monitorEntries['cn=connections,cn=monitor']) || isset($monitorEntries['cn=statistics,cn=monitor'])) { + $container->addElement(new htmlSubTitle(_('Connection statistics')), true); + if (isset($monitorEntries['cn=current,cn=connections,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Current connections") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=current,cn=connections,cn=monitor']['monitorcounter'])), true); + } + if (isset($monitorEntries['cn=total,cn=connections,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("Total connections") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=total,cn=connections,cn=monitor']['monitorcounter'])), true); + } + if (isset($monitorEntries['cn=bytes,cn=statistics,cn=monitor'])) { + $bytes = round($monitorEntries['cn=bytes,cn=statistics,cn=monitor']['monitorcounter'][0] / 1000000, 2) . 'MB'; + $container->addElement(new htmlOutputText('' . _("Bytes sent") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText($bytes), true); + } + if (isset($monitorEntries['cn=pdu,cn=statistics,cn=monitor'])) { + $container->addElement(new htmlOutputText('' . _("PDUs sent") . '', false)); + $container->addElement($spacer); + $container->addElement(new htmlOutputText($monitorEntries['cn=pdu,cn=statistics,cn=monitor']['monitorcounter'][0]), true); + } +} + +// operation statistics +if (isset($monitorEntries['cn=operations,cn=monitor'])) { + $container->addElement(new htmlSubTitle(_('Operation statistics')), true); + $opStats = new htmlTable(); + $opStats->colspan = 10; + $opStats->addElement(new htmlOutputText('')); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText('' . _("initiated") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText('' . _("completed") . '', false), true); + if (isset($monitorEntries['cn=bind,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Bind") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=bind,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=bind,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=unbind,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Unbind") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=unbind,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=unbind,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=search,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Search") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=search,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=search,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=add,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Add") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=add,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=add,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=modify,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Modify") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=modify,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=modify,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=delete,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Delete") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=delete,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=delete,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=modrdn,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Modify RDN") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=modrdn,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=modrdn,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=compare,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Compare") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=compare,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=compare,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=abandon,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Abandon") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=abandon,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=abandon,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + if (isset($monitorEntries['cn=extended,cn=operations,cn=monitor'])) { + $opStats->addElement(new htmlOutputText('' . _("Extended") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=extended,cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=extended,cn=operations,cn=monitor']['monitoropcompleted'])), true); + } + $opStats->addElement(new htmlSpacer(null, '10px'), true); + $opStats->addElement(new htmlOutputText('' . _("Total") . '', false)); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=operations,cn=monitor']['monitoropinitiated']))); + $opStats->addElement($spacer); + $opStats->addElement(new htmlOutputText(implode(', ', $monitorEntries['cn=operations,cn=monitor']['monitoropcompleted'])), true); + $container->addElement($opStats); +} +//print_r($monitorEntries); + parseHtml(null, $container, array(), true, $tabindex, 'user'); echo '
';