Test and move bootstrapping/web code to source tree

Move code from incubator to web. Only files needed to show
welcome moved.

refs #4249
This commit is contained in:
Marius Hein 2013-06-14 13:51:44 +02:00
parent 60836aace3
commit c905b1f490
215 changed files with 45734 additions and 58 deletions

View File

@ -0,0 +1,49 @@
<?php
// @codingStandardsIgnoreStart
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
# namespace Icinga\Application\Controllers;
use Icinga\Web\ActionController;
use Icinga\Authentication\Auth;
use Icinga\Web\Notification;
/**
* Class AuthenticationController
* @package Icinga\Application\Controllers
*/
class AuthenticationController extends ActionController
{
/**
* @var bool
*/
protected $handlesAuthentication = true;
/**
* @var bool
*/
protected $modifiesSession = true;
/**
*
*/
public function loginAction()
{
$this->replaceLayout = true;
$this->view->form = $this->widget('form', array('name' => 'login'));
}
/**
*
*/
public function logoutAction()
{
$this->replaceLayout = true;
Auth::getInstance()->forgetAuthentication();
Notification::success('You have been logged out');
$this->_forward('login');
}
}
// @codingStandardsIgnoreEnd

View File

@ -0,0 +1,47 @@
<?php
// @codingStandardsIgnoreStart
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
# namespace Icinga\Application\Controllers;
use Icinga\Web\ActionController;
/**
* Class ErrorController
* @package Icinga\Application\Controllers
*/
class ErrorController extends ActionController
{
/**
*
*/
public function errorAction()
{
$errors = $this->_getParam('error_handler');
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found';
break;
default:
// application error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = 'Application error';
break;
}
// conditionally display exceptions
if ($this->getInvokeArg('displayExceptions') == true) {
$this->view->exception = $errors->exception;
}
$this->view->request = $errors->request;
}
}
// @codingStandardsIgnoreEnd

View File

@ -0,0 +1,47 @@
<?php
// @codingStandardsIgnoreStart
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
# namespace Icinga\Application\Controllers;
use Icinga\Web\ActionController;
use Icinga\Application\Icinga;
/**
* Class IndexController
* @package Icinga\Application\Controllers
*/
class IndexController extends ActionController
{
/**
* @var bool
*/
protected $modifiesSession = true;
/**
*
*/
public function preDispatch()
{
parent::preDispatch(); // -> auth :(
$enabled = Icinga::app()->moduleManager()->listEnabledModules();
$default = array('docs', 'certificates');
if (count(array_diff($enabled, $default)) === 0) {
if ($this->action_name !== 'welcome') {
$this->_forward('welcome');
}
} else {
$this->_forward('index', 'dashboard');
}
}
/**
*
*/
public function welcomeAction()
{
}
}
// @codingStandardsIgnoreEnd

View File

@ -0,0 +1,110 @@
<?php
// @codingStandardsIgnoreStart
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
# namespace Icinga\Web\Form;
use Icinga\Web\ActionController;
use Icinga\Application\Icinga;
use Zend_Controller_Action_Exception as ActionException;
/**
* Class StaticController
* @package Icinga\Web\Form
*/
class StaticController extends ActionController
{
/**
* @var bool
*/
protected $handlesAuthentication = true;
/**
*
*/
public function init()
{
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout()->disableLayout();
}
/**
* @return array
*/
private function getModuleList()
{
$modules = Icinga::app()->moduleManager()->getLoadedModules();
// preliminary static definition
$result = array();
foreach ($modules as $name => $module) {
$hasJs = file_exists($module->getBasedir() . "/public/js/$name.js");
$result[] = array(
'name' => $name,
'active' => true,
'type' => 'generic',
'behaviour' => $hasJs
);
}
return $result;
}
/**
*
*/
public function modulelistAction()
{
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout()->disableLayout();
$this->getResponse()->setHeader("Content-Type", "application/json");
echo "define(function() { return " . json_encode($this->getModuleList(), true) . "; })";
exit;
}
/**
* @throws \Zend_Controller_Action_Exception
*/
public function javascriptAction()
{
$module = $this->_getParam('moduleName');
$file = $this->_getParam('file');
$basedir = Icinga::app()->getModule($module)->getBaseDir();
$filePath = $basedir . '/public/js/' . $file;
if (!file_exists($filePath)) {
throw new ActionException(
sprintf(
'%s does not exist',
$filePath
),
404
);
}
$hash = md5_file($filePath);
$response = $this->getResponse();
$response->setHeader('ETag', $hash);
$response->setHeader('Content-Type', 'application/javascript');
$response->setHeader('Cache-Control', 'max-age=3600', true);
$response->setHeader(
'Last-Modified',
gmdate(
'D, d M Y H:i:s',
filemtime($filePath)
) . ' GMT'
);
if ($hash === $this->getRequest()->getHeader('If-None-Match')) {
$response->setHttpResponseCode(304);
return;
} else {
readfile($filePath);
}
// TODO: get rid of exit:
exit;
}
}
// @codingStandardsIgnoreEnd

View File

@ -0,0 +1,76 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Web\Form;
use Icinga\Web\Form;
use Icinga\Web\Notification;
use Icinga\Application\Config;
use Icinga\Authentication\Backend as AuthBackend;
use Icinga\Authentication\Auth;
/**
* Class LoginForm
* @package Icinga\Web\Form
*/
class LoginForm extends Form
{
/**
*
*/
public function onSuccess()
{
$backend = new AuthBackend(Config::getInstance()->authentication);
$values = $this->getValues();
$username = $values['username'];
$password = $values['password'];
if ($backend->hasUsername($username)) {
if ($user = $backend->authenticate($username, $password)) {
// \Zend_Session::regenerateId();
Auth::getInstance()->setAuthenticatedUser($user);
Notification::success('Login succeeded');
$this->redirectNow('index?_render=body');
} else {
// TODO: Log "auth failed"
}
} else {
// TODO: Log "User does not exist"
}
$this->getElement('password')->addError(
t(
'Authentication failed, please check username and password'
)
);
}
/**
* @return array
*/
public function elements()
{
return array(
'username' => array(
'text',
array(
'label' => t('Username'),
'required' => true,
)
),
'password' => array(
'password',
array(
'label' => t('Password'),
'required' => true,
)
),
'submit' => array(
'submit',
array(
'label' => t('Login')
)
)
);
}
}

View File

@ -0,0 +1,78 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Web\Form;
use Icinga\Web\Form;
use Icinga\Web\Session;
use Icinga\Web\Notification;
use Icinga\Application\Config;
/**
* Class SettingsForm
* @package Icinga\Web\Form
*/
class SettingsForm extends Form
{
/**
*
*/
public function onSuccess()
{
$session = Session::getInstance();
$values = $this->getValues();
$session->language = $values['language'];
$session->backend = $values['backend'];
$session->show_benchmark = (bool)$values['show_benchmark'];
}
/**
* @return array
*/
public function elements()
{
$all_backends = Config::getInstance()->listAll('backends');
$language = \Icinga\Web\Session::getInstance()->language;
if (!$language) {
$language = 'en_US';
}
return array(
'backend' => array(
'select',
array(
'label' => 'Backend',
'required' => true,
'value' => Session::getInstance()->backend,
'multiOptions' => array_combine($all_backends, $all_backends)
)
),
'language' => array(
'select',
array(
'label' => 'Language',
'required' => true,
'value' => $language,
'multiOptions' => array(
'de_DE' => 'Deutsch',
'en_US' => 'Englisch'
)
)
),
'show_benchmark' => array(
'checkbox',
array(
'label' => 'Show Benchmarks'
)
),
'submit' => array(
'submit',
array(
'label' => t('Apply')
)
)
);
}
}

View File

@ -0,0 +1,27 @@
<?php echo $this->render('parts/topbar.phtml') ?>
<div class="main">
<!-- Only required for left/right tabs -->
<div class="tabbable tabs-left "style="height:100%;">
<?php echo $this->render('parts/navigation.phtml') ?>
<div class="layout-main-detail collapsed">
<div id="icinga-main" container-id="icinga-main" class="icinga-container">
<?php echo $this->layout()->moduleStart ?>
<?php echo $this->layout()->content ?>
<?php echo $this->layout()->moduleEnd ?>
</div>
<div id="icinga-detail" class="icinga-container " container-id="icinga-detail">
<div class="container-controls">
<a class="container-expand-link" title="expand" target="_self" href="/develop/monitoring/list/services">
<i class="icon-fullscreen"></i>
</a>
<a class="container-detach-link" title="detach" target="popup" href="/develop/develop/monitoring/list/services">
<i class="icon-share"></i>
</a>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,54 @@
<!DOCTYPE html>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="no-js"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="<?php echo $this->baseUrl('css/normalize.min.css') ?>">
<link rel="stylesheet" href="<?php echo $this->baseUrl('css/vendor/bootstrap.css') ?>">
<link rel="stylesheet" href="<?php echo $this->baseUrl('css/main.css') ?>">
<link rel="stylesheet" href="<?php echo $this->baseUrl('css/vendor/jquery.qtip.min.css') ?>">
<script type="text/javascript">
var base_url = '<?php echo $this->baseUrl() ?>';
ICINGA_DEBUG = true;
</script>
<script src="<?php echo $this->baseUrl('js/vendor/modernizr-2.6.2.min.js') ?>"></script>
<link rel="stylesheet" href="<?php echo $this->baseUrl('css/icinga.css') ?>">
<link rel="stylesheet" href="<?php echo $this->baseUrl('css/vendor/bootstrap-responsive.min.css') ?>">
<script data-main="<?php echo $this->baseUrl('js/main.js')?>" src="<?php echo $this->baseUrl('js/vendor/require.js') ?>"></script>
</head>
<body class="cranberry">
<?php echo $this->render('parts/topbar.phtml') ?>
<div class="main">
<div class="tabbable tabs-left" style="height:100%;">
<?php echo $this->render('parts/navigation.phtml') ?>
</div>
<div class="layout-main-detail collapsed">
<div id="icinga-main" container-id="icinga-main" class="icinga-container">
<?php echo $this->layout()->moduleStart ?>
<?php echo $this->layout()->content ?>
<?php echo $this->layout()->moduleEnd ?>
</div>
<div id="icinga-detail" class="icinga-container " container-id="icinga-detail">
<!--<div class="container-controls">
<a class="container-expand-link" title="expand" target="_self" href="...">
<i class="icon-fullscreen"></i>
</a>
<a class="container-detach-link" title="detach" target="popup" href="...">
<i class="icon-share"></i>
</a>
</div>-->
</div><!-- End of icinga-detail -->
</div><!-- End of layout-main-detail -->
</div><!-- End of main -->
</body>
</html>

