From 1c70b0447570619f537147db8ca491c054467a12 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Fri, 30 Aug 2013 00:54:37 +0000 Subject: initial commit --- templates/host.tpl.php | 85 ++++++++++++ templates/start.tpl.php | 67 +++++++++ update.php | 355 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 507 insertions(+) create mode 100644 templates/host.tpl.php create mode 100644 templates/start.tpl.php create mode 100755 update.php diff --git a/templates/host.tpl.php b/templates/host.tpl.php new file mode 100644 index 0000000..68af670 --- /dev/null +++ b/templates/host.tpl.php @@ -0,0 +1,85 @@ +====== ====== + + + +===== Summary ===== + + * **hostname:** + * **os:** + * **arch:** + + * **vserver:** + + + * **vserver host:** + + + * **maintainers:** + + + * **bcfg2-groups:** [[https://bcfg2.spline.de/client/|view client in bcfg2]] + + * + + + +===== network interfaces ===== + + + 0) { ?> + $value) { ?> + * **** + + * + + + +No network interfaces configured. + + +===== open ports ===== + + + +^ Port ^ IP ^ Process ^ Protocol ^ + +| | | | | + + + +No open ports + + +===== services ===== + + 0) { ?> + +^ Name ^ Port ^ Visibility ^ + $service_category) { ?> + + + +| | | | + +| | default | | + + + + + + +no services provoided + diff --git a/templates/start.tpl.php b/templates/start.tpl.php new file mode 100644 index 0000000..f3a8df4 --- /dev/null +++ b/templates/start.tpl.php @@ -0,0 +1,67 @@ +====== Hostinfo ====== + +{confsearch> @hostinfo > Search in hostinfo} + +===== Übersicht ===== + + + $data) { ?> +[[|]]: + @os: + @arch: + + @vserver: + + @maint: + @nagios: [[https://monitoring.spline.inf.fu-berlin.de/icinga/|Link]] + @bcfg2: [[https://bcfg2.spline.inf.fu-berlin.de/client/|Link]] + 100) { ?> + @doc: :-D + + + + + +===== IPs ===== + + + $data) { ?> + + + +: + @host: [[|]] + + + + + + + +===== Bcfg2 Groups ===== + + $hosts) { ?> +==== ==== + + +[[start#uebersicht|alle Server]] + + + $data) { ?> +[[|]]: + @os: + @arch: + + @vserver: + + @maint: + @nagios: [[https://monitoring.spline.inf.fu-berlin.de/icinga/|Link]] + @bcfg2: [[https://bcfg2.spline.inf.fu-berlin.de/client/|Link]] + 100) { ?> + @doc: :-D + + + + + + diff --git a/update.php b/update.php new file mode 100755 index 0000000..15fa8d8 --- /dev/null +++ b/update.php @@ -0,0 +1,355 @@ +#!/usr/bin/env php +isError() ) { + fwrite( STDERR, $OPTS->getMessage() . "\n"); + _usage(); + exit(1); +} +$CLEAR = false; +$QUIET = false; +$PAGES = array(); + +foreach ($OPTS->options as $key => $val) { + switch ($key) { + case 'h': + case 'help': + _usage(); + exit; + case 'c': + case 'clear': + $CLEAR = true; + break; + case 'q': + case 'quiet': + $QUIET = true; + break; + } +} + +if (!$OPTS->hasArgs()) { + _usage(); + exit; +} + +#------------------------------------------------------------------------------ +# Doku_Indexer_Mass_Remover + +class Doku_Indexer_Mass_Remover extends Doku_Indexer { + function deletePages($pages) { + if (!$this->lock()) { + die('Locked'); + } + + foreach($pages as $page) { + _quietecho('Removing from index: ' . $page); + $this->deletePageNoLock($page); + _quietecho(" done.\n"); + } + + $this->unlock(); + } +} + +#------------------------------------------------------------------------------ +# main() + +$path_to_hostinfo = $OPTS->arg(0); +_load_hostinfo_data($path_to_hostinfo); + +_find_current_pages(); +if (!$CLEAR) { + _update_content(); + _render('start', 'start', array('HOSTINFO' => $HOSTINFO)); + _update_index(); +} +_remove_outdated(); + + +#------------------------------------------------------------------------------ +# _find_current_pages + +function _find_current_pages() { + global $conf, $PAGES; + + $data = array(); + search($data, $conf['datadir'], 'search_allpages', array('skipacl' => true), 'hostinfo'); + + foreach ($data as $page) { + $PAGES[$page['id']] = 'delete'; + } +} + +#------------------------------------------------------------------------------ +# _load_hostinfo_data + +function _load_hostinfo_data($path) { + global $HOSTINFO; + + $hosts_file = $path . '/metadata/hosts'; + if (!file_exists($hosts_file)) { + die("Invalid hostinfo path: $path\n"); + } + + $hosts = sfYaml::load($hosts_file); + foreach ($hosts['hosts'] as $host) { + $HOSTINFO[$host] = sfYaml::load($path . '/' . $host); + } +} + +#------------------------------------------------------------------------------ +# _update_content + +function _update_content() { + global $conf, $HOSTINFO; + + // render sites + foreach ($HOSTINFO as $host => $host_data) { + _render($host, 'host', $host_data); + } +} + +#------------------------------------------------------------------------------ +# _render + +function _render($target, $file, $vars=null) { + global $conf, $PAGES; + + _quietecho("Rendering $file into $target"); + $content = _render_template($file, $vars); + if ($content === false) { + _quietecho(" FAILED (missing template)\n"); + return false; + } + else { + $pagename = cleanID('hostinfo:' . $target); + $page = wikiFN($pagename); + + $old_content = ''; + if (file_exists($page)) { + $old_content = file_get_contents($page); + } + + if ($content != $old_content) { + $PAGES[$pagename] = 'update'; + saveWikiText($pagename, $content, 'auto generated'); + _quietecho(" done\n"); + } + else { + unset($PAGES[$pagename]); + _quietecho(" no change\n"); + } + return true; + } +} + +#------------------------------------------------------------------------------ +# default + +function echo_with_default($value, $default) { + if (!isset($value) || empty($value)) { + echo $default; + } + else { + echo $value; + } +} + +#------------------------------------------------------------------------------ +# get_contact_info + +function get_contact_info($maintainer) { + if (preg_match('/^([^:]*): (.*@.*)$/', $maintainer, $match)) { + return array($match[1], $match[2]); + } + + return array($maintainer, $maintainer . '@spline.inf.fu-berlin.de'); +} + +#------------------------------------------------------------------------------ +# get_bcfg2_groups + +function get_bcfg2_groups($hostinfo) { + $groups = array(); + + foreach ($hostinfo as $host => $data) { + foreach ($data['groups'] as $group) { + $groups[$group] = array(); + } + } + + foreach (array_keys($groups) as $group) { + foreach ($hostinfo as $host => $data) { + if (in_array($group, $data['groups'])) { + $groups[$group][$host] = $data; + } + } + } + + foreach ($groups as $group => $hosts) { + if (count($hosts) < 2) { + unset($groups[$group]); + } + + if (count($hosts) == count($hostinfo)) { + $groups[$group] = 'all'; + } + } + + return $groups; +} + +#------------------------------------------------------------------------------ +# group_by + +function group_by($data, $key) { + $result = array(); + + foreach ($data as $value) { + if (array_key_exists($key, $value)) { + $result[$value[$key]][] = $value; + } + } + + return $result; +} + +#------------------------------------------------------------------------------ +# select_by + +function select_by($data, $key, $exists = true) { + $result = array(); + + if (is_array($data)) { + foreach ($data as $value) { + if (array_key_exists($key, $value) === $exists) { + $result[] = $value; + } + } + } + + return $result; +} + +#------------------------------------------------------------------------------ +# _render_template + +function _render_template($file, $vars=null) { + // validate $file + $file = preg_replace('/^(?:.+\/)?([a-zA-Z_-]*)(?:\.[a-zA-Z])?$/', '$1', $file); + $file = 'templates/' . $file . '.tpl.php'; + + if (!file_exists($file)) { + // template does not exists + return false; + } + + if (is_array($vars) && !empty($vars)) { + if (array_key_exists('file', $vars)) { + // if $vars would contain a 'file' key, this would overwrite the + // first parameter of the template file + unset($vars['file']); + } + + extract($vars); + } + + ob_start(); + include $file; + return ob_get_clean(); +} + +#------------------------------------------------------------------------------ +# _update_index + +function _update_index() { + global $conf, $PAGES; + + + foreach ($PAGES as $page => $state) { + if ($state != 'delete') { + _quietecho('Add to index: ' . $page); + idx_addPage($page, false, true); + _quietecho(" done.\n"); + } + } +} + +#------------------------------------------------------------------------------ +# _remove_index + +function _remove_index() { + global $PAGES; + + $data = array(); + foreach ($PAGES as $page => $state) { + if ($state == 'delete') { + $data[] = $page; + } + } + + $idx = new Doku_Indexer_Mass_Remover(); + $idx->deletePages($data); +} + +#------------------------------------------------------------------------------ +# _remove_outdated + +function _remove_outdated() { + global $PAGES; + + foreach ($PAGES as $page => $state) { + if ($state == 'delete') { + _quietecho('Removing old page: ' . $page); + unlink(wikiFN($page)); + _quietecho(" done.\n"); + } + } + _remove_index(); +} + +#------------------------------------------------------------------------------ +# _usage + +function _usage() { + print "Usage: update.php + +Updates the hostinfo information by first removing all pages in the hostinfo +namespace from the fulltext index, generating the new files and then +reindexing all pages. +When the -c option is given the index is only cleared and nothing is updated. + +OPTIONS + -h, --help show this help and exit + -c, --clear only clear the index + -q, --quiet don't produce any output +"; +} + +#------------------------------------------------------------------------------ +# _quietecho + +function _quietecho($msg) { + global $QUIET; + if(!$QUIET) echo $msg; +} + +?> -- cgit v1.2.3-1-g7c22