Merge branch 'master' into feature/setup-wizard-7163
This commit is contained in:
commit
c1bff9a26e
|
@ -161,7 +161,6 @@ class AuthenticationController extends ActionController
|
|||
$isRemoteUser = $auth->getUser()->isRemoteUser();
|
||||
$auth->removeAuthorization();
|
||||
if ($isRemoteUser === true) {
|
||||
$this->_helper->layout->setLayout('login');
|
||||
$this->_response->setHttpResponseCode(401);
|
||||
} else {
|
||||
$this->redirectToLogin();
|
||||
|
|
|
@ -19,7 +19,7 @@ class IndexController extends ActionController
|
|||
public function preDispatch()
|
||||
{
|
||||
if ($this->getRequest()->getActionName() !== 'welcome') {
|
||||
$this->redirectNow('dashboard');
|
||||
$this->redirectNow(Url::fromRequest()->setPath('dashboard'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,14 +6,15 @@ namespace Icinga\Form;
|
|||
|
||||
use Exception;
|
||||
use DateTimeZone;
|
||||
use Icinga\Web\Form;
|
||||
use Icinga\Web\Request;
|
||||
use Icinga\Web\Session;
|
||||
use Icinga\Web\Notification;
|
||||
use Icinga\Util\Translator;
|
||||
use Icinga\Util\TimezoneDetect;
|
||||
use Icinga\Logger\Logger;
|
||||
use Icinga\User\Preferences;
|
||||
use Icinga\User\Preferences\PreferencesStore;
|
||||
use Icinga\Util\TimezoneDetect;
|
||||
use Icinga\Util\Translator;
|
||||
use Icinga\Web\Form;
|
||||
use Icinga\Web\Notification;
|
||||
use Icinga\Web\Request;
|
||||
use Icinga\Web\Session;
|
||||
|
||||
/**
|
||||
* Form class to adjust user preferences
|
||||
|
@ -105,6 +106,7 @@ class PreferenceForm extends Form
|
|||
$this->save();
|
||||
Notification::success(t('Preferences successfully saved'));
|
||||
} catch (Exception $e) {
|
||||
Logger::error($e);
|
||||
Notification::error($e->getMessage());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ $iframeClass = $isIframe ? ' iframe' : '';
|
|||
<title><?= $this->title ? $this->escape($this->title) : 'Icinga Web' ?></title>
|
||||
<!-- TODO: viewport and scale settings make no sense for us, fix this -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<? if ($isIframe): ?>
|
||||
<?php if ($isIframe): ?>
|
||||
<base target="_parent"/>
|
||||
<?php else: ?>
|
||||
<script type="text/javascript">
|
||||
|
@ -52,7 +52,6 @@ $iframeClass = $isIframe ? ' iframe' : '';
|
|||
<div id="layout" class="default-layout">
|
||||
<?= $this->render('body.phtml') ?>
|
||||
</div>
|
||||
<?php if (! $isIframe): ?>
|
||||
<!--[if IE 8]>
|
||||
<script type="text/javascript" src="<?= $this->href($ie8jsfile) ?>"></script>
|
||||
<![endif]-->
|
||||
|
@ -64,6 +63,5 @@ var icinga = new Icinga({
|
|||
baseUrl: '<?= $this->href('/') ?>'
|
||||
});
|
||||
</script>
|
||||
<?php endif ?>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<div class="content">
|
||||
<?php if (! $module): ?>
|
||||
<?= $this->translate('There is no such module installed.') ?>
|
||||
<? return; endif ?>
|
||||
<?php return; endif ?>
|
||||
<?php
|
||||
$dependencies = $module->getDependencies();
|
||||
$restrictions = $module->getProvidedRestrictions();
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<?= $this->icon('success.png', $this->translate('Module is enabled')) ?>
|
||||
<?php else: ?>
|
||||
<?= $this->icon('remove.png', $this->translate('Module is disabled')) ?>
|
||||
<? endif ?>
|
||||
<?php endif ?>
|
||||
<a href="<?= $this->url(
|
||||
'config/module/',
|
||||
array('name' => $module->name)
|
||||
|
@ -23,7 +23,7 @@
|
|||
?>)
|
||||
</td>
|
||||
</tr>
|
||||
<? endforeach ?>
|
||||
<?php endforeach ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -263,7 +263,7 @@ select.input-sm {
|
|||
.pagination > .active > span:focus {
|
||||
|
||||
background-color: #049baf !important;
|
||||
border-color: fuchsia !mportant;
|
||||
border-color: fuchsia !important;
|
||||
|
||||
}
|
||||
|
||||
|
@ -682,7 +682,7 @@ ul.icinga-subnavigation {
|
|||
.nav-stacked > li > a:hover,
|
||||
.icinga-subnavigation > li > a:focus {
|
||||
/* font-weight: bold;*/
|
||||
background-color: transparent; !important;
|
||||
background-color: transparent !important;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
|
@ -781,7 +781,6 @@ background-color: #fff;
|
|||
position: absolute;
|
||||
overflow: hidden;
|
||||
padding-top: 0;
|
||||
padding-bottom;
|
||||
margin-left: 2px;
|
||||
margin-top: -8px;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
CREATE TABLE `icingaweb_group`(
|
||||
`name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`parent` varchar(64) COLLATE utf8_unicode_ci NULL DEFAULT NULL,
|
||||
`ctime` timestamp NULL DEFAULT NULL,
|
||||
`mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `icingaweb_group_membership`(
|
||||
`group_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`username` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`ctime` timestamp NULL DEFAULT NULL,
|
||||
`mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`group_name`,`username`),
|
||||
CONSTRAINT `fk_icingaweb_group_membership_icingaweb_group` FOREIGN KEY (`group_name`)
|
||||
REFERENCES `icingaweb_group` (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `icingaweb_user`(
|
||||
`name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`active` tinyint(1) NOT NULL,
|
||||
`password_hash` varbinary(255) NOT NULL,
|
||||
`ctime` timestamp NULL DEFAULT NULL,
|
||||
`mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE `icingaweb_user_preference`(
|
||||
`username` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
|
||||
`value` varchar(255) NOT NULL,
|
||||
`ctime` timestamp NULL DEFAULT NULL,
|
||||
`mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`username`,`name`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
|
@ -6,6 +6,7 @@ namespace Icinga\Authentication;
|
|||
|
||||
use Icinga\Application\Config;
|
||||
use Icinga\Exception\NotReadableError;
|
||||
use Icinga\User;
|
||||
use Icinga\Util\String;
|
||||
|
||||
/**
|
||||
|
@ -14,73 +15,97 @@ use Icinga\Util\String;
|
|||
class AdmissionLoader
|
||||
{
|
||||
/**
|
||||
* Match against groups
|
||||
*
|
||||
* @param string $section
|
||||
* @param string $username
|
||||
* @param array $groups
|
||||
* @param array $userGroups
|
||||
* @param mixed $section
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function match($section, $username, array $groups)
|
||||
protected function match($username, $userGroups, $section)
|
||||
{
|
||||
if ($section->users && in_array($username, String::trimSplit($section->users)) === true) {
|
||||
return true;
|
||||
$username = strtolower($username);
|
||||
if (! empty($section->users)) {
|
||||
$users = array_map('strtolower', String::trimSplit($section->users));
|
||||
if (in_array($username, $users)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($section->groups && count(array_intersect(String::trimSplit($section->groups), $groups)) > 0) {
|
||||
return true;
|
||||
if (! empty($section->groups)) {
|
||||
$groups = array_map('strtolower', String::trimSplit($section->groups));
|
||||
foreach ($userGroups as $userGroup) {
|
||||
if (in_array(strtolower($userGroup), $groups)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve permissions
|
||||
* Get user permissions
|
||||
*
|
||||
* @param string $username
|
||||
* @param array $groups
|
||||
* @param User $user
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getPermissions($username, array $groups)
|
||||
public function getPermissions(User $user)
|
||||
{
|
||||
$permissions = array();
|
||||
try {
|
||||
$config = Config::app('permissions');
|
||||
} catch (NotReadableError $e) {
|
||||
Logger::error(
|
||||
'Can\'t get permissions for user \'%s\'. An exception was thrown:',
|
||||
$user->getUsername(),
|
||||
$e
|
||||
);
|
||||
return $permissions;
|
||||
}
|
||||
$username = $user->getUsername();
|
||||
$userGroups = $user->getGroups();
|
||||
foreach ($config as $section) {
|
||||
if ($this->match($section, $username, $groups) && isset($section->permissions)) {
|
||||
$permissions += String::trimSplit($section->permissions);
|
||||
if (! empty($section->permissions)
|
||||
&& $this->match($username, $userGroups, $section)
|
||||
) {
|
||||
$permissions = array_merge(
|
||||
$permissions,
|
||||
array_diff(String::trimSplit($section->permissions), $permissions)
|
||||
);
|
||||
}
|
||||
}
|
||||
return $permissions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve restrictions
|
||||
* Get user restrictions
|
||||
*
|
||||
* @param $username
|
||||
* @param array $groups
|
||||
* @param User $user
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getRestrictions($username, array $groups)
|
||||
public function getRestrictions(User $user)
|
||||
{
|
||||
$restrictions = array();
|
||||
try {
|
||||
$config = Config::app('restrictions');
|
||||
} catch (NotReadableError $e) {
|
||||
Logger::error(
|
||||
'Can\'t get restrictions for user \'%s\'. An exception was thrown:',
|
||||
$user->getUsername(),
|
||||
$e
|
||||
);
|
||||
return $restrictions;
|
||||
}
|
||||
foreach ($config as $name => $section) {
|
||||
if ($this->match($section, $username, $groups)) {
|
||||
if (!array_key_exists($section->name, $restrictions)) {
|
||||
$restrictions[$section->name] = array();
|
||||
}
|
||||
$restrictions[$section->name][$name] = $section->restriction;
|
||||
$username = $user->getUsername();
|
||||
$userGroups = $user->getGroups();
|
||||
foreach ($config as $section) {
|
||||
if (! empty($section->restriction)
|
||||
&& $this->match($username, $userGroups, $section)
|
||||
) {
|
||||
$restrictions = array_merge(
|
||||
$restrictions,
|
||||
array_diff(String::trimSplit($section->restriction), $restrictions)
|
||||
);
|
||||
}
|
||||
}
|
||||
return $restrictions;
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
<?php
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
|
||||
namespace Icinga\Authentication\Backend;
|
||||
|
||||
use Icinga\Authentication\UserGroupBackend;
|
||||
use Icinga\Data\Db\DbConnection;
|
||||
use Icinga\User;
|
||||
|
||||
/**
|
||||
* Database user group backend
|
||||
*/
|
||||
class DbUserGroupBackend extends UserGroupBackend
|
||||
{
|
||||
/**
|
||||
* Connection to the database
|
||||
*
|
||||
* @var DbConnection
|
||||
*/
|
||||
private $conn;
|
||||
|
||||
/**
|
||||
* Create a new database user group backend
|
||||
*
|
||||
* @param DbConnection $conn
|
||||
*/
|
||||
public function __construct(DbConnection $conn)
|
||||
{
|
||||
$this->conn = $conn;
|
||||
}
|
||||
|
||||
/**
|
||||
* (non-PHPDoc)
|
||||
* @see UserGroupBackend::getMemberships() For the method documentation.
|
||||
*/
|
||||
public function getMemberships(User $user)
|
||||
{
|
||||
$groups = array();
|
||||
$groupsStmt = $this->conn->getDbAdapter()
|
||||
->select()
|
||||
->from($this->conn->getTablePrefix() . 'group', array('name', 'parent'))
|
||||
->query();
|
||||
foreach ($groupsStmt as $group) {
|
||||
$groups[$group->name] = $group->parent;
|
||||
}
|
||||
$memberships = array();
|
||||
$membershipsStmt = $this->conn->getDbAdapter()
|
||||
->select()
|
||||
->from($this->conn->getTablePrefix() . 'group_membership', array('group_name'))
|
||||
->where('username = ?', $user->getUsername())
|
||||
->query();
|
||||
foreach ($membershipsStmt as $membership) {
|
||||
$memberships[] = $membership->group_name;
|
||||
$parent = $groups[$membership->group_name];
|
||||
while (isset($parent)) {
|
||||
$memberships[] = $parent;
|
||||
$parent = $groups[$parent];
|
||||
}
|
||||
}
|
||||
return $memberships;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
|
||||
namespace Icinga\Authentication\Backend;
|
||||
|
||||
use Icinga\Application\Config;
|
||||
use Icinga\Authentication\UserGroupBackend;
|
||||
use Icinga\Exception\ConfigurationError;
|
||||
use Icinga\User;
|
||||
use Icinga\Util\String;
|
||||
|
||||
/**
|
||||
* INI user group backend
|
||||
*/
|
||||
class IniUserGroupBackend extends UserGroupBackend
|
||||
{
|
||||
/**
|
||||
* Config
|
||||
*
|
||||
* @var Config
|
||||
*/
|
||||
private $config;
|
||||
|
||||
/**
|
||||
* Create a new INI user group backend
|
||||
*
|
||||
* @param Config $config
|
||||
*/
|
||||
public function __construct(Config $config)
|
||||
{
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* (non-PHPDoc)
|
||||
* @see UserGroupBackend::getMemberships() For the method documentation.
|
||||
*/
|
||||
public function getMemberships(User $user)
|
||||
{
|
||||
$username = strtolower($user->getUsername());
|
||||
$groups = array();
|
||||
foreach ($this->config as $name => $section) {
|
||||
if (empty($section->users)) {
|
||||
throw new ConfigurationError(
|
||||
'Membership section \'%s\' in \'%s\' is missing the \'users\' section',
|
||||
$name,
|
||||
$this->config->getConfigFile()
|
||||
);
|
||||
}
|
||||
if (empty($section->groups)) {
|
||||
throw new ConfigurationError(
|
||||
'Membership section \'%s\' in \'%s\' is missing the \'groups\' section',
|
||||
$name,
|
||||
$this->config->getConfigFile()
|
||||
);
|
||||
}
|
||||
$users = array_map('strtolower', String::trimSplit($section->users));
|
||||
if (in_array($username, $users)) {
|
||||
$groups = array_merge($groups, array_diff(String::trimSplit($section->groups), $groups));
|
||||
}
|
||||
}
|
||||
return $groups;
|
||||
}
|
||||
}
|
|
@ -184,7 +184,10 @@ class LdapUserBackend extends UserBackend
|
|||
$password
|
||||
);
|
||||
if ($authenticated) {
|
||||
$user->setGroups($this->getGroups($userDn));
|
||||
$groups = $this->getGroups($userDn);
|
||||
if ($groups !== null) {
|
||||
$user->setGroups($groups);
|
||||
}
|
||||
}
|
||||
return $authenticated;
|
||||
} catch (LdapException $e) {
|
||||
|
|
|
@ -6,14 +6,14 @@ namespace Icinga\Authentication;
|
|||
|
||||
use Exception;
|
||||
use Zend_Config;
|
||||
use Icinga\User;
|
||||
use Icinga\Web\Session;
|
||||
use Icinga\Logger\Logger;
|
||||
use Icinga\Application\Config;
|
||||
use Icinga\Exception\IcingaException;
|
||||
use Icinga\Exception\NotReadableError;
|
||||
use Icinga\Application\Config as IcingaConfig;
|
||||
use Icinga\Logger\Logger;
|
||||
use Icinga\User;
|
||||
use Icinga\User\Preferences;
|
||||
use Icinga\User\Preferences\PreferencesStore;
|
||||
use Icinga\Exception\IcingaException;
|
||||
use Icinga\Web\Session;
|
||||
|
||||
class Manager
|
||||
{
|
||||
|
@ -53,7 +53,7 @@ class Manager
|
|||
{
|
||||
$username = $user->getUsername();
|
||||
try {
|
||||
$config = IcingaConfig::app();
|
||||
$config = Config::app();
|
||||
} catch (NotReadableError $e) {
|
||||
Logger::error(
|
||||
new IcingaException(
|
||||
|
@ -85,18 +85,32 @@ class Manager
|
|||
$preferences = new Preferences();
|
||||
}
|
||||
$user->setPreferences($preferences);
|
||||
$membership = new Membership();
|
||||
$groups = $membership->getGroupsByUsername($username);
|
||||
$groups = array();
|
||||
foreach (Config::app('groups') as $name => $config) {
|
||||
try {
|
||||
$groupBackend = UserGroupBackend::create($name, $config);
|
||||
$groupsFromBackend = $groupBackend->getMemberships($user);
|
||||
} catch (Exception $e) {
|
||||
Logger::error(
|
||||
'Can\'t get group memberships for user \'%s\' from backend \'%s\'. An exception was thrown:',
|
||||
$username,
|
||||
$name,
|
||||
$e
|
||||
);
|
||||
continue;
|
||||
}
|
||||
if (empty($groupsFromBackend)) {
|
||||
continue;
|
||||
}
|
||||
$groupsFromBackend = array_values($groupsFromBackend);
|
||||
$groups = array_merge($groups, array_combine($groupsFromBackend, $groupsFromBackend));
|
||||
}
|
||||
$user->setGroups($groups);
|
||||
$admissionLoader = new AdmissionLoader();
|
||||
$user->setPermissions(
|
||||
$admissionLoader->getPermissions($username, $groups)
|
||||
);
|
||||
$user->setRestrictions(
|
||||
$admissionLoader->getRestrictions($username, $groups)
|
||||
);
|
||||
$user->setPermissions($admissionLoader->getPermissions($user));
|
||||
$user->setRestrictions($admissionLoader->getRestrictions($user));
|
||||
$this->user = $user;
|
||||
if ($persist == true) {
|
||||
if ($persist) {
|
||||
$this->persistCurrentUser();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
<?php
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
// {{{ICINGA_LICENSE_HEADER}}}}
|
||||
|
||||
namespace Icinga\Authentication;
|
||||
|
||||
use Icinga\Application\Config;
|
||||
use Icinga\Exception\NotReadableError;
|
||||
use Icinga\Util\String;
|
||||
|
||||
/**
|
||||
* Retrieve membership information for users and group
|
||||
*/
|
||||
class Membership
|
||||
{
|
||||
/**
|
||||
* Return a list of groups for an username
|
||||
*
|
||||
* @param string $username
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getGroupsByUsername($username)
|
||||
{
|
||||
$groups = array();
|
||||
try {
|
||||
$config = Config::app('memberships');
|
||||
} catch (NotReadableError $e) {
|
||||
return $groups;
|
||||
}
|
||||
foreach ($config as $section) {
|
||||
$users = String::trimSplit($section->users);
|
||||
if (in_array($username, $users)) {
|
||||
$groups = array_merge($groups, String::trimSplit($section->groups));
|
||||
}
|
||||
}
|
||||
return $groups;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
// {{{ICINGA_LICENSE_HEADER}}}
|
||||
// {{{ICINGA_LICENSE_HEADER}}}}
|
||||
|
||||
namespace Icinga\Authentication;
|
||||
|
||||
use Zend_Config;
|
||||
use Icinga\Authentication\Backend\DbUserGroupBackend;
|
||||
use Icinga\Authentication\Backend\IniUserGroupBackend;
|
||||
use Icinga\Data\ResourceFactory;
|
||||
use Icinga\Exception\ConfigurationError;
|
||||
use Icinga\Exception\IcingaException;
|
||||
use Icinga\User;
|
||||
|
||||
/**
|
||||
* Base class and factory for user group backends
|
||||
*/
|
||||
abstract class UserGroupBackend
|
||||
{
|
||||
/**
|
||||
* Name of the backend
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* Set the backend name
|
||||
*
|
||||
* @param string $name
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setName($name)
|
||||
{
|
||||
$this->name = (string) $name;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the backend name
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a user group backend
|
||||
*
|
||||
* @param string $name
|
||||
* @param Zend_Config $backendConfig
|
||||
*
|
||||
* @return DbUserGroupBackend|IniUserGroupBackend
|
||||
* @throws ConfigurationError If the backend configuration is invalid
|
||||
*/
|
||||
public static function create($name, Zend_Config $backendConfig)
|
||||
{
|
||||
if ($backendConfig->name !== null) {
|
||||
$name = $backendConfig->name;
|
||||
}
|
||||
if (($backendType = $backendConfig->backend) === null) {
|
||||
throw new ConfigurationError(
|
||||
'Configuration for user group backend \'%s\' is missing the \'backend\' directive',
|
||||
$name
|
||||
);
|
||||
}
|
||||
$backendType = strtolower($backendType);
|
||||
if (($resourceName = $backendConfig->resource) === null) {
|
||||
throw new ConfigurationError(
|
||||
'Configuration for user group backend \'%s\' is missing the \'resource\' directive',
|
||||
$name
|
||||
);
|
||||
}
|
||||
$resourceName = strtolower($resourceName);
|
||||
try {
|
||||
$resource = ResourceFactory::create($resourceName);
|
||||
} catch (IcingaException $e) {
|
||||
throw new ConfigurationError(
|
||||
'Can\'t create user group backend \'%s\'. An exception was thrown: %s',
|
||||
$resourceName,
|
||||
$e
|
||||
);
|
||||
}
|
||||
switch ($backendType) {
|
||||
case 'db':
|
||||
$backend = new DbUserGroupBackend($resource);
|
||||
break;
|
||||
case 'ini':
|
||||
$backend = new IniUserGroupBackend($resource);
|
||||
break;
|
||||
default:
|
||||
throw new ConfigurationError(
|
||||
'Can\'t create user group backend \'%s\'. Invalid backend type \'%s\'.',
|
||||
$name,
|
||||
$backendType
|
||||
);
|
||||
}
|
||||
$backend->setName($name);
|
||||
return $backend;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the groups the given user is a member of
|
||||
*
|
||||
* @param User $user
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
abstract public function getMemberships(User $user);
|
||||
}
|
|
@ -64,6 +64,9 @@ class DbConnection implements Selectable
|
|||
public function __construct(Zend_Config $config = null)
|
||||
{
|
||||
$this->config = $config;
|
||||
if (isset($config->prefix)) {
|
||||
$this->tablePrefix = $config->prefix;
|
||||
}
|
||||
$this->connect();
|
||||
}
|
||||
|
||||
|
|
|
@ -4,8 +4,9 @@
|
|||
|
||||
namespace Icinga\Data;
|
||||
|
||||
use Icinga\Exception\ProgrammingError;
|
||||
use Zend_Config;
|
||||
use Icinga\Application\Config;
|
||||
use Icinga\Exception\ProgrammingError;
|
||||
use Icinga\Util\ConfigAwareFactory;
|
||||
use Icinga\Exception\ConfigurationError;
|
||||
use Icinga\Data\Db\DbConnection;
|
||||
|
@ -120,6 +121,9 @@ class ResourceFactory implements ConfigAwareFactory
|
|||
case 'file':
|
||||
$resource = new FileReader($config);
|
||||
break;
|
||||
case 'ini':
|
||||
$resource = Config::fromIni($config->ini);
|
||||
break;
|
||||
default:
|
||||
throw new ConfigurationError(
|
||||
'Unsupported resource type "%s"',
|
||||
|
|
|
@ -84,7 +84,8 @@ class Logger
|
|||
|
||||
if (($level = $config->level) !== null) {
|
||||
if (is_numeric($level)) {
|
||||
if (! isset(static::$levels[(int) $level])) {
|
||||
$level = (int) $level;
|
||||
if (! isset(static::$levels[$level])) {
|
||||
throw new ConfigurationError(
|
||||
'Can\'t set logging level %d. Logging level is not defined. Use one of %s or one of the'
|
||||
. ' Logger\'s constants.',
|
||||
|
@ -92,7 +93,7 @@ class Logger
|
|||
implode(', ', array_keys(static::$levels))
|
||||
);
|
||||
}
|
||||
$this->level = static::$levels[(int) $level];
|
||||
$this->level = $level;
|
||||
} else {
|
||||
$level = strtoupper($level);
|
||||
$levels = array_flip(static::$levels);
|
||||
|
@ -155,7 +156,7 @@ class Logger
|
|||
*/
|
||||
public function log($level, $message)
|
||||
{
|
||||
if ($this->writer !== null && $this->level >= $level) {
|
||||
if ($this->writer !== null && $this->level <= $level) {
|
||||
$this->writer->log($level, $message);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,9 +72,11 @@ class DbStore extends PreferencesStore
|
|||
public function load()
|
||||
{
|
||||
try {
|
||||
$select = $this->getStoreConfig()->connection->select();
|
||||
$result = $select->from($this->table, array(self::COLUMN_PREFERENCE, self::COLUMN_VALUE))
|
||||
$select = $this->getStoreConfig()->connection->getDbAdapter()->select();
|
||||
$result = $select
|
||||
->from($this->table, array(self::COLUMN_PREFERENCE, self::COLUMN_VALUE))
|
||||
->where(self::COLUMN_USERNAME . ' = ?', $this->getUser()->getUsername())
|
||||
->query()
|
||||
->fetchAll();
|
||||
} catch (Exception $e) {
|
||||
throw new NotReadableError(
|
||||
|
@ -132,7 +134,7 @@ class DbStore extends PreferencesStore
|
|||
*/
|
||||
protected function insert(array $preferences)
|
||||
{
|
||||
$db = $this->getStoreConfig()->connection->getConnection();
|
||||
$db = $this->getStoreConfig()->connection->getDbAdapter();
|
||||
|
||||
try {
|
||||
foreach ($preferences as $key => $value) {
|
||||
|
@ -163,7 +165,7 @@ class DbStore extends PreferencesStore
|
|||
*/
|
||||
protected function update(array $preferences)
|
||||
{
|
||||
$db = $this->getStoreConfig()->connection->getConnection();
|
||||
$db = $this->getStoreConfig()->connection->getDbAdapter();
|
||||
|
||||
try {
|
||||
foreach ($preferences as $key => $value) {
|
||||
|
@ -194,7 +196,7 @@ class DbStore extends PreferencesStore
|
|||
*/
|
||||
protected function delete(array $preferenceKeys)
|
||||
{
|
||||
$db = $this->getStoreConfig()->connection->getConnection();
|
||||
$db = $this->getStoreConfig()->connection->getDbAdapter();
|
||||
|
||||
try {
|
||||
$db->delete(
|
||||
|
|
|
@ -342,7 +342,7 @@ class Monitoring_AlertsummaryController extends Controller
|
|||
$gridChart = new GridChart();
|
||||
|
||||
$gridChart->alignTopLeft();
|
||||
$gridChart->setAxisLabel('', t('Notifications'))
|
||||
$gridChart->setAxisLabel('', mt('monitoring', 'Notifications'))
|
||||
->setXAxis(new StaticAxis())
|
||||
->setAxisMin(null, 0)
|
||||
->setYAxis(new LinearUnit(10));
|
||||
|
@ -470,7 +470,7 @@ class Monitoring_AlertsummaryController extends Controller
|
|||
$gridChart = new GridChart();
|
||||
|
||||
$gridChart->alignTopLeft();
|
||||
$gridChart->setAxisLabel('', t('Notifications'))
|
||||
$gridChart->setAxisLabel('', mt('monitoring', 'Notifications'))
|
||||
->setXAxis(new StaticAxis())
|
||||
->setAxisMin(null, 0)
|
||||
->setYAxis(new LinearUnit(10));
|
||||
|
@ -530,12 +530,12 @@ class Monitoring_AlertsummaryController extends Controller
|
|||
$box = new SelectBox(
|
||||
'intervalBox',
|
||||
array(
|
||||
'1d' => t('One day'),
|
||||
'1w' => t('One week'),
|
||||
'1m' => t('One month'),
|
||||
'1y' => t('One year')
|
||||
'1d' => mt('monitoring', 'One day'),
|
||||
'1w' => mt('monitoring', 'One week'),
|
||||
'1m' => mt('monitoring', 'One month'),
|
||||
'1y' => mt('monitoring', 'One year')
|
||||
),
|
||||
t('Report interval'),
|
||||
mt('monitoring', 'Report interval'),
|
||||
'interval'
|
||||
);
|
||||
$box->applyRequest($this->getRequest());
|
||||
|
|
|
@ -143,35 +143,35 @@ class Monitoring_ChartController extends Controller
|
|||
}
|
||||
$this->view->chart = new GridChart();
|
||||
$this->view->chart->alignTopLeft();
|
||||
$this->view->chart->setAxisLabel('', t('Services'))
|
||||
$this->view->chart->setAxisLabel('', mt('monitoring', 'Services'))
|
||||
->setXAxis(new StaticAxis())
|
||||
->setAxisMin(null, 0);
|
||||
|
||||
$tooltip = t('<b>{title}:</b><br>{value} of {sum} services are {label}');
|
||||
$tooltip = mt('monitoring', '<b>{title}:</b><br>{value} of {sum} services are {label}');
|
||||
$this->view->chart->drawBars(
|
||||
array(
|
||||
'label' => t('Ok'),
|
||||
'label' => mt('monitoring', 'Ok'),
|
||||
'color' => '#44bb77',
|
||||
'stack' => 'stack1',
|
||||
'data' => $okBars,
|
||||
'tooltip' => $tooltip
|
||||
),
|
||||
array(
|
||||
'label' => t('Warning'),
|
||||
'label' => mt('monitoring', 'Warning'),
|
||||
'color' => '#ffaa44',
|
||||
'stack' => 'stack1',
|
||||
'data' => $warningBars,
|
||||
'tooltip' => $tooltip
|
||||
),
|
||||
array(
|
||||
'label' => t('Critical'),
|
||||
'label' => mt('monitoring', 'Critical'),
|
||||
'color' => '#ff5566',
|
||||
'stack' => 'stack1',
|
||||
'data' => $critBars,
|
||||
'tooltip' => $tooltip
|
||||
),
|
||||
array(
|
||||
'label' => t('Unknown'),
|
||||
'label' => mt('monitoring', 'Unknown'),
|
||||
'color' => '#dd66ff',
|
||||
'stack' => 'stack1',
|
||||
'data' => $unknownBars,
|
||||
|
@ -199,29 +199,29 @@ class Monitoring_ChartController extends Controller
|
|||
$hostgroup->hosts_unreachable_unhandled
|
||||
);
|
||||
}
|
||||
$tooltip = t('<b>{title}:</b><br> {value} of {sum} hosts are {label}');
|
||||
$tooltip = mt('monitoring', '<b>{title}:</b><br> {value} of {sum} hosts are {label}');
|
||||
$this->view->chart = new GridChart();
|
||||
$this->view->chart->alignTopLeft();
|
||||
$this->view->chart->setAxisLabel('', t('Hosts'))
|
||||
$this->view->chart->setAxisLabel('', mt('monitoring', 'Hosts'))
|
||||
->setXAxis(new StaticAxis())
|
||||
->setAxisMin(null, 0);
|
||||
$this->view->chart->drawBars(
|
||||
array(
|
||||
'label' => t('Up'),
|
||||
'label' => mt('monitoring', 'Up'),
|
||||
'color' => '#44bb77',
|
||||
'stack' => 'stack1',
|
||||
'data' => $upBars,
|
||||
'tooltip' => $tooltip
|
||||
),
|
||||
array(
|
||||
'label' => t('Down'),
|
||||
'label' => mt('monitoring', 'Down'),
|
||||
'color' => '#ff5566',
|
||||
'stack' => 'stack1',
|
||||
'data' => $downBars,
|
||||
'tooltip' => $tooltip
|
||||
),
|
||||
array(
|
||||
'label' => t('Unreachable'),
|
||||
'label' => mt('monitoring', 'Unreachable'),
|
||||
'color' => '#dd66ff',
|
||||
'stack' => 'stack1',
|
||||
'data' => $unreachableBars,
|
||||
|
@ -248,13 +248,13 @@ class Monitoring_ChartController extends Controller
|
|||
'colors' => array('#44bb77', '#ff4444', '#ff0000', '#ffff00', '#ffff33', '#E066FF', '#f099FF', '#fefefe'),
|
||||
'labels'=> array(
|
||||
$query->services_ok . ' Up Services',
|
||||
$query->services_warning_handled . t(' Warning Services (Handled)'),
|
||||
$query->services_warning_unhandled . t(' Warning Services (Unhandled)'),
|
||||
$query->services_critical_handled . t(' Down Services (Handled)'),
|
||||
$query->services_critical_unhandled . t(' Down Services (Unhandled)'),
|
||||
$query->services_unknown_handled . t(' Unreachable Services (Handled)'),
|
||||
$query->services_unknown_unhandled . t(' Unreachable Services (Unhandled)'),
|
||||
$query->services_pending . t(' Pending Services')
|
||||
$query->services_warning_handled . mt('monitoring', ' Warning Services (Handled)'),
|
||||
$query->services_warning_unhandled . mt('monitoring', ' Warning Services (Unhandled)'),
|
||||
$query->services_critical_handled . mt('monitoring', ' Down Services (Handled)'),
|
||||
$query->services_critical_unhandled . mt('monitoring', ' Down Services (Unhandled)'),
|
||||
$query->services_unknown_handled . mt('monitoring', ' Unreachable Services (Handled)'),
|
||||
$query->services_unknown_unhandled . mt('monitoring', ' Unreachable Services (Unhandled)'),
|
||||
$query->services_pending . mt('monitoring', ' Pending Services')
|
||||
)
|
||||
));
|
||||
}
|
||||
|
@ -274,12 +274,12 @@ class Monitoring_ChartController extends Controller
|
|||
),
|
||||
'colors' => array('#44bb77', '#ff4444', '#ff0000', '#E066FF', '#f099FF', '#fefefe'),
|
||||
'labels'=> array(
|
||||
(int) $query->hosts_up . t(' Up Hosts'),
|
||||
(int) $query->hosts_down_handled . t(' Down Hosts (Handled)'),
|
||||
(int) $query->hosts_down_unhandled . t(' Down Hosts (Unhandled)'),
|
||||
(int) $query->hosts_unreachable_handled . t(' Unreachable Hosts (Handled)'),
|
||||
(int) $query->hosts_unreachable_unhandled . t(' Unreachable Hosts (Unhandled)'),
|
||||
(int) $query->hosts_pending . t(' Pending Hosts')
|
||||
(int) $query->hosts_up . mt('monitoring', ' Up Hosts'),
|
||||
(int) $query->hosts_down_handled . mt('monitoring', ' Down Hosts (Handled)'),
|
||||
(int) $query->hosts_down_unhandled . mt('monitoring', ' Down Hosts (Unhandled)'),
|
||||
(int) $query->hosts_unreachable_handled . mt('monitoring', ' Unreachable Hosts (Handled)'),
|
||||
(int) $query->hosts_unreachable_unhandled . mt('monitoring', ' Unreachable Hosts (Unhandled)'),
|
||||
(int) $query->hosts_pending . mt('monitoring', ' Pending Hosts')
|
||||
)
|
||||
), array(
|
||||
'data' => array(
|
||||
|
@ -294,14 +294,14 @@ class Monitoring_ChartController extends Controller
|
|||
),
|
||||
'colors' => array('#44bb77', '#ff4444', '#ff0000', '#ffff00', '#ffff33', '#E066FF', '#f099FF', '#fefefe'),
|
||||
'labels'=> array(
|
||||
$query->services_ok . t(' Up Services'),
|
||||
$query->services_warning_handled . t(' Warning Services (Handled)'),
|
||||
$query->services_warning_unhandled . t(' Warning Services (Unhandled)'),
|
||||
$query->services_critical_handled . t(' Down Services (Handled)'),
|
||||
$query->services_critical_unhandled . t(' Down Services (Unhandled)'),
|
||||
$query->services_unknown_handled . t(' Unreachable Services (Handled)'),
|
||||
$query->services_unknown_unhandled . t(' Unreachable Services (Unhandled)'),
|
||||
$query->services_pending . t(' Pending Services')
|
||||
$query->services_ok . mt('monitoring', ' Up Services'),
|
||||
$query->services_warning_handled . mt('monitoring', ' Warning Services (Handled)'),
|
||||
$query->services_warning_unhandled . mt('monitoring', ' Warning Services (Unhandled)'),
|
||||
$query->services_critical_handled . mt('monitoring', ' Down Services (Handled)'),
|
||||
$query->services_critical_unhandled . mt('monitoring', ' Down Services (Unhandled)'),
|
||||
$query->services_unknown_handled . mt('monitoring', ' Unreachable Services (Handled)'),
|
||||
$query->services_unknown_unhandled . mt('monitoring', ' Unreachable Services (Unhandled)'),
|
||||
$query->services_pending . mt('monitoring', ' Pending Services')
|
||||
)
|
||||
));
|
||||
}
|
||||
|
|
|
@ -73,7 +73,7 @@ class Monitoring_ConfigController extends ModuleActionController
|
|||
}
|
||||
|
||||
if ($configForm->save()) {
|
||||
Notification::success(sprintf(t('Backend "%s" successfully removed.'), $backendName));
|
||||
Notification::success(sprintf(mt('monitoring', 'Backend "%s" successfully removed.'), $backendName));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -105,7 +105,7 @@ class Monitoring_ConfigController extends ModuleActionController
|
|||
}
|
||||
|
||||
if ($configForm->save()) {
|
||||
Notification::success(sprintf(t('Instance "%s" successfully removed.'), $instanceName));
|
||||
Notification::success(sprintf(mt('monitoring', 'Instance "%s" successfully removed.'), $instanceName));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@ class Monitoring_HostsController extends Controller
|
|||
$this->getTabs()->add(
|
||||
'show',
|
||||
array(
|
||||
'title' => t('Hosts'),
|
||||
'title' => mt('monitoring', 'Hosts'),
|
||||
'url' => Url::fromRequest()
|
||||
)
|
||||
)->activate('show');
|
||||
|
|
|
@ -395,10 +395,10 @@ class Monitoring_ListController extends Controller
|
|||
$orientationBox = new SelectBox(
|
||||
'orientation',
|
||||
array(
|
||||
'0' => t('Vertical'),
|
||||
'1' => t('Horizontal')
|
||||
'0' => mt('monitoring', 'Vertical'),
|
||||
'1' => mt('monitoring', 'Horizontal')
|
||||
),
|
||||
t('Orientation'),
|
||||
mt('monitoring', 'Orientation'),
|
||||
'horizontal'
|
||||
);
|
||||
$orientationBox->applyRequest($this->getRequest());
|
||||
|
|
|
@ -54,7 +54,7 @@ class Monitoring_MultiController extends Controller
|
|||
$this->view->pie = $this->createPie(
|
||||
$this->view->states,
|
||||
$this->view->getHelper('MonitoringState')->getHostStateColors(),
|
||||
t('Host State')
|
||||
mt('monitoring', 'Host State')
|
||||
);
|
||||
|
||||
// Handle configuration changes
|
||||
|
@ -117,12 +117,12 @@ class Monitoring_MultiController extends Controller
|
|||
$this->view->service_pie = $this->createPie(
|
||||
$this->view->service_states,
|
||||
$this->view->getHelper('MonitoringState')->getServiceStateColors(),
|
||||
t('Service State')
|
||||
mt('monitoring', 'Service State')
|
||||
);
|
||||
$this->view->host_pie = $this->createPie(
|
||||
$this->view->host_states,
|
||||
$this->view->getHelper('MonitoringState')->getHostStateColors(),
|
||||
t('Host State')
|
||||
mt('monitoring', 'Host State')
|
||||
);
|
||||
$this->view->errors = $errors;
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ class Monitoring_ServicesController extends Controller
|
|||
$this->getTabs()->add(
|
||||
'show',
|
||||
array(
|
||||
'title' => t('Services'),
|
||||
'title' => mt('monitoring', 'Services'),
|
||||
'url' => Url::fromRequest()
|
||||
)
|
||||
)->activate('show');
|
||||
|
|
|
@ -35,32 +35,32 @@ class Monitoring_TimelineController extends Controller
|
|||
array(
|
||||
'notify' => array(
|
||||
'detailUrl' => $detailUrl,
|
||||
'label' => t('Notifications'),
|
||||
'label' => mt('monitoring', 'Notifications'),
|
||||
'color' => '#3a71ea'
|
||||
),
|
||||
'hard_state' => array(
|
||||
'detailUrl' => $detailUrl,
|
||||
'label' => t('Hard state changes'),
|
||||
'label' => mt('monitoring', 'Hard state changes'),
|
||||
'color' => '#ff7000'
|
||||
),
|
||||
'comment' => array(
|
||||
'detailUrl' => $detailUrl,
|
||||
'label' => t('Comments'),
|
||||
'label' => mt('monitoring', 'Comments'),
|
||||
'color' => '#79bdba'
|
||||
),
|
||||
'ack' => array(
|
||||
'detailUrl' => $detailUrl,
|
||||
'label' => t('Acknowledgements'),
|
||||
'label' => mt('monitoring', 'Acknowledgements'),
|
||||
'color' => '#a2721d'
|
||||
),
|
||||
'dt_start' => array(
|
||||
'detailUrl' => $detailUrl,
|
||||
'label' => t('Started downtimes'),
|
||||
'label' => mt('monitoring', 'Started downtimes'),
|
||||
'color' => '#8e8e8e'
|
||||
),
|
||||
'dt_end' => array(
|
||||
'detailUrl' => $detailUrl,
|
||||
'label' => t('Ended downtimes'),
|
||||
'label' => mt('monitoring', 'Ended downtimes'),
|
||||
'color' => '#d5d6ad'
|
||||
)
|
||||
)
|
||||
|
@ -88,13 +88,13 @@ class Monitoring_TimelineController extends Controller
|
|||
$box = new SelectBox(
|
||||
'intervalBox',
|
||||
array(
|
||||
'4h' => t('4 Hours'),
|
||||
'1d' => t('One day'),
|
||||
'1w' => t('One week'),
|
||||
'1m' => t('One month'),
|
||||
'1y' => t('One year')
|
||||
'4h' => mt('monitoring', '4 Hours'),
|
||||
'1d' => mt('monitoring', 'One day'),
|
||||
'1w' => mt('monitoring', 'One week'),
|
||||
'1m' => mt('monitoring', 'One month'),
|
||||
'1y' => mt('monitoring', 'One year')
|
||||
),
|
||||
t('TimeLine interval'),
|
||||
mt('monitoring', 'TimeLine interval'),
|
||||
'interval'
|
||||
);
|
||||
$box->applyRequest($this->getRequest());
|
||||
|
|
|
@ -29,7 +29,7 @@ class BackendConfigForm extends ConfigForm
|
|||
public function init()
|
||||
{
|
||||
$this->setName('form_config_monitoring_backends');
|
||||
$this->setSubmitLabel(t('Save Changes'));
|
||||
$this->setSubmitLabel(mt('monitoring', 'Save Changes'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -51,7 +51,7 @@ class BackendConfigForm extends ConfigForm
|
|||
}
|
||||
|
||||
if (empty($resources)) {
|
||||
throw new ConfigurationError(t('Could not find any valid monitoring backend resources'));
|
||||
throw new ConfigurationError(mt('monitoring', 'Could not find any valid monitoring backend resources'));
|
||||
}
|
||||
|
||||
$this->resources = $resources;
|
||||
|
@ -73,9 +73,9 @@ class BackendConfigForm extends ConfigForm
|
|||
{
|
||||
$name = isset($values['name']) ? $values['name'] : '';
|
||||
if (! $name) {
|
||||
throw new InvalidArgumentException(t('Monitoring backend name missing'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Monitoring backend name missing'));
|
||||
} elseif ($this->config->get($name) !== null) {
|
||||
throw new InvalidArgumentException(t('Monitoring backend already exists'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Monitoring backend already exists'));
|
||||
}
|
||||
|
||||
unset($values['name']);
|
||||
|
@ -96,11 +96,11 @@ class BackendConfigForm extends ConfigForm
|
|||
public function edit($name, array $values)
|
||||
{
|
||||
if (! $name) {
|
||||
throw new InvalidArgumentException(t('Old monitoring backend name missing'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Old monitoring backend name missing'));
|
||||
} elseif (! ($newName = isset($values['name']) ? $values['name'] : '')) {
|
||||
throw new InvalidArgumentException(t('New monitoring backend name missing'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'New monitoring backend name missing'));
|
||||
} elseif (($backendConfig = $this->config->get($name)) === null) {
|
||||
throw new InvalidArgumentException(t('Unknown monitoring backend provided'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Unknown monitoring backend provided'));
|
||||
}
|
||||
|
||||
unset($values['name']);
|
||||
|
@ -121,9 +121,9 @@ class BackendConfigForm extends ConfigForm
|
|||
public function remove($name)
|
||||
{
|
||||
if (! $name) {
|
||||
throw new InvalidArgumentException(t('Monitoring backend name missing'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Monitoring backend name missing'));
|
||||
} elseif (($backendConfig = $this->config->get($name)) === null) {
|
||||
throw new InvalidArgumentException(t('Unknown monitoring backend provided'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Unknown monitoring backend provided'));
|
||||
}
|
||||
|
||||
unset($this->config->{$name});
|
||||
|
@ -141,10 +141,10 @@ class BackendConfigForm extends ConfigForm
|
|||
try {
|
||||
if ($monitoringBackend === null) { // create new backend
|
||||
$this->add($this->getValues());
|
||||
$message = t('Monitoring backend "%s" has been successfully created');
|
||||
$message = mt('monitoring', 'Monitoring backend "%s" has been successfully created');
|
||||
} else { // edit existing backend
|
||||
$this->edit($monitoringBackend, $this->getValues());
|
||||
$message = t('Monitoring backend "%s" has been successfully changed');
|
||||
$message = mt('monitoring', 'Monitoring backend "%s" has been successfully changed');
|
||||
}
|
||||
} catch (InvalidArgumentException $e) {
|
||||
Notification::error($e->getMessage());
|
||||
|
@ -170,9 +170,9 @@ class BackendConfigForm extends ConfigForm
|
|||
$monitoringBackend = $request->getQuery('backend');
|
||||
if ($monitoringBackend !== null) {
|
||||
if ($monitoringBackend === '') {
|
||||
throw new ConfigurationError(t('Monitoring backend name missing'));
|
||||
throw new ConfigurationError(mt('monitoring', 'Monitoring backend name missing'));
|
||||
} elseif (false === isset($this->config->{$monitoringBackend})) {
|
||||
throw new ConfigurationError(t('Unknown monitoring backend provided'));
|
||||
throw new ConfigurationError(mt('monitoring', 'Unknown monitoring backend provided'));
|
||||
}
|
||||
|
||||
$backendConfig = $this->config->{$monitoringBackend}->toArray();
|
||||
|
@ -201,7 +201,7 @@ class BackendConfigForm extends ConfigForm
|
|||
'disabled',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Disable This Backend')
|
||||
'label' => mt('monitoring', 'Disable This Backend')
|
||||
)
|
||||
);
|
||||
$this->addElement(
|
||||
|
@ -209,8 +209,8 @@ class BackendConfigForm extends ConfigForm
|
|||
'name',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Backend Name'),
|
||||
'description' => t('The identifier of this backend')
|
||||
'label' => mt('monitoring', 'Backend Name'),
|
||||
'description' => mt('monitoring', 'The identifier of this backend')
|
||||
)
|
||||
);
|
||||
$this->addElement(
|
||||
|
@ -219,8 +219,8 @@ class BackendConfigForm extends ConfigForm
|
|||
array(
|
||||
'required' => true,
|
||||
'autosubmit' => true,
|
||||
'label' => t('Backend Type'),
|
||||
'description' => t('The data source used for retrieving monitoring information'),
|
||||
'label' => mt('monitoring', 'Backend Type'),
|
||||
'description' => mt('monitoring', 'The data source used for retrieving monitoring information'),
|
||||
'multiOptions' => $resourceTypes,
|
||||
'value' => $resourceType
|
||||
)
|
||||
|
@ -230,8 +230,8 @@ class BackendConfigForm extends ConfigForm
|
|||
'resource',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Resource'),
|
||||
'description' => t('The resource to use'),
|
||||
'label' => mt('monitoring', 'Resource'),
|
||||
'description' => mt('monitoring', 'The resource to use'),
|
||||
'multiOptions' => $this->resources[$resourceType]
|
||||
)
|
||||
);
|
||||
|
|
|
@ -9,7 +9,8 @@ use Icinga\Web\Form;
|
|||
class LocalInstanceForm extends Form
|
||||
{
|
||||
/**
|
||||
* Initialize this form
|
||||
* (non-PHPDoc)
|
||||
* @see Form::init() For the method documentation.
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
|
@ -17,21 +18,21 @@ class LocalInstanceForm extends Form
|
|||
}
|
||||
|
||||
/**
|
||||
* @see Form::createElements()
|
||||
* (non-PHPDoc)
|
||||
* @see Form::createElements() For the method documentation.
|
||||
*/
|
||||
public function createElements(array $formData)
|
||||
public function createElements(array $formData = array())
|
||||
{
|
||||
$this->addElement(
|
||||
'text',
|
||||
'path',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Local Filepath'),
|
||||
'label' => mt('monitoring', 'Command File'),
|
||||
'value' => '/usr/local/icinga/var/rw/icinga.cmd',
|
||||
'description' => t('The file path where the icinga commandpipe can be found')
|
||||
'description' => mt('monitoring', 'Path to the local Icinga command file')
|
||||
)
|
||||
);
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,60 +9,65 @@ use Icinga\Web\Form\Element\Number;
|
|||
|
||||
class RemoteInstanceForm extends Form
|
||||
{
|
||||
/**
|
||||
* (non-PHPDoc)
|
||||
* @see Form::init() For the method documentation.
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
$this->setName('form_config_monitoring_instance_remote');
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Form::createElements()
|
||||
* (non-PHPDoc)
|
||||
* @see Form::createElements() For the method documentation.
|
||||
*/
|
||||
public function createElements(array $formData)
|
||||
public function createElements(array $formData = array())
|
||||
{
|
||||
$this->addElement(
|
||||
'text',
|
||||
'host',
|
||||
$this->addElements(array(
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Remote Host'),
|
||||
'description' => t(
|
||||
'Enter the hostname or address of the machine on which the icinga instance is running'
|
||||
'text',
|
||||
'host',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => mt('monitoring', 'Host'),
|
||||
'description' => mt('monitoring',
|
||||
'Hostname or address of the remote Icinga instance'
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
$this->addElement(
|
||||
),
|
||||
new Number(
|
||||
array(
|
||||
'required' => true,
|
||||
'name' => 'port',
|
||||
'label' => t('Remote SSH Port'),
|
||||
'description' => t('Enter the ssh port to use for connecting to the remote icinga instance'),
|
||||
'label' => mt('monitoring', 'Port'),
|
||||
'description' => mt('monitoring', 'SSH port to connect to on the remote Icinga instance'),
|
||||
'value' => 22
|
||||
)
|
||||
)
|
||||
);
|
||||
$this->addElement(
|
||||
'text',
|
||||
'user',
|
||||
),
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Remote SSH User'),
|
||||
'description' => t(
|
||||
'Enter the username to use for connecting to the remote machine or leave blank for default'
|
||||
'text',
|
||||
'user',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => mt('monitoring', 'User'),
|
||||
'description' => mt('monitoring',
|
||||
'User to log in as on the remote Icinga instance. Please note that key-based SSH login must be'
|
||||
. ' possible for this user'
|
||||
)
|
||||
)
|
||||
),
|
||||
array(
|
||||
'text',
|
||||
'path',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => mt('monitoring', 'Command File'),
|
||||
'value' => '/usr/local/icinga/var/rw/icinga.cmd',
|
||||
'description' => mt('monitoring', 'Path to the Icinga command file on the remote Icinga instance')
|
||||
)
|
||||
)
|
||||
);
|
||||
$this->addElement(
|
||||
'text',
|
||||
'path',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Remote Filepath'),
|
||||
'value' => '/usr/local/icinga/var/rw/icinga.cmd',
|
||||
'description' => t('The file path where the icinga commandpipe can be found')
|
||||
)
|
||||
);
|
||||
|
||||
));
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,12 +5,14 @@
|
|||
namespace Icinga\Module\Monitoring\Form\Config;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use Icinga\Web\Request;
|
||||
use Icinga\Form\ConfigForm;
|
||||
use Icinga\Web\Notification;
|
||||
use Icinga\Exception\ConfigurationError;
|
||||
use Icinga\Form\ConfigForm;
|
||||
use Icinga\Module\Monitoring\Command\Transport\LocalCommandFile;
|
||||
use Icinga\Module\Monitoring\Command\Transport\RemoteCommandFile;
|
||||
use Icinga\Module\Monitoring\Form\Config\Instance\LocalInstanceForm;
|
||||
use Icinga\Module\Monitoring\Form\Config\Instance\RemoteInstanceForm;
|
||||
use Icinga\Web\Notification;
|
||||
use Icinga\Web\Request;
|
||||
|
||||
/**
|
||||
* Form for modifying/creating monitoring instances
|
||||
|
@ -18,32 +20,39 @@ use Icinga\Module\Monitoring\Form\Config\Instance\RemoteInstanceForm;
|
|||
class InstanceConfigForm extends ConfigForm
|
||||
{
|
||||
/**
|
||||
* Initialize this form
|
||||
* (non-PHPDoc)
|
||||
* @see Form::init() For the method documentation.
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
$this->setName('form_config_monitoring_instance');
|
||||
$this->setSubmitLabel(t('Save Changes'));
|
||||
$this->setSubmitLabel(mt('monitoring', 'Save Changes'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a form object for the given instance type
|
||||
* Get a form object for the given instance type
|
||||
*
|
||||
* @param string $type The instance type for which to return a form
|
||||
* @param string $type The instance type for which to return a form
|
||||
*
|
||||
* @return Form
|
||||
* @return LocalInstanceForm|RemoteInstanceForm
|
||||
*
|
||||
* @throws InvalidArgumentException In case the given instance type is invalid
|
||||
*/
|
||||
public function getInstanceForm($type)
|
||||
{
|
||||
if ($type === 'local') {
|
||||
return new LocalInstanceForm();
|
||||
} elseif ($type === 'remote') {
|
||||
return new RemoteInstanceForm();
|
||||
} else {
|
||||
throw new InvalidArgumentException(sprintf(t('Invalid instance type "%s" provided'), $type));
|
||||
switch (strtolower($type)) {
|
||||
case LocalCommandFile::TRANSPORT:
|
||||
$form = new LocalInstanceForm();
|
||||
break;
|
||||
case RemoteCommandFile::TRANSPORT;
|
||||
$form = new RemoteInstanceForm();
|
||||
break;
|
||||
default:
|
||||
throw new InvalidArgumentException(
|
||||
sprintf(mt('monitoring', 'Invalid instance type "%s" given'), $type)
|
||||
);
|
||||
}
|
||||
return $form;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -61,9 +70,10 @@ class InstanceConfigForm extends ConfigForm
|
|||
{
|
||||
$name = isset($values['name']) ? $values['name'] : '';
|
||||
if (! $name) {
|
||||
throw new InvalidArgumentException(t('Instance name missing'));
|
||||
} elseif ($this->config->get($name) !== null) {
|
||||
throw new InvalidArgumentException(t('Instance already exists'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Instance name missing'));
|
||||
}
|
||||
if (isset($this->config->{$name})) {
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Instance already exists'));
|
||||
}
|
||||
|
||||
unset($values['name']);
|
||||
|
@ -84,16 +94,16 @@ class InstanceConfigForm extends ConfigForm
|
|||
public function edit($name, array $values)
|
||||
{
|
||||
if (! $name) {
|
||||
throw new InvalidArgumentException(t('Old instance name missing'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Old instance name missing'));
|
||||
} elseif (! ($newName = isset($values['name']) ? $values['name'] : '')) {
|
||||
throw new InvalidArgumentException(t('New instance name missing'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'New instance name missing'));
|
||||
} elseif (! ($instanceConfig = $this->config->get($name))) {
|
||||
throw new InvalidArgumentException(t('Unknown instance name provided'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Unknown instance name provided'));
|
||||
}
|
||||
|
||||
unset($values['name']);
|
||||
unset($this->config->{$name});
|
||||
$this->config->{$newName} = array_merge($instanceConfig->toArray(), $values);
|
||||
$this->config->{$newName} = $values;
|
||||
return $this->config->{$newName};
|
||||
}
|
||||
|
||||
|
@ -102,16 +112,16 @@ class InstanceConfigForm extends ConfigForm
|
|||
*
|
||||
* @param string $name The name of the resource to remove
|
||||
*
|
||||
* @return array The removed resource confguration
|
||||
* @return array The removed resource configuration
|
||||
*
|
||||
* @throws InvalidArgumentException In case the resource name is missing or invalid
|
||||
*/
|
||||
public function remove($name)
|
||||
{
|
||||
if (! $name) {
|
||||
throw new InvalidArgumentException(t('Instance name missing'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Instance name missing'));
|
||||
} elseif (! ($instanceConfig = $this->config->get($name))) {
|
||||
throw new InvalidArgumentException(t('Unknown instance name provided'));
|
||||
throw new InvalidArgumentException(mt('monitoring', 'Unknown instance name provided'));
|
||||
}
|
||||
|
||||
unset($this->config->{$name});
|
||||
|
@ -119,19 +129,40 @@ class InstanceConfigForm extends ConfigForm
|
|||
}
|
||||
|
||||
/**
|
||||
* @see Form::onSuccess()
|
||||
* @see Form::onRequest() For the method documentation.
|
||||
* @throws ConfigurationError In case the instance name is missing or invalid
|
||||
*/
|
||||
public function onRequest(Request $request)
|
||||
{
|
||||
$instanceName = $request->getQuery('instance');
|
||||
if ($instanceName !== null) {
|
||||
if (! $instanceName) {
|
||||
throw new ConfigurationError(mt('monitoring', 'Instance name missing'));
|
||||
}
|
||||
if (! isset($this->config->{$instanceName})) {
|
||||
throw new ConfigurationError(mt('monitoring', 'Unknown instance name given'));
|
||||
}
|
||||
|
||||
$instanceConfig = $this->config->{$instanceName}->toArray();
|
||||
$instanceConfig['name'] = $instanceName;
|
||||
$this->populate($instanceConfig);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* (non-PHPDoc)
|
||||
* @see Form::onSuccess() For the method documentation.
|
||||
*/
|
||||
public function onSuccess(Request $request)
|
||||
{
|
||||
$instanceName = $request->getQuery('instance');
|
||||
|
||||
try {
|
||||
if ($instanceName === null) { // create new instance
|
||||
$this->add($this->getValues());
|
||||
$message = t('Instance "%s" created successfully.');
|
||||
$message = mt('monitoring', 'Instance "%s" created successfully.');
|
||||
} else { // edit existing instance
|
||||
$this->edit($instanceName, $this->getValues());
|
||||
$message = t('Instance "%s" edited successfully.');
|
||||
$message = mt('monitoring', 'Instance "%s" edited successfully.');
|
||||
}
|
||||
} catch (InvalidArgumentException $e) {
|
||||
Notification::error($e->getMessage());
|
||||
|
@ -146,63 +177,37 @@ class InstanceConfigForm extends ConfigForm
|
|||
}
|
||||
|
||||
/**
|
||||
* @see Form::onRequest()
|
||||
*
|
||||
* @throws ConfigurationError In case the instance name is missing or invalid
|
||||
* (non-PHPDoc)
|
||||
* @see Form::createElements() For the method documentation.
|
||||
*/
|
||||
public function onRequest(Request $request)
|
||||
public function createElements(array $formData = array())
|
||||
{
|
||||
$instanceName = $request->getQuery('instance');
|
||||
if ($instanceName !== null) {
|
||||
if (! $instanceName) {
|
||||
throw new ConfigurationError(t('Instance name missing'));
|
||||
} elseif (false === isset($this->config->{$instanceName})) {
|
||||
throw new ConfigurationError(t('Unknown instance name provided'));
|
||||
}
|
||||
$instanceType = isset($formData['transport']) ? $formData['transport'] : LocalCommandFile::TRANSPORT;
|
||||
|
||||
$instanceConfig = $this->config->{$instanceName}->toArray();
|
||||
$instanceConfig['name'] = $instanceName;
|
||||
if (isset($instanceConfig['host'])) {
|
||||
// Necessary as we have no config directive for setting the instance's type
|
||||
$instanceConfig['type'] = 'remote';
|
||||
}
|
||||
$this->populate($instanceConfig);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see Form::createElements()
|
||||
*/
|
||||
public function createElements(array $formData)
|
||||
{
|
||||
$instanceType = isset($formData['type']) ? $formData['type'] : 'local';
|
||||
|
||||
$this->addElement(
|
||||
'text',
|
||||
'name',
|
||||
$this->addElements(array(
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Instance Name')
|
||||
)
|
||||
);
|
||||
$this->addElement(
|
||||
'select',
|
||||
'type',
|
||||
'text',
|
||||
'name',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => mt('monitoring', 'Instance Name')
|
||||
)
|
||||
),
|
||||
array(
|
||||
'required' => true,
|
||||
'ignore' => true,
|
||||
'autosubmit' => true,
|
||||
'label' => t('Instance Type'),
|
||||
'description' => t(
|
||||
'When configuring a remote host, you need to setup passwordless key authentication'
|
||||
),
|
||||
'multiOptions' => array(
|
||||
'local' => t('Local Command Pipe'),
|
||||
'remote' => t('Remote Command Pipe')
|
||||
),
|
||||
'value' => $instanceType
|
||||
'select',
|
||||
'transport',
|
||||
array(
|
||||
'required' => true,
|
||||
'autosubmit' => true,
|
||||
'label' => mt('monitoring', 'Instance Type'),
|
||||
'multiOptions' => array(
|
||||
LocalCommandFile::TRANSPORT => mt('monitoring', 'Local Command File'),
|
||||
RemoteCommandFile::TRANSPORT => mt('monitoring', 'Remote Command File')
|
||||
),
|
||||
'value' => $instanceType
|
||||
)
|
||||
)
|
||||
);
|
||||
));
|
||||
|
||||
$this->addElements($this->getInstanceForm($instanceType)->createElements($formData)->getElements());
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ class SecurityConfigForm extends ConfigForm
|
|||
public function init()
|
||||
{
|
||||
$this->setName('form_config_monitoring_security');
|
||||
$this->setSubmitLabel(t('Save Changes'));
|
||||
$this->setSubmitLabel(mt('monitoring', 'Save Changes'));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -30,7 +30,7 @@ class SecurityConfigForm extends ConfigForm
|
|||
$this->config->security = $this->getValues();
|
||||
|
||||
if ($this->save()) {
|
||||
Notification::success(t('New security configuration has successfully been stored'));
|
||||
Notification::success(mt('monitoring', 'New security configuration has successfully been stored'));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
@ -56,8 +56,8 @@ class SecurityConfigForm extends ConfigForm
|
|||
'protected_customvars',
|
||||
array(
|
||||
'required' => true,
|
||||
'label' => t('Protected Custom Variables'),
|
||||
'description' => t(
|
||||
'label' => mt('monitoring', 'Protected Custom Variables'),
|
||||
'description' => mt('monitoring',
|
||||
'Comma separated case insensitive list of protected custom variables.'
|
||||
. ' Use * as a placeholder for zero or more wildcard characters.'
|
||||
. ' Existance of those custom variables will be shown, but their values will be masked.'
|
||||
|
|
|
@ -56,14 +56,14 @@ class StatehistoryForm extends Form
|
|||
'select',
|
||||
'from',
|
||||
array(
|
||||
'label' => t('From'),
|
||||
'label' => mt('monitoring', 'From'),
|
||||
'value' => $this->getRequest()->getParam('from', strtotime('3 months ago')),
|
||||
'multiOptions' => array(
|
||||
strtotime('midnight 3 months ago') => t('3 Months'),
|
||||
strtotime('midnight 4 months ago') => t('4 Months'),
|
||||
strtotime('midnight 8 months ago') => t('8 Months'),
|
||||
strtotime('midnight 12 months ago') => t('1 Year'),
|
||||
strtotime('midnight 24 months ago') => t('2 Years')
|
||||
strtotime('midnight 3 months ago') => mt('monitoring', '3 Months'),
|
||||
strtotime('midnight 4 months ago') => mt('monitoring', '4 Months'),
|
||||
strtotime('midnight 8 months ago') => mt('monitoring', '8 Months'),
|
||||
strtotime('midnight 12 months ago') => mt('monitoring', '1 Year'),
|
||||
strtotime('midnight 24 months ago') => mt('monitoring', '2 Years')
|
||||
),
|
||||
'class' => 'autosubmit'
|
||||
)
|
||||
|
@ -72,10 +72,10 @@ class StatehistoryForm extends Form
|
|||
'select',
|
||||
'to',
|
||||
array(
|
||||
'label' => t('To'),
|
||||
'label' => mt('monitoring', 'To'),
|
||||
'value' => $this->getRequest()->getParam('to', time()),
|
||||
'multiOptions' => array(
|
||||
time() => t('Today')
|
||||
time() => mt('monitoring', 'Today')
|
||||
),
|
||||
'class' => 'autosubmit'
|
||||
)
|
||||
|
@ -86,11 +86,11 @@ class StatehistoryForm extends Form
|
|||
'select',
|
||||
'objecttype',
|
||||
array(
|
||||
'label' => t('Object type'),
|
||||
'label' => mt('monitoring', 'Object type'),
|
||||
'value' => $objectType,
|
||||
'multiOptions' => array(
|
||||
'services' => t('Services'),
|
||||
'hosts' => t('Hosts')
|
||||
'services' => mt('monitoring', 'Services'),
|
||||
'hosts' => mt('monitoring', 'Hosts')
|
||||
),
|
||||
'class' => 'autosubmit'
|
||||
)
|
||||
|
@ -104,13 +104,13 @@ class StatehistoryForm extends Form
|
|||
'select',
|
||||
'state',
|
||||
array(
|
||||
'label' => t('State'),
|
||||
'label' => mt('monitoring', 'State'),
|
||||
'value' => $serviceState,
|
||||
'multiOptions' => array(
|
||||
'cnt_critical_hard' => t('Critical'),
|
||||
'cnt_warning_hard' => t('Warning'),
|
||||
'cnt_unknown_hard' => t('Unknown'),
|
||||
'cnt_ok' => t('Ok')
|
||||
'cnt_critical_hard' => mt('monitoring', 'Critical'),
|
||||
'cnt_warning_hard' => mt('monitoring', 'Warning'),
|
||||
'cnt_unknown_hard' => mt('monitoring', 'Unknown'),
|
||||
'cnt_ok' => mt('monitoring', 'Ok')
|
||||
),
|
||||
'class' => 'autosubmit'
|
||||
)
|
||||
|
@ -124,12 +124,12 @@ class StatehistoryForm extends Form
|
|||
'select',
|
||||
'state',
|
||||
array(
|
||||
'label' => t('State'),
|
||||
'label' => mt('monitoring', 'State'),
|
||||
'value' => $hostState,
|
||||
'multiOptions' => array(
|
||||
'cnt_up' => t('Up'),
|
||||
'cnt_down_hard' => t('Down'),
|
||||
'cnt_unreachable_hard' => t('Unreachable')
|
||||
'cnt_up' => mt('monitoring', 'Up'),
|
||||
'cnt_down_hard' => mt('monitoring', 'Down'),
|
||||
'cnt_unreachable_hard' => mt('monitoring', 'Unreachable')
|
||||
),
|
||||
'class' => 'autosubmit'
|
||||
)
|
||||
|
@ -143,7 +143,7 @@ class StatehistoryForm extends Form
|
|||
'escape' => false,
|
||||
'value' => '1',
|
||||
'class' => 'btn btn-cta btn-common',
|
||||
'label' => t('Apply')
|
||||
'label' => mt('monitoring', 'Apply')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<h4><?= t('List Of Supported Commands'); ?></h4>
|
||||
<h4><?= mt('monitoring', 'List Of Supported Commands'); ?></h4>
|
||||
<ul>
|
||||
<?php foreach($this->commands as $command): ?>
|
||||
<li>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
</div>
|
||||
|
||||
<div class="content" data-base-target="_next">
|
||||
<h1>Monitoring Backends</h1>
|
||||
<h1><?= $this->translate('Monitoring Backends') ?></h1>
|
||||
<p>
|
||||
<a href="<?= $this->href('/monitoring/config/createbackend'); ?>">
|
||||
<?= $this->icon('create.png'); ?> <?= $this->translate('Create New Monitoring Backend'); ?>
|
||||
|
@ -15,7 +15,7 @@
|
|||
<th style="width: 5em"><?= $this->translate('Remove'); ?></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($this->backendsConfig as $backendName => $config): ?>
|
||||
<?php foreach ($this->backendsConfig as $backendName => $config): ?>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="<?= $this->href('/monitoring/config/editbackend', array('backend' => $backendName)); ?>">
|
||||
|
@ -32,10 +32,10 @@
|
|||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
<h1>Monitoring Instances</h1>
|
||||
<h1><?= $this->translate('Monitoring Instances') ?></h1>
|
||||
<p>
|
||||
<a href="<?= $this->href('/monitoring/config/createinstance'); ?>">
|
||||
<?= $this->icon('create.png'); ?> <?= $this->translate('Create New Instance'); ?>
|
||||
|
@ -47,7 +47,7 @@
|
|||
<th style="width: 5em"><?= $this->translate('Remove'); ?></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($this->instancesConfig as $instanceName => $config): ?>
|
||||
<?php foreach ($this->instancesConfig as $instanceName => $config): ?>
|
||||
<tr>
|
||||
<td>
|
||||
<a href="<?= $this->href('/monitoring/config/editinstance', array('instance' => $instanceName)); ?>">
|
||||
|
@ -64,7 +64,7 @@
|
|||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<?php
|
||||
if (count($groupData) === 0) {
|
||||
echo t('No contacts matching the filter');
|
||||
echo mt('monitoring', 'No contacts matching the filter');
|
||||
}
|
||||
|
||||
foreach ($groupData as $groupName => $groupInfo): ?>
|
||||
|
|
|
@ -13,7 +13,7 @@ $contactHelper = $this->getHelper('ContactFlags');
|
|||
<div data-base-target="_next" class="content contacts">
|
||||
<?php
|
||||
if (count($contacts) === 0) {
|
||||
echo t('No contacts matching the filter');
|
||||
echo mt('monitoring', 'No contacts matching the filter');
|
||||
return;
|
||||
}
|
||||
foreach ($contacts as $contact): ?>
|
||||
|
@ -25,12 +25,12 @@ $contactHelper = $this->getHelper('ContactFlags');
|
|||
) ?>"><strong><?= $contact->contact_name ?></strong></a> (<?= $contact->contact_alias ?>)
|
||||
<div><?= sprintf(
|
||||
'%1$s: <a href="mailto:%2$s">%2$s</a>',
|
||||
t('Email'),
|
||||
mt('monitoring', 'Email'),
|
||||
$this->escape($contact->contact_email)
|
||||
) ?></div>
|
||||
<?php if ($contact->contact_pager): ?>
|
||||
<div>
|
||||
<?= t('Pager') ?>:
|
||||
<?= mt('monitoring', 'Pager') ?>:
|
||||
<?= $this->escape($contact->contact_pager) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
@ -38,13 +38,13 @@ $contactHelper = $this->getHelper('ContactFlags');
|
|||
<div class="notification-periods">
|
||||
<?php if ($contact->contact_notify_service_timeperiod): ?>
|
||||
<div>
|
||||
<?= t('Service notification period') ?>:
|
||||
<?= mt('monitoring', 'Service notification period') ?>:
|
||||
<?= $this->escape($contact->contact_notify_service_timeperiod) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($contact->contact_notify_host_timeperiod): ?>
|
||||
<div>
|
||||
<?= t('Host notification period') ?>:
|
||||
<?= mt('monitoring', 'Host notification period') ?>:
|
||||
<?= $this->escape($contact->contact_notify_host_timeperiod) ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
|
|
@ -109,7 +109,7 @@
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<? endforeach ?>
|
||||
<?php endforeach ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<?php
|
||||
if (count($hostgroups) === 0) {
|
||||
echo t('No host groups matching the filter');
|
||||
echo mt('monitoring', 'No host groups matching the filter');
|
||||
}
|
||||
?>
|
||||
<?php foreach($hostgroups as $h): ?>
|
||||
|
|
|
@ -26,7 +26,7 @@ if (empty($this->notifications)) {
|
|||
<?php
|
||||
|
||||
if (count($notifications) === 0) {
|
||||
echo t('No notifications matching the filter');
|
||||
echo mt('monitoring', 'No notifications matching the filter');
|
||||
}
|
||||
foreach ($notifications as $notification):
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
<?php
|
||||
if (count($servicegroups) === 0) {
|
||||
echo t('No service groups matching the filter');
|
||||
echo mt('monitoring', 'No service groups matching the filter');
|
||||
}
|
||||
?>
|
||||
<?php foreach($servicegroups as $servicegroup): ?>
|
||||
|
|
|
@ -36,7 +36,7 @@ if (!$this->compact): ?>
|
|||
<?php
|
||||
|
||||
if (count($services) === 0) {
|
||||
echo t('No services matching the filter');
|
||||
echo mt('monitoring', 'No services matching the filter');
|
||||
}
|
||||
foreach ($services as $service):
|
||||
$serviceLink = $this->href(
|
||||
|
|
|
@ -23,39 +23,39 @@ use Icinga\Web\Widget\Chart\HistoryColorGrid;
|
|||
|
||||
$settings = array(
|
||||
'cnt_up' => array(
|
||||
'tooltip' => t('%d ok on %s'),
|
||||
'tooltip' => mt('monitoring', '%d ok on %s'),
|
||||
'color' => '#49DF96',
|
||||
'opacity' => '0.55'
|
||||
),
|
||||
'cnt_unreachable_hard' => array(
|
||||
'tooltip' => t('%d unreachable on %s'),
|
||||
'tooltip' => mt('monitoring', '%d unreachable on %s'),
|
||||
'color' => '#77AAFF',
|
||||
'opacity' => '0.55'
|
||||
),
|
||||
'cnt_critical_hard' => array(
|
||||
'tooltip' => t('%d critical on %s'),
|
||||
'tooltip' => mt('monitoring', '%d critical on %s'),
|
||||
'color' => '#ff5566',
|
||||
'opacity' => '0.9'
|
||||
),
|
||||
|
||||
'cnt_warning_hard' => array(
|
||||
'tooltip' => t('%d warning on %s'),
|
||||
'tooltip' => mt('monitoring', '%d warning on %s'),
|
||||
'color' => '#ffaa44',
|
||||
'opacity' => '1.0'
|
||||
),
|
||||
|
||||
'cnt_down_hard' => array(
|
||||
'tooltip' => t('%d down on %s'),
|
||||
'tooltip' => mt('monitoring', '%d down on %s'),
|
||||
'color' => '#ff5566',
|
||||
'opacity' => '0.9'
|
||||
),
|
||||
'cnt_unknown_hard' => array(
|
||||
'tooltip' => t('%d unknown on %s'),
|
||||
'tooltip' => mt('monitoring', '%d unknown on %s'),
|
||||
'color' => '#cc77ff',
|
||||
'opacity' => '0.7'
|
||||
),
|
||||
'cnt_ok' => array(
|
||||
'tooltip' => t('%d ok on %s'),
|
||||
'tooltip' => mt('monitoring', '%d ok on %s'),
|
||||
'color' => '#49DF96',
|
||||
'opacity' => '0.55'
|
||||
)
|
||||
|
@ -71,7 +71,7 @@ if ($to - $from > 315360000) {
|
|||
$data = array();
|
||||
|
||||
if (count($summary) === 0) {
|
||||
echo t('No state changes in the selected time period.');
|
||||
echo mt('monitoring', 'No state changes in the selected time period.');
|
||||
}
|
||||
foreach ($summary as $entry) {
|
||||
$day = $entry->day;
|
||||
|
|
|
@ -10,7 +10,7 @@ $this->target = array('host' => $this->hostquery);
|
|||
|
||||
<div class="content">
|
||||
<?php if (count($objects) === 0): ?>
|
||||
<?= t('No hosts matching the filter'); ?>
|
||||
<?= mt('monitoring', 'No hosts matching the filter'); ?>
|
||||
<?php else: ?>
|
||||
<h1> Summary for <?= count($objects) ?> hosts </h1>
|
||||
<?= $this->render('multi/components/objectlist.phtml'); ?>
|
||||
|
|
|
@ -14,7 +14,7 @@ $this->target = array(
|
|||
|
||||
<div class="content">
|
||||
<?php if (count($objects) === 0): ?>
|
||||
<?= t('No services matching the filter'); ?>
|
||||
<?= mt('monitoring', 'No services matching the filter'); ?>
|
||||
<?php else: ?>
|
||||
<h1> Summary for <?= count($objects) ?> services </h1>
|
||||
|
||||
|
|
|
@ -19,23 +19,23 @@
|
|||
</tr>
|
||||
<?php if ($contact->contact_email): ?>
|
||||
<tr>
|
||||
<th><?= t('Email') ?></th>
|
||||
<th><?= mt('monitoring', 'Email') ?></th>
|
||||
<td><?= sprintf('<a href="mailto:%1$s">%1$s</a>', $this->escape($contact->contact_email)) ?></td>
|
||||
</tr>
|
||||
<?php endif ?>
|
||||
<?php if ($contact->contact_pager): ?>
|
||||
<tr>
|
||||
<th><?= t('Pager') ?></th>
|
||||
<th><?= mt('monitoring', 'Pager') ?></th>
|
||||
<td><?= $this->escape($contact->contact_pager) ?></td>
|
||||
</tr>
|
||||
<?php endif ?>
|
||||
<tr>
|
||||
<th><?= t('Hosts') ?></th>
|
||||
<th><?= mt('monitoring', 'Hosts') ?></th>
|
||||
<td><?= $this->escape($contactHelper->contactFlags($contact, 'host')) ?><br />
|
||||
<?= $this->escape($contact->contact_notify_host_timeperiod) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?= t('Services') ?></th>
|
||||
<th><?= mt('monitoring', 'Services') ?></th>
|
||||
<td><?= $this->escape($contactHelper->contactFlags($contact, 'service')) ?><br />
|
||||
<?= $this->escape($contact->contact_notify_service_timeperiod) ?></td>
|
||||
</tr>
|
||||
|
|
|
@ -142,7 +142,7 @@ $output = $this->tickets ? preg_replace_callback(
|
|||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<? endforeach; ?>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
|
|
@ -71,7 +71,7 @@ class Backend implements Selectable, Queryable, ConnectionInterface
|
|||
{
|
||||
$config = IcingaConfig::module('monitoring', 'backends');
|
||||
if ($config->count() === 0) {
|
||||
throw new ConfigurationError(t('No backend has been configured'));
|
||||
throw new ConfigurationError(mt('monitoring', 'No backend has been configured'));
|
||||
}
|
||||
if ($backendName !== null) {
|
||||
$backendConfig = $config->get($backendName);
|
||||
|
@ -80,7 +80,7 @@ class Backend implements Selectable, Queryable, ConnectionInterface
|
|||
}
|
||||
if ((bool) $backendConfig->get('disabled', false) === true) {
|
||||
throw new ConfigurationError(
|
||||
t('Configuration for backend %s available but backend is disabled'),
|
||||
mt('monitoring', 'Configuration for backend %s available but backend is disabled'),
|
||||
$backendName
|
||||
);
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ class Backend implements Selectable, Queryable, ConnectionInterface
|
|||
}
|
||||
}
|
||||
if ($backendName === null) {
|
||||
throw new ConfigurationError(t('All backends are disabled'));
|
||||
throw new ConfigurationError(mt('monitoring', 'All backends are disabled'));
|
||||
}
|
||||
}
|
||||
$resource = ResourceFactory::create($backendConfig->resource);
|
||||
|
|
|
@ -33,7 +33,10 @@ abstract class CommandTransport
|
|||
if (! isset(self::$config)) {
|
||||
self::$config = Config::module('monitoring', 'instances');
|
||||
if (self::$config->count() === 0) {
|
||||
throw new ConfigurationError;
|
||||
throw new ConfigurationError(
|
||||
'No instances have been configured in \'%s\'.',
|
||||
self::$config->getConfigFile()
|
||||
);
|
||||
}
|
||||
}
|
||||
return self::$config;
|
||||
|
@ -50,15 +53,22 @@ abstract class CommandTransport
|
|||
public static function fromConfig(Zend_Config $config)
|
||||
{
|
||||
switch (strtolower($config->transport)) {
|
||||
case 'remote':
|
||||
case RemoteCommandFile::TRANSPORT:
|
||||
$transport = new RemoteCommandFile();
|
||||
break;
|
||||
case 'local':
|
||||
case LocalCommandFile::TRANSPORT:
|
||||
case '': // Casting null to string is the empty string
|
||||
$transport = new LocalCommandFile();
|
||||
break;
|
||||
default:
|
||||
throw new ConfigurationError();
|
||||
throw new ConfigurationError(
|
||||
'Can\'t create command transport \'%s\'. Invalid transport defined in \'%s\'.'
|
||||
. ' Use one of \'%s\' or \'%s\'.',
|
||||
$config->transport,
|
||||
self::$config->getConfigFile(),
|
||||
LocalCommandFile::TRANSPORT,
|
||||
RemoteCommandFile::TRANSPORT
|
||||
);
|
||||
}
|
||||
unset($config->transport);
|
||||
foreach ($config as $key => $value) {
|
||||
|
|
|
@ -17,6 +17,11 @@ use Icinga\Util\File;
|
|||
*/
|
||||
class LocalCommandFile implements CommandTransportInterface
|
||||
{
|
||||
/**
|
||||
* Transport identifier
|
||||
*/
|
||||
const TRANSPORT = 'local';
|
||||
|
||||
/**
|
||||
* Path to the icinga command file
|
||||
*
|
||||
|
@ -104,15 +109,13 @@ class LocalCommandFile implements CommandTransportInterface
|
|||
public function send(IcingaCommand $command, $now = null)
|
||||
{
|
||||
if (! isset($this->path)) {
|
||||
throw new LogicException;
|
||||
throw new LogicException('Can\'t send external Icinga Command. Path to the local command file is missing');
|
||||
}
|
||||
$commandString = $this->renderer->render($command, $now);
|
||||
Logger::debug(
|
||||
sprintf(
|
||||
mt('monitoring', 'Sending external Icinga command "%s" to the local command file "%s"'),
|
||||
$commandString,
|
||||
$this->path
|
||||
)
|
||||
'Sending external Icinga command "%s" to the local command file "%s"',
|
||||
$commandString,
|
||||
$this->path
|
||||
);
|
||||
try {
|
||||
$file = new File($this->path, $this->openMode);
|
||||
|
@ -120,10 +123,7 @@ class LocalCommandFile implements CommandTransportInterface
|
|||
$file->fflush();
|
||||
} catch (Exception $e) {
|
||||
throw new TransportException(
|
||||
mt(
|
||||
'monitoring',
|
||||
'Can\'t send external Icinga command "%s" to the local command file "%s": %s'
|
||||
),
|
||||
'Can\'t send external Icinga command "%s" to the local command file "%s": %s',
|
||||
$commandString,
|
||||
$this->path,
|
||||
$e
|
||||
|
|
|
@ -17,6 +17,11 @@ use Icinga\Module\Monitoring\Command\Renderer\IcingaCommandFileCommandRenderer;
|
|||
*/
|
||||
class RemoteCommandFile implements CommandTransportInterface
|
||||
{
|
||||
/**
|
||||
* Transport identifier
|
||||
*/
|
||||
const TRANSPORT = 'remote';
|
||||
|
||||
/**
|
||||
* Remote host
|
||||
*
|
||||
|
@ -168,20 +173,18 @@ class RemoteCommandFile implements CommandTransportInterface
|
|||
public function send(IcingaCommand $command, $now = null)
|
||||
{
|
||||
if (! isset($this->path)) {
|
||||
throw new LogicException;
|
||||
throw new LogicException('Can\'t send external Icinga Command. Path to the remote command file is missing');
|
||||
}
|
||||
if (! isset($this->host)) {
|
||||
throw new LogicException;
|
||||
throw new LogicException('Can\'t send external Icinga Command. Remote host is missing');
|
||||
}
|
||||
$commandString = $this->renderer->render($command, $now);
|
||||
Logger::debug(
|
||||
sprintf(
|
||||
mt('monitoring', 'Sending external Icinga command "%s" to the remote command file "%s:%u%s"'),
|
||||
$commandString,
|
||||
$this->host,
|
||||
$this->port,
|
||||
$this->path
|
||||
)
|
||||
'Sending external Icinga command "%s" to the remote command file "%s:%u%s"',
|
||||
$commandString,
|
||||
$this->host,
|
||||
$this->port,
|
||||
$this->path
|
||||
);
|
||||
$ssh = sprintf('ssh -o BatchMode=yes -p %u', $this->port);
|
||||
// -o BatchMode=yes for disabling interactive authentication methods
|
||||
|
@ -197,10 +200,7 @@ class RemoteCommandFile implements CommandTransportInterface
|
|||
exec($ssh, $output, $status);
|
||||
if ($status !== 0) {
|
||||
throw new TransportException(
|
||||
mt(
|
||||
'monitoring',
|
||||
'Can\'t send external Icinga command "%s": %s'
|
||||
),
|
||||
'Can\'t send external Icinga command "%s": %s',
|
||||
$ssh,
|
||||
implode(' ', $output)
|
||||
);
|
||||
|
|
|
@ -245,7 +245,7 @@ abstract class DataView implements Browsable, Countable, Filterable, Sortable
|
|||
foreach ($sortColumns['columns'] as $column) {
|
||||
if (! $this->isValidFilterTarget($column)) {
|
||||
throw new QueryException(
|
||||
t('The sort column "%s" is not allowed in "%s".'),
|
||||
mt('monitoring', 'The sort column "%s" is not allowed in "%s".'),
|
||||
$column,
|
||||
get_class($this)
|
||||
);
|
||||
|
@ -336,7 +336,7 @@ abstract class DataView implements Browsable, Countable, Filterable, Sortable
|
|||
if ($filter instanceof FilterMatch) {
|
||||
if (! $this->isValidFilterTarget($filter->getColumn())) {
|
||||
throw new QueryException(
|
||||
t('The filter column "%s" is not allowed here.'),
|
||||
mt('monitoring', 'The filter column "%s" is not allowed here.'),
|
||||
$filter->getColumn()
|
||||
);
|
||||
}
|
||||
|
|
|
@ -164,6 +164,7 @@ class Host extends MonitoredObject
|
|||
*/
|
||||
public static function getStateText($state, $translate = false)
|
||||
{
|
||||
$translate = (bool) $translate;
|
||||
switch ((int) $state) {
|
||||
case self::STATE_UP:
|
||||
$text = $translate ? mt('monitoring', 'up') : 'up';
|
||||
|
@ -179,7 +180,6 @@ class Host extends MonitoredObject
|
|||
break;
|
||||
default:
|
||||
throw new InvalidArgumentException('Invalid host state \'%s\'', $state);
|
||||
break;
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
|
|
@ -199,34 +199,35 @@ class Service extends MonitoredObject
|
|||
}
|
||||
|
||||
/**
|
||||
* Get the translated textual representation of a service state
|
||||
* Get the optional translated textual representation of a service state
|
||||
*
|
||||
* @param int $state
|
||||
* @param int $state
|
||||
* @param bool $translate
|
||||
*
|
||||
* @return string
|
||||
* @throws InvalidArgumentException If the service state is not valid
|
||||
*/
|
||||
public static function getStateText($state)
|
||||
public static function getStateText($state, $translate = false)
|
||||
{
|
||||
$translate = (bool) $translate;
|
||||
switch ((int) $state) {
|
||||
case self::STATE_OK:
|
||||
$text = mt('monitoring', 'ok');
|
||||
$text = $translate ? mt('monitoring', 'ok') : 'ok';
|
||||
break;
|
||||
case self::STATE_WARNING:
|
||||
$text = mt('monitoring', 'warning');
|
||||
$text = $translate ? mt('monitoring', 'warning') : 'warning';
|
||||
break;
|
||||
case self::STATE_CRITICAL:
|
||||
$text = mt('monitoring', 'critical');
|
||||
$text = $translate ? mt('monitoring', 'critical') : 'critical';
|
||||
break;
|
||||
case self::STATE_UNKNOWN:
|
||||
$text = mt('monitoring', 'unknown');
|
||||
$text = $translate ? mt('monitoring', 'unknown') : 'unknown';
|
||||
break;
|
||||
case self::STATE_PENDING:
|
||||
$text = mt('monitoring', 'pending');
|
||||
$text = $translate ? mt('monitoring', 'pending') : 'pending';
|
||||
break;
|
||||
default:
|
||||
throw new InvalidArgumentException('Invalid service state \'%s\'', $state);
|
||||
break;
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
|
|
@ -167,7 +167,7 @@ class DbStoreTest extends BaseTestCase
|
|||
return new DbStoreWithSetPreferences(
|
||||
new Zend_Config(
|
||||
array(
|
||||
'connection' => Mockery::mock(array('getConnection' => $dbMock))
|
||||
'connection' => Mockery::mock(array('getDbAdapter' => $dbMock))
|
||||
)
|
||||
),
|
||||
Mockery::mock('Icinga\User', array('getUsername' => 'unittest'))
|
||||
|
|
Loading…
Reference in New Issue