View File

@ -0,0 +1,40 @@
<?php
// determine current key
$url = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri();
$currentKey = isset($this->navkey) ? $this->navkey : $url;
$item = $this->navigation->listAll("menu");
?>
<?php if ($this->auth()->isAuthenticated()): ?>
<ul class="nav nav-tabs icinga-navigation" >
<?php
$activeSet = false;
foreach ($item as $itemName) {
if($itemName[0] == "_") {
?>
<li class="section-end"></li>
<?php
continue;
}
$item = $this->navigation->menu->$itemName;
$active = false;
$url = "";
if (is_string($item)) {
$active = !$activeSet && $this->baseUrl($item) == $currentKey;
$url = $this->baseUrl($item);
} else {
$url = $this->baseUrl(isset($item->route) ? $item->route : "");
$itemName = isset($item->title) ? $item->title : $itemName;
$active = !$activeSet && (isset($item->key) ? $item->key : $url) === $currentKey;
}
$activeSet = $activeSet || $active;
?>
<li class="<?php echo $active ? "active" : "" ?>"><a href="<?php echo $url ?>"><?php echo $itemName ?></a></li>
<?php
$class = "";
}
?>
</ul>
<?php endif ?>

View File

@ -0,0 +1,26 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner ">
<ul class="nav pull-left">
<li style="float:left"><a href="<?php echo $this->baseUrl('/') ?>" class="brand" style="margin-left:0px;">Icinga</a></li>
</ul>
<?php if ($this->auth()->isAuthenticated()): ?>
<ul class="nav pull-right" >
<li>
<form class="navbar-search" style="padding-top:0.2em">
<input type="text" class="search-query" placeholder="Search" style="padding-top:0.3em">
</form>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo
$this->escape($this->auth()->getUsername())
?> <i class="icon-user icon-white" style="margin-top:0.2em"></i>
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><?php echo $this->qlink(_('Logout'), '/authentication/logout') ?></li>
</ul>
</li>
</ul>
<?php endif ?>
</div>
</div>

View File

@ -0,0 +1,20 @@
<?php
// @codingStandardsIgnoreStart
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
use Icinga\Authentication\Manager;
/**
* Class Zend_View_Helper_Auth
*/
class Zend_View_Helper_Auth extends Zend_View_Helper_Abstract
{
public function auth()
{
return Manager::getInstance();
}
}
// @codingStandardsIgnoreEnd

View File

@ -0,0 +1 @@
<?php echo $this->form ?>

View File

@ -0,0 +1,25 @@
<div class="alert alert-error fullpage_infobox">
<h1>An error occurred</h1>
<p>
<?php echo $this->message ?>
</p>
<?php if (isset($this->exception)): ?>
<div style="text-align:left;">
<h3>Exception information:</h3>
<p >
<b>Message:</b> <?php echo $this->exception->getMessage() ?>
</p>
<h3>Stack trace:</h3>
<pre style="font-family: monospace"><?php echo $this->exception->getTraceAsString() ?>
</pre>
<h3>Request Parameters:</h3>
<pre><?php echo var_export(\Zend_Controller_Front::getInstance()->getParams(), true) ?>
</pre>
</div>
<?php endif ?>
</div>

View File

@ -0,0 +1,3 @@
<div class="clearfix" style="margin-top: 100px;">
<h1>Bootstrap loaded!</h1>
</div>

View File

@ -62,6 +62,7 @@ abstract class ApplicationBootstrap
$this->libdir = realpath(dirname(dirname(dirname(__FILE__))));
require $this->libdir . '/Icinga/Application/Loader.php';
if (! defined('ICINGA_LIBDIR')) {
define('ICINGA_LIBDIR', $this->libdir);
}
@ -73,6 +74,7 @@ abstract class ApplicationBootstrap
$this->loader = Loader::register();
$this->registerZendAutoloader();
Benchmark::measure('Bootstrap, autoloader registered');
Icinga::setApp($this);

View File

@ -1,8 +1,10 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Application;
require_once dirname(__FILE__) . '/ApplicationBootstrap.php';
use Icinga\Authentication\Manager;
use Icinga\Web\Session;
use Zend_Controller_Front as FrontController;
use Zend_Layout as Layout;
@ -34,15 +36,15 @@ class Web extends ApplicationBootstrap
protected function bootstrap()
{
return $this->loadConfig()
->configureErrorHandling()
->setTimezone()
->configureSession()
->configureCache()
->prepareZendMvc()
->loadTranslations()
->loadEnabledModules()
->setupSpecialRoutes()
->configurePagination();
->configureErrorHandling()
->setTimezone()
->configureSession()
->configureCache()
->prepareZendMvc()
->loadTranslations()
->loadEnabledModules()
->setupSpecialRoutes()
->configurePagination();
}
protected function setupSpecialRoutes()
@ -53,8 +55,8 @@ class Web extends ApplicationBootstrap
new Route(
'js/modules/list.js',
array(
'controller' =>'static',
'action' =>'modulelist',
'controller' => 'static',
'action' => 'modulelist',
)
)
);
@ -85,30 +87,15 @@ class Web extends ApplicationBootstrap
*/
protected function configureSession()
{
Session::setOptions(
array(
// strict requires Zend_Session::start()
'strict' => true,
'cookie_secure' => false,
'name' => $this->config->{'global'}->get(
'session_cookie',
'ICINGA_SID'
),
// Obsolete once moved to Icinga\Web\Session:
'cookie_httponly' => true,
'use_only_cookies' => true,
'hash_function' => true,
'hash_bits_per_character' => 5,
)
);
Manager::getInstance();
return $this;
}
protected function loadTranslations()
{
$locale = Session::getInstance()->language;
if (! $locale) {
// Session::getInstance()->language;
$locale = null;
if (!$locale) {
$locale = 'en_US';
}
putenv('LC_ALL=' . $locale . '.UTF-8');
@ -120,7 +107,7 @@ class Web extends ApplicationBootstrap
protected function dispatchFrontController()
{
Session::getInstance();
// Session::getInstance();
$this->frontController->dispatch();
return $this;
}
@ -135,26 +122,27 @@ class Web extends ApplicationBootstrap
// TODO: Replace Zend_Application:
Layout::startMvc(
array(
'layout' => 'layout',
'layout' => 'layout',
'layoutPath' => $this->appdir . '/layouts/scripts'
)
);
return $this->prepareFrontController()
->prepareView();
->prepareView();
}
protected function prepareFrontController()
{
$this->frontController = FrontController::getInstance()
->setControllerDirectory($this->appdir . '/controllers')
// TODO: Create config option for Load balancers etc:
// ->setBaseurl()
->setParams(
array(
'displayExceptions' => 1
)
);
$this->frontController = FrontController::getInstance();
$this->frontController->setControllerDirectory($this->appdir . '/controllers');
$this->frontController->setParams(
array(
'displayExceptions' => true
)
);
return $this;
}
@ -192,7 +180,7 @@ class Web extends ApplicationBootstrap
Paginator::setDefaultScrollingStyle('SlidingWithBorder');
PaginationControl::setDefaultViewPartial(
array('mixedPagination.phtml','default')
array('mixedPagination.phtml', 'default')
);
return $this;
}

View File

@ -5,6 +5,7 @@
namespace Icinga\Authentication;
use Icinga\Application\Logger as Logger;
use Icinga\Application\Config as Config;
class Manager
{
@ -28,13 +29,13 @@ class Manager
if (isset($options["userBackendClass"])) {
$this->userBackend = $options["userBackendClass"];
} elseif ($config->users !== null) {
$this->userBackend = initBackend(BACKEND_TYPE_USER, $config->users);
$this->userBackend = $this->initBackend(self::BACKEND_TYPE_USER, $config->users);
}
if (isset($options["groupBackendClass"])) {
$this->groupBackend = $options["groupBackendClass"];
} elseif ($config->groups != null) {
$this->groupBackend = initBackend(BACKEND_TYPE_GROUP, $config->groups);
$this->groupBackend = $this->initBackend(self::BACKEND_TYPE_GROUP, $config->groups);
}
if (!isset($options["sessionClass"])) {
@ -64,8 +65,13 @@ class Manager
private function initBackend($authenticationTarget, $authenticationSource)
{
$userbackend = ucwords(strtolower($authenticationSource->backend));
$class = '\\Icinga\\Authentication\\Backend\\' . $backend . $authenticationTarget. 'Backend';
$userBackend = ucwords(strtolower($authenticationSource->backend));
if (!$userBackend) {
return null;
}
$class = '\\Icinga\\Authentication\\Backend\\' . $userBackend . $authenticationTarget. 'Backend';
return new $class($authenticationSource);
}

View File

@ -76,9 +76,14 @@ class PhpSession extends Session
if (!$this->sessionCanBeOpened()) {
return false;
}
session_name(PhpSession::SESSION_NAME);
session_start();
/*
* @todo This is not right
*/
\Zend_Session::start();
// session_start();
$this->isOpen = true;
$this->setAll($_SESSION);
return true;
@ -97,7 +102,7 @@ class PhpSession extends Session
public function read($keepOpen = false)
{
if (!$this->ensureOpen) {
if (!$this->ensureOpen()) {
return false;
}
if ($keepOpen) {
@ -109,7 +114,7 @@ class PhpSession extends Session
public function write($keepOpen = false)
{
if (!$this->ensureOpen) {
if (!$this->ensureOpen()) {
return false;
}
foreach ($this->getAll() as $key => $value) {

View File

@ -102,8 +102,21 @@ class ActionController extends ZfController
->_setInvokeArgs($invokeArgs);
$this->_helper = new ZfActionHelper($this);
/*
* --------------------------------------------
* Authentication is disabled to test bootstrap
* --------------------------------------------
*
* @todo remove this!
*/
$this->allowAccess = true;
$this->init();
return null;
if ($this->handlesAuthentication() ||
Auth::getInstance(
Manager::getInstance(
null,
array(
"writeSession" => $this->modifiesSession
@ -163,7 +176,7 @@ class ActionController extends ZfController
*/
final protected function hasPermission($uri, $permission = 'read')
{
return true;
return true;
}
/**
@ -194,6 +207,7 @@ class ActionController extends ZfController
public function preDispatch()
{
Benchmark::measure('Action::preDispatch()');
if (!$this->allowAccess) {
$this->_request->setModuleName('default')
->setControllerName('authentication')
@ -296,7 +310,6 @@ class ActionController extends ZfController
}
// END of PDF test
if ($this->_request->isXmlHttpRequest()) {
if ($this->replaceLayout || $this->_getParam('_render') === 'body') {
$this->_helper->layout()->setLayout('just-the-body');
@ -305,6 +318,7 @@ class ActionController extends ZfController
$this->_helper->layout()->setLayout('inline');
}
}
$notification = Notification::getInstance();
if ($notification->hasMessages()) {
$nhtml = '<ul class="notification">';
@ -318,10 +332,10 @@ class ActionController extends ZfController
$this->getResponse()->append('notification', $nhtml);
}
if (Session::getInstance()->show_benchmark) {
/*if (Session::getInstance()->show_benchmark) {
Benchmark::measure('Response ready');
$this->getResponse()->append('benchmark', $this->renderBenchmark());
}
}*/
}

View File

@ -1 +0,0 @@
Icinga 2 Web

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
public/apple-touch-icon.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

24
public/css.php Normal file
View File

@ -0,0 +1,24 @@
<?php
use Icinga\Application\EmbeddedWeb;
require_once dirname(__FILE__) . '/../library/Icinga/Application/EmbeddedWeb.php';
$app = EmbeddedWeb::start();
require_once 'vendor/lessphp/lessc.inc.php';
header('Content-type: text/css');
$less = new lessc;
$cssdir = dirname(__FILE__) . '/css';
echo $less->compileFile($cssdir . '/base.less');
echo $less->compileFile($cssdir . '/icinga.less');
foreach ($app->moduleManager()->getLoadedModules() as $name => $module) {
if ($module->hasCss()) {
echo $less->compile(
'.icinga-module.module-'
. $name
. " {\n"
. file_get_contents($module->getCssFilename())
. "}\n\n"
);
}
}

180
public/css/base.less Executable file
View File

@ -0,0 +1,180 @@
@vertical-bar-height: 41px;
@navigation-bar-width: 123px;
@center-padding: 1px;
@import 'themes/default.less';
@font-face {
font-family: 'duepuntozero';
src: url('./fonts/duepuntozero.ttf');
}
body {
.gradient(@color-white,lighten(@color-white,20%));
color: @color-black;
padding-top:@vertical-bar-height;
font-family: Verdana, "sans serif";
a {
text-decoration: none;
}
}
.gradient(@start, @end) {
background-color: @start;
background-image: -webkit-gradient(linear, left top, left bottom, from(@start), to(@end));
background-image: -webkit-linear-gradient(top, @start, @end);
background-image: -moz-linear-gradient(top, @start, @end);
background-image: -ms-linear-gradient(top, @start, @end);
background-image: -o-linear-gradient(top, @start, @end);
}
.gradient-left(@start, @end) {
background-color: @start;
background-image: -webkit-gradient(linear, left top, right top, from(@start), to(@end));
background-image: -webkit-linear-gradient(left, @start, @end);
background-image: -moz-linear-gradient(left, @start, @end);
background-image: -ms-linear-gradient(left, @start, @end);
background-image: -o-linear-gradient(left, @start, @end);
}
.gradient-hard(@start, @end, @colorstop) {
}
.gradient-hard-left(@start, @end, @colorstop) {
}
.navbar-fixed-top input {
height: 15px !important;
}
html, body {
height: 100%;
overflow: hidden;
}
body {
overflow: hidden;
}
.expanded_absolute {
top:0px;
bottom:0px;
left:0px;
right: 0px;
}
.fullpage_infobox {
max-width: 90%;
padding:1.5em;
margin:auto;
margin-top:5%;
text-align:center;
}
.main {
position: fixed;
top: @vertical-bar-height;
bottom: 0px;
left: 0px;
right: 0px;
overflow:hidden;
.icinga-container {
position: absolute;
overflow: auto;
-webkit-overflow-scrolling: touch;
.container-subtab {
position:absolute;
top:0px;
bottom:0px;
width:100%;
.nav.nav-tabs {
overflow:hidden;
}
.tab-content {
position:absolute;
top:45px;
bottom:0px;
width:100%;
}
}
}
.expandable {
padding:0.2em;
margin-bottom: 0.5em;
height: auto;
.expand-title {
/*
background-color: lighten(@color-emphasis,30%);
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
padding: 0.5em;
*/
color:@color-black;
/* border-left:1px solid @color-emphasis;*/
box-shadow: 1px 1px 1px darken(@color-emphasis,20%);
}
.expand-content {
border:1px solid @color-emphasis;
padding:0.5em;
dl,dt, dd {
padding: 0;
margin: 0;
}
}
.expand-controls {
float:right;
.expand-link {
display:none;
}
.collapse-link {
display:block;
}
i {
margin:0px;
padding:0px;
-moz-transition-duration: 1s;
-webkit-transition-duration: 1s;
-ms-transition-duration: 1s;
transition-duration: 1s;
cursor:pointer;
&:hover {
transform: rotate(180deg);
-ms-transform: rotate(180deg);
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
}
}
}
&.collapsed {
.expand-controls {
.expand-link {
display:block;
}
.collapse-link {
display:none;
}
}
.expand-content {
height: 0px;
display: none;
overflow:hidden;
}
}
}
}
@import 'components/toolbars';
@import 'dataviews';
@import 'components/layouts';
@import 'components/tables';

223
public/css/bpapp.css Executable file
View File

@ -0,0 +1,223 @@
/* BPAddon CSS file */
div.bpapp {
padding-bottom: 20px;
}
.bpapp table.businessprocess, table.businessprocess table {
border-collapse: collapse;
margin: 0;
padding: 0;
width: 100%;
}
.bpapp table.businessprocess {
width: 98%;
margin-left: 1%;
}
.bpapp table.businessprocess tr {
margin: 0;
padding: 0;
font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: 0.97em;
}
.bpapp table.businessprocess tr tr tr tr {
font-size: 1em;
}
.bpapp table.businessprocess th, table.businessprocess td {
margin: 0;
padding: 0.3em 0 0 0.3em;
text-align: left;
vertical-align: middle;
line-height: 1.7em;
}
.bpapp table.businessprocess th {
/* IE? */
padding: 0.2em 1em 0.2em 1em;
cursor: pointer;
}
.bpapp table.businessprocess th.hovered.state {
text-decoration: underline;
}
.bpapp a img {
border: none;
}
.bpapp table.businessprocess th.bptitle {
border-radius: 10px 10px 10px 0;
-moz-border-radius: 10px 10px 10px 0;
}
.bpapp table.collapsed > tbody > tr > th.bptitle {
border-radius: 10px;
-moz-border-radius: 10px;
}
.bpapp table.businessprocess th.operator {
width: 1.5em;
text-align: center;
vertical-align: middle;
border-radius: 0 0 10px 10px;
-moz-border-radius: 0 0 10px 10px;
}
.bpapp table.businessprocess td.service {
border-radius: 7px;
-moz-border-radius: 7px;
width: 10em;
text-align: center;
font-weight: bold;
}
.bpapp table.businessprocess td.service img {
float: left;
}
.bpapp table.businessprocess, table.businessprocess table {
border-top: 2px solid white;
border-left: 2px solid white;
}
.bpapp .state.unknown {
background-color: #988;
background-color: #99b;
}
.bpapp .state.critical {
background-color: #b00;
background-color: #f30;
color: white;
}
.bpapp .state.critical.handled {
background-color: #ffd4c9;
color: #000;
}
.bpapp .state.warning {
background-color: #fc3;
background-color: #ff0;
}
.bpapp .state.warning.handled {
background-color: #ffffb2;
color: #000;
}
.bpapp .state.ok {
background-color: #8f0;
background-color: #0c3;
color: #fff;
}
.bpapp th.hovered.state.unknown {
background-color: #aac;
}
.bpapp table.businessprocess th p.problems {
font-weight: normal;
font-size: 0.7em;
margin: 0;
padding: 0;
display: none;
}
.bpapp .collapsed > tbody > tr > th > p.problems {
display: inline;
}
.bpapp table.businessprocess th p.problems span {
padding: 3px;
}
.bpapp table.businessprocess th.hovered p.problems > .state {
text-decoration: none;
}
.bpapp span.collapsible {
background-image: url("../img/bpaddon/icon_collapse.png");
background-repeat: no-repeat;
width: 1.7em;
height: 1.7em;
background-position: left center;
display: block;
float: left;
}
.bpapp .collapsed span.collapsible {
background: url("../img/bpaddon/icon_expand.png");
background-repeat: no-repeat;
background-position: left center;
}
.bpapp .collapsed tr.children {
display: none;
}
.bpapp .inlinepie {
display: block;
width: 2em;
float: right;
margin-top: 0.1em;
text-align: center;
vertical-align: middle;
color: transparent;
}
/* VHV - to be removed */
/*
h1 {
color: #51626F;
font-size: 1.5em;
font-weight: bold;
margin-left: 10px;
margin-top: 5px;
margin-bottom: 5px;
}
div.bgvhv {
background-color: #51626F;
color: white;
padding-left: 20px;
padding-bottom: 2px;
font-size: 0.8em;
}
div.bgvhv span {
display: inline;
background-image: url('../img/vhv/pfeil_gruen.gif');
background-repeat: no-repeat;
background-position: 8px 3px;
text-align: left;
}
div.bgvhv span a {
color: white;
margin-left: 20px;
margin-right: 20px;
text-decoration: none;
}
div.bgvhv.bottom {
bottom: 0;
position: fixed;
width: 100%;
}
table.bgvhv span a:hover {
text-decoration: underline;
}
img.logo {
margin: 20px;
}
*/
/* VHV ENDE */

169
public/css/components/MenuBar.css Executable file
View File

@ -0,0 +1,169 @@
/**
* menu bar style
*
* @author Jan Kowalleck <jan.kowalleck@googlemail.com>
*
*
*/
.menuBar {
cursor: default;
}
.menuBar ,
.menuBar ul {
list-style-type: none;
margin: 0ex 0em;
padding: 0ex 0em;
display: block;
display: inline-block;
vertical-align: top;
}
div.menuBar ul {
height: 100% ;
}
.menuBar li {
display: block;
margin: 0ex 0.3em;
padding: 0.5ex 0.3em;
white-space: nowrap;
}
.menuBar li:first-child { margin-top: 1ex; }
.menuBar li:last-child { margin-bottom: 1ex; }
ul.menuBar a ,
div.menuBar.s-closed ul.l0 li ,
div.menuBar li.href {
cursor: pointer;
-webkit-user-select: none;
-webkit-tap-highlight-color: rgba(1,1,1,0);
}
html.touch ul.menuBar a ,
html.touch div.menuBar.s-closed ul.l0 li ,
html.touch div.menuBar li.sub ,
html.touch div.menuBar li.href {
min-height: 40px; /* as apple wants for their touch devices*/
min-width: 40px;
}
ul.menuBar li {
position: relative;
overflow: visible;
}
ul.menuBar img ,
div.menuBar .icon {
display: block;
margin: 0ex 0em;
margin-right: 0ex;
padding: 0ex 0em;
width: 6ex;
height: 6ex;
border-radius: 1ex;
}
ul.menuBar li ul {
display: none;
position: absolute;
top: -1ex;
left: 100%;
}
ul.menuBar li:hover > ul {
display: block;
}
ul.menuBar > li ,
div.menuBar ul.l0 {
line-height: 0ex;
}
ul.menuBar > li> ul {
line-height: normal;
}
div.menuBar ul.l0 li {
margin-left: 1ex;
margin-right: 1ex;
padding: 0.5ex 0.5ex;
}
ul.menuBar > li {
margin: 0ex 0em;
padding: 0.5ex 1ex;
}
div.menuBar ul.l0 li {
border-radius: 1ex;
}
ul.menuBar > li > span ,
div.menuBar ul.l0 .label {
display: none;
}
ul.menuBar > li > a {
display: block;
position: absolute;
top: 0ex;
right: 0em;
bottom: 0ex;
left: 0em;
padding: 0ex 0em;
overflow: hidden;
background-color: black; opacity: 0; filter: alpha(opacity=0); /* to get overlay working in IE */
}
/* dir */
div.menuBar.dir-ltr ul {
float: left;
}
div.menuBar.dir-ltr ul li.sub.sel {
margin-right: 0ex;
padding-right: 1.5ex;
border-top-right-radius: 0ex;
border-bottom-right-radius: 0ex;
}
/* scrolling - capable of IE bugs */
div.menuBar ul {
overflow: hidden;
}
div.menuBar ul.scroll li.scrollSpanner {
display: block;
height: 0ex;
margin-top: 0ex;
margin-right: 0em;
margin-left: 0em;
padding: 0ex 0em;
}
div.menuBar ul.scroll:hover {
overflow-y: scroll;
}
div.menuBar ul.scroll:hover li.scrollSpanner {
margin-left: 0em !important;
margin-right: 0em !important;
}
html.touch div.menuBar ul.scroll {
overflow: auto;
-webkit-overflow-scrolling: touch;
}
/* IE fixes */
html.no-flexbox div.menuBar { position:relative; }
html.no-flexbox div.menuBar ul {
position: absolute;
top: 0ex;
bottom: 0ex;
height: 100%;
width: auto;
}

View File

@ -0,0 +1,87 @@
/**
* Detail views underneath the content class
**/
font-size: 12px;
.object-name {
display:block;
float:none;
@media (min-width:750px) {
.icon {
width: 32px;
height: 32px;
float:left;
border: 1px dashed grey;
margin-right:1em;
service {
}
clear:left;
box-shadow: 1px 1px 1px darken(@color-emphasis,10%);
}
}
@media (max-width: 750px) {
.icon {
display:none;
}
}
.headings {
h1 {
font-size: 16px;
margin:0px;
padding:0px;
line-height: 1.0em;
}
h2 {
font-size: 14px;
margin:0px;
font-weight:normal;
padding:0px;
line-height: 1.5em;
}
}
clear:both;
}
.status {
.status-indicator();
border:1px solid @color-black;
padding:0.20em;
margin:0.5em;
width:95%;
text-align:center;
box-shadow: 1px 1px 1px darken(@color-emphasis,10%);
}
.output_text {
font-family: monaco,monospacen;
width:95%;
text-align:left;
padding:0.5em;
box-shadow: inset 1px 1px 2px darken(@color-light,10%);
background-color:@color-white;
}
.detail {
.check_info {
}
label {
width: 125px;
display:block;
float:left;
clear:left;
font-weight:bold;
}
}

View File

@ -0,0 +1,80 @@
@media (max-width: 1000px) {
.status-header .media .pull-left {
display: none;
}
}
.caption(@color) {
background-color: @color;
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
color:darken(@color,40%);
text-align:left;
a {
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
color:darken(@color,40%);
}
}
.status-header {
.hoststatus {
border-left: 1px solid @color-black;
padding-left:4pt;
margin-top:2px;
padding-top:2px;
font-size: 10pt;
font-weight: bold;
&.ok, &.up {
.caption(@color-ok);
}
&.warning {
.caption(@color-warning);
}
&.critical, &.down {
.caption(@color-critical);
}
&.unknown, &.unreachable {
.caption(@color-unknown);
}
&.pending {
.caption(@color-pending);
}
.statusTime {
}
&:only-child {
height: 60px;
}
}
.statusTime{
font-size:6pt;
padding-right:10pt;
display:block;
padding-bottom:2px;
}
.servicestatus {
border-left: 1px solid @color-black;
padding-left:4pt;
font-size: 10pt;
padding-top:2px;
font-weight: bold;
margin-bottom:2px;
&.ok, &.up {
.caption(@color-ok);
}
&.warning {
.caption(@color-warning);
}
&.critical, &.down {
.caption(@color-critical);
}
&.unknown, &.unreachable {
.caption(@color-unknown);
}
&.pending {
.caption(@color-pending);
}
}
}

View File

@ -0,0 +1,151 @@
@main-detail-main-width: 55%;
@controls-height: 26px;
@controls-padding: 4px;
/**
* Plain layout
**/
.icinga-container {
.container-controls {
position:absolute;
right:0px;
top:2px;
text-align:right;
height:20px;
border: none;
padding:0.3em;
-moz-transition-duration:0.5s;
-webkit-transition-duration:0.5s;
transition-duration:0.5s;
&:hover {
background-color:lighten(@color-emphasis,40%);
}
}
}
.icinga-container.dashboard {
position: relative;
box-shadow: 1px 1px 1px #ded;
width: 31%;
border: 1px solid grey;
min-height: 200px;
float:left;
margin-left: 1%;
margin-bottom: 1%;
}
.layout-plain {
right: 0px;
left: @navigation-bar-width;
top: 0px;
bottom:0px;
}
.icinga-container .controls {
padding:5px;
height: 25px;
margin:0px;
input {
margin-right:0.5em;
}
}
/**
* Two column Main/detail layout used for overviews
**/
.layout-main-detail {
&.collapsed #icinga-main {
right:0px;
box-shadow: none;
}
&.collapsed #icinga-detail {
display:hidden;
left:100%;
}
-webkit-overflow-scrolling: touch;
#icinga-main {
position: absolute;
left: @navigation-bar-width;
right: 100-@main-detail-main-width;
min-width: 400px;
top: 0px;
bottom: 0px;
-webkit-transition: right 0.5s ease;
-moz-transition: right 0.5s ease;
-o-transition: right 0.5s ease;
-ms-transition: right 0.5s ease;
transition: right 0.5s ease;
overflow-x:hidden;
.content {
position: absolute;
top: @controls-height+@controls-padding+90px;
bottom: 0px;
overflow-y:auto;
-webkit-overflow-scrolling: touch;
left: 0px;
right: -1px;
@import 'details';
}
z-index:8;
}
#icinga-detail {
position: absolute;
top: 0px;
left: @main-detail-main-width ;
right: 0px;
bottom: 0px;
z-index:10;
-webkit-transition: left 0.5s ease;
-moz-transition: left 0.5s ease;
-o-transition: left 0.5s ease;
-ms-transition: left 0.5s ease;
transition: left 0.5s ease;
background-color:white;
/* border-left: 1px solid @color-black;*/
.content {
position: absolute;
top: @controls-height+@controls-padding+74px;
left: 0px;
right: 0px;
bottom:0px;
padding:1em;
overflow:auto;
-webkit-overflow-scrolling: touch;
@import 'details';
}
}
.header {
position: absolute;
top: @controls-height+@controls-padding;
left: 0px;
right: 0px;
height:74px;
padding:1em;
overflow:auto;
-webkit-overflow-scrolling: touch;
@import 'headers';
}
}
/**
* End of main/detail layout
**/

View File

@ -0,0 +1,126 @@
.statusTable(@color) {
&:hover {
background-color: @color;
}
&.active {
background-color: lighten(@color-emphasis,20%);
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
color:@color-black;
}
& td:first-child {
background-color: @color;
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
color:darken(@color,50%);
text-align:center;
a {
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
color:darken(@color,40%);
}
}
cursor:pointer;
}
.icinga-container.action-table-content {
.expanded_absolute;
top: 35px;
}
.icinga-container {
table.action {
font-size:0.8em;
a {
color: black;
&:hover {
color: black;
text-decoration:none;
}
}
width: 100%;
tbody tr {
border-bottom: 1px solid #ededed;
}
thead tr {
//background-color: @color-black;
}
tr {
th {
//background-color: @color-black;
text-shadow: inset 0px 1px 0px rgba(0,0,0,.5);
//color:@color-emphasis;
border-bottom:1px solid @color-black;
text-align:center;
height:2em;
}
cursor:pointer;
/*
&.ok, &.up{
.statusTable(@color-ok);
}
&.warning {
.statusTable(@color-warning);
}
&.warning.handled {
.statusTable(@color-warning-handled);
}
&.critical, &.down {
.statusTable(@color-critical);
}
&.critical.handled, &.down.handled {
.statusTable(@color-critical-handled);
}
&.unknown, &.unreachable {
.statusTable(@color-unknown);
}
&.unknown.handled, &.unreachable.handled {
.statusTable(@color-unknown-handled);
}
&.pending, &.pending {
.statusTable(@color-pending);
}
*/
}
td {;
padding:0.1em;
padding-left:0.2em;
padding-right:0.3em;
}
}
}
table.subTable {
border:lighten(@color-emphasis,20%);
padding:0.5em;
width:100%;
th {
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
color:@color-black;
padding: 0.5em;
border:1px solid lighten(@color-emphasis,20%);
}
tr {
td {
padding: 0.5em;
border-left:1px solid lighten(@color-emphasis,20%);
border-right:1px solid lighten(@color-emphasis,20%);
&:first-child {
font-weight: bold;
text-shadow: 0px 1px 0px rgba(255,255,255,.5);
color:@color-black;
}
}
}
}

View File

@ -0,0 +1,99 @@
/**
* Left toolbar
*/
ul.icinga-navigation.nav.nav-tabs {
height:100%;
overflow-y:auto;
// overflow-x:hidden;
-webkit-overflow-scroll:touch;
li {
a {
font-size: 12px;
color: @color-dark;
}
&.section-end {
margin-bottom:1.5em;
}
}
}
/**
* Global tabbar overrides
*/
ul.nav.nav-tabs {
-webkit-overflow-scroll:touch;
li {
a {
font-size: 12px;
color: @color-dark;
}
}
}
.colorize(@color) {
background-color:@color;
-moz-box-shadow: inset 0 0 4px 1px darken(@color,20%);
-webkit-box-shadow: inset 0 0 4px 1px darken(@color,20%);
box-shadow: inset 0 0 4px 1px darken(@color,20%);
}
.tovi {
clear:both;
float:none;
padding-top:0.3em;
padding-left:1em;
ul.tov_item {
margin: 0px;
padding: 0px;
list-style:none;
font-size:0.7em;
display: block;
float:none;
clear:both;
li {
padding:0px;
padding-left:0.2em;
padding-right:0.2em;
float:right!important;
min-width:2.5em;
text-align:center;
line-height:1.5em;
border-radius:2px;
&.empty {
display:none;
}
&.itemlabel {
color: #dedede;
text-align:left;
width: 5em;
float:left!important;
}
}
.critical, .down {
.colorize(@color-critical);
color: #cecece;
}
.warning {
.colorize(@color-warning);
color: #121212;
}
.unknown, .unreachable {
.colorize(@color-unknown);
}
.ok, .up {
.colorize(@color-ok);
}
.pending {
.colorize(@color-pending);
}
.total {
.colorize(@color-white);
}
}
}

101
public/css/dataviews.less Executable file
View File

@ -0,0 +1,101 @@
/**
*
* Icinga dataviews
*
**/
.gradient(@start,@end) {
background-color: @start;
background-image: -webkit-gradient(linear, left top, left bottom, from(@start), to(@end));
background-image: -webkit-linear-gradient(top, @start, @end);
background-image: -moz-linear-gradient(top, @start, @end);
background-image: -ms-linear-gradient(top, @start, @end);
background-image: -o-linear-gradient(top, @start, @end);
}
.status-indicator() {
&.critical, &.down, &.CRITICAL, &.DOWN {
background-color:@color-critical!important;
color: white!important;
}
&.pending, &.PENDING {
background-color:@color-pending!important;
color: white!important;
}
&.ok, &.up, &.OK, &.UP {
background-color:@color-ok!important;
}
&.warning, &WARNING {
background-color:@color-warning!important;
}
&.unknown, &.unreachable, &UNKNOWN, &UNREACHABLE {
background-color:@color-unknown!important;
}
}
/* Begin dataview list type */
.icinga-dataview.list {
font-size:10px;
table {
width: 100%;
margin:0px;
padding:0px;
th {
.gradient(lighten(@color-emphasis,30%),lighten(@color-emphasis,10%));
}
td {
border-bottom: 1px solid @color-emphasis;
background-color: lighten(@color-light,30%);
max-height: 25px;
height: 25px;
overflow: hidden;
&.status {
/* .status-indicator();*/
width:50px;
overflow:hidden;
border-right: 1px solid @color-emphasis;
}
&:nth-child(n+2) {
border-right: 1px solid lighten(@color-emphasis,40%);
}
&:last-child {
border-right:1px solid @color-black;
}
&.servicename {
}
cursor:pointer
}
tr {
&:nth-child(odd) td {
background-color: lighten(@color-light,25%);
}
&.active-row td {
&:last-child {
.gradient-hard-left(lighten(@color-light,25%),lighten(@color-emphasis,30%),98%);
border-right: 2px solid lighten(@color-emphasis,30%);
}
}
}
}
}
/*end datatype listtype*/

View File

@ -0,0 +1,34 @@
<style type="text/css">
<!--
.style1 {
font-family: Arial, Helvetica, sans-serif
}
.style3 {font-family: "Arial Black", Arial, sans-serif; }
.style5 {font-family: Arial, Helvetica, sans-serif; font-weight: bold; }
.style7 {font-size: 24px}
.style8 {font-size: 36px}
.style9 {font-family: "Arial Black", Arial, sans-serif; color: #CC0000; font-weight: bold; }
-->
</style>
<p class="style3"><span class="style7"><span class="style8">[ ]</span>Studio<span class="style5">kmzero</span></span></p>
<p class="style1"><span class="style3"><strong>END-USER LICENSE AGREEMENT FOR THE INCLUDED STUDIO KMZERO FONTS:
</strong></span><br />
This End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and Studio Kmzero for the digital typeface software - hereafter “fonts” included in this package: </p>
<p class="style9">DUEPUNTOZERO, DUEPUNTOZERO BOLD</p>
<p class="style1">
The fonts included are protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties.
These fonts are licensed to you for personal / noncommercial use only. You're granted the following rights: </p>
<p class="style1">01] You may install and use an unlimited number of copies of the fonts. </p>
<p class="style1">02] You can make archival copies of the fonts for your own purposes. </p>
<p class="style1">03] You may modify the fonts for your own purposes, but the copyright remains with Studio Kmzero, and you are not allowed to distribuite renamed, edited or derivative works, either for profit or not. </p>
<p class="style1">To acquire a complete licence for commercial use (allowing file release to a prepress bureau and embedding in other software files, such as Portable Document Format (PDF) or Flash files), you can contact us at info@studiokmzero.com, or buy this font online through our reseller <a href="http://www.zerofonts.com">http://www.zerofonts.com/</a>. </p>
<span class="style1">
<OPZIONALE SOLO NEI FONTS DI EGON>
<span class="style9">
</span>
<p class="style1">Studio Kmzero expressly disclaims any warranty for the fonts. The fonts and any related documentation is provided "as is" without warranty of any kind, either express or implied, including, without limitation, the implied warranties or merchantability, fitness for a particular purpose, or noninfringement. The entire risk arising out of use or performance of the fonts remains with you. Copies of the fonts may not be distributed or shared in any way (for profit or free of charge) either on a standalone basis or included as part of your own product.</p>
<p class="style1">In no event shall Studio Kmzero or its suppliers be liable for any damages whatsoever (including, without limitation, damages for loss of business profits, business interruption, loss of business information, or any other pecuniary loss) arising out of the use of or inability to use this product, even if Studio Kmzero has been advised of the possibility of such damages. Because some states/jurisdictions do not allow the exclusion or limitation of liability for consequential or incidental damages, the above limitation may not apply to you.</p>
<p class="style1"><strong>QUESTIONS </strong></p>
<p class="style1">Should you have any questions concerning this EULA, please contact Studio Kmzero via its website at <a href="http:/www.studiokmzero.com">http:/www.studiokmzero.com</a>, or write directly to Studio Kmzero, Via calzaiuoli 9, 50122 Firenze | Italia, t.+39 55 23 96 856, <a href="mailto:info@studiokmzero.com">info@studiokmzero.com</a></p>

View File

View File

View File

426
public/css/icinga.less Executable file
View File

@ -0,0 +1,426 @@
/* BEGIN classictable */
table.classic {
width: 100%;
border: none;
table-layout: fixed;
font-size: 0.8em;
}
table.classic th {
text-align: left;
background-color: #2F3D41;
color: white;
padding-left: 0.5em;
}
table.classic td {
padding-left: 0.5em;
padding-right: 0.5em;
border: none;
}
table.classic tbody tr {
border-left: none;
border-bottom: 2px solid white;
}
table.classic tbody tr td {
background-color: #e7e7e7;
overflow: hidden;
}
table.classic tbody tr:hover td {
background-color: #ccc;
cursor: pointer;
}
/* END classictable */
/* BEGIN servicetest table */
table.servicetest {
width: 100%;
table-layout: fixed;
}
table.servicetest th {
text-align: left;
}
table.servicetest td.state {
/*
border-radius: 0.4em;
-moz-border-radius: 0.4em;
*/
}
table.servicetest td {
padding: 0.2em 0.6em 0.2em 0.6em;
white-space: nowrap;
overflow: hidden;
}
table.servicetest td.state {
font-size: 0.7em;
}
table.servicetest tr {
border-bottom: 0.125em solid white;
}
table.servicetest tbody tr:hover {
background-color: #ccc;
cursor: pointer;
}
/* END servicetest table */
/* BEGIN pivot */
table.pivot {
width: 100%;
table-layout: fixed;
}
table.pivot thead th {
/* font-size: 0.7em; */
}
table.pivot tbody td {
text-align: center;
line-height: 1.5em;
border-bottom: 0.125em solid white;
padding: 0.2em 0.5em 0.2em 0.5em;
white-space: nowrap;
overflow: hidden;
border-right: 0.125em solid white;
}
table.pivot tbody td, table.pivot tbody td a {
/* color: white; */
}
table.pivot .ok {
background-color: #00cb33;
}
table.pivot .warning {
background-color: #ffec00;
color: #333;
}
table.pivot .critical {
background-color: #f30;
}
table.pivot .unknown {
background-color: #e066ff;
}
table.pivot .warning.handled {
background-color: #ffff9f;
color: #333;
}
table.pivot .critical.handled {
background-color: #f5a9a9;
}
table.pivot .unknown.handled {
background-color: #eeaeee;
}
table.pivot tbody tr:hover td {
cursor: pointer;
background-color: #333;
color: #ccc
}
/* END pivot */
/* BEGIN actiontable */
table.action {
width: 100%;
}
table.action a {
color: black;
text-decoration: none;
}
table.action tr {
border-bottom: 1px solid #ccc;
}
table.action td.state {
padding: 0;
font-size: 0.7em;
width: 8em;
}
table.action td.state a {
display: block;
margin: 0;
}
table.action tr td {
line-height: 1.1em;
}
table.action thead th {
text-align: left;
}
table.action tbody tr:hover i {
background-image: url("../img/glyphicons-halflings-white.png");
}
table.action tbody tr:hover td {
background-color: #08c;
cursor: pointer;
}
table.action tr td.state, table.action tr td.state a {
text-align: center;
color: white;
}
table.action a:hover {
text-decoration: underline;
}
table.action tbody tr:hover, table.action tbody tr:hover a {
color: white;
cursor: pointer;
}
table.action .ok .state, table.action .up .state, table.action tbody tr.ok:hover, table.action tbody tr.up:hover, table.action .ok.active, table.action .up.active {
background-color: #00cb33;
}
table.action .warning .state, table.action tbody tr.warning:hover, table.action .warning.active {
background-color: #ffec00;
color: #333;
}
table.action .critical .state, table.action .down .state, table.action tbody tr.critical:hover, table.action tbody tr.down:hover, table.action .critical.active, table.action .down.active {
background-color: #f30;
}
table.action .unknown .state, table.action .unreachable .state, table.action tbody tr.unknown:hover, table.action tbody tr.unreachable:hover, table.action .unknown.active, table.action .unreachable.active {
background-color: #e066ff;
}
table.action .warning.handled .state, table.action tbody tr.warning.handled:hover, table.action .warning.handled.active {
background-color: #ffff9f;
color: #333;
}
table.action .pending .state, table.action tbody tr.pending:hover, table.action .pending.active {
background-color: #ccc;
}
table.action tr.warning.handled td a {
color: #333;
}
table.action .critical.handled .state, table.action .down.handled .state, table.action tbody tr.critical.handled:hover, table.action tbody tr.down.handled:hover, table.action .critical.handled.active, table.action .down.handled.active {
background-color: #f5a9a9;
}
table.action tbody tr td.empty, table.action tbody tr:hover td.empty {
background-color: transparent;
cursor: auto;
}
table.action .unknown.handled .state, table.action .unreachable.handled .state, table.action tbody tr.unknown.handled:hover, table.action tbody tr.unreachable.handled:hover, table.action .unknown.handled.active, table.action .unreachable.handled.active {
background-color: #eeaeee;
}
table.action .new .state {
font-weight: bold;
text-decoration: blink;
}
table.action img.icon {
float: right;
}
/* END actiontable */
/* BEGIN benchmark */
pre.benchmark {
font-size: 0.6em;
width: 95%;
/* position: fixed;
bottom: 0;
height: 10em;
*/
overflow: hidden;
/* display: none; */
}
pre.benchmark table {
white-space: nowrap;
overflow: hidden;
}
.icinga-container pre.benchmark {
font-size: 0.6em;
}
/* END benchmark */
/* BEGIN Pagination */
.pagination {
padding: 0.125em;
margin-left: 1.5em;
font-size: 0.68em;
}
.pagination ul {
margin: 0;
padding: 0;
text-align: left; /*Set to "right" to right align pagination interface*/
/* position: fixed;
bottom: 4.4em;*/
}
.pagination li {
list-style-type: none;
display: inline;
padding-bottom: 0.063em;
color: #333;
}
.pagination a, .pagination a:visited, .pagination span {
padding: 0.2em 0.2em;
border: 0.063em solid #333;
border-radius: 0.3em;
text-decoration: none;
color: #333;
}
/* Bootstrap CSS workaround */
.pagination ul > li > a, .pagination ul > li > span {
padding: 0.1em 0.4em;
float: none;
}
.pagination a:hover, .pagination a:active {
color: #000;
background-color: #bbb;
/* border: 0.063em solid #000;*/
}
.pagination a.current {
border-color: #000;
color: #fff !important;
background-color: #333;
font-weight: bold;
cursor: default;
}
.pagination span.disabled {
background-color: white;
cursor: default;
color: #bbb;
border-color: #bbb;
}
/*
.pagination a.prevnext {
font-weight: bold;
}*/
/* END pagination */
/* BEGIN Tabs, icinga-prefix to avoid collision - unused right now */
ul.icinga-tabs {
list-style-type: none;
margin: 0;
padding: 0;
background: #ddd;
width: 100%;
clear: both;
height: 2em;
padding-top: 1em;
}
ul.icinga-tabs li {
float: left;
height: 2em;
margin: 0 0.5em 0 0;
padding: 0;
}
ul.icinga-tabs li a {
text-decoration: none;
padding: 0.5em 1em 0.5em 1em;
color: white;
background: #333;
background: #5d6577;
}
ul.icinga-tabs li a:hover, ul.icinga-tabs li.active a {
color: black;
background: #fff;
background: #AFB4C0;
/* border: 0.125em solid transparent; */
/* border-bottom: none;*/
}
ul.icinga-tabs li.active a {
/* border: 0.125em solid black; */
}
/* END Tabs */
/* BEGIN host-service details */
.host-header h1, .service-header h1, .host-details h1, .service-details h1 {
font-size: 1.3em;
line-height: 1.3em;
margin: 0.2em;
}
.host-header h2, .service-header h2, .host-details h2, .service-details h2 {
font-size: 1.2em;
line-height: 1.2em;
margin: 0.2em;
}
.host-header h3, .service-header h3, .host-details h3, .service-details h3 {
font-size: 1.1em;
line-height: 1.1em;
margin: 0.2em;
}
.host-header .host.icon, .service-header .service.icon {
width: 64px;
height: 64px;
float: left;
}
/* END details */
/* BEGIN dashboard */
.main .dashboard.icinga-container {
float: left;
display: block;
position: relative;
/* height: 23em; */
border: 1px solid #ccc;
margin-left: 1%;
margin-bottom: 1%;
padding: 2px;
font-size: 0.8em;
}
.layout-main-detail .dashboard.icinga-container {
width: 47.3%;
}
.layout-main-detail.collapsed .dashboard.icinga-container {
width: 31.5%;
}
/* END dashboard */

406
public/css/less_rendered.css Executable file
View File

@ -0,0 +1,406 @@
/**
* Default colors for icinga theme
'
**/
/* @color-emphasis: #60687A; */
@font-face {
font-family: 'duepuntozero';
src: url('http://net-test-icinga-vm1.adm.netways.de/milestone1/css/./fonts/duepuntozero.ttf');
}
body {
background-color: #fefefe;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#ffffff));
background-image: -webkit-linear-gradient(top, #fefefe, #ffffff);
background-image: -moz-linear-gradient(top, #fefefe, #ffffff);
background-image: -ms-linear-gradient(top, #fefefe, #ffffff);
background-image: -o-linear-gradient(top, #fefefe, #ffffff);
color: #393b40;
font-family: Verdana, "sans serif";
}
body a {
text-decoration: none;
}
input {
height: 15px !important;
}
html,
body {
height: 100%;
overflow: hidden;
}
body {
overflow: hidden;
}
.main {
position: fixed;
top: 30px;
bottom: 0px;
left: 49px;
right: 0px;
overflow: hidden;
}
.main .icinga-container {
position: absolute;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
.leftbar {
position: fixed;
top: 30px;
bottom: 0px;
left: 0px;
width: 48px;
padding-top: 0.5em;
border-right: 1px solid #606469;
background-color: #ffffff;
}
.leftbar ul {
text-align: center;
padding: 0px;
margin: 0px;
list-style: none;
}
.leftbar ul a {
display: block;
background-color: #fefefe;
color: #393b40;
margin: 4px;
margin-top: 0px;
width: 38px;
height: 38px;
position: relative;
text-align: center;
line-height: 38px;
border-radius: 2px;
box-shadow: 1px 1px 2px #ffffff, inset 0px 1px 2px #ffffff;
}
.leftbar ul a:hover {
box-shadow: 2px 2px 5px #ffffff;
}
.bottombar {
position: fixed;
bottom: 0px;
left: 48px;
right: 0px;
height: 30px;
background-color: #212225;
}
.topbar {
position: fixed;
top: 0px;
left: 0px;
right: 0px;
height: 30px;
background-color: #ffffff;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#cccccc));
background-image: -webkit-linear-gradient(top, #ffffff, #cccccc);
background-image: -moz-linear-gradient(top, #ffffff, #cccccc);
background-image: -ms-linear-gradient(top, #ffffff, #cccccc);
background-image: -o-linear-gradient(top, #ffffff, #cccccc);
}
.topbar .icinga-breadcrumb {
padding-left: 0.3em;
font-family: duepuntozero;
font-size: 22px;
color: #aeb4ba;
text-shadow: 2px 2px 1px #303439;
}
.topbar .icinga-breadcrumb a {
text-decoration: none;
color: #aeb4ba;
text-shadow: 2px 2px 1px #303439;
}
/**
*
* Icinga dataviews
*
**/
/* Begin dataview list type */
.icinga-dataview.list {
font-size: 10px;
}
.icinga-dataview.list table {
width: 100%;
margin: 0px;
padding: 0px;
}
.icinga-dataview.list table th {
background-color: #ffffff;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#ffffff));
background-image: -webkit-linear-gradient(top, #ffffff, #ffffff);
background-image: -moz-linear-gradient(top, #ffffff, #ffffff);
background-image: -ms-linear-gradient(top, #ffffff, #ffffff);
background-image: -o-linear-gradient(top, #ffffff, #ffffff);
}
.icinga-dataview.list table td {
border-bottom: 1px solid #ffffff;
background-color: #ffffff;
max-height: 25px;
height: 25px;
overflow: hidden;
cursor: pointer;
}
.icinga-dataview.list table td.status {
background-image: none!important;
width: 50px;
overflow: hidden;
border-right: 1px solid #ffffff;
}
.icinga-dataview.list table td.status.critical,
.icinga-dataview.list table td.status.down,
.icinga-dataview.list table td.status.CRITICAL,
.icinga-dataview.list table td.status.DOWN {
background-color: #ff2222 !important;
color: white!important;
}
.icinga-dataview.list table td.status.pending,
.icinga-dataview.list table td.status.PENDING {
background-color: #aa22ff !important;
color: white!important;
}
.icinga-dataview.list table td.status.ok,
.icinga-dataview.list table td.status.up,
.icinga-dataview.list table td.status.OK,
.icinga-dataview.list table td.status.UP {
background-color: #22ff22 !important;
}
.icinga-dataview.list table td.status.warning,
.icinga-dataview.list table td.statusWARNING {
background-color: #ffff00 !important;
}
.icinga-dataview.list table td.status.unknown,
.icinga-dataview.list table td.status.unreachable,
.icinga-dataview.list table td.statusUNKNOWN,
.icinga-dataview.list table td.statusUNREACHABLE {
background-color: #ff9922 !important;
}
.icinga-dataview.list table td:nth-child(n+2) {
border-right: 1px solid #ffffff;
}
.icinga-dataview.list table td:last-child {
border-right: 1px solid #393b40;
}
.icinga-dataview.list table tr:nth-child(odd) td {
background-color: #f3f4f5;
}
.icinga-dataview.list table tr.active-row td:last-child {
background: #f3f4f5;
/* Old browsers */
background: -moz-linear-gradient(left, #f3f4f5 0%, #ffffff 98%, #ffffff 98%, #ffffff 100%);
/* FF3.6+ */
background: -webkit-gradient(linear, left top, right top, color-stop(0%, #f3f4f5), color-stop(60%, #f3f4f5), color-stop(98%, #ffffff, color-stop(100%, #ffffff)));
/* Chrome,Safari4+ */
background: -webkit-linear-gradient(left, #f3f4f5 0%, #ffffff 98%, #ffffff 98%, #ffffff 100%);
/* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(left, #f3f4f5 0%, #ffffff 98%, #ffffff 98%, #ffffff 100%);
/* Opera 11.10+ */
background: linear-gradient(to right, #f3f4f5 0%, #ffffff 98%, #ffffff 98%, #ffffff 100%);
/* W3C */
cursor: pointer;
border-right: 2px solid #ffffff;
}
/*end datatype listtype*/
/**
*
* Two column Main/detail layout used for overviews
*
**/
.layout-main-detail.collapsed #icinga-main {
right: 0px;
box-shadow: none;
}
.layout-main-detail.collapsed #icinga-detail {
display: hidden;
left: 100%;
}
.layout-main-detail .controls {
background-color: #ffffff;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#ffffff));
background-image: -webkit-linear-gradient(top, #ffffff, #ffffff);
background-image: -moz-linear-gradient(top, #ffffff, #ffffff);
background-image: -ms-linear-gradient(top, #ffffff, #ffffff);
background-image: -o-linear-gradient(top, #ffffff, #ffffff);
height: 26px;
padding-top: 4px;
position: absolute;
top: 0px;
overflow: hidden;
left: 0px;
right: 0px;
}
.layout-main-detail #icinga-main {
position: absolute;
left: 0px;
right: 50%;
background-color: #fefefe;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#ffffff));
background-image: -webkit-linear-gradient(top, #fefefe, #ffffff);
background-image: -moz-linear-gradient(top, #fefefe, #ffffff);
background-image: -ms-linear-gradient(top, #fefefe, #ffffff);
background-image: -o-linear-gradient(top, #fefefe, #ffffff);
min-width: 400px;
top: 0px;
bottom: 0px;
-webkit-transition: right 0.5s ease;
-moz-transition: right 0.5s ease;
-o-transition: right 0.5s ease;
-ms-transition: right 0.5s ease;
transition: right 0.5s ease;
overflow-x: hidden;
z-index: 11;
}
.layout-main-detail #icinga-main .content {
position: absolute;
top: 30px;
bottom: 0px;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
left: 0px;
right: -1px;
}
.layout-main-detail #icinga-detail {
position: absolute;
top: 0px;
left: 50%;
right: 0px;
bottom: 0px;
z-index: 10;
-webkit-transition: left 0.5s ease;
-moz-transition: left 0.5s ease;
-o-transition: left 0.5s ease;
-ms-transition: left 0.5s ease;
transition: left 0.5s ease;
background-color: #ffffff;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#ffffff));
background-image: -webkit-linear-gradient(top, #ffffff, #ffffff);
background-image: -moz-linear-gradient(top, #ffffff, #ffffff);
background-image: -ms-linear-gradient(top, #ffffff, #ffffff);
background-image: -o-linear-gradient(top, #ffffff, #ffffff);
}
.layout-main-detail #icinga-detail .content {
position: absolute;
top: 30px;
left: 0px;
right: 0px;
bottom: 0px;
padding: 0.5em;
overflow: auto;
-webkit-overflow-scrolling: touch;
/**
* Detail views underneath the content class
**/
font-size: 12px;
}
.layout-main-detail #icinga-detail .content .object-name {
display: block;
float: none;
clear: both;
}
@media (min-width: 750px) {
.layout-main-detail #icinga-detail .content .object-name .icon {
width: 32px;
height: 32px;
float: left;
border: 1px dashed grey;
margin-right: 1em;
clear: left;
box-shadow: 1px 1px 1px #e6e6e6;
}
}
@media (max-width: 750px) {
.layout-main-detail #icinga-detail .content .object-name .icon {
display: none;
}
}
.layout-main-detail #icinga-detail .content .object-name .headings h1 {
font-size: 16px;
margin: 0px;
padding: 0px;
line-height: 1.0em;
}
.layout-main-detail #icinga-detail .content .object-name .headings h2 {
font-size: 14px;
margin: 0px;
font-weight: normal;
padding: 0px;
line-height: 1.5em;
}
.layout-main-detail #icinga-detail .content .status {
background-image: none!important;
border: 1px solid #393b40;
padding: 0.20em;
margin: 0.5em;
width: 95%;
text-align: center;
box-shadow: 1px 1px 1px #e6e6e6;
}
.layout-main-detail #icinga-detail .content .status.critical,
.layout-main-detail #icinga-detail .content .status.down,
.layout-main-detail #icinga-detail .content .status.CRITICAL,
.layout-main-detail #icinga-detail .content .status.DOWN {
background-color: #ff2222 !important;
color: white!important;
}
.layout-main-detail #icinga-detail .content .status.pending,
.layout-main-detail #icinga-detail .content .status.PENDING {
background-color: #aa22ff !important;
color: white!important;
}
.layout-main-detail #icinga-detail .content .status.ok,
.layout-main-detail #icinga-detail .content .status.up,
.layout-main-detail #icinga-detail .content .status.OK,
.layout-main-detail #icinga-detail .content .status.UP {
background-color: #22ff22 !important;
}
.layout-main-detail #icinga-detail .content .status.warning,
.layout-main-detail #icinga-detail .content .statusWARNING {
background-color: #ffff00 !important;
}
.layout-main-detail #icinga-detail .content .status.unknown,
.layout-main-detail #icinga-detail .content .status.unreachable,
.layout-main-detail #icinga-detail .content .statusUNKNOWN,
.layout-main-detail #icinga-detail .content .statusUNREACHABLE {
background-color: #ff9922 !important;
}
.layout-main-detail #icinga-detail .content .nav-tabs {
border-bottom: 1px solid #ffffff;
}
.layout-main-detail #icinga-detail .content .nav-tabs li.active a {
background-color: #787d84;
color: #aeb1b4;
height: 15px;
}
.layout-main-detail #icinga-detail .content .nav-tabs li a {
height: 15px;
border-color: #606469;
color: #393b40;
}
.layout-main-detail #icinga-detail .content .nav-tabs li a:hover {
background-color: #c8cacd;
color: #393b40;
}
.layout-main-detail #icinga-detail .content .output_text {
font-family: monaco,monospacen;
width: 95%;
text-align: left;
padding: 0.5em;
box-shadow: inset 1px 1px 2px #929ba3;
background-color: #fefefe;
}
.layout-main-detail #icinga-detail .content .detail label {
width: 125px;
display: block;
float: left;
clear: left;
font-weight: bold;
}
/**
* End of main/detail layout
**/

219
public/css/main.css Executable file
View File

@ -0,0 +1,219 @@
/* ==========================================================================
HTML5 Boilerplate styles - h5bp.com (generated via initializr.com)
========================================================================== */
html,
button,
input,
select,
textarea {
color: #222;
}
html {
overflow:auto;
}
body {
font-size: 1em;
line-height: 1.4;
}
::-moz-selection {
background: #b3d4fc;
text-shadow: none;
}
::selection {
background: #b3d4fc;
text-shadow: none;
}
hr {
display: block;
height: 1px;
border: 0;
border-top: 1px solid #ccc;
margin: 1em 0;
padding: 0;
}
img {
vertical-align: middle;
}
fieldset {
border: 0;
margin: 0;
padding: 0;
}
textarea {
resize: vertical;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
/* ==========================================================================
Author's custom styles
========================================================================== */
/* ==========================================================================
Media Query
========================================================================== */
@media only screen and (min-width: 35em) {
}
@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min-resolution: 144dpi) {
}
/* ==========================================================================
Helper classes
========================================================================== */
.ir {
background-color: transparent;
border: 0;
overflow: hidden;
*text-indent: -9999px;
}
.ir:before {
content: "";
display: block;
width: 0;
height: 100%;
}
.hidden {
display: none !important;
visibility: hidden;
}
.visuallyhidden {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
.visuallyhidden.focusable:active,
.visuallyhidden.focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
width: auto;
}
.invisible {
visibility: hidden;
}
.clearfix:before,
.clearfix:after {
content: " ";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
*zoom: 1;
}
/* ==========================================================================
Print styles
========================================================================== */
@media print {
* {
background: transparent !important;
color: #000 !important; /* Black prints faster: h5bp.com/s */
box-shadow: none !important;
text-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
/*
* Don't show links for images, or javascript/internal links
*/
.ir a:after,
a[href^="javascript:"]:after,
a[href^="#"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group; /* h5bp.com/t */
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
@page {
margin: 0.5cm;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
}

504
public/css/normalize.css vendored Executable file
View File

@ -0,0 +1,504 @@
/*! normalize.css v1.0.1 | MIT License | git.io/normalize */
/* ==========================================================================
HTML5 display definitions
========================================================================== */
/*
* Corrects `block` display not defined in IE 6/7/8/9 and Firefox 3.
*/
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
nav,
section,
summary {
display: block;
}
/*
* Corrects `inline-block` display not defined in IE 6/7/8/9 and Firefox 3.
*/
audio,
canvas,
video {
display: inline-block;
*display: inline;
*zoom: 1;
}
/*
* Prevents modern browsers from displaying `audio` without controls.
* Remove excess height in iOS 5 devices.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/*
* Addresses styling for `hidden` attribute not present in IE 7/8/9, Firefox 3,
* and Safari 4.
* Known issue: no IE 6 support.
*/
[hidden] {
display: none;
}
/* ==========================================================================
Base
========================================================================== */
/*
* 1. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using
* `em` units.
* 2. Prevents iOS text size adjust after orientation change, without disabling
* user zoom.
*/
html {
font-size: 100%; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
-ms-text-size-adjust: 100%; /* 2 */
}
/*
* Addresses `font-family` inconsistency between `textarea` and other form
* elements.
*/
html,
button,
input,
select,
textarea {
font-family: sans-serif;
}
/*
* Addresses margins handled incorrectly in IE 6/7.
*/
body {
margin: 0;
}
/* ==========================================================================
Links
========================================================================== */
/*
* Addresses `outline` inconsistency between Chrome and other browsers.
*/
a:focus {
outline: thin dotted;
}
/*
* Improves readability when focused and also mouse hovered in all browsers.
*/
a:active,
a:hover {
outline: 0;
}
/* ==========================================================================
Typography
========================================================================== */
/*
* Addresses font sizes and margins set differently in IE 6/7.
* Addresses font sizes within `section` and `article` in Firefox 4+, Safari 5,
* and Chrome.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
h2 {
font-size: 1.5em;
margin: 0.83em 0;
}
h3 {
font-size: 1.17em;
margin: 1em 0;
}
h4 {
font-size: 1em;
margin: 1.33em 0;
}
h5 {
font-size: 0.83em;
margin: 1.67em 0;
}
h6 {
font-size: 0.75em;
margin: 2.33em 0;
}
/*
* Addresses styling not present in IE 7/8/9, Safari 5, and Chrome.
*/
abbr[title] {
border-bottom: 1px dotted;
}
/*
* Addresses style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome.
*/
b,
strong {
font-weight: bold;
}
blockquote {
margin: 1em 40px;
}
/*
* Addresses styling not present in Safari 5 and Chrome.
*/
dfn {
font-style: italic;
}
/*
* Addresses styling not present in IE 6/7/8/9.
*/
mark {
background: #ff0;
color: #000;
}
/*
* Addresses margins set differently in IE 6/7.
*/
p,
pre {
margin: 1em 0;
}
/*
* Corrects font family set oddly in IE 6, Safari 4/5, and Chrome.
*/
code,
kbd,
pre,
samp {
font-family: monospace, serif;
_font-family: 'courier new', monospace;
font-size: 1em;
}
/*
* Improves readability of pre-formatted text in all browsers.
*/
pre {
white-space: pre;
white-space: pre-wrap;
word-wrap: break-word;
}
/*
* Addresses CSS quotes not supported in IE 6/7.
*/
q {
quotes: none;
}
/*
* Addresses `quotes` property not supported in Safari 4.
*/
q:before,
q:after {
content: '';
content: none;
}
/*
* Addresses inconsistent and variable font size in all browsers.
*/
small {
font-size: 80%;
}
/*
* Prevents `sub` and `sup` affecting `line-height` in all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
/* ==========================================================================
Lists
========================================================================== */
/*
* Addresses margins set differently in IE 6/7.
*/
dl,
menu,
ol,
ul {
margin: 1em 0;
}
dd {
margin: 0 0 0 40px;
}
/*
* Addresses paddings set differently in IE 6/7.
*/
menu,
ol,
ul {
padding: 0 0 0 40px;
}
/*
* Corrects list images handled incorrectly in IE 7.
*/
nav ul,
nav ol {
list-style: none;
list-style-image: none;
}
/* ==========================================================================
Embedded content
========================================================================== */
/*
* 1. Removes border when inside `a` element in IE 6/7/8/9 and Firefox 3.
* 2. Improves image quality when scaled in IE 7.
*/
img {
border: 0; /* 1 */
-ms-interpolation-mode: bicubic; /* 2 */
}
/*
* Corrects overflow displayed oddly in IE 9.
*/
svg:not(:root) {
overflow: hidden;
}
/* ==========================================================================
Figures
========================================================================== */
/*
* Addresses margin not present in IE 6/7/8/9, Safari 5, and Opera 11.
*/
figure {
margin: 0;
}
/* ==========================================================================
Forms
========================================================================== */
/*
* Corrects margin displayed oddly in IE 6/7.
*/
form {
margin: 0;
}
/*
* Define consistent border, margin, and padding.
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/*
* 1. Corrects color not being inherited in IE 6/7/8/9.
* 2. Corrects text not wrapping in Firefox 3.
* 3. Corrects alignment displayed oddly in IE 6/7.
*/
legend {
border: 0; /* 1 */
padding: 0;
white-space: normal; /* 2 */
*margin-left: -7px; /* 3 */
}
/*
* 1. Corrects font size not being inherited in all browsers.
* 2. Addresses margins set differently in IE 6/7, Firefox 3+, Safari 5,
* and Chrome.
* 3. Improves appearance and consistency in all browsers.
*/
button,
input,
select,
textarea {
font-size: 100%; /* 1 */
margin: 0; /* 2 */
vertical-align: baseline; /* 3 */
*vertical-align: middle; /* 3 */
}
/*
* Addresses Firefox 3+ setting `line-height` on `input` using `!important` in
* the UA stylesheet.
*/
button,
input {
line-height: normal;
}
/*
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
* and `video` controls.
* 2. Corrects inability to style clickable `input` types in iOS.
* 3. Improves usability and consistency of cursor style between image-type
* `input` and others.
* 4. Removes inner spacing in IE 7 without affecting normal text inputs.
* Known issue: inner spacing remains in IE 6.
*/
button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button; /* 2 */
cursor: pointer; /* 3 */
*overflow: visible; /* 4 */
}
/*
* Re-set default cursor for disabled elements.
*/
button[disabled],
input[disabled] {
cursor: default;
}
/*
* 1. Addresses box sizing set to content-box in IE 8/9.
* 2. Removes excess padding in IE 8/9.
* 3. Removes excess padding in IE 7.
* Known issue: excess padding remains in IE 6.
*/
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
*height: 13px; /* 3 */
*width: 13px; /* 3 */
}
/*
* 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome.
* 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome
* (include `-moz` to future-proof).
*/
input[type="search"] {
-webkit-appearance: textfield; /* 1 */
-moz-box-sizing: content-box;
-webkit-box-sizing: content-box; /* 2 */
box-sizing: content-box;
}
/*
* Removes inner padding and search cancel button in Safari 5 and Chrome
* on OS X.
*/
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/*
* Removes inner padding and border in Firefox 3+.
*/
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
/*
* 1. Removes default vertical scrollbar in IE 6/7/8/9.
* 2. Improves readability and alignment in all browsers.
*/
textarea {
overflow: auto; /* 1 */
vertical-align: top; /* 2 */
}
/* ==========================================================================
Tables
========================================================================== */
/*
* Remove most spacing between table cells.
*/
table {
border-collapse: collapse;
border-spacing: 0;
}

50
public/css/normalize.min.css vendored Executable file
View File

@ -0,0 +1,50 @@
/*! normalize.css v1.0.1 | MIT License | git.io/normalize */
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section,summary{display:block}
audio,canvas,video{display:inline-block;*display:inline;*zoom:1}
audio:not([controls]){display:none;height:0}
[hidden]{display:none}
html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}
html,button,input,select,textarea{font-family:sans-serif}
body{margin:0}
a:focus{outline:thin dotted}
a:active,a:hover{outline:0}
h1{font-size:2em;margin:.67em 0}
h2{font-size:1.5em;margin:.83em 0}
h3{font-size:1.17em;margin:1em 0}
h4{font-size:1em;margin:1.33em 0}
h5{font-size:.83em;margin:1.67em 0}
h6{font-size:.75em;margin:2.33em 0}
abbr[title]{border-bottom:1px dotted}
b,strong{font-weight:bold}
blockquote{margin:1em 40px}
dfn{font-style:italic}
mark{background:#ff0;color:#000}
p,pre{margin:1em 0}
code,kbd,pre,samp{font-family:monospace,serif;_font-family:'courier new',monospace;font-size:1em}
pre{white-space:pre;white-space:pre-wrap;word-wrap:break-word}
q{quotes:none}
q:before,q:after{content:'';content:none}
small{font-size:80%}
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
sup{top:-0.5em}
sub{bottom:-0.25em}
dl,menu,ol,ul{margin:1em 0}
dd{margin:0 0 0 40px}
menu,ol,ul{padding:0 0 0 40px}
nav ul,nav ol{list-style:none;list-style-image:none}
img{border:0;-ms-interpolation-mode:bicubic}
svg:not(:root){overflow:hidden}
figure{margin:0}
form{margin:0}
fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
legend{border:0;padding:0;white-space:normal;*margin-left:-7px}
button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}
button,input{line-height:normal}
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;*overflow:visible}
button[disabled],input[disabled]{cursor:default}
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*height:13px;*width:13px}
input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}
input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
textarea{overflow:auto;vertical-align:top}
table{border-collapse:collapse;border-spacing:0}

65
public/css/pdfprint.less Normal file
View File

@ -0,0 +1,65 @@
td {
font-size: 14px;
}
table.action {
border-spacing: 1px 1px;
padding:5px 2px 5px 2px;
width: 1560px;
}
a {
text-decoration: none;
color: black;
}
.nav, .pagination, .dontprint {
display: none;
}
tr td.state {
width: 100px;
text-align: center;
vertical-align: middle;
color: white;
}
table.action .ok .state, table.action .up .state, table.action .ok.active, table.action .up.active {
background-color: #00cb33;
}
table.action .warning .state, table.action .warning.active {
background-color: #ffec00;
color: #333;
}
table.action .critical .state, table.action .down .state, table.action tbody tr.critical:hover, table.action .critical.active, table.action .down.active {
background-color: #f30;
}
table.action .unknown .state, table.action .unreachable .state, table.action .unknown.active, table.action .unreachable.active {
background-color: #e066ff;
}
table.action .warning.handled .state, table.action .warning.handled.active {
background-color: #ffff9f;
color: #333;
}
table.action .pending .state, table.action .pending.active {
background-color: #ccc;
}
table.action .critical.handled .state, table.action .down.handled .state, table.action .critical.handled.active, table.action .down.handled.active {
background-color: #f5a9a9;
}
table.action tbody tr td.empty {
background-color: transparent;
cursor: auto;
}
table.action .unknown.handled .state, table.action .unreachable.handled .state, table.action .unknown.handled.active, table.action .unreachable.handled.active {
background-color: #eeaeee;
}

22
public/css/themes/default.less Executable file
View File

@ -0,0 +1,22 @@
/**
* Default colors for icinga theme
'
**/
@color-light: #AEB4BA;
@color-dark: #3F4037;
@color-black: #1b1b1b;
@color-mid: #606469;
@color-emphasis: #989898;
@color-white: #fefefe;
@color-critical: #ff2222;
@color-unknown: #ff9922;
@color-warning: #ffff00;
@color-ok: darken(#22ff22,20%);
@color-pending: #aa22ff;
@color-critical-handled: #f5a9a9;
@color-unknown-handled: #e066ff;
@color-warning-handled: #cccc00;

1109
public/css/vendor/bootstrap-responsive.css vendored Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

6158
public/css/vendor/bootstrap.css vendored Executable file

File diff suppressed because it is too large Load Diff

9
public/css/vendor/bootstrap.min.css vendored Executable file

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
public/css/vendor/img/glyphicons-halflings.png vendored Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

1
public/css/vendor/jquery.qtip.min.css vendored Executable file

File diff suppressed because one or more lines are too long

15
public/css/vendor/jquery.tooltip.css vendored Executable file
View File

@ -0,0 +1,15 @@
#tooltip {
position: absolute;
z-index: 3000;
border: 1px solid #111;
background-color: #eee;
padding: 5px;
opacity: 0.85;
}
#tooltip h3, #tooltip div { margin: 0; }

BIN
public/favicon.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

BIN
public/img/bpaddon/ack.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

BIN
public/img/bpaddon/downtime.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

BIN
public/img/bpaddon/help.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

BIN
public/img/bpaddon/op_and.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 680 B

BIN
public/img/bpaddon/op_min1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

BIN
public/img/bpaddon/op_min2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 B

BIN
public/img/bpaddon/op_min3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

BIN
public/img/bpaddon/op_min4.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 606 B

BIN
public/img/bpaddon/op_min5.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 B

BIN
public/img/bpaddon/op_min6.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 B

BIN
public/img/bpaddon/op_min7.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

BIN
public/img/bpaddon/op_min8.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

BIN
public/img/bpaddon/op_min9.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 647 B

BIN
public/img/bpaddon/op_or.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

BIN
public/img/classic/ack.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 841 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

BIN
public/img/classic/comment.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

BIN
public/img/classic/downtime.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
public/img/classic/flapping.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

BIN
public/img/classic/gear.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

BIN
public/img/classic/ndisabled.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
public/img/classic/user.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

Some files were not shown because too many files have changed in this diff Show More