From 53911b3dfa790db40e326937ebe25b45a1d2d1ca Mon Sep 17 00:00:00 2001 From: yeoldegrove Date: Mon, 24 Jun 2019 16:10:35 +0200 Subject: [PATCH] added 4.2 (changed sources from subversion to git) --- Dockerfile/dockbix-xxl-4.2/Dockerfile | 213 ++ .../container-files-base/config/bootstrap.sh | 48 + .../config/init/10-nginx-cache-dirs.sh | 13 + .../config/init/10-nginx-data-dirs.sh | 20 + .../config/init/10-nginx-internal-proxy.sh | 21 + .../config/init/10-nginx-stub-status.sh | 23 + .../config/init/10-php-fpm-status.sh | 24 + .../config/init/vhost-proxy-https.conf | 14 + .../config/init/vhost-proxy.conf | 11 + .../etc/nginx/addon.d/fastcgi-cache.example | 23 + .../etc/nginx/addon.d/http_realip.conf | 3 + .../etc/nginx/addon.d/php-upstream.conf | 3 + .../etc/nginx/conf.d/default-01-security.conf | 5 + .../etc/nginx/conf.d/default-10-expires.conf | 8 + .../nginx/conf.d/default-20-common-files.conf | 8 + .../etc/nginx/conf.d/fpm-status.conf | 8 + .../etc/nginx/conf.d/php-location.conf | 4 + .../etc/nginx/conf.d/stub-status.conf | 5 + .../etc/nginx/fastcgi_params | 44 + .../etc/nginx/hosts.d/default.conf | 17 + .../container-files-base/etc/nginx/nginx.conf | 27 + .../etc/nginx/nginx.d/10-mime.conf | 2 + .../etc/nginx/nginx.d/20-logs.conf | 2 + .../etc/nginx/nginx.d/30-gzip.conf | 9 + .../etc/nginx/nginx.d/80-buffers.conf | 7 + .../etc/nginx/nginx.d/80-proxy-buffers.conf | 5 + .../etc/nginx/nginx.d/90-misc.conf | 12 + .../container-files-base/etc/php-fpm.conf | 7 + .../etc/php-fpm.d/www.conf | 17 + .../etc/php.d/zz-php-56.ini | 4 + .../container-files-base/etc/php.d/zz-php.ini | 19 + .../etc/supervisor.d/nginx.conf | 10 + .../etc/supervisor.d/php-fpm.conf | 5 + .../container-files-base/etc/supervisord.conf | 24 + .../config/init/11-xxl.sh | 155 ++ .../config/init/12-xxl-ping.sh | 6 + .../config/init/14-xxl-env-variables.sh | 8 + .../etc/supervisor.d/analytics.conf | 12 + .../zabbix/api/01-enable-zabbix-server.api | 1 + .../api/02-create-regular-expressions.sql | 14 + .../api/03-Zabbix-Template-App-Docker.xml | 461 ++++ .../04-Zabbix-Template-App-Docker-active.xml | 461 ++++ ...emplate-OS-Linux-for-Dockbix-Agent-XXL.xml | 2326 +++++++++++++++++ ...enable-dockbix-agent-auto-registration.api | 2 + .../local/src/zabbix/frontends/php/about.php | 132 + .../src/zabbix/frontends/php/grapher.php | 50 + .../frontends/php/grapher/chosen-sprite.png | Bin 0 -> 538 bytes .../php/grapher/chosen-sprite@2x.png | Bin 0 -> 738 bytes .../zabbix/frontends/php/grapher/chosen.css | 3 + .../frontends/php/grapher/chosen.jquery.js | 1272 +++++++++ .../zabbix/frontends/php/grapher/grapher.css | 80 + .../zabbix/frontends/php/grapher/grapher.js | 536 ++++ .../zabbix/frontends/php/grapher/index.php | 1 + .../src/zabbix/frontends/php/searcher.php | 73 + .../assets/Monitoring-Artist-logo.jpg | Bin 0 -> 10508 bytes .../assets/Monitoring-Artist-logo.png | Bin 0 -> 1689 bytes .../php/searcher/assets/donate-button.png | Bin 0 -> 18270 bytes .../php/searcher/assets/donate-button2.png | Bin 0 -> 4548 bytes .../php/searcher/javascripts/search.js | 57 + .../php/searcher/javascripts/stuff.js | 96 + .../php/searcher/stylesheets/style.css | 292 +++ .../php/updatechecker/updatechecker.js | 67 + .../local/src/zabbix/frontends/php/zapix.php | 212 ++ .../frontends/php/zapix/assets/favicon.ico | Bin 0 -> 1014 bytes .../frontends/php/zapix/assets/favicon.png | Bin 0 -> 593 bytes .../frontends/php/zapix/css/bootstrap/LICENSE | 13 + .../php/zapix/css/bootstrap/bootstrap.min.css | 632 +++++ .../css/img/glyphicons-halflings-white.png | Bin 0 -> 4352 bytes .../zapix/css/img/glyphicons-halflings.png | Bin 0 -> 4352 bytes .../zabbix/frontends/php/zapix/css/style.css | 96 + .../src/zabbix/frontends/php/zapix/js/js.js | 506 ++++ .../zabbix/frontends/php/zapix/js/jsonlint.js | 504 ++++ .../zabbix/frontends/php/zapix/js/jsonrpc.js | 103 + .../local/src/zabbix/supervisord-listener.py | 26 + .../container-files-zabbix/config/ds.sh | 21 + .../config/init/bootstrap.sh | 287 ++ .../container-files-zabbix/config/pyzabbix.py | 6 + .../etc/nginx/hosts.d/default.conf | 12 + .../etc/nginx/hosts.d/ssl-nginx.conf | 41 + .../etc/php.d/zz-zabbix.ini | 5 + .../etc/snmp/snmptrapd.conf | 16 + .../etc/snmp/snmptt.conf | 67 + .../etc/snmp/snmptt.ini | 626 +++++ .../etc/sudoers.d/zabbix | 4 + .../etc/supervisor.d/snmptrapd.conf | 7 + .../etc/supervisor.d/zabbix-agent.conf | 10 + .../etc/supervisor.d/zabbix-java-gateway.conf | 11 + .../etc/supervisor.d/zabbix-proxy.conf | 10 + .../etc/supervisor.d/zabbix-server.conf | 10 + .../container-files-zabbix/health/index.php | 26 + .../usr/local/etc/logback.xml | 11 + .../usr/local/etc/web/zabbix.conf.php | 20 + .../usr/local/etc/zabbix_agentd.conf | 8 + .../usr/local/etc/zabbix_java_gateway.conf | 2 + .../usr/local/etc/zabbix_server.conf | 9 + .../dockbix-xxl-4.2/docker-compose-v2.yml | 31 + Dockerfile/dockbix-xxl-4.2/docker-compose.yml | 29 + Dockerfile/dockbix-xxl-4.2/retag.sh | 46 + 98 files changed, 10177 insertions(+) create mode 100644 Dockerfile/dockbix-xxl-4.2/Dockerfile create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/bootstrap.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-cache-dirs.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-data-dirs.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-internal-proxy.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-stub-status.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-php-fpm-status.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy-https.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/fastcgi-cache.example create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/http_realip.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/php-upstream.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-01-security.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-10-expires.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-20-common-files.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/fpm-status.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/php-location.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/stub-status.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/fastcgi_params create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/hosts.d/default.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/10-mime.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/20-logs.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/30-gzip.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-buffers.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-proxy-buffers.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/90-misc.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.d/www.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php-56.ini create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php.ini create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/nginx.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/php-fpm.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisord.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/11-xxl.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/12-xxl-ping.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/14-xxl-env-variables.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/supervisor.d/analytics.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/01-enable-zabbix-server.api create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/02-create-regular-expressions.sql create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/03-Zabbix-Template-App-Docker.xml create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/04-Zabbix-Template-App-Docker-active.xml create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/05-Zabbix-Template-OS-Linux-for-Dockbix-Agent-XXL.xml create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/06-enable-dockbix-agent-auto-registration.api create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/about.php create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher.php create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen-sprite.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen-sprite@2x.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.css create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.jquery.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.css create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/index.php create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher.php create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/Monitoring-Artist-logo.jpg create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/Monitoring-Artist-logo.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/donate-button.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/donate-button2.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/javascripts/search.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/javascripts/stuff.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/stylesheets/style.css create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/updatechecker/updatechecker.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix.php create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/assets/favicon.ico create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/assets/favicon.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/LICENSE create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/bootstrap.min.css create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/img/glyphicons-halflings-white.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/img/glyphicons-halflings.png create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/style.css create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/js.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonlint.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonrpc.js create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/supervisord-listener.py create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/config/ds.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/config/init/bootstrap.sh create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/config/pyzabbix.py create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/default.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/ssl-nginx.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/php.d/zz-zabbix.ini create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptrapd.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.ini create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/sudoers.d/zabbix create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/supervisor.d/snmptrapd.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/supervisor.d/zabbix-agent.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/supervisor.d/zabbix-java-gateway.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/supervisor.d/zabbix-proxy.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/supervisor.d/zabbix-server.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/health/index.php create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/logback.xml create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/web/zabbix.conf.php create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_agentd.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_java_gateway.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_server.conf create mode 100644 Dockerfile/dockbix-xxl-4.2/docker-compose-v2.yml create mode 100644 Dockerfile/dockbix-xxl-4.2/docker-compose.yml create mode 100755 Dockerfile/dockbix-xxl-4.2/retag.sh diff --git a/Dockerfile/dockbix-xxl-4.2/Dockerfile b/Dockerfile/dockbix-xxl-4.2/Dockerfile new file mode 100644 index 0000000..4144033 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/Dockerfile @@ -0,0 +1,213 @@ +FROM centos:centos7 +LABEL maintainer "Jan Garaj " + +ENV \ + ZABBIX_VERSION=4.2 \ + ZABBIX_SOURCES=https://git.zabbix.com/scm/zbx/zabbix.git \ + ZS_enabled=true \ + ZA_enabled=true \ + ZW_enabled=true \ + ZJ_enabled=false \ + ZP_enabled=false \ + SNMPTRAP_enabled=false \ + STATUS_PAGE_ALLOWED_IP=127.0.0.1 \ + JAVA_HOME=/usr/lib/jvm/jre \ + JAVA=/usr/bin/java \ + PHP_date_timezone=UTC \ + PHP_max_execution_time=300 \ + PHP_max_input_time=300 \ + PHP_memory_limit=128M \ + PHP_error_reporting=E_ALL \ + ZS_LogType=console \ + ZS_PidFile=/var/run/zabbix_server.pid \ + ZS_User=zabbix \ + ZS_DBHost=zabbix.db \ + ZS_DBName=zabbix \ + ZS_DBUser=zabbix \ + ZS_DBPassword=zabbix \ + ZS_DBPort=3306 \ + ZS_PidFile=/tmp/zabbix_server.pid \ + ZS_AlertScriptsPath=/usr/local/share/zabbix/alertscripts \ + ZS_ExternalScripts=/usr/local/share/zabbix/externalscripts \ + ZS_SSLCertLocation=/usr/local/share/zabbix/ssl/certs \ + ZS_SSLKeyLocation=/usr/local/share/zabbix/ssl/keys \ + ZS_LoadModulePath=/usr/lib/zabbix/modules \ + ZS_JavaGateway=127.0.0.1 \ + ZS_JavaGatewayPort=10052 \ + ZS_SNMPTrapperFile=/tmp/zabbix_traps.tmp \ + ZW_ZBX_SERVER=localhost \ + ZW_ZBX_SERVER_PORT=10051 \ + ZW_ZBX_SERVER_NAME="Zabbix Server" \ + ZA_LogType=console \ + ZA_Hostname="Zabbix Server" \ + ZA_User=zabbix \ + ZA_PidFile=/tmp/zabbix_agentd.pid \ + ZA_Server=127.0.0.1 \ + ZA_ServerActive=127.0.0.1 \ + ZJ_LISTEN_IP=0.0.0.0 \ + ZJ_LISTEN_PORT=10052 \ + ZJ_PID_FILE=/tmp/zabbix_java.pid \ + ZJ_START_POLLERS=5 \ + ZJ_TIMEOUT=3 \ + ZJ_LogLevel=error \ + ZJ_TCP_TIMEOUT=3000 \ + ZP_LogType=console \ + ZP_DBHost=zabbixproxy.db \ + ZP_DBName=zabbix \ + ZP_DBUser=zabbix \ + ZP_DBPassword=zabbix \ + ZP_User=zabbix \ + XXL_searcher=true \ + XXL_updatechecker=true \ + XXL_zapix=false \ + XXL_grapher=false \ + XXL_api=true \ + XXL_apiuser=Admin \ + XXL_apipass=zabbix \ + XXL_analytics=true \ + TERM=xterm + +# Layer: base +RUN \ + yum clean all && \ + yum update -y && \ + yum install -y epel-release && \ + yum clean all && \ + yum install -y supervisor && \ + yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm && \ + yum install -y nginx inotify-tools && \ + groupmod --gid 80 --new-name www nginx && \ + usermod --uid 80 --home /data/www --gid 80 --login www --shell /bin/bash --comment www nginx && \ + rm -rf /etc/nginx/*.d /etc/nginx/*_params && \ + mkdir -p /etc/nginx/ssl && \ + openssl genrsa -out /etc/nginx/ssl/dummy.key 2048 && \ + openssl req -new -key /etc/nginx/ssl/dummy.key -out /etc/nginx/ssl/dummy.csr -subj "/C=GB/L=London/O=Company Ltd/CN=zabbix-docker" && \ + openssl x509 -req -days 3650 -in /etc/nginx/ssl/dummy.csr -signkey /etc/nginx/ssl/dummy.key -out /etc/nginx/ssl/dummy.crt && \ + yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm && \ + yum install -y --enablerepo=remi-php71 php-fpm \ + php-gd php-bcmath php-ctype php-xml php-xmlreader php-xmlwriter \ + php-session php-net-socket php-mbstring php-gettext php-cli \ + php-mysqlnd php-opcache php-pdo php-snmp php-ldap && \ + yum clean all && rm -rf /tmp/* +ADD container-files-base / + +# Layer: zabbix +COPY container-files-zabbix / +RUN \ + export FPING_VERSION=4.0 && \ + yum clean all && \ + yum install -y https://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zabbix-release-4.2-1.el7.noarch.rpm && \ + yum update -y && \ + yum install -y tar git gcc automake make nmap traceroute iptstate wget \ + net-snmp-devel net-snmp-libs net-snmp net-snmp-perl iksemel \ + net-snmp-python net-snmp-utils java-1.8.0-openjdk \ + java-1.8.0-openjdk-devel mariadb-devel libxml2-devel gettext \ + libcurl-devel OpenIPMI-devel mysql iksemel-devel libssh2-devel \ + unixODBC unixODBC-devel mysql-connector-odbc postgresql-odbc \ + openldap-devel telnet net-tools snmptt sudo rubygems ruby-devel \ + jq openssh-clients python-httplib2 python-simplejson \ + libevent-devel openldap-clients && \ + yum -y -q reinstall glibc-common && \ + cp /usr/local/etc/zabbix_agentd.conf /tmp && \ + git clone ${ZABBIX_SOURCES} --branch release/${ZABBIX_VERSION} --depth 1 --single-branch /usr/local/src/zabbix && \ + cd /usr/local/src/zabbix && \ + DATE=$(date +%Y-%m-%d) && \ + sed -i "s/ZABBIX_VERSION.*'\(.*\)'/ZABBIX_VERSION', '\1 Dockbix XXL ($DATE)'/g" frontends/php/include/defines.inc.php && \ + sed -i "s/ZABBIX_VERSION_RC.*\"\(.*\)\"/ZABBIX_VERSION_RC \"\1 Dockbix XXL (${DATE})\"/g" include/version.h && \ + sed -i "s/String VERSION =.*\"\(.*\)\"/String VERSION = \"\1 Dockbix XXL (${DATE})\"/g" src/zabbix_java/src/com/zabbix/gateway/GeneralInformation.java && \ + zabbix_revision=$(svn info svn://svn.zabbix.com/${ZABBIX_VERSION} |grep "Last Changed Rev"|awk '{print $4;}') && \ + zabbix_revision=$(git rev-parse --short HEAD) && \ + sed -i "s/{ZABBIX_REVISION}/$zabbix_revision/g" include/version.h && \ + ./bootstrap.sh && \ + export CFLAGS="-fPIC -pie -Wl,-z,relro -Wl,-z,now" && \ + ./configure --enable-server --enable-agent --with-mysql --enable-java \ + --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi \ + --enable-ipv6 --with-jabber --with-openssl --with-ssh2 \ + --enable-proxy --with-ldap --with-unixodbc && \ + make -j"$(nproc)" dbschema && \ + make -j"$(nproc)" install && \ + mv /health/ /usr/local/src/zabbix/frontends/php/ && \ + cp /usr/local/etc/web/zabbix.conf.php /usr/local/src/zabbix/frontends/php/conf/ && \ + wget https://github.com/schweikert/fping/releases/download/v${FPING_VERSION}/fping-${FPING_VERSION}.tar.gz && \ + tar -xvf fping-${FPING_VERSION}.tar.gz && \ + cd fping-${FPING_VERSION}/ && \ + ./configure --prefix=/usr --disable-ipv6; make clean install && \ + ./configure --prefix=/usr --disable-ipv4 --program-suffix=6; make clean install && \ + setcap cap_net_raw+ep /usr/sbin/fping || echo 'Warning: setcap cap_net_raw+ep /usr/sbin/fping' && \ + setcap cap_net_raw+ep /usr/sbin/fping6 || echo 'Warning: setcap cap_net_raw+ep /usr/sbin/fping6' && \ + chmod 4710 /usr/sbin/fping && \ + chmod 4710 /usr/sbin/fping6 && \ + cd .. && \ + cp -f /tmp/zabbix_agentd.conf /usr/local/etc/ && \ + rm -rf fping-${FPING_VERSION} && \ + rm -rf ${FPING_VERSION}.tar.gz && \ + cd /usr/local/src/zabbix/frontends/php && \ + locale/make_mo.sh && \ + yum autoremove -y gettext svn gcc automake mariadb-devel \ + java-1.8.0-openjdk-devel libxml2-devel libcurl-devel \ + OpenIPMI-devel iksemel-devel rubygems ruby-devel \ + ruby-devel unixODBC-devel && \ + yum install -y OpenIPMI-libs && \ + chmod +x /config/bootstrap.sh && \ + chmod +x /config/ds.sh && \ + chmod +x /usr/local/src/zabbix/misc/snmptrap/zabbix_trap_receiver.pl && \ + chmod +x /usr/share/snmptt/snmptthandler-embedded && \ + sed -i -e "s/Defaults requiretty.*/ #Defaults requiretty/g" /etc/sudoers && \ + localedef -i en_US -f UTF-8 en_US.UTF-8 && \ + yum clean all && \ + mkdir -p /usr/local/share/ssl/certs && \ + mkdir -p /usr/local/share/ssl/keys && \ + mkdir -p /usr/lib/zabbix/modules && \ + mkdir -p /etc/zabbix/snmp/mibs && \ + rm -rf /usr/local/src/zabbix/[a,A,b,c,C,i,I,m,M,n,N,r,R,s,t,u,r,\.]* /usr/local/src/zabbix/depcomp /usr/local/src/zabbix/.svn && \ + rm -rf /usr/local/src/zabbix/database/[i,M,o,p,s]* && \ + rm -rf /tmp/* + # TODO apply http://geofrogger.net/review/snmptt-hide-generic-part.patch + +# Layer: dockbix-xxl +COPY container-files-dockbix-xxl / +RUN \ + chmod +x /usr/local/src/zabbix/supervisord-listener.py && \ + yum -y -q reinstall glibc-common && \ + cd /tmp && \ + yumdownloader glibc-common && \ + rpm2cpio glibc-common*.rpm | cpio -idmv && \ + rm -vf /usr/lib/locale/locale-archive.tmpl && \ + cp -vf ./usr/lib/locale/locale-archive.tmpl /usr/lib/locale/ && \ + build-locale-archive && \ + rm -rf /tmp/* && \ + yum install -y ipa-pgothic-fonts python-boto python-pip && \ + cp /usr/share/fonts/ipa-pgothic/ipagp.ttf /usr/local/src/zabbix/frontends/php/fonts && \ + pip install pyzabbix && \ + yum autoremove -y ipa-pgothic-fonts python-pip && \ + yum clean all && \ + grep 'XXL' /usr/local/src/zabbix/frontends/php/include/defines.inc.php && \ + sed -i "s#]))->addClass(ZBX_STYLE_FOOTER);#,' / ',(new CLink('Monitoring Artist Ltd', 'http://www.monitoringartist.com'))->addClass(ZBX_STYLE_GREY)->addClass(ZBX_STYLE_LINK_ALT)->setAttribute('target', '_blank'),]))->addClass(ZBX_STYLE_FOOTER);#g" /usr/local/src/zabbix/frontends/php/include/html.inc.php && \ + true || grep 'www.monitoringartist.com' /usr/local/src/zabbix/frontends/php/include/html.inc.php && \ + sed -i "s/(new CDiv())->addClass(ZBX_STYLE_SIGNIN_LOGO),/(new CDiv())->addClass(ZBX_STYLE_SIGNIN_LOGO),(new CDiv())->addClass(ZBX_STYLE_CENTER)->addItem((new CTag('h1', true, _('Dockbix XXL')))->addClass(ZBX_STYLE_BLUE))->addItem((new CLink(_('Maintained by Monitoring Artist'), 'http:\/\/www.monitoringartist.com'))->setTarget('_blank')->addClass(ZBX_STYLE_GREY)),/g" /usr/local/src/zabbix/frontends/php/include/views/general.login.php && \ + true || grep 'www.monitoringartist.com' /usr/local/src/zabbix/frontends/php/include/views/general.login.php && \ + sed -i "s#echo '';#echo \"\";#g" /usr/local/src/zabbix/frontends/php/include/page_footer.php && \ + grep 'UA-72810204-2' /usr/local/src/zabbix/frontends/php/include/page_footer.php && \ + sed -i "s#echo '';#echo \"\";#g" /usr/local/src/zabbix/frontends/php/app/views/layout.htmlpage.php && \ + grep 'UA-72810204-2' /usr/local/src/zabbix/frontends/php/app/views/layout.htmlpage.php && \ + ZVERSION=$(zabbix_agentd -V | grep ^zabbix_agentd | awk -F'\\(Zabbix\\) ' '{print $2}') && \ + sed -i "s#^var xxlCurrentVersion =.*#var xxlCurrentVersion = \"$ZVERSION\";#" /usr/local/src/zabbix/frontends/php/updatechecker/updatechecker.js && \ + grep "$ZVERSION" /usr/local/src/zabbix/frontends/php/updatechecker/updatechecker.js && \ + sed -i "s#.*.*#echo \"\";\n&#" /usr/local/src/zabbix/frontends/php/include/page_footer.php && \ + grep 'updatechecker.js' /usr/local/src/zabbix/frontends/php/include/page_footer.php && \ + sed -i "s###g" /usr/local/src/zabbix/frontends/php/app/views/layout.htmlpage.php && \ + grep 'updatechecker.js' /usr/local/src/zabbix/frontends/php/app/views/layout.htmlpage.php && \ + sed -i "s#'login' => \[#'xxl' => \n[\n'label' => _('XXL extensions'),\n'user_type' => USER_TYPE_SUPER_ADMIN,\n'default_page_id' => 0,\n'pages' => [\n['url' => 'searcher.php','label' => _('Searcher'),],\n['url' => 'zapix.php','label' => _('Zapix'),],\n['url' => 'grapher.php','label' => _('Grapher'),],\n['url' => 'about.php','label' => _('About'),]\n]],\n'login' => [#g" /usr/local/src/zabbix/frontends/php/include/menu.inc.php && \ + grep 'XXL extensions' /usr/local/src/zabbix/frontends/php/include/menu.inc.php && \ + sed -i "s#'admin': 0},# 'admin': 0, 'xxl': 0},#g" /usr/local/src/zabbix/frontends/php/js/main.js && \ + grep "'xxl': 0}" /usr/local/src/zabbix/frontends/php/js/main.js && \ + INITIAL_ADMIN_SEARCH="'Admin','Zabbix','Administrator','5fce1b3e34b520afeffb37ce08c7cd66'" && \ + INITIAL_ADMIN_REPLACE="'$XXL_apiuser','Zabbix','Administrator','$(echo -n $XXL_apipass | md5sum | awk '{print $1}')'" && \ + grep "$INITIAL_ADMIN_SEARCH" /usr/local/src/zabbix/database/mysql/data.sql && \ + sed -i "s/$INITIAL_ADMIN_SEARCH/$INITIAL_ADMIN_REPLACE/" /usr/local/src/zabbix/database/mysql/data.sql && \ + rm -rf /tmp/* && \ + touch /tmp/zabbix_traps.tmp + +CMD ["/config/bootstrap.sh"] + +EXPOSE 80/TCP 162/UDP 10051/TCP 10052/TCP diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/bootstrap.sh b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/bootstrap.sh new file mode 100644 index 0000000..2cc25b4 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/bootstrap.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +set -e +set -u + +# Supervisord default params +SUPERVISOR_PARAMS='-c /etc/supervisord.conf' + + +# Create directories for supervisor's UNIX socket and logs (which might be missing +# as container might start with /data mounted from another data-container). +mkdir -p /data/conf /data/run /data/logs +chmod 711 /data/conf /data/run /data/logs + +if [ "$(ls /config/init/)" ]; then + for init in /config/init/*.sh; do + . $init + done +fi + + +# We have TTY, so probably an interactive container... +if test -t 0; then + # Run supervisord detached... + exec supervisord $SUPERVISOR_PARAMS + + # Some command(s) has been passed to container? Execute them and exit. + # No commands provided? Run bash. + if [[ $@ ]]; then + eval $@ + else + export PS1='[\u@\h : \w]\$ ' + /bin/bash + fi + +# Detached mode? Run supervisord in foreground, which will stay until container is stopped. +else + # If some extra params were passed, execute them before. + # @TODO It is a bit confusing that the passed command runs *before* supervisord, + # while in interactive mode they run *after* supervisor. + # Not sure about that, but maybe when any command is passed to container, + # it should be executed *always* after supervisord? And when the command ends, + # container exits as well. + if [[ $@ ]]; then + eval $@ + fi + exec supervisord -n $SUPERVISOR_PARAMS +fi diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-cache-dirs.sh b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-cache-dirs.sh new file mode 100644 index 0000000..c856418 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-cache-dirs.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +# +# This script will be placed in /config/init/ and run when container starts. +# It creates (if they're not exist yet) necessary Nginx directories +# @see /etc/nginx/addon.d/fastcgi-cache.example +# + +set -e + +mkdir -p /run/user/nginx-cache +mkdir -p /run/user/nginx-cache-tmp +chown -R www:www /run/user/nginx-cache* diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-data-dirs.sh b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-data-dirs.sh new file mode 100644 index 0000000..cc0d448 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-data-dirs.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +# +# This script will be placed in /config/init/ and run when container starts. +# It creates (if they're not exist yet) necessary directories +# from where custom Nginx configs can be loaded (from mounted /data volumes). +# + +set -e + +mkdir -p /data/conf/nginx/addon.d +mkdir -p /data/conf/nginx/conf.d +mkdir -p /data/conf/nginx/hosts.d +mkdir -p /data/conf/nginx/nginx.d +chmod 711 /data/conf/nginx + +mkdir -p /data/www/default +echo "default vhost # created on $(date)" > /data/www/default/index.html + +chown -R www:www /data/www diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-internal-proxy.sh b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-internal-proxy.sh new file mode 100644 index 0000000..9f766db --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-internal-proxy.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +# +# Configure internal transparent proxy on specified port (SET_INTERNAL_PROXY_ON_PORT) +# which redirect all traffic to localhost:80. See README for more info. +# + +PROXY_SOURCE_CONF="/config/init/vhost-proxy.conf" +PROXY_SOURCE_CONF_HTTPS="/config/init/vhost-proxy-https.conf" +PROXY_TARGET_CONF="/etc/nginx/hosts.d/internal-proxy.conf" +PROXY_TARGET_CONF_HTTPS="/etc/nginx/hosts.d/internal-proxy-https.conf" + +if [ ! -z "${SET_INTERNAL_PROXY_ON_PORT+xxx}" ] && [ ! -z "${SET_INTERNAL_PROXY_ON_PORT}" ]; then + cat $PROXY_SOURCE_CONF | sed "s/%proxy_port%/$SET_INTERNAL_PROXY_ON_PORT/g" > $PROXY_TARGET_CONF + echo "Nginx: internal proxy set on port :$SET_INTERNAL_PROXY_ON_PORT."; echo +fi + +if [ ! -z "${SET_INTERNAL_HTTPS_PROXY_ON_PORT+xxx}" ] && [ ! -z "${SET_INTERNAL_HTTPS_PROXY_ON_PORT}" ]; then + cat $PROXY_SOURCE_CONF_HTTPS | sed "s/%proxy_port%/$SET_INTERNAL_HTTPS_PROXY_ON_PORT/g" > $PROXY_TARGET_CONF_HTTPS + echo "Nginx: internal HTTPS proxy set on port :$SET_INTERNAL_HTTPS_PROXY_ON_PORT."; echo +fi diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-stub-status.sh b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-stub-status.sh new file mode 100644 index 0000000..b2fe358 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-nginx-stub-status.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# +# Configure access IP address for nginx status page under /nginx_status +# +set -eu +export TERM=xterm +# Bash Colors +red=`tput setaf 1` +green=`tput setaf 2` +yellow=`tput setaf 3` +white=`tput setaf 7` +bold=`tput bold` +reset=`tput sgr0` +separator=$(echo && printf '=%.0s' {1..100} && echo) + +# Logging functions +log() { + if [[ "$@" ]]; then echo "${bold}${green}`date +'%Y-%m-%d %H:%M:%S,000'` INFO${reset} $@"; + else echo -n; fi +} + +sed -i "s|allow 127.0.0.1|allow ${STATUS_PAGE_ALLOWED_IP}|g" /etc/nginx/conf.d/stub-status.conf +log "Nginx status page: allowed address set to $STATUS_PAGE_ALLOWED_IP." diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-php-fpm-status.sh b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-php-fpm-status.sh new file mode 100644 index 0000000..df62b53 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/10-php-fpm-status.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# +# Configure access IP address for PHP-FPM satus page under /fpm_status +# + +set -eu +export TERM=xterm +# Bash Colors +red=`tput setaf 1` +green=`tput setaf 2` +yellow=`tput setaf 3` +white=`tput setaf 7` +bold=`tput bold` +reset=`tput sgr0` +separator=$(echo && printf '=%.0s' {1..100} && echo) + +# Logging functions +log() { + if [[ "$@" ]]; then echo "${bold}${green}`date +'%Y-%m-%d %H:%M:%S,000'` INFO${reset} $@"; + else echo -n; fi +} + +sed -i "s|allow 127.0.0.1|allow ${STATUS_PAGE_ALLOWED_IP}|g" /etc/nginx/conf.d/fpm-status.conf +log "PHP-FPM status page: allowed address set to $STATUS_PAGE_ALLOWED_IP." diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy-https.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy-https.conf new file mode 100644 index 0000000..bac6aa4 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy-https.conf @@ -0,0 +1,14 @@ +# Internal proxy, HTTPS version +server { + listen %proxy_port% ssl; + ssl_certificate /etc/nginx/ssl/dummy.crt; + ssl_certificate_key /etc/nginx/ssl/dummy.key; + + location / { + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_redirect off; + proxy_pass https://127.0.0.1:443; + } +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy.conf new file mode 100644 index 0000000..65362e0 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/config/init/vhost-proxy.conf @@ -0,0 +1,11 @@ +# Internal proxy, HTTP version +server { + listen %proxy_port%; + location / { + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_redirect off; + proxy_pass http://127.0.0.1:80; + } +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/fastcgi-cache.example b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/fastcgi-cache.example new file mode 100644 index 0000000..d9de77d --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/fastcgi-cache.example @@ -0,0 +1,23 @@ +# +# Pre-configured FastCGI cache. +# It's not used until specified in location {} context. +# +# Usage: rename this file to fastcgi-cache.conf +# and your vhost config add something like this: +# location ~ \.php$ { +# include fastcgi_params; +# fastcgi_pass php-upstream; +# fastcgi_cache APPCACHE; +# fastcgi_cache_valid 60m; +# } +# +# To achieve best performance, mount /run (or /var/run) +# which is usually tmpfs memory drive, into your docker container: +# docker run ... -v /run/user/my-container:/run/user ... +# +fastcgi_cache_path /run/user/nginx-cache levels=1:2 keys_zone=APPCACHE:10m inactive=120m; +fastcgi_temp_path /run/user/nginx-cache-tmp; +fastcgi_cache_key "$scheme$request_method$host$request_uri"; +fastcgi_cache_use_stale error timeout invalid_header http_500; +fastcgi_ignore_headers Cache-Control Expires Set-Cookie; +fastcgi_cache_lock on; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/http_realip.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/http_realip.conf new file mode 100644 index 0000000..fc66100 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/http_realip.conf @@ -0,0 +1,3 @@ +set_real_ip_from 127.0.0.1; +real_ip_header X-Forwarded-For; +real_ip_recursive off; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/php-upstream.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/php-upstream.conf new file mode 100644 index 0000000..4a7084a --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/addon.d/php-upstream.conf @@ -0,0 +1,3 @@ +upstream php-upstream { + server unix:/var/run/php-fpm-www.sock; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-01-security.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-01-security.conf new file mode 100644 index 0000000..4b6c346 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-01-security.conf @@ -0,0 +1,5 @@ +# no access to .hidden files (eg .htaccess) +location ~ /\. { + deny all; + log_not_found off; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-10-expires.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-10-expires.conf new file mode 100644 index 0000000..579332a --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-10-expires.conf @@ -0,0 +1,8 @@ +# static content: +# - images +# - flash +# - fonts +# - css/js +location ~* \.(?:jpe?g|gif|png|ico|swf|svg|eot|ttf|otf|woff|htc|css|js)$ { + expires max; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-20-common-files.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-20-common-files.conf new file mode 100644 index 0000000..c440469 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/default-20-common-files.conf @@ -0,0 +1,8 @@ +location = /favicon.ico { + log_not_found off; +} + +location = /robots.txt { + allow all; + log_not_found off; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/fpm-status.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/fpm-status.conf new file mode 100644 index 0000000..3b64025 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/fpm-status.conf @@ -0,0 +1,8 @@ +location /fpm_status { + access_log off; + allow 127.0.0.1; + deny all; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_pass php-upstream; +} \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/php-location.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/php-location.conf new file mode 100644 index 0000000..c2b8aab --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/php-location.conf @@ -0,0 +1,4 @@ +location ~ \.php$ { + include fastcgi_params; + fastcgi_pass php-upstream; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/stub-status.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/stub-status.conf new file mode 100644 index 0000000..2a81c9e --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/conf.d/stub-status.conf @@ -0,0 +1,5 @@ +location /nginx_status { + stub_status; + allow 127.0.0.1; + deny all; +} \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/fastcgi_params b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/fastcgi_params new file mode 100644 index 0000000..2703e3a --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/fastcgi_params @@ -0,0 +1,44 @@ +fastcgi_param QUERY_STRING $query_string; +fastcgi_param REQUEST_METHOD $request_method; +fastcgi_param CONTENT_TYPE $content_type; +fastcgi_param CONTENT_LENGTH $content_length; + +fastcgi_param PATH_INFO $fastcgi_script_name; +fastcgi_param SCRIPT_NAME $fastcgi_script_name; +fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; +fastcgi_param REQUEST_URI $request_uri; +fastcgi_param DOCUMENT_URI $document_uri; +fastcgi_param DOCUMENT_ROOT $document_root; +fastcgi_param SERVER_PROTOCOL $server_protocol; +fastcgi_param HTTPS $https if_not_empty; + +fastcgi_param GATEWAY_INTERFACE CGI/1.1; +fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; + +fastcgi_param REMOTE_ADDR $remote_addr; +fastcgi_param REMOTE_PORT $remote_port; +fastcgi_param SERVER_ADDR $server_addr; + +# SERVER_PORT needs to be commented out and has to be determined from other fields (e.g. HTTP_HOST) +# Otherwise it points invalid port when container port is mapped to different port on host machine, +# which might result with invalid links generated in a PHP app. +#fastcgi_param SERVER_PORT $server_port; + +# Using $http_host instead of $server_name - $server_name doesn't work correctly when using regexps in vhosts' server_name declaration. +#fastcgi_param SERVER_NAME $server_name; +fastcgi_param SERVER_NAME $http_host; + +# PHP only, required if PHP was built with --enable-force-cgi-redirect +fastcgi_param REDIRECT_STATUS 200; + +fastcgi_index index.php; +fastcgi_connect_timeout 10; +fastcgi_send_timeout 600; +fastcgi_read_timeout 600; +fastcgi_buffer_size 32k; +fastcgi_buffers 32 4k; +fastcgi_busy_buffers_size 64k; +fastcgi_temp_file_write_size 256k; +fastcgi_intercept_errors on; +fastcgi_pass_header on; +fastcgi_keep_conn on; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/hosts.d/default.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/hosts.d/default.conf new file mode 100644 index 0000000..b3bac77 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/hosts.d/default.conf @@ -0,0 +1,17 @@ +server { + listen 80 default; + root /data/www/default; + index index.php index.html; + + include /etc/nginx/conf.d/default-*.conf; + include /data/conf/nginx/conf.d/default-*.conf; + + # PHP backend is not in the default-*.conf file set, + # as some vhost might not want to include it. + include /etc/nginx/conf.d/php-location.conf; + + # Import configuration files for status pages for Nginx and PHP-FPM + include /etc/nginx/conf.d/stub-status.conf; + include /etc/nginx/conf.d/fpm-status.conf; + +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.conf new file mode 100644 index 0000000..592665f --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.conf @@ -0,0 +1,27 @@ +daemon off; +pid /var/run/nginx.pid; + +user www; +error_log stderr notice; + +worker_processes auto; +events { + multi_accept on; + use epoll; + worker_connections 1024; +} + +http { + # Somehow it's not inherited by vhosts (server{} context) when using with 'stderr' value. + # Therefore it's re-defined here to avoid specyfing it for each vhost. + error_log stderr notice; + + include /etc/nginx/nginx.d/*.conf; + include /data/conf/nginx/nginx.d/*.conf; + + include /etc/nginx/addon.d/*.conf; + include /data/conf/nginx/addon.d/*.conf; + + include /etc/nginx/hosts.d/*.conf; + include /data/conf/nginx/hosts.d/*.conf; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/10-mime.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/10-mime.conf new file mode 100644 index 0000000..d1851c6 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/10-mime.conf @@ -0,0 +1,2 @@ +include /etc/nginx/mime.types; +default_type application/octet-stream; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/20-logs.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/20-logs.conf new file mode 100644 index 0000000..5916f58 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/20-logs.conf @@ -0,0 +1,2 @@ +access_log off; +error_log /data/logs/nginx-error.log; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/30-gzip.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/30-gzip.conf new file mode 100644 index 0000000..fb2fbb4 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/30-gzip.conf @@ -0,0 +1,9 @@ +gzip on; +gzip_http_version 1.0; +gzip_comp_level 4; +gzip_min_length 1024; +gzip_proxied any; +gzip_vary off; +gzip_types text/plain text/css application/x-javascript text/xml application/xml application/rss+xml application/atom+xml text/javascript application/javascript application/json text/mathml; + +gzip_static on; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-buffers.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-buffers.conf new file mode 100644 index 0000000..3423646 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-buffers.conf @@ -0,0 +1,7 @@ +# Increase buffer size for client requests (incl. file uploads) +# so uploading the file up to xMB won't result with Nginx warning: +# "a client request body is buffered to a temporary file ..." +client_body_buffer_size 5M; + +# Set max upload size +client_max_body_size 256M; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-proxy-buffers.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-proxy-buffers.conf new file mode 100644 index 0000000..450bc69 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/80-proxy-buffers.conf @@ -0,0 +1,5 @@ +# Increase slightly proxy buffer size and amount so it can +# handle up to 512KB into the memory (vs. default 32|64kB). +# Only used when proxy_pass directive is in place. +proxy_buffer_size 32k; +proxy_buffers 16 32k; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/90-misc.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/90-misc.conf new file mode 100644 index 0000000..b3b5098 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/nginx/nginx.d/90-misc.conf @@ -0,0 +1,12 @@ +server_tokens off; + +sendfile on; + +server_names_hash_bucket_size 128; +types_hash_max_size 2048; +types_hash_bucket_size 64; + +tcp_nopush on; +tcp_nodelay on; + +keepalive_timeout 15; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.conf new file mode 100644 index 0000000..1f212de --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.conf @@ -0,0 +1,7 @@ +include=/etc/php-fpm.d/*.conf + +[global] +daemonize = no +pid = /var/run/php-fpm.pid +error_log = /data/logs/php-fpm-daemon.log +log_level = warning diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.d/www.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.d/www.conf new file mode 100644 index 0000000..d8d7022 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php-fpm.d/www.conf @@ -0,0 +1,17 @@ +[www] +user = www +listen = /var/run/php-fpm-www.sock +listen.owner = www + +pm = ondemand +pm.max_children = 10 +pm.max_requests = 500 +pm.process_idle_timeout = 10s +pm.status_path = /fpm_status + +ping.path = /ping + +slowlog = /data/logs/php-fpm-slow.log +request_slowlog_timeout = 60 +catch_workers_output = yes + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php-56.ini b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php-56.ini new file mode 100644 index 0000000..2edeb44 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php-56.ini @@ -0,0 +1,4 @@ +; Completely switch off populating $HTTP_RAW_POST_DATA +; to remove the warning about deprecated usage. +; http://php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data +always_populate_raw_post_data = -1 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php.ini b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php.ini new file mode 100644 index 0000000..f8033cc --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/php.d/zz-php.ini @@ -0,0 +1,19 @@ +; Basic configuration override +expose_php = Off +memory_limit = 512M +post_max_size = 128M +upload_max_filesize = 128M +date.timezone = GMT +max_execution_time = 120 + +; Error reporting +display_errors = On +display_startup_errors = On + +; A bit of performance tuning +realpath_cache_size = 128k + +; OpCache tuning +opcache.max_accelerated_files = 32000 +opcache.memory_consumption = 128 +opcache.fast_shutdown = 0 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/nginx.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/nginx.conf new file mode 100644 index 0000000..524cea9 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/nginx.conf @@ -0,0 +1,10 @@ +[program:nginx] +command = /usr/sbin/nginx +autorestart = true +stderr_logfile = NONE +stdout_logfile = NONE + +# Watch for changes in Nginx conf directories and restart Nginx when a config change occured +[program:nginx-reload] +command=bash -c 'while inotifywait -q -r -e create,delete,modify,move,attrib --exclude "/\." /etc/nginx/ /data/conf/nginx/; do nginx -t && nginx -s reload; done' + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/php-fpm.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/php-fpm.conf new file mode 100644 index 0000000..37febc9 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisor.d/php-fpm.conf @@ -0,0 +1,5 @@ +[program:php-fpm] +command = php-fpm +autorestart = true +stdout_logfile = /data/logs/php-fpm.log +stderr_logfile = /data/logs/php-fpm.log diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisord.conf b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisord.conf new file mode 100644 index 0000000..980e835 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-base/etc/supervisord.conf @@ -0,0 +1,24 @@ +[supervisord] +pidfile = /run/supervisord.pid +# It seems that it's not possible to swith this log to NONE (it creates NONE logfile) +logfile = /data/logs/supervisord.log +# Set loglevel=debug, only then all logs from child services are printed out +# to container logs (and thus available via `docker logs [container]` +loglevel = debug + +# These two (unix_http_server, rpcinterface) are needed for supervisorctl to work +[inet_http_server] +port = :9111 +username = sv +password = password + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl = http://localhost:9111 +username = sv +password = password + +[include] +files = /etc/supervisor.d/*.conf diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/11-xxl.sh b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/11-xxl.sh new file mode 100644 index 0000000..8fb0c51 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/11-xxl.sh @@ -0,0 +1,155 @@ +#!/bin/sh + +set -eu +export TERM=xterm +# Bash Colors +red=`tput setaf 1` +green=`tput setaf 2` +yellow=`tput setaf 3` +white=`tput setaf 7` +bold=`tput bold` +reset=`tput sgr0` +separator=$(echo && printf '=%.0s' {1..100} && echo) + +# Logging functions +log() { + if [[ "$@" ]]; then echo "${bold}${green}`date +'%Y-%m-%d %H:%M:%S,000'` INFO${reset} $@"; + else echo -n; fi +} + +xxl_config() { + cid=$(md5sum <<< $(hostname) | awk -F - '{print $1}' | tr -d ' ') + XXL_updatechecker=${XXL_updatechecker:-true} + XXL_analytics=${XXL_analytics:-true} + # disable/enable XXL features + if ! $XXL_searcher; then + sed -i "/'searcher.php'/d" /usr/local/src/zabbix/frontends/php/include/menu.inc.php + rm -rf /usr/local/src/zabbix/frontends/php/searcher/ /usr/local/src/zabbix/frontends/php/searcher.php + else + if $XXL_analytics; then + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=XXL_searcher&el=${XXL_searcher}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + fi + if ! $XXL_zapix; then + sed -i "/'zapix.php'/d" /usr/local/src/zabbix/frontends/php/include/menu.inc.php + rm -rf /usr/local/src/zabbix/frontends/php/zapix/ /usr/local/src/zabbix/frontends/php/zapix.php + else + if $XXL_analytics; then + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=XXL_zapix&el=${XXL_zapix}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + fi + if ! $XXL_grapher; then + sed -i "/'grapher.php'/d" /usr/local/src/zabbix/frontends/php/include/menu.inc.php + rm -rf /usr/local/src/zabbix/frontends/php/grapher/ /usr/local/src/zabbix/frontends/php/grapher.php + else + if $XXL_analytics; then + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=XXL_grapher&el=${XXL_grapher}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + fi + if ! $XXL_updatechecker; then + rm -rf /usr/local/src/zabbix/frontends/php/updatechecker/ + sed -i "s#echo \".*\";##g" /usr/local/src/zabbix/frontends/php/include/page_footer.php + else + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=XXL_updatechecker&el=${XXL_grapher}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + if ! $XXL_analytics; then + # remove analytics + sed -i "s###g" /usr/local/src/zabbix/frontends/php/include/page_footer.php + sed -i "s###g" /usr/local/src/zabbix/frontends/php/app/views/layout.htmlpage.php + else + export ZABBIX_VERSION_FULL=$(zabbix_server -V | grep "(Zabbix)" | awk '{print $3"-"$4}') + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Ping&ea=Version&el=${ZABBIX_VERSION_FULL}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=Version&el=${ZABBIX_VERSION_FULL}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + if $ZS_enabled; then + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=ZS_enabled&el=${ZS_enabled}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + if $ZA_enabled; then + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=ZA_enabled&el=${ZA_enabled}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + if $ZW_enabled; then + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=ZW_enabled&el=${ZW_enabled}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + if $ZP_enabled; then + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=ZP_enabled&el=${ZP_enabled}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + fi +} + +xxl_api() { + XXL_api=${XXL_api:-true} + if [ "$XXL_api" = false ] || [ "$ZW_enabled" = false ]; then + return 0 + fi + + XXL_apiuser=${XXL_apiuser:-Admin} + XXL_apipass=${XXL_apipass:-zabbix} + + # wait 120sec for Zabbix API start + retry=24 + until curl --output /dev/null --silent --head --fail localhost:80 &>/dev/null + do + log "Waiting for API, it's still not available" + retry=`expr $retry - 1` + if [ $retry -eq 0 ]; then + error "API is not available!" + exit 1 + fi + sleep 5 + done + log "API is available" + + AUTH_TOKEN=$(curl -s -X POST -H 'Content-Type: application/json-rpc' -d "{\"jsonrpc\":\"2.0\",\"method\":\"user.login\",\"id\":0,\"auth\":null,\"params\":{\"user\":\"${XXL_apiuser}\",\"password\":\"${XXL_apipass}\"}}" http://0.0.0.0/api_jsonrpc.php | jq -r .result) + if [ "$AUTH_TOKEN" != "null" ]; then + log "API access succesfull" + if [ -d "/etc/zabbix/api" ]; then + ID=1 + LAST_ID=0 + files=$(find /etc/zabbix/api -regex '.*\(.xml\|.api\|.sh\|.sql\)$' -type f|sort) + set +e + for file in $files; do + if $XXL_analytics; then + curl -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Stat&ea=API&el=${file}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & + fi + if [[ "$file" == *xml ]]; then + # API XML import + log "API XML import: $file" + template=$(cat $file | sed -e 's/\"/\\\"/g' | sed -e 's/^[ \t]*//' | tr --delete '\n') + apicall="{\"jsonrpc\":\"2.0\",\"method\":\"configuration.import\",\"id\":,\"auth\":\"\",\"params\":{\"format\":\"xml\",\"rules\":{\"templates\":{\"createMissing\":true,\"updateExisting\":true},\"images\":{\"createMissing\":true,\"updateExisting\":true},\"groups\":{\"createMissing\":true},\"triggers\":{\"createMissing\":true,\"updateExisting\":true},\"valueMaps\":{\"createMissing\":true,\"updateExisting\":true},\"hosts\":{\"createMissing\":true,\"updateExisting\":true},\"items\":{\"createMissing\":true,\"updateExisting\":true},\"maps\":{\"createMissing\":true,\"updateExisting\":true},\"screens\":{\"createMissing\":true,\"updateExisting\":true},\"templateScreens\":{\"createMissing\":true,\"updateExisting\":true},\"templateLinkage\":{\"createMissing\":true},\"applications\":{\"createMissing\":true},\"graphs\":{\"createMissing\":true,\"updateExisting\":true},\"discoveryRules\":{\"createMissing\":true,\"updateExisting\":true}},\"source\":\"${template}\"}}" + command=$(echo $apicall | sed -e "s//$ID/g" | sed -e "s//$AUTH_TOKEN/g") + output=$(echo $command | curl -s -X POST -H 'Content-Type: application/json-rpc' -d @- http://0.0.0.0/api_jsonrpc.php) + log "API response: $output" + ID=$((ID+1)) + elif [[ "$file" == *api ]]; then + # API command + log "API command: $file" + while read line + do + log "API call: $line" + command=$(echo $line | sed -e "s//$ID/g" | sed -e "s//$AUTH_TOKEN/g" | sed -e "s//$LAST_ID/g") + output=$(curl -s -X POST -H 'Content-Type: application/json-rpc' -d "${command}" http://0.0.0.0/api_jsonrpc.php) + log "API response: $output" + LAST_ID=$(echo $output | jq -r 'first(.result[]?)|.[]?') + ID=$((ID+1)) + done < $file + elif [[ "$file" == *sql ]]; then + log "SQL command: $file" + output=$(/usr/bin/mysql --host=${ZS_DBHost} --port=$ZS_DBPort --user=$ZS_DBUser --password=$ZS_DBPassword --database=$ZS_DBName < $file 2>&1) + log "SQL command output: $output" + elif [[ "$file" == *sh ]]; then + # bash script - environment variable are available in the script + log "API script: $file" + output=$(bash $file) + log "API script output: $output" + fi + done + set -e + fi + else + log "API access not succesfull - try to set up env. variables XXL_apiuser/XXL_apipass" + fi +} + +log "Preparing XXL features" +xxl_config +xxl_api & +log "XXL configuration done." diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/12-xxl-ping.sh b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/12-xxl-ping.sh new file mode 100644 index 0000000..061c508 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/12-xxl-ping.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +if $XXL_analytics; then + export ZABBIX_VERSION_FULL=$(zabbix_server -V | grep "(Zabbix)" | awk '{print $3"-"$4}') + curl --connect-timeout 20 --max-time 30 -ks -o /dev/null "http://www.google-analytics.com/r/collect?v=1&tid=UA-72810204-2&cid=${cid}&t=event&ec=Ping&ea=Version&el=${ZABBIX_VERSION_FULL}&ev=1&dp=%2F&dl=http%3A%2F%2Fgithub.com%2Fmonitoringartist%2Fdockbix-xxl" &> /dev/null & +fi diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/14-xxl-env-variables.sh b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/14-xxl-env-variables.sh new file mode 100644 index 0000000..5ce5216 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/config/init/14-xxl-env-variables.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# Save env variables and then source them in alertscripts + +# source /etc/zabbix/environment_variables_declare +declare -p > /etc/zabbix/environment_variables_declare + +# key=value format +printenv > /etc/zabbix/environment_variables_printenv diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/supervisor.d/analytics.conf b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/supervisor.d/analytics.conf new file mode 100644 index 0000000..5b6dcd9 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/supervisor.d/analytics.conf @@ -0,0 +1,12 @@ +[supervisord] +nodaemon = true + +[program:analytics] +command = /usr/bin/bash -c 'while true; do sleep 3600; /usr/bin/bash /config/init/12-xxl-ping.sh; done' +autorestart = true +auto_start = true + +stdout_logfile = /dev/null +stdout_logfile_maxbytes = 0 +stderr_logfile = /dev/null +stderr_logfile_maxbytes = 0 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/01-enable-zabbix-server.api b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/01-enable-zabbix-server.api new file mode 100644 index 0000000..7c505fc --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/01-enable-zabbix-server.api @@ -0,0 +1 @@ +{"jsonrpc":"2.0","method":"host.update","id":,"auth":"","params":{"hostid":"10084","status":0}} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/02-create-regular-expressions.sql b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/02-create-regular-expressions.sql new file mode 100644 index 0000000..e7ca215 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/02-create-regular-expressions.sql @@ -0,0 +1,14 @@ +BEGIN; +SET @rid = IFNULL((SELECT MAX(regexpid) AS id FROM regexps),0); +SET @eid = IFNULL((SELECT MAX(expressionid) AS id FROM expressions),0); +INSERT INTO `regexps` (regexpid,name,test_string) VALUES +(@rid+1,'Exclude Docker related file systems','/var/lib/docker/devicemapper/mnt/123456'), +(@rid+2,'Exclude Docker related network interfaces','veth29caba3'); +INSERT INTO `expressions` +(expressionid,regexpid,expression,expression_type,exp_delimiter,case_sensitive) +VALUES +(@eid+1,@rid+1,'(/devicemapper/mnt/|/aufs/mnt/)',4,',',1), +(@eid+2,@rid+2,'^veth',4,',',1); +DELETE FROM ids WHERE table_name='regexps' AND field_name='regexpid'; +DELETE FROM ids WHERE table_name='expressions' AND field_name='expressionid'; +COMMIT; diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/03-Zabbix-Template-App-Docker.xml b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/03-Zabbix-Template-App-Docker.xml new file mode 100644 index 0000000..a14bc16 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/03-Zabbix-Template-App-Docker.xml @@ -0,0 +1,461 @@ + + + 2.0 + 2015-07-22T01:35:05Z + + + Templates + + + + + + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/04-Zabbix-Template-App-Docker-active.xml b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/04-Zabbix-Template-App-Docker-active.xml new file mode 100644 index 0000000..9290f2d --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/04-Zabbix-Template-App-Docker-active.xml @@ -0,0 +1,461 @@ + + + 2.0 + 2015-07-22T01:34:34Z + + + Templates + + + + + + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/05-Zabbix-Template-OS-Linux-for-Dockbix-Agent-XXL.xml b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/05-Zabbix-Template-OS-Linux-for-Dockbix-Agent-XXL.xml new file mode 100644 index 0000000..6cba26a --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/05-Zabbix-Template-OS-Linux-for-Dockbix-Agent-XXL.xml @@ -0,0 +1,2326 @@ + + + 3.2 + 2017-02-25T23:18:56Z + + + Templates + + + + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:vfs.file.cksum[/rootfs/etc/passwd].diff(0)}>0 + 0 + + /etc/passwd has been changed on {HOST.NAME} + 0 + + + 0 + 2 + + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:kernel.maxfiles.last(0)}<1024 + 0 + + Configured max number of opened files is too low on {HOST.NAME} + 0 + + + 0 + 1 + + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:kernel.maxproc.last(0)}<256 + 0 + + Configured max number of processes is too low on {HOST.NAME} + 0 + + + 0 + 1 + + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:system.cpu.util[,iowait].avg(5m)}>20 + 0 + + Disk I/O is overloaded on {HOST.NAME} + 0 + + + 0 + 2 + OS spends significant time waiting for I/O (input/output) operations. It could be indicator of performance issues with storage system. + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:system.uname.diff(0)}>0 + 0 + + Host information was changed on {HOST.NAME} + 0 + + + 0 + 1 + + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:system.hostname.diff(0)}>0 + 0 + + Hostname was changed on {HOST.NAME} + 0 + + + 0 + 1 + + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:vm.memory.size[available].last(0)}<20M + 0 + + Lack of available memory on server {HOST.NAME} + 0 + + + 0 + 3 + + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:system.swap.size[,pfree].last(0)}<50 + 0 + + Lack of free swap space on {HOST.NAME} + 0 + + + 0 + 2 + It probably means that the systems requires more physical memory. + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:system.cpu.load[percpu,avg1].avg(5m)}>5 + 0 + + Processor load is too high on {HOST.NAME} + 0 + + + 0 + 2 + + 0 + 0 + + + + + {Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com:system.uptime.change(0)}<0 + 0 + + {HOST.NAME} has just been restarted + 0 + + + 0 + 1 + + 0 + 0 + + + + + + + CPU jumps + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + 009900 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.switches + + + + 1 + 0 + 000099 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.intr + + + + + + CPU load + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 0 + 0 + 0 + + + 0 + 0 + 009900 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.load[percpu,avg1] + + + + 1 + 0 + 000099 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.load[percpu,avg5] + + + + 2 + 0 + 990000 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.load[percpu,avg15] + + + + + + CPU utilization + 900 + 200 + 0.0000 + 100.0000 + 1 + 0 + 1 + 1 + 0 + 0.0000 + 0.0000 + 1 + 1 + 0 + 0 + + + 0 + 1 + FF5555 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,steal] + + + + 1 + 1 + 55FF55 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,softirq] + + + + 2 + 1 + 009999 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,interrupt] + + + + 3 + 1 + 990099 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,nice] + + + + 4 + 1 + 999900 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,iowait] + + + + 5 + 1 + 990000 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,system] + + + + 6 + 1 + 000099 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,user] + + + + 7 + 1 + 009900 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.cpu.util[,idle] + + + + + + Memory usage + 900 + 200 + 0.0000 + 100.0000 + 1 + 1 + 0 + 1 + 0 + 0.0000 + 0.0000 + 1 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + vm.memory.size[total] + + + + 0 + 5 + 00C800 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + vm.memory.size[available] + + + + + + Swap usage + 600 + 340 + 0.0000 + 100.0000 + 0 + 0 + 2 + 1 + 1 + 0.0000 + 0.0000 + 0 + 0 + 0 + 0 + + + 0 + 0 + AA0000 + 0 + 2 + 2 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.swap.size[,total] + + + + 1 + 0 + 00AA00 + 0 + 2 + 0 + + Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com + system.swap.size[,free] + + + + + + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/06-enable-dockbix-agent-auto-registration.api b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/06-enable-dockbix-agent-auto-registration.api new file mode 100644 index 0000000..84374f1 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/etc/zabbix/api/06-enable-dockbix-agent-auto-registration.api @@ -0,0 +1,2 @@ +{"jsonrpc":"2.0","method":"template.get","id":,"auth":"","params":{"output":"templateid","filter":{"host":"Template OS Linux for Dockbix Agent XXL - www.monitoringartist.com"}}} +{"jsonrpc":"2.0","method":"action.create","id":,"auth":"","params":{"name":"Dockbix Agent XXL auto registration","eventsource":2,"status":0,"esc_period":120,"def_shortdata":"Dockbix Agent XXL auto registration: {HOST.HOST}","def_longdata":"Host name: {HOST.HOST}\r\nHost IP: {HOST.IP}\r\nAgent port: {HOST.PORT}","filter":{"evaltype":0,"conditions":[{"conditiontype":24,"operator":2,"value":"dockbix-agent-xxl"}]},"operations":[{"operationtype":6,"optemplate":[{"templateid":""}]}]}} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/about.php b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/about.php new file mode 100644 index 0000000..386f73f --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/about.php @@ -0,0 +1,132 @@ +setTitle(_('Dockbix XXL')) + ->setControls((new CList()) + ->addItem(get_icon('fullscreen', ['fullscreen' => getRequest('fullscreen')])) + ); +$widget->show(); +?> +

+Dockbix XXL contains standard Zabbix + additional XXL (community) +extensions and everything is packaged into Docker image for easy deployment.
+Source repo: https://github.com/monitoringartist/dockbix-xxl +

+

+ + + +

+

+ +

+

Author

+

+
+ + DevOps / Docker / Kubernetes / AWS ECS / Zabbix / Zenoss / Terraform / Monitoring + + + Monitoring Artist is a company, which provides professional devops, automation, cloud and monitoring services.
+ Most of the projects are related to open source monitoring tools such as Zabbix, Zenoss, Grafana, ...

+ Feel free to contact us (info@monitoringartist.com) for commercial support of your Dockerized Zabbix or Docker/Kubernetes/AWS ECS/Mesos monitoring. +
+
+

+ +

+ + +
+ + + + + + + +
+

Grapher

+
    +
  • Host
  • +
  • Graph + + Select All +
  • +
  • Item + + +Normal | + +Stacked +
  • +
+
+ +
+
+
+ +
+
+ +cz2)-WJLkv8J@4bb5L`rsE?Kc|FrXHkKz)ov z76MHYM&Apx%05P7orE!>9=yZ~6O0^V?1%{=1UASqa<2Pgnk7fs!OIs9gh{NCN+@=) z>Gfttd5uq;oeR{%NHjtqV~jEQeY?tDff=(jqx>~SZ_e+iN26HR*`0Q!Re)~HD85p> zbL()Mw}bI^#`7wp0+cv&7*LhrtOmR)?PK>(-BeLm#jL5Jfogv-QS(TBnUb;))Krqm zD}uDDeVLNhm1G*pFB`O?iA=dnWBEpqHk8Yh%Qu45EIG=&F-dDmt|;|nN@|3lOkVZ7>z*~a1?_t?U)c+&|JFJke1`&0-a z#PjhRlg?=$KTo4|rU@NyV_fzDy@>h!lVyKShsO8>V>$xyIXRbHK%H~^Aaz=s$Jz^V zlb?KfaKdZqu3^#m$mintvgJ15@j`sb2Zr%69Sn=xN01Tm5r)NQanT=jhwm7zqj2>O cEB}D~0$b-QdD7|v=>Px#07*qoM6N<$g6AXnUH||9 literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen-sprite@2x.png b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen-sprite@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6b50545202cb4770039362c55025b0b9824663ad GIT binary patch literal 738 zcmV<80v-K{P)oJoIWh{eAG@xkM<0ryd(K3(} zP8JV&;uuIJ4nL%g8!wSG9E$P+3QVMGgj><+00}M5I5kMzaT<~M;uJ`UhLfbp9Ahdsrux5(g+(>Q*+9wU{AuYPH0}W_u4`|q(9c->{ zt>Jn|lbhH<_x5jU6prFi#S}&XMZ=~Y5VyC3+ZN%hXciz8 zPcLpJgbIK#a49e31-%wf2zh2F&&(Nq;AL%4zA(=QJRGq`sx3y3#0_cg9Fim739XTOu1NKKjlWs`52Q+3 Uja*K~(*OVf07*qoM6N<$g3mu-GXMYp literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.css b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.css new file mode 100644 index 0000000..0181b25 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.css @@ -0,0 +1,3 @@ +/* Chosen v1.4.2 | (c) 2011-2015 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */ + +.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container .search-choice .group-name,.chosen-container .chosen-single .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .search-choice .group-name:after,.chosen-container .chosen-single .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(chosen-sprite.png) no-repeat 100% -20px;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted,li.selected-result{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:transparent}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single-nosearch .chosen-search,.chosen-rtl .chosen-drop{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(chosen-sprite.png) no-repeat -30px -20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-rtl .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-container-single .chosen-search input[type=text],.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}} \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.jquery.js b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.jquery.js new file mode 100644 index 0000000..7b55ae3 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/chosen.jquery.js @@ -0,0 +1,1272 @@ +/*! +Please note that it is modified ChosenJS, do not replace it with newer version or you will loose: + - leave results open while focused + - do not reset search query on select + - deselect by click on selected item + +----- +Chosen, a Select Box Enhancer for jQuery and Prototype +by Patrick Filler for Harvest, http://getharvest.com + +Version 1.4.2 +Full source at https://github.com/harvesthq/chosen +Copyright (c) 2011-2015 Harvest http://getharvest.com + +MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md +This file is generated by `grunt build`, do not edit it by hand. +*/ + +(function() { + var $, AbstractChosen, Chosen, SelectParser, _ref, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + SelectParser = (function() { + function SelectParser() { + this.options_index = 0; + this.parsed = []; + } + + SelectParser.prototype.add_node = function(child) { + if (child.nodeName.toUpperCase() === "OPTGROUP") { + return this.add_group(child); + } else { + return this.add_option(child); + } + }; + + SelectParser.prototype.add_group = function(group) { + var group_position, option, _i, _len, _ref, _results; + group_position = this.parsed.length; + this.parsed.push({ + array_index: group_position, + group: true, + label: this.escapeExpression(group.label), + title: group.title ? group.title : void 0, + children: 0, + disabled: group.disabled, + classes: group.className + }); + _ref = group.childNodes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + _results.push(this.add_option(option, group_position, group.disabled)); + } + return _results; + }; + + SelectParser.prototype.add_option = function(option, group_position, group_disabled) { + if (option.nodeName.toUpperCase() === "OPTION") { + if (option.text !== "") { + if (group_position != null) { + this.parsed[group_position].children += 1; + } + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + value: option.value, + text: option.text, + html: option.innerHTML, + title: option.title ? option.title : void 0, + selected: option.selected, + disabled: group_disabled === true ? group_disabled : option.disabled, + group_array_index: group_position, + group_label: group_position != null ? this.parsed[group_position].label : null, + classes: option.className, + style: option.style.cssText + }); + } else { + this.parsed.push({ + array_index: this.parsed.length, + options_index: this.options_index, + empty: true + }); + } + return this.options_index += 1; + } + }; + + SelectParser.prototype.escapeExpression = function(text) { + var map, unsafe_chars; + if ((text == null) || text === false) { + return ""; + } + if (!/[\&\<\>\"\'\`]/.test(text)) { + return text; + } + map = { + "<": "<", + ">": ">", + '"': """, + "'": "'", + "`": "`" + }; + unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g; + return text.replace(unsafe_chars, function(chr) { + return map[chr] || "&"; + }); + }; + + return SelectParser; + + })(); + + SelectParser.select_to_array = function(select) { + var child, parser, _i, _len, _ref; + parser = new SelectParser(); + _ref = select.childNodes; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + child = _ref[_i]; + parser.add_node(child); + } + return parser.parsed; + }; + + AbstractChosen = (function() { + function AbstractChosen(form_field, options) { + this.form_field = form_field; + this.options = options != null ? options : {}; + if (!AbstractChosen.browser_is_supported()) { + return; + } + this.is_multiple = this.form_field.multiple; + this.set_default_text(); + this.set_default_values(); + this.setup(); + this.set_up_html(); + this.register_observers(); + this.on_ready(); + } + + AbstractChosen.prototype.set_default_values = function() { + var _this = this; + this.click_test_action = function(evt) { + return _this.test_active_click(evt); + }; + this.activate_action = function(evt) { + return _this.activate_field(evt); + }; + this.active_field = false; + this.mouse_on_container = false; + this.results_showing = false; + this.result_highlighted = null; + this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false; + this.disable_search_threshold = this.options.disable_search_threshold || 0; + this.disable_search = this.options.disable_search || false; + this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true; + this.group_search = this.options.group_search != null ? this.options.group_search : true; + this.search_contains = this.options.search_contains || false; + this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true; + this.max_selected_options = this.options.max_selected_options || Infinity; + this.inherit_select_classes = this.options.inherit_select_classes || false; + this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true; + this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true; + return this.include_group_label_in_selected = this.options.include_group_label_in_selected || false; + }; + + AbstractChosen.prototype.set_default_text = function() { + if (this.form_field.getAttribute("data-placeholder")) { + this.default_text = this.form_field.getAttribute("data-placeholder"); + } else if (this.is_multiple) { + this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text; + } else { + this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text; + } + return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text; + }; + + AbstractChosen.prototype.choice_label = function(item) { + if (this.include_group_label_in_selected && (item.group_label != null)) { + return "" + item.group_label + "" + item.html; + } else { + return item.html; + } + }; + + AbstractChosen.prototype.mouse_enter = function() { + return this.mouse_on_container = true; + }; + + AbstractChosen.prototype.mouse_leave = function() { + return this.mouse_on_container = false; + }; + + AbstractChosen.prototype.input_focus = function(evt) { + var _this = this; + if (this.is_multiple) { + if (!this.active_field) { + return setTimeout((function() { + return _this.container_mousedown(); + }), 50); + } + } else { + if (!this.active_field) { + return this.activate_field(); + } + } + }; + + AbstractChosen.prototype.input_blur = function(evt) { + var _this = this; + if (!this.mouse_on_container) { + this.active_field = false; + return setTimeout((function() { + return _this.blur_test(); + }), 100); + } + }; + + AbstractChosen.prototype.results_option_build = function(options) { + var content, data, _i, _len, _ref; + content = ''; + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + data = _ref[_i]; + if (data.group) { + content += this.result_add_group(data); + } else { + content += this.result_add_option(data); + } + if (options != null ? options.first : void 0) { + if (data.selected && this.is_multiple) { + this.choice_build(data); + } else if (data.selected && !this.is_multiple) { + this.single_set_selected_text(this.choice_label(data)); + } + } + } + return content; + }; + + AbstractChosen.prototype.result_add_option = function(option) { + var classes, option_el; + if (!option.search_match) { + return ''; + } + if (!this.include_option_in_results(option)) { + return ''; + } + classes = []; + if (!option.disabled && !(option.selected && this.is_multiple)) { + classes.push("active-result"); + } + if (option.disabled && !(option.selected && this.is_multiple)) { + classes.push("disabled-result"); + } + if (option.selected) { + classes.push("result-selected"); + } + if (option.group_array_index != null) { + classes.push("group-option"); + } + if (option.classes !== "") { + classes.push(option.classes); + } + option_el = document.createElement("li"); + option_el.className = classes.join(" "); + option_el.style.cssText = option.style; + option_el.setAttribute("data-option-array-index", option.array_index); + option_el.innerHTML = option.search_text; + if (option.title) { + option_el.title = option.title; + } + return this.outerHTML(option_el); + }; + + AbstractChosen.prototype.result_add_group = function(group) { + var classes, group_el; + if (!(group.search_match || group.group_match)) { + return ''; + } + if (!(group.active_options > 0)) { + return ''; + } + classes = []; + classes.push("group-result"); + if (group.classes) { + classes.push(group.classes); + } + group_el = document.createElement("li"); + group_el.className = classes.join(" "); + group_el.innerHTML = group.search_text; + if (group.title) { + group_el.title = group.title; + } + return this.outerHTML(group_el); + }; + + AbstractChosen.prototype.results_update_field = function() { + this.set_default_text(); + if (!this.is_multiple) { + this.results_reset_cleanup(); + } + this.result_clear_highlight(); + this.results_build(); + if (this.results_showing) { + return this.winnow_results(); + } + }; + + AbstractChosen.prototype.reset_single_select_options = function() { + var result, _i, _len, _ref, _results; + _ref = this.results_data; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + result = _ref[_i]; + if (result.selected) { + _results.push(result.selected = false); + } else { + _results.push(void 0); + } + } + return _results; + }; + + AbstractChosen.prototype.results_toggle = function() { + if (this.results_showing) { + return this.results_hide(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.results_search = function(evt) { + if (this.results_showing) { + return this.winnow_results(); + } else { + return this.results_show(); + } + }; + + AbstractChosen.prototype.winnow_results = function() { + var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref; + this.no_results_clear(); + results = 0; + searchText = this.get_search_text(); + escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + zregex = new RegExp(escapedSearchText, 'i'); + regex = this.get_search_regex(escapedSearchText); + _ref = this.results_data; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + option.search_match = false; + results_group = null; + if (this.include_option_in_results(option)) { + if (option.group) { + option.group_match = false; + option.active_options = 0; + } + if ((option.group_array_index != null) && this.results_data[option.group_array_index]) { + results_group = this.results_data[option.group_array_index]; + if (results_group.active_options === 0 && results_group.search_match) { + results += 1; + } + results_group.active_options += 1; + } + option.search_text = option.group ? option.label : option.html; + if (!(option.group && !this.group_search)) { + option.search_match = this.search_string_match(option.search_text, regex); + if (option.search_match && !option.group) { + results += 1; + } + if (option.search_match) { + if (searchText.length) { + startpos = option.search_text.search(zregex); + text = option.search_text.substr(0, startpos + searchText.length) + '' + option.search_text.substr(startpos + searchText.length); + option.search_text = text.substr(0, startpos) + '' + text.substr(startpos); + } + if (results_group != null) { + results_group.group_match = true; + } + } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) { + option.search_match = true; + } + } + } + } + this.result_clear_highlight(); + if (results < 1 && searchText.length) { + this.update_results_content(""); + return this.no_results(searchText); + } else { + this.update_results_content(this.results_option_build()); + return this.winnow_results_set_highlight(); + } + }; + + AbstractChosen.prototype.get_search_regex = function(escaped_search_string) { + var regex_anchor; + regex_anchor = this.search_contains ? "" : "^"; + return new RegExp(regex_anchor + escaped_search_string, 'i'); + }; + + AbstractChosen.prototype.search_string_match = function(search_string, regex) { + var part, parts, _i, _len; + if (regex.test(search_string)) { + return true; + } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) { + parts = search_string.replace(/\[|\]/g, "").split(" "); + if (parts.length) { + for (_i = 0, _len = parts.length; _i < _len; _i++) { + part = parts[_i]; + if (regex.test(part)) { + return true; + } + } + } + } + }; + + AbstractChosen.prototype.choices_count = function() { + var option, _i, _len, _ref; + if (this.selected_option_count != null) { + return this.selected_option_count; + } + this.selected_option_count = 0; + _ref = this.form_field.options; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + option = _ref[_i]; + if (option.selected) { + this.selected_option_count += 1; + } + } + return this.selected_option_count; + }; + + AbstractChosen.prototype.choices_click = function(evt) { + evt.preventDefault(); + if (!(this.results_showing || this.is_disabled)) { + return this.results_show(); + } + }; + + AbstractChosen.prototype.keyup_checker = function(evt) { + var stroke, _ref; + stroke = (_ref = evt.which) != null ? _ref : evt.keyCode; + this.search_field_scale(); + switch (stroke) { + case 8: + if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) { + return this.keydown_backstroke(); + } else if (!this.pending_backstroke) { + this.result_clear_highlight(); + return this.results_search(); + } + break; + case 13: + evt.preventDefault(); + if (this.results_showing) { + return this.result_select(evt); + } + break; + case 27: + if (this.results_showing) { + this.results_hide(); + } + return true; + case 9: + case 38: + case 40: + case 16: + case 91: + case 17: + break; + default: + return this.results_search(); + } + }; + + AbstractChosen.prototype.clipboard_event_checker = function(evt) { + var _this = this; + return setTimeout((function() { + return _this.results_search(); + }), 50); + }; + + AbstractChosen.prototype.container_width = function() { + if (this.options.width != null) { + return this.options.width; + } else { + return "" + this.form_field.offsetWidth + "px"; + } + }; + + AbstractChosen.prototype.include_option_in_results = function(option) { + if (this.is_multiple && (!this.display_selected_options && option.selected)) { + return false; + } + if (!this.display_disabled_options && option.disabled) { + return false; + } + if (option.empty) { + return false; + } + return true; + }; + + AbstractChosen.prototype.search_results_touchstart = function(evt) { + this.touch_started = true; + return this.search_results_mouseover(evt); + }; + + AbstractChosen.prototype.search_results_touchmove = function(evt) { + this.touch_started = false; + return this.search_results_mouseout(evt); + }; + + AbstractChosen.prototype.search_results_touchend = function(evt) { + if (this.touch_started) { + return this.search_results_mouseup(evt); + } + }; + + AbstractChosen.prototype.outerHTML = function(element) { + var tmp; + if (element.outerHTML) { + return element.outerHTML; + } + tmp = document.createElement("div"); + tmp.appendChild(element); + return tmp.innerHTML; + }; + + AbstractChosen.browser_is_supported = function() { + if (window.navigator.appName === "Microsoft Internet Explorer") { + return document.documentMode >= 8; + } + if (/iP(od|hone)/i.test(window.navigator.userAgent)) { + return false; + } + if (/Android/i.test(window.navigator.userAgent)) { + if (/Mobile/i.test(window.navigator.userAgent)) { + return false; + } + } + return true; + }; + + AbstractChosen.default_multiple_text = "Select Some Options"; + + AbstractChosen.default_single_text = "Select an Option"; + + AbstractChosen.default_no_result_text = "No results match"; + + return AbstractChosen; + + })(); + + $ = jQuery; + + $.fn.extend({ + chosen: function(options) { + if (!AbstractChosen.browser_is_supported()) { + return this; + } + return this.each(function(input_field) { + var $this, chosen; + $this = $(this); + chosen = $this.data('chosen'); + if (options === 'destroy' && chosen instanceof Chosen) { + chosen.destroy(); + } else if (!(chosen instanceof Chosen)) { + $this.data('chosen', new Chosen(this, options)); + } + }); + } + }); + + Chosen = (function(_super) { + __extends(Chosen, _super); + + function Chosen() { + _ref = Chosen.__super__.constructor.apply(this, arguments); + return _ref; + } + + Chosen.prototype.setup = function() { + this.form_field_jq = $(this.form_field); + this.current_selectedIndex = this.form_field.selectedIndex; + return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl"); + }; + + Chosen.prototype.set_up_html = function() { + var container_classes, container_props; + container_classes = ["chosen-container"]; + container_classes.push("chosen-container-" + (this.is_multiple ? "multi" : "single")); + if (this.inherit_select_classes && this.form_field.className) { + container_classes.push(this.form_field.className); + } + if (this.is_rtl) { + container_classes.push("chosen-rtl"); + } + container_props = { + 'class': container_classes.join(' '), + 'style': "width: " + (this.container_width()) + ";", + 'title': this.form_field.title + }; + if (this.form_field.id.length) { + container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen"; + } + this.container = $("
", container_props); + if (this.is_multiple) { + this.container.html('
    '); + } else { + this.container.html('' + this.default_text + '
      '); + } + this.form_field_jq.hide().after(this.container); + this.dropdown = this.container.find('div.chosen-drop').first(); + this.search_field = this.container.find('input').first(); + this.search_results = this.container.find('ul.chosen-results').first(); + this.search_field_scale(); + this.search_no_results = this.container.find('li.no-results').first(); + if (this.is_multiple) { + this.search_choices = this.container.find('ul.chosen-choices').first(); + this.search_container = this.container.find('li.search-field').first(); + } else { + this.search_container = this.container.find('div.chosen-search').first(); + this.selected_item = this.container.find('.chosen-single').first(); + } + this.results_build(); + this.set_tab_index(); + return this.set_label_behavior(); + }; + + Chosen.prototype.on_ready = function() { + return this.form_field_jq.trigger("chosen:ready", { + chosen: this + }); + }; + + Chosen.prototype.register_observers = function() { + var _this = this; + this.container.bind('touchstart.chosen', function(evt) { + _this.container_mousedown(evt); + return evt.preventDefault(); + }); + this.container.bind('touchend.chosen', function(evt) { + _this.container_mouseup(evt); + return evt.preventDefault(); + }); + this.container.bind('mousedown.chosen', function(evt) { + _this.container_mousedown(evt); + }); + this.container.bind('mouseup.chosen', function(evt) { + _this.container_mouseup(evt); + }); + this.container.bind('mouseenter.chosen', function(evt) { + _this.mouse_enter(evt); + }); + this.container.bind('mouseleave.chosen', function(evt) { + _this.mouse_leave(evt); + }); + this.search_results.bind('mouseup.chosen', function(evt) { + _this.search_results_mouseup(evt); + }); + this.search_results.bind('mouseover.chosen', function(evt) { + _this.search_results_mouseover(evt); + }); + this.search_results.bind('mouseout.chosen', function(evt) { + _this.search_results_mouseout(evt); + }); + this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) { + _this.search_results_mousewheel(evt); + }); + this.search_results.bind('touchstart.chosen', function(evt) { + _this.search_results_touchstart(evt); + }); + this.search_results.bind('touchmove.chosen', function(evt) { + _this.search_results_touchmove(evt); + }); + this.search_results.bind('touchend.chosen', function(evt) { + _this.search_results_touchend(evt); + }); + this.form_field_jq.bind("chosen:updated.chosen", function(evt) { + _this.results_update_field(evt); + }); + this.form_field_jq.bind("chosen:activate.chosen", function(evt) { + _this.activate_field(evt); + }); + this.form_field_jq.bind("chosen:open.chosen", function(evt) { + _this.container_mousedown(evt); + }); + this.form_field_jq.bind("chosen:close.chosen", function(evt) { + _this.input_blur(evt); + }); + this.search_field.bind('blur.chosen', function(evt) { + _this.input_blur(evt); + }); + this.search_field.bind('keyup.chosen', function(evt) { + _this.keyup_checker(evt); + }); + this.search_field.bind('keydown.chosen', function(evt) { + _this.keydown_checker(evt); + }); + this.search_field.bind('focus.chosen', function(evt) { + _this.input_focus(evt); + }); + this.search_field.bind('cut.chosen', function(evt) { + _this.clipboard_event_checker(evt); + }); + this.search_field.bind('paste.chosen', function(evt) { + _this.clipboard_event_checker(evt); + }); + if (this.is_multiple) { + return this.search_choices.bind('click.chosen', function(evt) { + _this.choices_click(evt); + }); + } else { + return this.container.bind('click.chosen', function(evt) { + evt.preventDefault(); + }); + } + }; + + Chosen.prototype.destroy = function() { + $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); + if (this.search_field[0].tabIndex) { + this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex; + } + this.container.remove(); + this.form_field_jq.removeData('chosen'); + return this.form_field_jq.show(); + }; + + Chosen.prototype.search_field_disabled = function() { + this.is_disabled = this.form_field_jq[0].disabled; + if (this.is_disabled) { + this.container.addClass('chosen-disabled'); + this.search_field[0].disabled = true; + if (!this.is_multiple) { + this.selected_item.unbind("focus.chosen", this.activate_action); + } + return this.close_field(); + } else { + this.container.removeClass('chosen-disabled'); + this.search_field[0].disabled = false; + if (!this.is_multiple) { + return this.selected_item.bind("focus.chosen", this.activate_action); + } + } + }; + + Chosen.prototype.container_mousedown = function(evt) { + if (!this.is_disabled) { + if (evt && evt.type === "mousedown" && !this.results_showing) { + evt.preventDefault(); + } + if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) { + if (!this.active_field) { + if (this.is_multiple && this.search_field.val()==this.default_text) { + this.search_field.val(""); + } + $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action); + this.results_show(); + } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) { + evt.preventDefault(); + this.results_toggle(); + } + return this.activate_field(); + } + } + }; + + Chosen.prototype.container_mouseup = function(evt) { + if (evt.target.nodeName === "ABBR" && !this.is_disabled) { + return this.results_reset(evt); + } + }; + + Chosen.prototype.search_results_mousewheel = function(evt) { + var delta; + if (evt.originalEvent) { + delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail; + } + if (delta != null) { + evt.preventDefault(); + if (evt.type === 'DOMMouseScroll') { + delta = delta * 40; + } + return this.search_results.scrollTop(delta + this.search_results.scrollTop()); + } + }; + + Chosen.prototype.blur_test = function(evt) { + if (!this.active_field && this.container.hasClass("chosen-container-active")) { + return this.close_field(); + } + }; + + Chosen.prototype.close_field = function() { + $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action); + this.active_field = false; + this.results_hide(); + this.container.removeClass("chosen-container-active"); + this.clear_backstroke(); + this.show_search_field_default(); + return this.search_field_scale(); + }; + + Chosen.prototype.activate_field = function() { + this.container.addClass("chosen-container-active"); + this.active_field = true; + this.search_field.val(this.search_field.val()); + return this.search_field.focus(); + }; + + Chosen.prototype.test_active_click = function(evt) { + var active_container; + active_container = $(evt.target).closest('.chosen-container'); + if (active_container.length && this.container[0] === active_container[0]) { + return this.active_field = true; + } else { + return this.close_field(); + } + }; + + Chosen.prototype.results_build = function() { + this.parsing = true; + this.selected_option_count = null; + this.results_data = SelectParser.select_to_array(this.form_field); + if (this.is_multiple) { + this.search_choices.find("li.search-choice").remove(); + } else if (!this.is_multiple) { + this.single_set_selected_text(); + if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) { + this.search_field[0].readOnly = true; + this.container.addClass("chosen-container-single-nosearch"); + } else { + this.search_field[0].readOnly = false; + this.container.removeClass("chosen-container-single-nosearch"); + } + } + this.update_results_content(this.results_option_build({ + first: true + })); + this.search_field_disabled(); + this.show_search_field_default(); + this.search_field_scale(); + return this.parsing = false; + }; + + Chosen.prototype.result_do_highlight = function(el) { + var high_bottom, high_top, maxHeight, visible_bottom, visible_top; + if (el.length) { + this.result_clear_highlight(); + this.result_highlight = el; + this.result_highlight.addClass("highlighted"); + maxHeight = parseInt(this.search_results.css("maxHeight"), 10); + visible_top = this.search_results.scrollTop(); + visible_bottom = maxHeight + visible_top; + high_top = this.result_highlight.position().top + this.search_results.scrollTop(); + high_bottom = high_top + this.result_highlight.outerHeight(); + if (high_bottom >= visible_bottom) { + return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0); + } else if (high_top < visible_top) { + return this.search_results.scrollTop(high_top); + } + } + }; + + Chosen.prototype.result_clear_highlight = function() { + if (this.result_highlight) { + this.result_highlight.removeClass("highlighted"); + } + return this.result_highlight = null; + }; + + Chosen.prototype.results_show = function() { + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + this.container.addClass("chosen-with-drop"); + this.results_showing = true; + this.search_field.focus(); + this.search_field.val(this.search_field.val()); + this.winnow_results(); + return this.form_field_jq.trigger("chosen:showing_dropdown", { + chosen: this + }); + }; + + Chosen.prototype.update_results_content = function(content) { + return this.search_results.html(content); + }; + + Chosen.prototype.results_hide = function() { + if (this.results_showing) { + this.result_clear_highlight(); + this.container.removeClass("chosen-with-drop"); + this.form_field_jq.trigger("chosen:hiding_dropdown", { + chosen: this + }); + } + return this.results_showing = false; + }; + + Chosen.prototype.set_tab_index = function(el) { + var ti; + if (this.form_field.tabIndex) { + ti = this.form_field.tabIndex; + this.form_field.tabIndex = -1; + return this.search_field[0].tabIndex = ti; + } + }; + + Chosen.prototype.set_label_behavior = function() { + var _this = this; + this.form_field_label = this.form_field_jq.parents("label"); + if (!this.form_field_label.length && this.form_field.id.length) { + this.form_field_label = $("label[for='" + this.form_field.id + "']"); + } + if (this.form_field_label.length > 0) { + return this.form_field_label.bind('click.chosen', function(evt) { + if (_this.is_multiple) { + return _this.container_mousedown(evt); + } else { + return _this.activate_field(); + } + }); + } + }; + + Chosen.prototype.show_search_field_default = function() { + if (this.is_multiple && this.choices_count() < 1 && !this.active_field) { + if(this.search_field.val()=='') this.search_field.val(this.default_text); + return this.search_field.addClass("default"); + } else { + if(this.search_field.val()==this.default_text) this.search_field.val(""); + return this.search_field.removeClass("default"); + } + }; + + Chosen.prototype.search_results_mouseup = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target.length) { + this.result_highlight = target; + this.result_select(evt); + return this.search_field.focus(); + } + //deselect + target = $(evt.target).hasClass("result-selected") ? $(evt.target) : $(evt.target).parents(".result-selected").first(); + if( target.length ){ + this.result_highlight = target; + var i=target[0].getAttribute("data-option-array-index"); + $('ul.chosen-choices a.search-choice-close[data-option-array-index='+i+']').parent('li').remove(); + evt.preventDefault(); + return this.result_deselect(i); + } + }; + + Chosen.prototype.search_results_mouseover = function(evt) { + var target; + target = $(evt.target).hasClass("active-result") ? $(evt.target) : $(evt.target).parents(".active-result").first(); + if (target) { + return this.result_do_highlight(target); + } + }; + + Chosen.prototype.search_results_mouseout = function(evt) { + if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) { + return this.result_clear_highlight(); + } + }; + + Chosen.prototype.choice_build = function(item) { + var choice, close_link, + _this = this; + choice = $('
    • ', { + "class": "search-choice" + }).html("" + (this.choice_label(item)) + ""); + if (item.disabled) { + choice.addClass('search-choice-disabled'); + } else { + close_link = $('', { + "class": 'search-choice-close', + 'data-option-array-index': item.array_index + }); + close_link.bind('click.chosen', function(evt) { + return _this.choice_destroy_link_click(evt); + }); + choice.append(close_link); + } + return this.search_container.before(choice); + }; + + Chosen.prototype.choice_destroy_link_click = function(evt) { + evt.preventDefault(); + evt.stopPropagation(); + if (!this.is_disabled) { + return this.choice_destroy($(evt.target)); + } + }; + + Chosen.prototype.choice_destroy = function(link) { + if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) { + this.show_search_field_default(); + if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) { + this.results_hide(); + } + link.parents('li').first().remove(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.results_reset = function() { + this.reset_single_select_options(); + this.form_field.options[0].selected = true; + this.single_set_selected_text(); + this.show_search_field_default(); + this.results_reset_cleanup(); + this.form_field_jq.trigger("change"); + if (this.active_field) { + return this.results_hide(); + } + }; + + Chosen.prototype.results_reset_cleanup = function() { + this.current_selectedIndex = this.form_field.selectedIndex; + return this.selected_item.find("abbr").remove(); + }; + + Chosen.prototype.result_select = function(evt) { + var high, item; + if (this.result_highlight) { + high = this.result_highlight; + this.result_clear_highlight(); + if (this.is_multiple && this.max_selected_options <= this.choices_count()) { + this.form_field_jq.trigger("chosen:maxselected", { + chosen: this + }); + return false; + } + if (this.is_multiple) { + high.removeClass("active-result"); + } else { + this.reset_single_select_options(); + } + high.addClass("result-selected"); + item = this.results_data[high[0].getAttribute("data-option-array-index")]; + item.selected = true; + this.form_field.options[item.options_index].selected = true; + this.selected_option_count = null; + if (this.is_multiple) { + this.choice_build(item); + } else { + this.single_set_selected_text(this.choice_label(item)); + } + if (!this.is_multiple) { + this.results_hide(); + this.search_field.val(""); + } + if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) { + this.form_field_jq.trigger("change", { + 'selected': this.form_field.options[item.options_index].value + }); + } + this.current_selectedIndex = this.form_field.selectedIndex; + evt.preventDefault(); + return this.search_field_scale(); + } + }; + + Chosen.prototype.single_set_selected_text = function(text) { + if (text == null) { + text = this.default_text; + } + if (text === this.default_text) { + this.selected_item.addClass("chosen-default"); + } else { + this.single_deselect_control_build(); + this.selected_item.removeClass("chosen-default"); + } + return this.selected_item.find("span").html(text); + }; + + Chosen.prototype.result_deselect = function(pos) { + var result_data; + result_data = this.results_data[pos]; + if (!this.form_field.options[result_data.options_index].disabled) { + result_data.selected = false; + this.form_field.options[result_data.options_index].selected = false; + this.selected_option_count = null; + this.result_clear_highlight(); + if (this.results_showing) { + this.winnow_results(); + } + this.form_field_jq.trigger("change", { + deselected: this.form_field.options[result_data.options_index].value + }); + this.search_field_scale(); + return true; + } else { + return false; + } + }; + + Chosen.prototype.single_deselect_control_build = function() { + if (!this.allow_single_deselect) { + return; + } + if (!this.selected_item.find("abbr").length) { + this.selected_item.find("span").first().after(""); + } + return this.selected_item.addClass("chosen-single-with-deselect"); + }; + + Chosen.prototype.get_search_text = function() { + return $('
      ').text($.trim(this.search_field.val())).html(); + }; + + Chosen.prototype.winnow_results_set_highlight = function() { + var do_high, selected_results; + selected_results = !this.is_multiple ? this.search_results.find(".result-selected.active-result") : []; + do_high = selected_results.length ? selected_results.first() : this.search_results.find(".active-result").first(); + if (do_high != null) { + return this.result_do_highlight(do_high); + } + }; + + Chosen.prototype.no_results = function(terms) { + var no_results_html; + no_results_html = $('
    • ' + this.results_none_found + ' ""
    • '); + no_results_html.find("span").first().html(terms); + this.search_results.append(no_results_html); + return this.form_field_jq.trigger("chosen:no_results", { + chosen: this + }); + }; + + Chosen.prototype.no_results_clear = function() { + return this.search_results.find(".no-results").remove(); + }; + + Chosen.prototype.keydown_arrow = function() { + var next_sib; + if (this.results_showing && this.result_highlight) { + next_sib = this.result_highlight.nextAll("li.active-result").first(); + if (next_sib) { + return this.result_do_highlight(next_sib); + } + } else { + return this.results_show(); + } + }; + + Chosen.prototype.keyup_arrow = function() { + var prev_sibs; + if (!this.results_showing && !this.is_multiple) { + return this.results_show(); + } else if (this.result_highlight) { + prev_sibs = this.result_highlight.prevAll("li.active-result"); + if (prev_sibs.length) { + return this.result_do_highlight(prev_sibs.first()); + } else { + if (this.choices_count() > 0) { + this.results_hide(); + } + return this.result_clear_highlight(); + } + } + }; + + Chosen.prototype.keydown_backstroke = function() { + var next_available_destroy; + if (this.pending_backstroke) { + this.choice_destroy(this.pending_backstroke.find("a").first()); + return this.clear_backstroke(); + } else { + next_available_destroy = this.search_container.siblings("li.search-choice").last(); + if (next_available_destroy.length && !next_available_destroy.hasClass("search-choice-disabled")) { + this.pending_backstroke = next_available_destroy; + if (this.single_backstroke_delete) { + return this.keydown_backstroke(); + } else { + return this.pending_backstroke.addClass("search-choice-focus"); + } + } + } + }; + + Chosen.prototype.clear_backstroke = function() { + if (this.pending_backstroke) { + this.pending_backstroke.removeClass("search-choice-focus"); + } + return this.pending_backstroke = null; + }; + + Chosen.prototype.keydown_checker = function(evt) { + var stroke, _ref1; + stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode; + this.search_field_scale(); + if (stroke !== 8 && this.pending_backstroke) { + this.clear_backstroke(); + } + switch (stroke) { + case 8: + this.backstroke_length = this.search_field.val().length; + break; + case 9: + if (this.results_showing && !this.is_multiple) { + this.result_select(evt); + } + this.mouse_on_container = false; + break; + case 13: + if (this.results_showing) { + evt.preventDefault(); + } + break; + case 32: + if (this.disable_search) { + evt.preventDefault(); + } + break; + case 38: + evt.preventDefault(); + this.keyup_arrow(); + break; + case 40: + evt.preventDefault(); + this.keydown_arrow(); + break; + } + }; + + Chosen.prototype.search_field_scale = function() { + var div, f_width, h, style, style_block, styles, w, _i, _len; + if (this.is_multiple) { + h = 0; + w = 0; + style_block = "position:absolute; left: -1000px; top: -1000px; display:none;"; + styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing']; + for (_i = 0, _len = styles.length; _i < _len; _i++) { + style = styles[_i]; + style_block += style + ":" + this.search_field.css(style) + ";"; + } + div = $('
      ', { + 'style': style_block + }); + div.text(this.search_field.val()); + $('body').append(div); + w = div.width() + 25; + div.remove(); + f_width = this.container.outerWidth(); + if (w > f_width - 10) { + w = f_width - 10; + } + return this.search_field.css({ + 'width': w + 'px' + }); + } + }; + + return Chosen; + + })(AbstractChosen); + +}).call(this); diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.css b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.css new file mode 100644 index 0000000..0588380 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.css @@ -0,0 +1,80 @@ +/*hide chosen items*/ +.chosen-container-multi .chosen-choices li.search-field input[type="text"] { + height: inherit; +} +.chosen-container-multi .chosen-choices li.search-choice { + display: none; +} + +/*allow deselect selected*/ +.chosen-container-multi .chosen-drop .result-selected { + color: #fff; + background-color: #4885e3; + cursor: pointer; + display: list-item; +} +.chosen-container-multi .chosen-choices li.search-field { + width: 100%; + white-space: inherit; +} +.chosen-container .chosen-results li.highlighted,li.selected-result{ + background-color:#2a62bc; + background-image: none; + color:#fff +} +.header-title .chosen-container ul {bottom: 0;} +.header-title .chosen-container ul li {float: inherit;} +/*select optgroup*/ +.chosen-container .chosen-results li.group-result {cursor: pointer;} + +/* number hint and clear button*/ +.chsn-hint, .chsn-clean { + color: #999; + display: inline; + float: right; + padding-top: 4px; +} +.chsn-clean { + font-size: 21px; + cursor: pointer; + font-weight: 700; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + padding-left: 10px; +} +.chsn-clean:hover { + color: #F00; +} + +/* pics */ +#pics { + text-align: center; +} +div.flickerfreescreen { + display: inline-block; + position: relative; + margin: 10px; + vertical-align: top; + width: 730px; + min-height: 400px; +} +div.flickerfreescreen:hover div.close-graph {display: block;} +div.close-graph { + display: none; + font-size: 21px; + cursor: pointer; + font-weight: 700; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + color: #ccc; + position: absolute; + right: 10px; + top: 0; + z-index: 10; +} +div.close-graph:after {content: '\00d7';} +div.close-graph:hover {color: #F00;} + +/*pager*/ +span.link.bold { + text-decoration: none; + cursor: default; +} \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.js b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.js new file mode 100644 index 0000000..a52b604 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/grapher/grapher.js @@ -0,0 +1,536 @@ +// zabbixGrapher +// https://github.com/sepich/zabbixGrapher + +jQuery(function() { + var options = { + url: '/api_jsonrpc.php', // zabbix API url + timeout: 5000, // to API in msec + ssid: getCookie('zbx_sessionid'), // key to API, get from current logged in user + pagelen: 24, // graphs per page + width: 600, // of graph + height: 200 // of graph + }, + itemgraphs=[], //array of items obj to draw + skipHistory=false, //do not save this draw to history (from navigation) + timeoutID, + $=jQuery; + console.log('starting'); + + //timeline init + window.flickerfreeScreenShadow.timeout = 30000 ; + window.flickerfreeScreenShadow.responsiveness = 10000; + var d=new Date(); + d.setFullYear(d.getFullYear() - 1); + timeControl.addObject("scrollbar", { + "period": 10800, + "starttime": cdumpts(d), + "isNow": 1 + }, + { + "id":'scrollbar', + "loadScroll":1, + "mainObject":1, + "periodFixed":'1', + "sliderMaximumTimePeriod":63072000 + }); + timeControl.processObjects(); + cookie.init(); + + //ZabbixApi wrapper + function ZabbixApi(method, params, success) { + $.ajax({ + contentType: 'application/json-rpc', + type: 'POST', + timeout: options.timeout, + url: options.url, + data: JSON.stringify({ + jsonrpc: '2.0', + method: method, + id: 0, + auth: options.ssid, + params: params, + }), + success: function(response, status) { + success(response, status); + } + }); + } + + //Hosts list + $("#hosts").chosen({search_contains: true}).change(function(e){ + console.log('hosts changed'); + updateHint(this); + //delay update while user is clicking (shift-click race) + window.clearTimeout(timeoutID); + timeoutID = window.setTimeout(function(){ + updateGraphs(); + updateItems(); + }, 1500); + }); + //fill in hosts list on start + ZabbixApi('hostgroup.get', { + monitored_hosts: 1, + sortfield: 'name', + selectHosts: ['name'], + output: ['name'] + }, + function(r){ + $.each(r.result, function(){ + var og = $(''); + $.each(this.hosts, function(){ + $(''); + $.each(items, function(i,v){ + $('
      '); + }); + $('li.search-field').click(function(){ + $(this).find('input').focus(); + }); + $('.chsn-clean').click(function(){ + var s=$(this).closest('.chosen-container').prev('select'); + s.find('option:selected').removeAttr('selected'); + s.trigger('chosen:updated'); + s.trigger('change'); + $(this).prev('input').val(''); + }); + function updateHint(o){ + if($(o).val() == null){ + $(o).next().find('.chsn-hint').html(''); + $(o).next().find('.chsn-clean').html(''); + } + else { + $(o).next().find('.chsn-hint').html( $(o).val().length + ' selected' ); + $(o).next().find('.chsn-clean').html('×'); + } + } + //Click optgroup to toggle all subitems + $(document).on('click', '.group-result', function() { + var unselected = $(this).nextUntil('.group-result').not('.result-selected'); + if(unselected.length) unselected.trigger('mouseup'); + else $(this).nextUntil('.group-result').each(function() { + $('a.search-choice-close[data-option-array-index="' + $(this).data('option-array-index') + '"]').trigger('click'); + }); + }); + + //Draw selected graphs (page) + function drawGraphs(page){ + //cleanup + $('#pics').empty(); + timeControl.objectList={}; + $.each(flickerfreeScreen.screens, function(){ + if(this.timeoutHandler!=null) clearTimeout(this.timeoutHandler); + }); + flickerfreeScreen.screens=[]; + ZBX_SBOX={}; + + //prepare graphs ids + graphs=[] + if($('#graphs').val()!=null) $.each( $('#graphs').val(), function(){ + graphs=graphs.concat(this.split(',')); + }); + var stime = cdumpts((timeControl.timeline._usertime-timeControl.timeline._period)*1000); + //prepage pager + if(graphs.length > options.pagelen){ + if(page==undefined) page=0; + pages=Math.floor(graphs.length/options.pagelen); + start = page * options.pagelen; + end = Math.min(start + options.pagelen, graphs.length); + var s=''; + for(var i=0; i<=pages; i++){ + s+=(i==page)? ''+(i+1)+'' : ''+(i+1)+''; + } + if(page>0) s='< Previous'+s; + if(page!=pages) s+='Next >'; + pager=$('
      ').append(s); + pager=$('
      ').append(pager); + pager.appendTo( $('#pics') ); + } + else { + start=0; + end=graphs.length; + } + //add itemgraphs + for (var i=0; i') + .append('
      ') + .append('
      ') + ); + timeControl.addObject(id, { + "period": timeControl.timeline._period, + "starttime": cdumpts(timeControl.timeline._starttime), + "usertime": cdumpts(timeControl.timeline._usertime), + "isNow": timeControl.timeline._isNow + }, + { + "containerid":"itemgraph_"+id, + "objDims":{ + "shiftYtop":35, + "yaxis":"0", + "graphtype":"0", + "graphHeight": options.height, + "shiftXleft": 65, + "shiftXright": 65, + "width": options.width + }, + "loadSBox":1, + "loadImage":1, + "periodFixed":"1", + "sliderMaximumTimePeriod": timeControl.timeline.maxperiod, + "src": 'chart.php?'+uri+'type='+itemgraphs[i].type+'&batch=1&width='+options.width+'&height='+options.height+'&period='+timeControl.timeline._period+'&stime='+stime + }); + window.flickerfreeScreen.add({ + "id": id, + "isFlickerfree":true, + "pageFile":'history.php', + "resourcetype":'17', + "mode":2, + "interval":'60', + "timeline":{ + "period": timeControl.timeline._period, + "stime": stime, + "isNow": timeControl.timeline._isNow + }, + "data":{"itemids":[itemgraphs[i].items],"action":'showgraph',"filter":'',"filterTask":null,"markColor":1} + }); + } + //add graphs + for (var i=start; i') + .append('') + .append('
      ') + ); + timeControl.addObject(id, + { + "period": timeControl.timeline._period, + "starttime": cdumpts(timeControl.timeline._starttime), + "usertime": cdumpts(timeControl.timeline._usertime), + "isNow": timeControl.timeline._isNow + }, + { + "containerid":"graph_container_"+id, + "objDims":{ + "shiftYtop":35, + "yaxis":"0", + "graphtype":"0", + "graphHeight": options.height, + "shiftXleft": 65, + "shiftXright": 65, + "width": options.width + }, + "loadSBox":1, + "loadImage":1, + "periodFixed":"1", + "sliderMaximumTimePeriod": timeControl.timeline.maxperiod, + "src": "chart2.php?graphid="+id+'&width='+options.width+'&height='+options.height+'&period='+timeControl.timeline._period+'&stime='+stime + }); + window.flickerfreeScreen.add({ + "id": id, + "isFlickerfree":true, + "pageFile":'screens.php', + "resourcetype":'0', + "mode":0, + // "timestamp":1450022637, + "interval":'60', + // "screenitemid":'336', + // "screenid":'34', + // "groupid":null, + // "hostid":0, + "timeline":{ + "period": timeControl.timeline._period, + "stime": stime, + // "stimeNow":'20161212070357', + // "starttime":'20131213080357', + // "usertime":'20151213080357', + "isNow": timeControl.timeline._isNow + }, + // "profileIdx":'web.screens', + // "profileIdx2":'34', + // "updateProfile":true, + "data":null + }); + }; + //pager at bottom + if(graphs.length > options.pagelen) { + pager.clone().appendTo( $('#pics') ); + $('div.paging-btn-container a').click(function(){ + drawGraphs( $(this).data('num') ); + }); + } + //attach close button event + $('.close-graph').click(function(e){ + removeGraph(this); + }); + //live update/select time period + timeControl.useTimeRefresh(60); + timeControl.processObjects(); + chkbxRange.init(); + //update url/history + if(skipHistory) skipHistory=false; + else{ + var state={hosts: $('#hosts').val(), itemgraphs: itemgraphs, graphs: graphs, page: page}; + history.pushState(state, '', makeUrl(state)); + } + } + + // Remove graph (id) + function removeGraph(o){ + var id=$(o).data('id'); + if($(o).prev('a[id^=graph_container_]').length){ + //deselect graph + if($('#hosts').val().length==1){ + $('#graphs option[value='+id+']').removeAttr('selected'); + $('#graphs').trigger('chosen:updated'); + $('#graphs').trigger('change'); + } + else{ + $('div#flickerfreescreen_'+id).remove(); + } + } + else{ + //remove itemgraph + for(var i=0; i diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher.php b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher.php new file mode 100644 index 0000000..0fdaee4 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher.php @@ -0,0 +1,73 @@ +setTitle(_('Search Zabbix projects')) + ->setControls((new CList()) + ->addItem(get_icon('fullscreen', ['fullscreen' => getRequest('fullscreen')])) + ); +$widget->show(); +?> + + + + + +
      + + × + +
      +
      List of Zabbix projects is updated by
      + + +
      + +
      + +
      +
        +
      + +
      + Loading +
      + +
      +
      +
      Sorry, no results
      +

      + Help your future self by creating and adding + project to +

      +

      + Github Zabbix community repos +

      +
      +
      + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/Monitoring-Artist-logo.jpg b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/Monitoring-Artist-logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f8a5619752230f0a82f8d19ea0d3a415531852e GIT binary patch literal 10508 zcma)i1yCMKw(xu(PH^|&?k>Td;O?$Lg1fuB1qkjAL4pQ%cXtU+fFQvhckkBj{;%ra zdObB$Jx98aO`o1Q^Sbo91)#`CNJ{`9FaVgo9l+};fGXx0ATU~0Pg|-NR0u22L5#w2nIm^_XhrVgZNkbCp#Dfdc(e* z|3ds)Gv2?GHOfI-+O#LPnWSlou_7@UeMXs7@P5(I_>L&6|H zzx#{y?G6G88Wjy7LC0W$5hf+WL?Jd}o#RYXVk38^aA};!3QZj_3=mOif)!G9P&WR? zuF9c?jrL~TH$F&MNJyA}Ob9{+L$E*sBxu4)r07r%0jwA(Z_^spDF-Hyv61IF)?;>0 zix?-)n4rJu0P*HU=)aWwi}g);5*A?;r8hB+90KeU3@;V)x~E@P0E9O@7!?BbjbwA{ zACvswF4HuK{-9pY4ZYfb)5By#Og+pb3oS{JT}x38M#Zc2Y!NO&@lt?YfQtS+0E}A} z@};Oc*d!1>uL=v6IE!|#r?gIqd*v&DHfLgq~#;>lck!HvGxR_J&=7dOE#^x7E*P-p& zLg)CJZvJnBwj6+c2}32}GIqat!LbKQ?hCRdCF+1%v1H4k;#dkwD8NvZy|tteEu7f3 ztzpadPJ=wlUWAB8moB;*vllAgj`#EbaBHQiOuJfdd1(XJJ)T5RzN|fJe`&ZVA3cWr z1rLp6h_{E8b(cj@{`($5k|LB9KgEp1M-^9>m)UU&xZ|hKKcf4uaO}7)&c$agZuG`% z{iAMjVX|fe0T^YQ(q+ScTM$6h$3Vf~qsaXa(0}Xty?GG!&DS6(@UxY<&FrLGoEGP1 zcD?Nne$!Q7&*7%0-$}L)q}MBX?$m8zP+fJ`E2|F_Jz}JAgw>qR6&#{V%g;Iz+|zX& z%2wOgJDC29we!kazY0my2+u;i)q~+lG>=_1FRXv}g=mf5i7n9_!g=wvFx(ij|7_?G zOx!mN!t^P9CokxvBS_xTSoMHSyCNjEqJCxO2w8L(lQZ97l4gl((*{-9L?GRe$=)+| zz0|}UXkUX*Ww%)J-c@Ee$TD_$mBsA4PPFlv_R6SZD29f)4VOggsA+m}JK}QNc2Ha< z>h=ccIi|%+D?*3<_e_uF3iMUANt3`ynDGj|z6J(s5N#S%MDsoDGozc0y&M5q>Wq!y z7vixKk3^4&Gj(Zd7prEFFaNmBQ=*a3vQ^mN)a~$MOnC&!Cm+L}BNuZK{S{aS+rMPZ zxp38$!Y8B0So2-m*)+H|?tz?oY!(ijPqypmkhD1MsyOMzYdC1uwICZ~ z-PKCIdHSKTK(u{IuT1u=dg@w|eSi1u&-bks4ek|sf4ru^fuw|;ew*q_>GW=vSAeyo z0)RECfpx=abkT9jLvXN-4h-uh`z zJGP_hsX+CJW32hu1%51*G+!M0bWo+Rv00}I7HYi$?~hl=7z?hZu$`xF)NZX1sRnV5 zw1&m_Q6Lxjyp-}Dq>!Rs=1P_58Pl3egp8vQ!_u~-NhLR`q%}8$ zH3o~)cWP1Zx0vRSYO;{c-{T-5vwlj&~1*e@3HK=uv;P8;sQE@ED7A&wJa@>yd721%*;6b=8^~ zhOV$R|b-%3uk7x0oiPC0K5fO|#bYab(>GZ>;|ztC9Ob!l!|o^%jtelQ^w(MWY7-#7b8Ggle0 z9Nj1rUMsZ5_zHjxmmmeyGPz7ni`3G+Zz4b5VPN!k(|1s{v)G*{GE4JiaW8#4NTNfh zMTJ!o@T9#DcYL_@ydXvjWr71pW%jQMI}X2Kq}A^Qf5&i+Yryuq___GEEy2)&;5(}W zJJMO$m8#WCC?CN!2tkYAbZ$kM)|cJc%NhArB5DP@4RNBzaXbVD9{pEjnZ|^k9}(+@3rGC+z;vX(gq)VDbEsT z_}c9=ltGS{nRCElIsFaM=VpKhZ_#SZ;t9FTEzRpoC5fnkSyI`@KXG_%p|XUBe`*I) zu{J*dcUCJZN)(nYJ1Y-Cp>o2TV>o+Hk~h0wKb^5U3N1MrL~b4Jw)lQq@hHqvAQ*Qd zKj0%pxyS#35P4nFYVOY_4nvz~)yufwWLsGo&l^w@((7nymGeL#N{-rc3K|Je&g^I# zkt1CV9>$}Q0sZ_mx?S>)PvGm);X0pcX)?rKI(N6tSyV!8TJ`u7@-qLsTUyb}XBX!f~u z`0*7e`PdYrCdYoirM)ql?>MzLbDcnr{7$M=AZ%?y8D~Xz_d7dHv2$;nLQ*lP&D71dK1bqU)5LpxgPLLyUE??{>V;B6LTG`LrKe#&)9&VDghkj^M%$&(uK9N-H>r0V5UegN@6e~mHw%9QUt;H~ZPV2r` z_ISy7x`p^1@OR-KYLt^FCX7;55^<;*g`#lu_ICsJAnbAB5jw_Sfq#S(2=w-Vzhr0` zZYY_IH>Rd1`coIre)Y39^l^?Nj9kEYl^%p3#%IYVSvQ&I}X z1bxBv_GflBTx~M-@kLogG~LKO(F4>b`$y`M;3JNNysT*7XwQmWZ@W(w38?3>53|pQFB#A6v_Fe%l2a_0s^>l^~)r3A9)R|SZp-t*vXni)j z5#+4a2xs~qyEs#>+2iSha4y5m+o({6G=*llRK-{6SxH|31DIW|yFTI1nzigpFr^Kg z+}T1?sRM4{D0*a1Q9d_P9@n%_%fJ(8XSH`Ytlkz#t7 z910OhvoZE6lf5UO&ua3uqd3_O>p~oLr3qqj$tb4iJUBTVe?0PDnpKlJ4+eueFDRu0 z>9LusgT+pz#v-vhcvTu*a?I)-V*CP;qcnoDv;Mxl$=Cv|;8gny8!hd* zrdse1)Xag5NF-|NqiSh@F!h{hiNB#g2R#;gmAXHeRua>&~$_$SHuNf{2N=aaA8-E0wY zeWbgUSd==eYt#@ESKEpxjlC#9J&g`?Ek>O6j?rLYXLguhDe%F2GT?XxP$qs1CL4e- zws|&g#ueTZ5^*_A(>Fz#Sg*tOw{I!Nly$#wqfBtc{PdnJ zv!raAV5n*Qx4@j8aZplc{l=woA+BlNvoW{(zcrmXQ=JG#CC*TvcpR&;Ao zWHc3FF12E|YI3!`T2#V0QB2r8>rw1>!iie^Gju8A7vTo(6Z9WCZxNs*vSX^8P|?pl z{PqvimY%dEEGS9BYO4=eM=+G-^J|i2y1T$iqqPFUdp5B%Qp;#OKlt6qXnU{I02Dkg z1-%drSRo5?>bfQ?(XTeApW@tgre}~(_vMaS#^>8{10S43BTTm^p>VlR_Q6{f@1z*& zK8;0~NlOe_4Gc7VLtKvg6=24w+vZkd&o?A;Jntw5Z@io3Q%`!=*7L5No$D^L?O+vx!_#pk z>pT4i2;`#9{)iD6Utufb*mJr)`z|qUk-ec$88M+PRSEpjS&OsV-S?Xb_nK*ei@#mI z)eCL{&FBx+@m3nHtw!jI(9U7tJy^KOa>y4o|i>XH7 zgTIzyIl7P=o+iar=W02f&Lr$${qk#!4z2+PH8{!6JhpS60MQv?k2BS+Q@-I!a_?&GW!O;BaiWpl_S1bSSw^5jrsj-} z?29X>hsE@tMrXUysIaZ&Cj5vg>G(|(!xZ@W^?t*V(YA2wY{hC{c~yio;~&M<*3$$V zwgyPZiP)#SqgRS_lTM}#H78^9))@!9z$#hBg;=J0&o|AKXVE=}s+ciHNywndc_bSB zc{$^6HF~SwYHixS-^M2^GH734`;sqo8v*h5Nv z=9F^KiA1&L?9aXqpe*e#WfWH$AdwDH(>?Z%;)M=$wyF!5`T0aFew<0D6`; zv;}9)#8%y}5uCFi>dTIOzHL%*?EdVE9ZD?8(-e&bNq6smEgic0xZ(%vgtoXESYopp zGI+d-v?ZKY)`1C|-<;0ll?Voys$Z;jIzJfkU}t>!&8Vdkw%j^ppBw2apV(ZeY7>by zrxAIJY6!b-don@k>5V!4%NgT;*ILO+PE}@Y zAnK#oCv+6+nNOrgHH>Tsb{-trC3Wje8fM^zC+)0S|ABAXT%{ZDD>=j=3bPj$ZBs_ zbMGIiVOHt)afj^@B_+*utUo>Iz-LGD{#4~?+5W(UB{A($N+d|%m%1!zdf{KkHQ8yH zrP#zQpt;QEjagPax2Sg5-5|WbZ{D@6mWolahU1NvH-BAsgf8ttN3dPde1e{WEr;pr zqqsrrgi_X?cpmh^Sq#N=H|41_i`;*uyD%1+*WsT>*?xSohe{IgibPIMaeo1;g78V zRTK|LyvwU0Iv-7HWU}{JOT}$sB|JNLr|?5{y$Vc$)9ZNSx**(V8gzo|Y+OL_k)e|pU^ ztXkcmwrkvGN1_moQ#+*`{87Dpj#7rBYioJQml^f=mOyEQQor^%DXwnS5zWO~=|=&z zUj@Dvae_oN6QgwD+>u1hZF-0i-Q@gzL8FWZ5g+8zG@>WJ)`Vese5FuAF<7HWB$92C zOhFj7QIX@}6QPPXCog2dPV#W4LfsIJbcOEIm8?s-UDyfk$;ff%_wU*+aonsphA=U1TNiPC~^VR29aiHbgwC=W`G27UPAW9mhQ zMP;I(HNE!0xmP#xy6c3EY9BD&FZ?Wa zjR<`YHRT%uDMx>lM&V51<4iXaZY?z8^DWKMa75lh@l$vB?MD0pg86On{{IKC*W(phviH}-HEKxwmM=c2@ODukVvrj8qhzWj4a8fb3=OYp5;~hU00-Gr0&r21 zU)lCF=QT4EP&MTI=GY-U3=%YF015}@6)`MLU*6>?59)jUd(mvl_=Db2$9s2&-+x|# zGl7evEFa$=j|y#nEO7emWMzx@NR%~V9CZhzjcBk~ga%UR!(R;}4SBrU!YC=4JpDcc(mXzxhcWNUX=h=-EPk8y^M4F(AXSv(%#iF2a zDg+uWcwvb((+I`e@t5yR`rAuC+eAzmbB8xL zcbwHt9cfEF=m}Hon}yhA+J4&R&NlpA28jWw7$Ihc`g8yEPXotDK=*I~``CJA&gHe0 zH)2jxloi5Yi19;BMcSWLf<_$IdhltVs0s!#tC5fb#3+gZ^1HjCEIxT=f9BH9Sa*$= znz4usqCWZ21+2d$smE;P>&y(5rV7itPt7q*#Q7kt#-*S)>%$T+JyH5~Tx1#XECDG) z58jEyi~U*%*d}h)g=A{;S7o|~c4eAQD>zbrz; zch%9y6vo9J8snf}wZx#~Lct}HyWij!SzO)l4eaERJc`3R-^+|Ok{J#5_rvAY9EKXZ zmR2t;55W8%=q)*oySGwXZXC|@Vb#N7V;Q*Q~>-RXsAK1a$PJpsS8`2 z`&g{deV6n&-dk|8@f-8Zfvh?X#P&`BCGS(AnS@d19t3lF89rsOa0`W%1}CQEsY&@c z-}^1s19$xJe5Vko&d_RzN=u;uP^Dc>P5x6Jc2Ja}U=bBf8mNv0?osVYQ8T;qp z3^9!ST~po#X?#Jh{;>s;HTlybh8L&&`@}}BO*>qP^T+<*#k02psUXPha(3w*FXt19kH zmfk!u=Ok0iwhu@omm%)HF2A(5;@b2bBiF;N>lMczibxSLF#UCIDojl-E=FQNHrZ)8 zVTtMaaj`h8!=AD%5HxqBFVAc?qB1HMBxc3rZ62Euu=PvQDQPbQX{pcerqWZL&o|j1 z94qamUx^n1-c}Jg3x4h8Iwb9kDd6L?)9gfdKO*Kc7~IxKP?NLNP#m^gWFUb`py1?R0IQDVkDHwem-88NpejOAxQv#}yh8k32{DR%yaqK(*tH{nkd3hs) z_X~i)>*?CUWlZCM%|TKgzXqT$45!&4q)se!KgUay=|$9VcNxmiH6%j}_p5#{kqT<; z;yc;JQIc~?qK>DL@frTT;@Q09Uj%~PqSwG7*^mN>iou0INZlR@e1|ICn*T!5zpyfx z^_Xe7to8?c)~ne~Zvs#gDLhsSc3aha!Vmxgh5MEeWXdIeLfIuFqi6%~d;f~tf0yl1 z{#$+cf8jvn@&5sN`^Uro?dOFz2s~hz3j_)gqX-kDNCWsVK_~z*x)fyKTXq&Eo$)*X z{vsm|go8wb19l>Xz|!RY|2dBIf86}n?!Qtl%3I1c9n*n#f|B>UkHnx>%oWN3rQ@|1 zWuXkZ;8C6Y2^teHNStl>o>pE}=h?9v)(MtH-Ws`jx?h}rtstu4O zf>p7aq!e9}7e8=eqmRJsSCFPR?gLwa-eBb9HJh0DKg|2Ywbyy|*11Iao=R>+b|7|i zKkO68A-_(#6a)R%yuzBQyd`klbWhw8WXx5u@0|33wYIyVV9Y9usGhVKwIE6wrK?+K zS%4z$zm#W)$0uU7+^oqDwY;JF51i!?8 z&v%s5L%emGfS(;);33@lp8viEL;|tjjg!dT(Y?s_j|etv_GssH_gQUjNO6r zI;TOyFgw4@viRp@wh^I^0dQS#Uy{J@?uf<(gg>Q?wQ`0aK#blSIu~rki;-PM_}O*F zTc&GOKXHR!fBR_@8ST5b{esUkhb+am%h zf=uWY@uS&dIdA{O07>xp_xmi0G2*mJsK&7&Kk&fl^OgROE0}KeRae?{{F4O#HJPbG z19JIW!VSqes~XxNT?*uBG6p*N$M}hQu^z*?#t3R*weT1?G3>Mi#8!W+mWZ(PyH*U)#gw<4t7p2tg#<8{*zG z)Ti4gtMho-!Zp4EDZqo+WEW!=*U{52UvmjT$_fROs<3NWRW*U!kK&}v=Kmc5MHJ|8jQ{jmbW%UN@mwpP^J$Xj8Z zQ^V;Q`z%h=}`38a){WFv3K|)eUWQn5fZ$p-^W% z|Lk{?5dmYNp_Ul9j`cLRdAl0@h%U8OU?TRuX-b*|z8e z7ZIf(%07q2>NZabUN?pjXsSiPfqY;HfL0oE*>j1^nE}|LnQ#>M888kaI|zJ6ar;nV ziD*@;zJ3h%7a|XBotR(@4GBZ&GD!WwM=_=(A;ZwEh;7EjSoXvT&ZVuOfv8{Z zFNgz;!n%iNcmfm=JRuOZp;6Kr%?n+=5qUO>WY literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/Monitoring-Artist-logo.png b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/Monitoring-Artist-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..43661a1983ec39241c448c702477e4927809e881 GIT binary patch literal 1689 zcmV;K24?w*P)MjBP`tcdT4-Fvhqr4C&DRS2tC9ioTwn zWdr^FP0VaXoFO6-RTkANhAazARgqQaoKaOe(cQJ|^x1QZA9!Hv&iHt|>i5Twt;@`1 zA|eKa0o5ynn-)xovS$TEL@Htc=)S#sJ`?z!+ws*$cU^nKjemXZwS%ig1fFNyP%J)o z^RI?pc=61;_W+<|Xd@!-vZ6EXWT=XWQ>coHQ{VTJVKT`F5A1JUdE1K4dGoIwy}hNS zqqnbb`CI4CEdq?YXuayrH^x^D{L3sMB8~W7lDY6boJvYo7b42W7|dt$B2kp)~-GJ-JMT;>(2vcnv#hG{kDB?>q}pHWWztY zj^40i>npqK<}Das)X*@nY4heik!aMG6W)?wSqYts#A31QJkJkRgjE$vM4!EP%P($k zX*oFxT&!6Qf4+f>M_R)6fk-5WNv z2Sn~a0%L}VbKKnAe6pjXV;wV#Dgl6sICiQCf=DPLW=>sQ?5_29@A=UWe)y0`a@Ou= zete%-U6K)s;nG+-!=8;>+0*zSJl*BD(5Yo)?j&=p+~=RGo>M#Kob#C3O?;bvEy_LsMZrMXyGuYKN<>AI zLPP)}6%o|Vsf&H%$!|aWk>wxl7ZIqcXgchx-T*F{OnSKtlfZy<&9Shd;Z$WL80+rrUbF4~ zFZ?t*D>^RDd6}XkyKw>)FB}VCNin&dQ82R$Q(?5bvujONG#Fdh&~Q4JVPco6N+JSh zt+6(wXTSfwt#hkpU!rt@bk+2lis(7hEW1D|@I4dWx*;a#cj&oHN$i33bkK zJRXmV2==|)-s&56G)<^{!*1Wp?X4n$csw3;&T*bilN-KVEq;#y3ZUR9`o13m&?SwH zZ+_*$FF(h|D3}ZSP5`9oZXQb-8{Y(=zVC;ZbHNsba;8XGPg1_9Dy+3-ed~FiE!C4w jB{SAzGxq=3j0O8QvZV2jg^GbN00000NkvXXu0mjf-mXS0 literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/donate-button.png b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/donate-button.png new file mode 100644 index 0000000000000000000000000000000000000000..77fd9929a0569500c69b29f5a8d7391db0ee57e6 GIT binary patch literal 18270 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 literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/donate-button2.png b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/assets/donate-button2.png new file mode 100644 index 0000000000000000000000000000000000000000..378fff362aa3f25a495020363ae91f1daa8cce68 GIT binary patch literal 4548 zcmZu#Wmppcx1QwaP60PUK)P$hsDU6|0us_7$Y4q%F&ZRBHzO@Z3z7pVX%LVU=~OzM zeB67V`|I8x=bZQaJm+~&#u@0rC`egJ0RRAnwwAgP0B}$64$A@Y?lit{c*mU~aDhI7 z0sxo+8N&FTJD&xiVSzAy>5TBR_i+M19bZ0o0%?2NyEqv+**gZn2b~}Q0F9ZpI@H8} ze*c+=cltDoUR{glZ<)GvJZ^9p0W}`fwSlwT5_?26zoTIvmSb5S#lQVy=AE*M{3~kb z;`s@)V#DzVo^G{5e_d%(S*gL)Dx6uWK=2?DUQ10&s!mZdF=fn4zfRoii=lG=!nwIQ z#h}rkW#53&fU&F5AZf(HM6PN1SK_gHOO>$G-n>nI`g(j`&5J~AF9u~v9J1=r1f zA3#q}f`5;XfXGYGw|f2=dp44(Bd6WF4j)30gm1RC@sh&!I!RZ~aj7sjO?+#vkMbfr zI~;|U8fvR;-)oON!vtINgoYqq>|VE&9@<|uOe0iQUpKP26l&6rt^W^a)H-QI~X_cJ3LRspzy@A-g6RF@3mh%@QYnHyf=(NI|h zVKwF_NMLd2^{^_C>C+G8!w(>t{)ApS0(_Q;>hr7ziD#K)T+J66k(Up-xE=zz9wmJv z>t3n_Ld3444qTKV!C)=JbbuSx3y9?c zZF6gBHeUm!q_6C*-&wvjc{p2_!49y0vAO9K;v!cQJCf|m42@#@+TRv_+2>1^re^72 zHOu8-Eb1#x?Qk%YL9tBqLJSTb&$DnK31v{X8`*~pKuz1~>Pfj2Z>}d-bxmlL22M(< zdZc`h$N6bs{}`rNQG0+hNnr*T)dxjWy%DO!3EHNH(_{}7itj6{0pC2UJs{UGq)QJp zcS7|qQm90g+`o$M7U!B_c2RCB82?$iWDge1Be~<;3OQpqR>I(rdJ;sJ7MT?tSabm; z^sptrEsn1t(eShFz)9v2jJ%mrYI9}BC(dyf$Xu8s% zl5AFOm#CO908)au~^D$HDEgOeZ=rM(wTeiJ^(~on#@cf zw`1rc7U&LFs;>LGvd>F9DuS>h`Mg{gD{a{RMPN^slGVPi|QMF{;;-MZ0G%!x*v2!N7*%ZyXgDgxkSfw;KUo3mJ zH>)Bc%d4kH*G2p(wIN%wc9-^K8Vw>0r`a_0z1PyDN=Rffn}670#IkV5L42KvBs*CU zWFXDS*B_#gq@k18bVp`)E1RuV^ELzFi$p|_Ke}eQ=^IfZawuLxCTsS-a#BrHG^b^7 zx{wG@Abi3Al?J9u%VKbeCdczuT$$)tZ7LJ35-mQj*O>RCR!lCX3UH#eV~XaMP>`&V zK2jy*6d$ID#Fc=shWI)jiIsIr3Sl*N4n+Hb?$577_NeZ|_I@8IT5qxDanRA(M_$4E zse|-<5U-543@ekP&i*K2aE?a>m_P5Mks#A@mcH=(KjTP zu-^xgkEpm971W;pS`tf<8%_wA;iu0z6ZB;=PAc!Fu;X)5PM*NvLFL4s+R@V%wbBD+ zQ%P6u`~u$dnC!1h5a)^9d3IjB^D=g7T|(Bg6G)eiyTz ziZfv)^sg>9d#=`|9A=c#{fb2DInuxnS_m+Y`h7;t7r8Xb_l9*4c$SgREvKaLjfC1? zIcu&3Sm%3xsKE4307zBulb_d*8f^e0Z20`t>E%2(Y}z(M3`!h|2ZhAO^(n0Cdi_niCDM{|KGk2;P4(Gy7sFDv!T4;@TbFxSibxZS>gcl7(k0{J3nTr$U zdt&L5z)7MYV7rgO)hn*Ogf@F`NVor$eH&F5?7MnBu(8BBtr)rYn#TQ+V7@&==bUD^*G*NAh1-reb2pTrGLDatD%ah#TePmuXIJM0UwJxfgn5-uMmI zUe9>;i{Oqs?C(ZMB>xf2IHt+(?0c(x&yz%aSiz^*2R{NeZMsXAnLOpd(V7TK<|=FC zz(V16u|QLS*tXG^kT|ed+91HDST)XiJ@6O-RDcD*b3{uc@~% zsfO1=!al*lUykNJRa*W%T}(=9z($yUDlc|c#jxo##oX7A&b}_ZS{Q8j0bD{QYFSy- zElG1r(Er2M zGg?fgjJl{OM6dy*xcTpISu2b?k)2k8TRMU!SK*7OeWAy$tl7`&@P9ha2KKQR^4JH(Cr?|`AH;}R;JMPmatR)M~q{zta@O0tgvmYcs5!z$Mw!q%ib z9F2Ssmm<#OtpW?*u}l_a$L8F(Bh~KHmZb5>!lSE}%)j(Ofr}$&HZb$CnfU0=H`4~` z47dK!-L@k){&R2jA8-DByV@L$tr^#{+CD7XrqMP$kKI#HtI?kBMi79XmY*V^&%V-ZY`q~VAF6vX*O1YaPg$8TCjEYfWPN^4F&0nELINTlok(qAv}tXbKNtkpFcjma=@t^Qh zzDwBAG20L1@gI!hebEb+UFTtA3iy_vq5VKo&@u7s=pq&)WAVDZw-0~x-5h-A&uCpr zcnVRD68m}k94{mcBX`f{WDcshT0r@yYOdn^_uhr|I`?EPAw}Fnq;~!D1(pVu0?Y(0 z5K6qtK<>!j!CBKb+GzjVb%JanjwUu5$`)u+^Co7oxgp`*UDKQBghr38`%e(Z^uO&r zf~QC9Vwq9TSOTUgmX8FkKZg?_6u4*E+ZeAwY$Q+J(4nAvX-k#tCcsca8OQfswDyl0 z2;V2bC8L(Ai?HS?@k)H%`WoE!(_+S?=~P+I)w>du9xwZZKNd`vjs9jNYE1bWLL~U; zXQ>i>_ry0^5tbpX*y*JRzcnc@=C??PWWnse@R)6ac^ti5 zoTY~CZ;;#$0+vi{!^Y<&tRl-FE}Sq1Ax-3V#V?G%D_5KRu}#w)ungq+5A=%{g@>Aw z!^3U(-8ik!W9#E7sLI!6&9!O`iXj0hi)&|$cto_KLP3Yu?Ilzw|7K7RDl+*nsEhcQ zUECObgi)y=>|WXQ=gQRFiq|Q4PnjSVkBgWOppl~f1uu3 z_tp0MW7~K0nR?!vrIlo=UW-qe$??rcMnl$d4&h6FRi>4%cgPFN9L<>t}qD_v0y z|NFG10gDzr*_BTfBx1}No9_EFUm}h&lRg8|f(|4-u^imTeAs6XSZgJh{h#DLz4|A6 zv+ZTkG;^<4muGL)|9k)OGqwbgTcHmvc$FwX)aVn!i`L{Xh zKTv2qip>W_E!is!^nvP%hm3c7r1StArJ9l`&brDti zrG|qMjyMa$eArr_6foCq@}aHPXsPHOT1a%vPYAgD-XBc7UAbh)&gofVF`@WIUz*in z?Vj?#jGd%g6RwVH^9n3c?& -1) { + $jq(this).show() + } + }) + } else { + $jq('.result').show() + } + } + setRelatedDOMVisibility(keyword) +} + +function setRelatedDOMVisibility (keyword) { + var foundSomething = Boolean($jq('.result:visible').length) + $jq('.no-results').toggle( !foundSomething ) + + if (keyword.length >= 3) { + if (!foundSomething) { + ga('send', 'event', 'search', 'no results for ' + keyword) + } else { + ga('send', 'event', 'search', keyword) + } + } +} + +$jq(document).on('search keyup', '.speedy-filter', function () { + location.hash = $jq(this).val().replace(' ', '_') +}) + +$jq(document).on('click', '.speedy-remover', function () { + $jq('.speedy-filter').val('') + $jq('.result').show() + location.hash = '' +}) + +window.onhashchange = function () { + search($jq('.speedy-filter').val(location.hash.substr(1)).val().replace('_',' ')) + $jq('[href^="#"]').removeClass('active') + $jq("[href='#{location.hash}']").addClass('active') +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/javascripts/stuff.js b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/javascripts/stuff.js new file mode 100644 index 0000000..575bd51 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/javascripts/stuff.js @@ -0,0 +1,96 @@ +$jq(document).on('search:ready', function () { + $jq(".input-search").focus() + $jq(".loading").remove() +}) + +function focusOnSearch (e) { + var searchField = $jq('.input-search')[0] + if (e.keyCode == 191 && !searchField.length) { + searchField.focus() + var t = searchField.get(0) + if (t.value.length) { + t.selectionStart = 0 + t.selectionEnd = t.value.length + } + return false + } +} + +var counter = 1 +$jq.getJSON('https://monitoringartist.github.io/zabbix-searcher/sources/github-community-repos.json', function (projects) { + var container = $jq('.container') + Object.keys(projects).forEach( function (key) { + var project = projects[key] + var charHTML + charHTML = "" + container.append("
    • " + + charHTML + "" + project["keywords"] + "
    • ") + counter++ + }) + $jq(document).trigger('source-github:ready') + $jq(document).trigger('search:ready') +}) +/* +$jq(document).on('source-github:ready', function () { + $jq.getJSON('//monitoringartist.github.io/zabbix-searcher/sources/share-zabbix.json', function (projects) { + var container = $jq('.container') + Object.keys(projects).forEach( function (key) { + var project = projects[key] + var charHTML + charHTML = "" + container.append("
    • " + + charHTML + "" + project["keywords"] + "
    • ") + counter++ + }) + $jq(document).trigger('source-share:ready') + }) +}) +$jq(document).on('source-share:ready', function () { + $jq.getJSON('//monitoringartist.github.io/zabbix-searcher/sources/zabbix-wiki.json', function (projects) { + var container = $jq('.container') + Object.keys(projects).forEach( function (key) { + var project = projects[key] + var charHTML + charHTML = "" + container.append("
    • " + + charHTML + "" + project["keywords"] + "
    • ") + counter++ + }) + $jq(document).trigger('source-zabbix:ready') + }) +}) +$jq(document).on('source-zabbix:ready', function () { + $jq.getJSON('//monitoringartist.github.io/zabbix-searcher/sources/zabbix-com.json', function (projects) { + var container = $jq('.container') + Object.keys(projects).forEach( function (key) { + var project = projects[key] + var charHTML + charHTML = "" + container.append("
    • " + + charHTML + "" + project["keywords"] + "
    • ") + counter++ + }) + $jq(document).trigger('search:ready') + }) +}) +*/ + +$jq(document).keydown(function (e) { focusOnSearch(e) }) + +$jq(document).on('keydown', '.emoji-wrapper input', function (e) { + $jq(".input-search").blur() + focusOnSearch(e) +}) + +$jq(document).on('click', '.js-clear-search, .mojigroup.active', function () { + location.hash = "" + return false +}) + +$jq(document).on('click', '.js-contribute', function () { + ga('send', 'event', 'contribute', 'click') +}) diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/stylesheets/style.css b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/stylesheets/style.css new file mode 100644 index 0000000..55ef399 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/searcher/stylesheets/style.css @@ -0,0 +1,292 @@ +form { + margin: 0; } + +.pull-right { + float: right; } + +.container, section, header, footer { + width: 100%; + margin: 0 auto; + padding: 0; +} + +header { + position: relative; + line-height: 1; + padding: 0; + *zoom: 1; } + header:before, header:after { + content: " "; + display: table; } + header:after { + clear: both; } + +section { + border: 1px solid #dfe4e7; + background-color: #fff; + padding: 10px; + *zoom: 1; + overflow: hidden; } + section:before, section:after { + content: " "; + display: table; } + section:after { + clear: both; } + +.loading { + background-color: #fff; + padding: 100px 0 120px; + text-align: center; + text-transform: uppercase; + color: #999; + letter-spacing: 2px; + font-weight: bold; } + .loading + .no-results { + display: none; } + +.mojigroup.button { + margin: 0 0 10px 5px; + padding: 3px 4px 1px; } + .mojigroup.button.active { + background-color: #f9f9f9; + border-color: #58b2ee; } + +ul.container a { + text-decoration: none; + cursor: pointer; + color: #0275b8; } + ul.container a:link { + -webkit-transition: color 0.2s ease-out; + -moz-transition: color 0.2s ease-out; + transition: color 0.2s ease-out; } + ul.container a img { + width: 16px; + height: 16px; } + +input:invalid { + visibility: hidden; } + +ul { + text-align: left; + padding: 0; + margin: 0; } + +.plain { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + width: 100%; + appearance: none; + border: 0; + box-shadow: none; + background-color: transparent; } + .plain:focus { + box-shadow: none; + outline: none; } + +.emoji-group { + display: block; + width: 100%; + font-weight: bold; + font-size: 20px; + padding: 10px 0; } + +.emojis-container { + font-size: 0; + line-height: 0; } + +.emoji-wrapper { + display: inline-block; + vertical-align: middle; + zoom: 1; + *display: inline; + *vertical-align: auto; + width: 49%; + margin-left: 3px; + margin-right: 3px; + height: 1.4em; + overflow: hidden; + white-space: nowrap; } + .emoji-wrapper .keywords { + font-size: 0; } + .emoji-wrapper .emoji, + .emoji-wrapper .native-emoji { + position: absolute; + margin-top: -3px; } + .emoji-wrapper input { + margin-left: 5px; } + .emoji-wrapper i.fa { + text-align: center; + width: 1.1em; } + .emoji-wrapper a:hover i.fa { + color: #013e62; } + .emoji-wrapper a { + width: 100%; + display: block; } + .emoji-wrapper a:hover, .emoji-wrapper a:focus{ + text-decoration: underline; + color: #013e62; } + +ul.hide-text .emoji-wrapper { + width: 30px; + height: 40px; } +ul.hide-text input { + display: none; } + +ul, li { + list-style-type: none; } + +.button { + line-height: 5px; + padding: 10px 12px 9px; + margin-left: 5px; + display: inline-block; + vertical-align: baseline; + zoom: 1; + height: 4px; + *display: inline; + *vertical-align: auto; + vertical-align: top; + border-radius: 25px; + font-size: 9px; + color: rgba(255, 255, 255, 0.75); + background-color: #013E62; + text-transform: uppercase; + font-weight: bold; } + .button:hover { + color: white; } + .button.clear-search { + color: #ee9d9d; } + .button.clear-search:hover { + border-color: #ee9d9d; } + +.input-search { + min-height: 32px; + padding: 7px 15px; + outline: none; + color: #333; + background-repeat: no-repeat; + background-position: right center; + border: 1px solid #ddd; + margin: 0; + width: 150px; + border-radius: 15px; + -webkit-transition: all 0.2s ease-in; + -moz-transition: all 0.2s ease-in; + transition: all 0.2s ease-in; + -webkit-appearance: textfield; + -moz-appearance: textfield; + -ms-appearance: textfield; + -o-appearance: textfield; + appearance: textfield; } + .input-search:focus { + border-color: #51a7e8; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(81, 167, 232, 0.5); } + .input-search::-webkit-search-cancel-button, .input-search::-webkit-search-decoration { + -webkit-appearance: none; } + +.alert { + font-size: 13px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: none; + position: fixed; + margin: auto; + left: 50%; + width: 200px; + margin-left: -100px; + top: 10px; + background: rgba(10, 50, 90, 0.7); + color: #fff; + font-weight: bold; + padding: 7px; + text-align: center; + border-radius: 5px; } + +.native-emoji, +.emoji { + display: inline-block; + vertical-align: baseline; + zoom: 1; + *display: inline; + *vertical-align: auto; + cursor: pointer; } + +.native-emoji { + font-size: 19px; + padding: 10px 2px; + font-family: AppleColorEmoji; } + +.emoji { + text-indent: -9999px; + overflow: hidden; + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -ms-transform: scale(0.8); + -o-transform: scale(0.8); + transform: scale(0.8); } + +.no-results { + padding: 50px 30px; + text-align: center; + border-radius: 3px; } + +.call { + font-size: 16px; + margin: 1em 0 1em; } + +.call a:link { + color: #ebeef0 !important;} + +.no-results-text { + font-weight: bold; + color: #555; + border-bottom: 1px solid #aaa; + display: inline-block; + padding-bottom: 2px; + text-transform: uppercase; } + +.contribute-button { + background-color: #013E62; + color: #fff; } + +.tips { + color: #777; } + +.fright { + float: right; + vertical-align: middle; + font-weight: bold; } +.tfright { + padding-top: 10px; + float:left; } +.tfright a:link, .tfright a:hover { + color: transparent !important;} + +@media (min-width: 1010px) { + .emoji-wrapper { + width: 32%; } +} +@media (max-width: 685px) { + .input-search { + width: 65%; } + + .no-results { + padding: 0; } + + input { + font-size: 14px; } + + ul { + padding: 0; } + + .emoji-wrapper { + padding: 0; + width: 100%; } + + .fright { + display: none; + } } +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/updatechecker/updatechecker.js b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/updatechecker/updatechecker.js new file mode 100644 index 0000000..701469c --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/updatechecker/updatechecker.js @@ -0,0 +1,67 @@ +var xxlUpdateCheck = "xxl_updatechecker"; +var xxlCurrentVersion = ""; +var xxlUpdateUrl = 'https://raw.githubusercontent.com/monitoringartist/dockbix-xxl/master/latest'; + +// check version once per day +function updateCheck() { + var cookieChk = getCookie(xxlUpdateCheck); + if (cookieChk == undefined) { + var jqxhr = jQuery.getJSON(xxlUpdateUrl, function(data) { + if (xxlCurrentVersion != data.version && data.display == 1) { + setCookie(xxlUpdateCheck, data.text, 1); + console.log(data.text); + displayInfo(); + } else { + // version match - off for a day + setCookie(xxlUpdateCheck, "off", 1); + } + }) + .fail(function() { + // unsucesfull json request - off for a day + setCookie(xxlUpdateCheck, "off", 1); + }); + } + if (cookieChk != undefined && cookieChk != "off") { + displayInfo(); + } +} +// display info about new available update +function displayInfo() { + var cookieChk = getCookie(xxlUpdateCheck); + if (cookieChk != undefined && cookieChk != "off") { + var message = '
      '; + message = message + cookieChk; + message = message + '

      Close

      '; + message = message + "
      "; + jQuery('div[role="navigation"]').append(message); + } + return true; +} +// disable update checker for 7 days +function closeInfo() { + jQuery("#info").hide('slow'); + setCookie(xxlUpdateCheck, "off", 7); +} + +function setCookie(c_name, value, exdays) { + var exdate = new Date(); + exdate.setDate(exdate.getDate() + exdays); + var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString() + "; path=/"); + document.cookie = c_name + "=" + c_value; +} + +function getCookie(c_name) { + var i, x, y, ARRcookies = document.cookie.split(";"); + for (i = 0; i < ARRcookies.length; i++) { + x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("=")); + y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1); + x = x.replace(/^\s+|\s+$/g, ""); + if (x == c_name) { + return unescape(y); + } + } +} + +jQuery(document).ready(function() { + updateCheck(); +}); diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix.php b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix.php new file mode 100644 index 0000000..c7e3a64 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix.php @@ -0,0 +1,212 @@ +setTitle(_('Online API tool')) + ->setControls((new CList()) + ->addItem(get_icon('fullscreen', ['fullscreen' => getRequest('fullscreen')])) + ); +$widget->show(); + +?> + + + + + + + + + +
      + + + + + + + + + + + + + +
      +
      +
      +
      +
      +
      +
      + + + Doc + + +
      +
      + +
      +
      + + Check & format JSON + Compress JSON + +
      +
      +
      +
      +
      Request:
      +
      +
      +
      + Response: +
      +
      +
      +
      +

      +
      + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/assets/favicon.ico b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..3e6bc5016486046f93345fc2f6e5913c16e6f5d3 GIT binary patch literal 1014 zcma)*&r4KM6vvNglR7i+J)J?Qsd=wJ$j~BZ5t_LRq#p<_T7*WfL~~>RKuZ^D2!aG{ z-Mek&E@;=XO{5kGj?hHWzR&l1Z%%L38@_YC_nhzd++XjRb?{3f<3F>5PO||syABd? z87Qyk9ku)uS5gxaALB}0e zv5EHw@rdXE--mw@;4Z@V@w98?*(CRi+5>n5VtB0R5mD~}aXY;BA@P`eGp?p1aCZjy z+xOK$y$0NVL-g94Xb<5{;%M+W%~`K&)IZR_>^$zw>Y-Ny?Ww<--lDGam?k$J`oW)o z-`!F6qEOC;sLydfHQ!76;2(xR#kY?BHSr_kB6!oAWHU39)n{|}E6ea#tYwhA_UPtE z+Z0z0PG0w4Ut|2TJI;3Rj9j!&TQ>FWt_Ru9OCfV8ir{{Nq zPG{rpP3!P{mRQu7ec1U@W<5mu`g;9_pW{2a6)+C&qIZDbQ%+;$bC6b^Bd|yxy#p=y VUockRRzBaR(Y}}R-{b#|{{U25ks|;A literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/assets/favicon.png b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..9ed55ce9d84d5d24d537103751c623aabc614fb7 GIT binary patch literal 593 zcmV-X0dU42=U}O1rKd{@z$dkFA7a5_3j@ah>8~}y%jI^ zUTi?fA!sS3_97HYLr6k?z4hDOmzQ7eV|Hd|=G*;tXPz_jDD@VQ_W)vmLVpMsN~kgH z4@Vm!1&78*CVZg&rcrd-uu>7uUG2FCuRV***>Ow~a7HQj!v>M3e5TZ-(_|LYq7Ibf z89X!obMMUvPgIn+Ia!MZyIky2XVGe)va*4{Z}!l7JPYZzEm3F;NK=h-qs&t!;dirs zGK0#C*QhP!QC(bzVKa~%2`Gy>xxZOXzl->tr=9c^{6u;UjY>Xtdrd@S=s?GyM4H^- z71whjqFH6>U*>(Edw)u~%;|PQc@HO(7oXnwZv2F~KWw2yZ(v50az#+hmJP?$HJV?Q z;~ph0zidJI=gN&QkZ4^3ux9N9ci{$7q){AsknfyI%JmLuR|zVctM*E57?_1>+xtuK z4&h_`V*Dj_6(OcqDQO39fH)iO3BAAjoi|jJf0WdCBPn7q!Ol?o1f6hE9{@LPEBBhp z-kP5mGKG4;=|K1|Xbpm^2+Suz(u| fS4V$}I{^j&>A|icdRaA100000NkvXXu0mjfA2tFn literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/LICENSE b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/LICENSE new file mode 100644 index 0000000..1ec0d70 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/LICENSE @@ -0,0 +1,13 @@ +Copyright 2012 Twitter, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/bootstrap.min.css b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/bootstrap.min.css new file mode 100644 index 0000000..49dff62 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/bootstrap/bootstrap.min.css @@ -0,0 +1,632 @@ +.bootstrap-iso article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} +.bootstrap-iso audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} +.bootstrap-iso audio:not([controls]){display:none;} +.bootstrap-iso html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} +.bootstrap-iso a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.bootstrap-iso a:hover,a:active{outline:0;} +.bootstrap-iso sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} +.bootstrap-iso sup{top:-0.5em;} +.bootstrap-iso sub{bottom:-0.25em;} +.bootstrap-iso img{max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;} +.bootstrap-iso button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} +.bootstrap-iso button,input{*overflow:visible;line-height:normal;} +.bootstrap-iso button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} +.bootstrap-iso button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} +.bootstrap-iso input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} +.bootstrap-iso input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} +.bootstrap-iso textarea{overflow:auto;vertical-align:top;} +.bootstrap-iso .clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} +.bootstrap-iso .clearfix:after{clear:both;} +.bootstrap-iso body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} +.bootstrap-iso a{color:#0088cc;text-decoration:none;} +.bootstrap-iso a:hover{color:#005580;text-decoration:underline;} +.bootstrap-iso .row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} +.bootstrap-iso .row:after{clear:both;} +.bootstrap-iso [class*="span"]{float:left;margin-left:20px;} +.bootstrap-iso .span1{width:60px;} +.bootstrap-iso .span2{width:140px;} +.bootstrap-iso .span3{width:220px;} +.bootstrap-iso .span4{width:300px;} +.bootstrap-iso .span5{width:380px;} +.bootstrap-iso .span6{width:460px;} +.bootstrap-iso .span7{width:540px;} +.bootstrap-iso .span8{width:620px;} +.bootstrap-iso .span9{width:700px;} +.bootstrap-iso .span10{width:780px;} +.bootstrap-iso .span11{width:860px;} +.bootstrap-iso .span12,.container{width:940px;} +.bootstrap-iso .offset1{margin-left:100px;} +.bootstrap-iso .offset2{margin-left:180px;} +.bootstrap-iso .offset3{margin-left:260px;} +.bootstrap-iso .offset4{margin-left:340px;} +.bootstrap-iso .offset5{margin-left:420px;} +.bootstrap-iso .offset6{margin-left:500px;} +.bootstrap-iso .offset7{margin-left:580px;} +.bootstrap-iso .offset8{margin-left:660px;} +.bootstrap-iso .offset9{margin-left:740px;} +.bootstrap-iso .offset10{margin-left:820px;} +.bootstrap-iso .offset11{margin-left:900px;} +.bootstrap-iso .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} +.bootstrap-iso .row-fluid:after{clear:both;} +.bootstrap-iso .row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} +.bootstrap-iso .row-fluid>[class*="span"]:first-child{margin-left:0;} +.bootstrap-iso .row-fluid>.span1{width:6.382978723%;} +.bootstrap-iso .row-fluid>.span2{width:14.89361702%;} +.bootstrap-iso .row-fluid>.span3{width:23.404255317%;} +.bootstrap-iso .row-fluid>.span4{width:31.914893614%;} +.bootstrap-iso .row-fluid>.span5{width:40.425531911%;} +.bootstrap-iso .row-fluid>.span6{width:48.93617020799999%;} +.bootstrap-iso .row-fluid>.span7{width:57.446808505%;} +.bootstrap-iso .row-fluid>.span8{width:65.95744680199999%;} +.bootstrap-iso .row-fluid>.span9{width:74.468085099%;} +.bootstrap-iso .row-fluid>.span10{width:82.97872339599999%;} +.bootstrap-iso .row-fluid>.span11{width:91.489361693%;} +.bootstrap-iso .row-fluid>.span12{width:99.99999998999999%;} +.bootstrap-iso .container{width:940px;margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} +.bootstrap-iso .container:after{clear:both;} +.bootstrap-iso .container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} +.bootstrap-iso .container-fluid:after{clear:both;} +.bootstrap-iso p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} +.bootstrap-iso .lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} +.bootstrap-iso h1,h2,h3,h4,h5,h6{margin:0;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} +.bootstrap-iso h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} +.bootstrap-iso h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} +.bootstrap-iso h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} +.bootstrap-iso h4,h5,h6{line-height:18px;} +.bootstrap-iso h4{font-size:14px;}h4 small{font-size:12px;} +.bootstrap-iso h5{font-size:12px;} +.bootstrap-iso h6{font-size:11px;color:#999999;text-transform:uppercase;} +.bootstrap-iso .page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} +.bootstrap-iso .page-header h1{line-height:1;} +.bootstrap-iso ul,ol{padding:0;margin:0 0 9px 25px;} +.bootstrap-iso ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} +.bootstrap-iso ul{list-style:disc;} +.bootstrap-iso ol{list-style:decimal;} +.bootstrap-iso li{line-height:18px;} +.bootstrap-iso ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} +.bootstrap-iso dl{margin-bottom:18px;} +.bootstrap-iso dt,dd{line-height:18px;} +.bootstrap-iso dt{font-weight:bold;} +.bootstrap-iso dd{margin-left:9px;} +.bootstrap-iso hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} +.bootstrap-iso strong{font-weight:bold;} +.bootstrap-iso em{font-style:italic;} +.bootstrap-iso .muted{color:#999999;} +.bootstrap-iso abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;} +.bootstrap-iso blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} +.bootstrap-iso blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} +.bootstrap-iso blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} +.bootstrap-iso q:before,q:after,blockquote:before,blockquote:after{content:"";} +.bootstrap-iso address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} +.bootstrap-iso small{font-size:100%;} +.bootstrap-iso cite{font-style:normal;} +.bootstrap-iso code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.bootstrap-iso code{padding:3px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} +.bootstrap-iso pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;}pre.prettyprint{margin-bottom:18px;} +.bootstrap-iso pre code{padding:0;color:inherit;background-color:transparent;border:0;} +.bootstrap-iso .pre-scrollable{max-height:340px;overflow-y:scroll;} +.bootstrap-iso form{margin:0 0 18px;} +.bootstrap-iso fieldset{padding:0;margin:0;border:0;} +.bootstrap-iso legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}legend small{font-size:13.5px;color:#999999;} +.bootstrap-iso label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;} +.bootstrap-iso input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} +.bootstrap-iso label{display:block;margin-bottom:5px;color:#333333;} +.bootstrap-iso input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.bootstrap-iso .uneditable-textarea{width:auto;height:auto;} +.bootstrap-iso label input,label textarea,label select{display:block;} +.bootstrap-iso input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0 \9;} +.bootstrap-iso input[type="image"]{border:0;} +.bootstrap-iso input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.bootstrap-iso input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} +.bootstrap-iso select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} +.bootstrap-iso input[type="file"]{line-height:18px \9;} +.bootstrap-iso select{width:220px;background-color:#ffffff;} +.bootstrap-iso select[multiple],select[size]{height:auto;} +.bootstrap-iso input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.bootstrap-iso textarea{height:auto;} +.bootstrap-iso input[type="hidden"]{display:none;} +.bootstrap-iso .radio,.checkbox{padding-left:18px;} +.bootstrap-iso .radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} +.bootstrap-iso .controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} +.bootstrap-iso .radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} +.bootstrap-iso .radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} +.bootstrap-iso input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} +.bootstrap-iso input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} +.bootstrap-iso input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.bootstrap-iso .input-mini{width:60px;} +.bootstrap-iso .input-small{width:90px;} +.bootstrap-iso .input-medium{width:150px;} +.bootstrap-iso .input-large{width:210px;} +.bootstrap-iso .input-xlarge{width:270px;} +.bootstrap-iso .input-xxlarge{width:530px;} +.bootstrap-iso input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} +.bootstrap-iso input.span1,textarea.span1,.uneditable-input.span1{width:50px;} +.bootstrap-iso input.span2,textarea.span2,.uneditable-input.span2{width:130px;} +.bootstrap-iso input.span3,textarea.span3,.uneditable-input.span3{width:210px;} +.bootstrap-iso input.span4,textarea.span4,.uneditable-input.span4{width:290px;} +.bootstrap-iso input.span5,textarea.span5,.uneditable-input.span5{width:370px;} +.bootstrap-iso input.span6,textarea.span6,.uneditable-input.span6{width:450px;} +.bootstrap-iso input.span7,textarea.span7,.uneditable-input.span7{width:530px;} +.bootstrap-iso input.span8,textarea.span8,.uneditable-input.span8{width:610px;} +.bootstrap-iso input.span9,textarea.span9,.uneditable-input.span9{width:690px;} +.bootstrap-iso input.span10,textarea.span10,.uneditable-input.span10{width:770px;} +.bootstrap-iso input.span11,textarea.span11,.uneditable-input.span11{width:850px;} +.bootstrap-iso input.span12,textarea.span12,.uneditable-input.span12{width:930px;} +.bootstrap-iso input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} +.bootstrap-iso .control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} +.bootstrap-iso .control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} +.bootstrap-iso .control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} +.bootstrap-iso .control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} +.bootstrap-iso .control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;} +.bootstrap-iso .control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} +.bootstrap-iso .control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} +.bootstrap-iso .control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} +.bootstrap-iso .control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} +.bootstrap-iso input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} +.bootstrap-iso .form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;} +.bootstrap-iso .uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} +.bootstrap-iso :-moz-placeholder{color:#999999;} +.bootstrap-iso ::-webkit-input-placeholder{color:#999999;} +.bootstrap-iso .help-block{display:block;margin-top:5px;margin-bottom:0;color:#999999;} +.bootstrap-iso .help-inline{display:inline-block;*display:inline;*zoom:1;margin-bottom:9px;vertical-align:middle;padding-left:5px;} +.bootstrap-iso .input-prepend,.input-append{margin-bottom:5px;*zoom:1;}.input-prepend:before,.input-append:before,.input-prepend:after,.input-append:after{display:table;content:"";} +.bootstrap-iso .input-prepend:after,.input-append:after{clear:both;} +.bootstrap-iso .input-prepend input,.input-append input,.input-prepend .uneditable-input,.input-append .uneditable-input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} +.bootstrap-iso .input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} +.bootstrap-iso .input-prepend .add-on,.input-append .add-on{float:left;display:block;width:auto;min-width:16px;height:18px;margin-right:-1px;padding:4px 5px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.bootstrap-iso .input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} +.bootstrap-iso .input-prepend .add-on{*margin-top:1px;} +.bootstrap-iso .input-append input,.input-append .uneditable-input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.bootstrap-iso .input-append .uneditable-input{border-left-color:#eee;border-right-color:#ccc;} +.bootstrap-iso .input-append .add-on{margin-right:0;margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} +.bootstrap-iso .input-append input:first-child{*margin-left:-160px;}.input-append input:first-child+.add-on{*margin-left:-21px;} +.bootstrap-iso .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} +.bootstrap-iso .form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input{display:inline-block;margin-bottom:0;} +.bootstrap-iso .form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} +.bootstrap-iso .form-search label,.form-inline label,.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{display:inline-block;} +.bootstrap-iso .form-search .input-append .add-on,.form-inline .input-prepend .add-on,.form-search .input-append .add-on,.form-inline .input-prepend .add-on{vertical-align:middle;} +.bootstrap-iso .form-search .radio,.form-inline .radio,.form-search .checkbox,.form-inline .checkbox{margin-bottom:0;vertical-align:middle;} +.bootstrap-iso .control-group{margin-bottom:9px;} +.bootstrap-iso legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} +.bootstrap-iso .form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} +.bootstrap-iso .form-horizontal .control-group:after{clear:both;} +.bootstrap-iso .form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;} +.bootstrap-iso .form-horizontal .controls{margin-left:160px;} +.bootstrap-iso .form-horizontal .form-actions{padding-left:160px;} +.bootstrap-iso table{max-width:100%;border-collapse:collapse;border-spacing:0;} +.bootstrap-iso .table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #ddd;} +.bootstrap-iso .table th{font-weight:bold;} +.bootstrap-iso .table thead th{vertical-align:bottom;} +.bootstrap-iso .table thead:first-child tr th,.table thead:first-child tr td{border-top:0;} +.bootstrap-iso .table tbody+tbody{border-top:2px solid #ddd;} +.bootstrap-iso .table-condensed th,.table-condensed td{padding:4px 5px;} +.bootstrap-iso .table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th+th,.table-bordered td+td,.table-bordered th+td,.table-bordered td+th{border-left:1px solid #ddd;} +.bootstrap-iso .table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} +.bootstrap-iso .table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} +.bootstrap-iso .table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} +.bootstrap-iso .table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} +.bootstrap-iso .table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} +.bootstrap-iso .table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} +.bootstrap-iso .table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;} +.bootstrap-iso table .span1{float:none;width:44px;margin-left:0;} +.bootstrap-iso table .span2{float:none;width:124px;margin-left:0;} +.bootstrap-iso table .span3{float:none;width:204px;margin-left:0;} +.bootstrap-iso table .span4{float:none;width:284px;margin-left:0;} +.bootstrap-iso table .span5{float:none;width:364px;margin-left:0;} +.bootstrap-iso table .span6{float:none;width:444px;margin-left:0;} +.bootstrap-iso table .span7{float:none;width:524px;margin-left:0;} +.bootstrap-iso table .span8{float:none;width:604px;margin-left:0;} +.bootstrap-iso table .span9{float:none;width:684px;margin-left:0;} +.bootstrap-iso table .span10{float:none;width:764px;margin-left:0;} +.bootstrap-iso table .span11{float:none;width:844px;margin-left:0;} +.bootstrap-iso table .span12{float:none;width:924px;margin-left:0;} +.bootstrap-iso [class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;} +.bootstrap-iso .icon-white{background-image:url("../img/glyphicons-halflings-white.png");} +.bootstrap-iso .icon-glass{background-position:0 0;} +.bootstrap-iso .icon-music{background-position:-24px 0;} +.bootstrap-iso .icon-search{background-position:-48px 0;} +.bootstrap-iso .icon-envelope{background-position:-72px 0;} +.bootstrap-iso .icon-heart{background-position:-96px 0;} +.bootstrap-iso .icon-star{background-position:-120px 0;} +.bootstrap-iso .icon-star-empty{background-position:-144px 0;} +.bootstrap-iso .icon-user{background-position:-168px 0;} +.bootstrap-iso .icon-film{background-position:-192px 0;} +.bootstrap-iso .icon-th-large{background-position:-216px 0;} +.bootstrap-iso .icon-th{background-position:-240px 0;} +.bootstrap-iso .icon-th-list{background-position:-264px 0;} +.bootstrap-iso .icon-ok{background-position:-288px 0;} +.bootstrap-iso .icon-remove{background-position:-312px 0;} +.bootstrap-iso .icon-zoom-in{background-position:-336px 0;} +.bootstrap-iso .icon-zoom-out{background-position:-360px 0;} +.bootstrap-iso .icon-off{background-position:-384px 0;} +.bootstrap-iso .icon-signal{background-position:-408px 0;} +.bootstrap-iso .icon-cog{background-position:-432px 0;} +.bootstrap-iso .icon-trash{background-position:-456px 0;} +.bootstrap-iso .icon-home{background-position:0 -24px;} +.bootstrap-iso .icon-file{background-position:-24px -24px;} +.bootstrap-iso .icon-time{background-position:-48px -24px;} +.bootstrap-iso .icon-road{background-position:-72px -24px;} +.bootstrap-iso .icon-download-alt{background-position:-96px -24px;} +.bootstrap-iso .icon-download{background-position:-120px -24px;} +.bootstrap-iso .icon-upload{background-position:-144px -24px;} +.bootstrap-iso .icon-inbox{background-position:-168px -24px;} +.bootstrap-iso .icon-play-circle{background-position:-192px -24px;} +.bootstrap-iso .icon-repeat{background-position:-216px -24px;} +.bootstrap-iso .icon-refresh{background-position:-240px -24px;} +.bootstrap-iso .icon-list-alt{background-position:-264px -24px;} +.bootstrap-iso .icon-lock{background-position:-287px -24px;} +.bootstrap-iso .icon-flag{background-position:-312px -24px;} +.bootstrap-iso .icon-headphones{background-position:-336px -24px;} +.bootstrap-iso .icon-volume-off{background-position:-360px -24px;} +.bootstrap-iso .icon-volume-down{background-position:-384px -24px;} +.bootstrap-iso .icon-volume-up{background-position:-408px -24px;} +.bootstrap-iso .icon-qrcode{background-position:-432px -24px;} +.bootstrap-iso .icon-barcode{background-position:-456px -24px;} +.bootstrap-iso .icon-tag{background-position:0 -48px;} +.bootstrap-iso .icon-tags{background-position:-25px -48px;} +.bootstrap-iso .icon-book{background-position:-48px -48px;} +.bootstrap-iso .icon-bookmark{background-position:-72px -48px;} +.bootstrap-iso .icon-print{background-position:-96px -48px;} +.bootstrap-iso .icon-camera{background-position:-120px -48px;} +.bootstrap-iso .icon-font{background-position:-144px -48px;} +.bootstrap-iso .icon-bold{background-position:-167px -48px;} +.bootstrap-iso .icon-italic{background-position:-192px -48px;} +.bootstrap-iso .icon-text-height{background-position:-216px -48px;} +.bootstrap-iso .icon-text-width{background-position:-240px -48px;} +.bootstrap-iso .icon-align-left{background-position:-264px -48px;} +.bootstrap-iso .icon-align-center{background-position:-288px -48px;} +.bootstrap-iso .icon-align-right{background-position:-312px -48px;} +.bootstrap-iso .icon-align-justify{background-position:-336px -48px;} +.bootstrap-iso .icon-list{background-position:-360px -48px;} +.bootstrap-iso .icon-indent-left{background-position:-384px -48px;} +.bootstrap-iso .icon-indent-right{background-position:-408px -48px;} +.bootstrap-iso .icon-facetime-video{background-position:-432px -48px;} +.bootstrap-iso .icon-picture{background-position:-456px -48px;} +.bootstrap-iso .icon-pencil{background-position:0 -72px;} +.bootstrap-iso .icon-map-marker{background-position:-24px -72px;} +.bootstrap-iso .icon-adjust{background-position:-48px -72px;} +.bootstrap-iso .icon-tint{background-position:-72px -72px;} +.bootstrap-iso .icon-edit{background-position:-96px -72px;} +.bootstrap-iso .icon-share{background-position:-120px -72px;} +.bootstrap-iso .icon-check{background-position:-144px -72px;} +.bootstrap-iso .icon-move{background-position:-168px -72px;} +.bootstrap-iso .icon-step-backward{background-position:-192px -72px;} +.bootstrap-iso .icon-fast-backward{background-position:-216px -72px;} +.bootstrap-iso .icon-backward{background-position:-240px -72px;} +.bootstrap-iso .icon-play{background-position:-264px -72px;} +.bootstrap-iso .icon-pause{background-position:-288px -72px;} +.bootstrap-iso .icon-stop{background-position:-312px -72px;} +.bootstrap-iso .icon-forward{background-position:-336px -72px;} +.bootstrap-iso .icon-fast-forward{background-position:-360px -72px;} +.bootstrap-iso .icon-step-forward{background-position:-384px -72px;} +.bootstrap-iso .icon-eject{background-position:-408px -72px;} +.bootstrap-iso .icon-chevron-left{background-position:-432px -72px;} +.bootstrap-iso .icon-chevron-right{background-position:-456px -72px;} +.bootstrap-iso .icon-plus-sign{background-position:0 -96px;} +.bootstrap-iso .icon-minus-sign{background-position:-24px -96px;} +.bootstrap-iso .icon-remove-sign{background-position:-48px -96px;} +.bootstrap-iso .icon-ok-sign{background-position:-72px -96px;} +.bootstrap-iso .icon-question-sign{background-position:-96px -96px;} +.bootstrap-iso .icon-info-sign{background-position:-120px -96px;} +.bootstrap-iso .icon-screenshot{background-position:-144px -96px;} +.bootstrap-iso .icon-remove-circle{background-position:-168px -96px;} +.bootstrap-iso .icon-ok-circle{background-position:-192px -96px;} +.bootstrap-iso .icon-ban-circle{background-position:-216px -96px;} +.bootstrap-iso .icon-arrow-left{background-position:-240px -96px;} +.bootstrap-iso .icon-arrow-right{background-position:-264px -96px;} +.bootstrap-iso .icon-arrow-up{background-position:-289px -96px;} +.bootstrap-iso .icon-arrow-down{background-position:-312px -96px;} +.bootstrap-iso .icon-share-alt{background-position:-336px -96px;} +.bootstrap-iso .icon-resize-full{background-position:-360px -96px;} +.bootstrap-iso .icon-resize-small{background-position:-384px -96px;} +.bootstrap-iso .icon-plus{background-position:-408px -96px;} +.bootstrap-iso .icon-minus{background-position:-433px -96px;} +.bootstrap-iso .icon-asterisk{background-position:-456px -96px;} +.bootstrap-iso .icon-exclamation-sign{background-position:0 -120px;} +.bootstrap-iso .icon-gift{background-position:-24px -120px;} +.bootstrap-iso .icon-leaf{background-position:-48px -120px;} +.bootstrap-iso .icon-fire{background-position:-72px -120px;} +.bootstrap-iso .icon-eye-open{background-position:-96px -120px;} +.bootstrap-iso .icon-eye-close{background-position:-120px -120px;} +.bootstrap-iso .icon-warning-sign{background-position:-144px -120px;} +.bootstrap-iso .icon-plane{background-position:-168px -120px;} +.bootstrap-iso .icon-calendar{background-position:-192px -120px;} +.bootstrap-iso .icon-random{background-position:-216px -120px;} +.bootstrap-iso .icon-comment{background-position:-240px -120px;} +.bootstrap-iso .icon-magnet{background-position:-264px -120px;} +.bootstrap-iso .icon-chevron-up{background-position:-288px -120px;} +.bootstrap-iso .icon-chevron-down{background-position:-313px -119px;} +.bootstrap-iso .icon-retweet{background-position:-336px -120px;} +.bootstrap-iso .icon-shopping-cart{background-position:-360px -120px;} +.bootstrap-iso .icon-folder-close{background-position:-384px -120px;} +.bootstrap-iso .icon-folder-open{background-position:-408px -120px;} +.bootstrap-iso .icon-resize-vertical{background-position:-432px -119px;} +.bootstrap-iso .icon-resize-horizontal{background-position:-456px -118px;} +.bootstrap-iso .dropdown{position:relative;} +.bootstrap-iso .dropdown-toggle{*margin-bottom:-3px;} +.bootstrap-iso .dropdown-toggle:active,.open .dropdown-toggle{outline:0;} +.bootstrap-iso .caret{display:inline-block;width:0;height:0;text-indent:-99999px;*text-indent:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"\2193";} +.bootstrap-iso .dropdown .caret{margin-top:8px;margin-left:2px;} +.bootstrap-iso .dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} +.bootstrap-iso .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;_width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px;} +.bootstrap-iso .dropdown-menu .divider{height:1px;margin:5px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} +.bootstrap-iso .dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#555555;white-space:nowrap;} +.bootstrap-iso .dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} +.bootstrap-iso .dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} +.bootstrap-iso .dropdown.open .dropdown-menu{display:block;} +.bootstrap-iso .typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.bootstrap-iso .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} +.bootstrap-iso .fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} +.bootstrap-iso .collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} +.bootstrap-iso .close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} +.bootstrap-iso .btn{display:inline-block;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);*margin-left:.3em;}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;} +.bootstrap-iso .btn:active,.btn.active{background-color:#cccccc \9;} +.bootstrap-iso .btn:first-child{*margin-left:0;} +.bootstrap-iso .btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} +.bootstrap-iso .btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.bootstrap-iso .btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0;} +.bootstrap-iso .btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.bootstrap-iso .btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.bootstrap-iso .btn-large [class^="icon-"]{margin-top:1px;} +.bootstrap-iso .btn-small{padding:5px 9px;font-size:11px;line-height:16px;} +.bootstrap-iso .btn-small [class^="icon-"]{margin-top:-1px;} +.bootstrap-iso .btn-mini{padding:2px 6px;font-size:11px;line-height:14px;} +.bootstrap-iso .btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} +.bootstrap-iso .btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-dark.active{color:rgba(255, 255, 255, 0.75);} +.bootstrap-iso .btn-primary{background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-ms-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(top, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0044cc;} +.bootstrap-iso .btn-primary:active,.btn-primary.active{background-color:#003399 \9;} +.bootstrap-iso .btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} +.bootstrap-iso .btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} +.bootstrap-iso .btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} +.bootstrap-iso .btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} +.bootstrap-iso .btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} +.bootstrap-iso .btn-success:active,.btn-success.active{background-color:#408140 \9;} +.bootstrap-iso .btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} +.bootstrap-iso .btn-info:active,.btn-info.active{background-color:#24748c \9;} +.bootstrap-iso .btn-inverse{background-color:#393939;background-image:-moz-linear-gradient(top, #454545, #262626);background-image:-ms-linear-gradient(top, #454545, #262626);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#454545), to(#262626));background-image:-webkit-linear-gradient(top, #454545, #262626);background-image:-o-linear-gradient(top, #454545, #262626);background-image:linear-gradient(top, #454545, #262626);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#454545', endColorstr='#262626', GradientType=0);border-color:#262626 #262626 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#262626;} +.bootstrap-iso .btn-inverse:active,.btn-inverse.active{background-color:#0c0c0c \9;} +.bootstrap-iso button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} +.bootstrap-iso button.btn.large,input[type="submit"].btn.large{*padding-top:7px;*padding-bottom:7px;} +.bootstrap-iso button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom:3px;} +.bootstrap-iso .btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} +.bootstrap-iso .btn-group:after{clear:both;} +.bootstrap-iso .btn-group:first-child{*margin-left:0;} +.bootstrap-iso .btn-group+.btn-group{margin-left:5px;} +.bootstrap-iso .btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} +.bootstrap-iso .btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.bootstrap-iso .btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} +.bootstrap-iso .btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} +.bootstrap-iso .btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} +.bootstrap-iso .btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} +.bootstrap-iso .btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} +.bootstrap-iso .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} +.bootstrap-iso .btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;} +.bootstrap-iso .btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.bootstrap-iso .btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} +.bootstrap-iso .btn .caret{margin-top:7px;margin-left:0;} +.bootstrap-iso .btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} +.bootstrap-iso .btn-primary .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} +.bootstrap-iso .btn-small .caret{margin-top:4px;} +.bootstrap-iso .alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.bootstrap-iso .alert,.alert-heading{color:#c09853;} +.bootstrap-iso .alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} +.bootstrap-iso .alert-success{background-color:#dff0d8;border-color:#d6e9c6;} +.bootstrap-iso .alert-success,.alert-success .alert-heading{color:#468847;} +.bootstrap-iso .alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;} +.bootstrap-iso .alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading{color:#b94a48;} +.bootstrap-iso .alert-info{background-color:#d9edf7;border-color:#bce8f1;} +.bootstrap-iso .alert-info,.alert-info .alert-heading{color:#3a87ad;} +.bootstrap-iso .alert-block{padding-top:14px;padding-bottom:14px;} +.bootstrap-iso .alert-block>p,.alert-block>ul{margin-bottom:0;} +.bootstrap-iso .alert-block p+p{margin-top:5px;} +.bootstrap-iso .nav{margin-left:0;margin-bottom:18px;list-style:none;} +.bootstrap-iso .nav>li>a{display:block;} +.bootstrap-iso .nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} +.bootstrap-iso .nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} +.bootstrap-iso .nav li+.nav-header{margin-top:9px;} +.bootstrap-iso .nav-list{padding-left:14px;padding-right:14px;margin-bottom:0;} +.bootstrap-iso .nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} +.bootstrap-iso .nav-list>li>a{padding:3px 15px;} +.bootstrap-iso .nav-list .active>a,.nav-list .active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} +.bootstrap-iso .nav-list [class^="icon-"]{margin-right:2px;} +.bootstrap-iso .nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} +.bootstrap-iso .nav-tabs:after,.nav-pills:after{clear:both;} +.bootstrap-iso .nav-tabs>li,.nav-pills>li{float:left;} +.bootstrap-iso .nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} +.bootstrap-iso .nav-tabs{border-bottom:1px solid #ddd;} +.bootstrap-iso .nav-tabs>li{margin-bottom:-1px;} +.bootstrap-iso .nav-tabs>li>a{padding-top:9px;padding-bottom:9px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} +.bootstrap-iso .nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} +.bootstrap-iso .nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} +.bootstrap-iso .nav-pills .active>a,.nav-pills .active>a:hover{color:#ffffff;background-color:#0088cc;} +.bootstrap-iso .nav-stacked>li{float:none;} +.bootstrap-iso .nav-stacked>li>a{margin-right:0;} +.bootstrap-iso .nav-tabs.nav-stacked{border-bottom:0;} +.bootstrap-iso .nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.bootstrap-iso .nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} +.bootstrap-iso .nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} +.bootstrap-iso .nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} +.bootstrap-iso .nav-pills.nav-stacked>li>a{margin-bottom:3px;} +.bootstrap-iso .nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} +.bootstrap-iso .nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} +.bootstrap-iso .nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.bootstrap-iso .nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;margin-top:6px;} +.bootstrap-iso .nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;} +.bootstrap-iso .nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;} +.bootstrap-iso .nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} +.bootstrap-iso .nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} +.bootstrap-iso .nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;opacity:1;filter:alpha(opacity=100);} +.bootstrap-iso .tabs-stacked .open>a:hover{border-color:#999999;} +.bootstrap-iso .tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} +.bootstrap-iso .tabbable:after{clear:both;} +.bootstrap-iso .tab-content{overflow:hidden;} +.bootstrap-iso .tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} +.bootstrap-iso .tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} +.bootstrap-iso .tab-content>.active,.pill-content>.active{display:block;} +.bootstrap-iso .tabs-below .nav-tabs{border-top:1px solid #ddd;} +.bootstrap-iso .tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;} +.bootstrap-iso .tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} +.bootstrap-iso .tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;} +.bootstrap-iso .tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;} +.bootstrap-iso .tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} +.bootstrap-iso .tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} +.bootstrap-iso .tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} +.bootstrap-iso .tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} +.bootstrap-iso .tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} +.bootstrap-iso .tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} +.bootstrap-iso .tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} +.bootstrap-iso .tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} +.bootstrap-iso .tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} +.bootstrap-iso .navbar{overflow:visible;margin-bottom:18px;} +.bootstrap-iso .navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} +.bootstrap-iso .btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} +.bootstrap-iso .btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} +.bootstrap-iso .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} +.bootstrap-iso .btn-navbar .icon-bar+.icon-bar{margin-top:3px;} +.bootstrap-iso .nav-collapse.collapse{height:auto;} +.bootstrap-iso .navbar .brand:hover{text-decoration:none;} +.bootstrap-iso .navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} +.bootstrap-iso .navbar .navbar-text{margin-bottom:0;line-height:40px;color:#999999;}.navbar .navbar-text a:hover{color:#ffffff;background-color:transparent;} +.bootstrap-iso .navbar .btn,.navbar .btn-group{margin-top:5px;} +.bootstrap-iso .navbar .btn-group .btn{margin-top:0;} +.bootstrap-iso .navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} +.bootstrap-iso .navbar-form:after{clear:both;} +.bootstrap-iso .navbar-form input,.navbar-form select{display:inline-block;margin-top:5px;margin-bottom:0;} +.bootstrap-iso .navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} +.bootstrap-iso .navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} +.bootstrap-iso .navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} +.bootstrap-iso .navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;color:rgba(255, 255, 255, 0.75);background:#666;background:rgba(255, 255, 255, 0.3);border:1px solid #111;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query :-moz-placeholder{color:#eeeeee;} +.bootstrap-iso .navbar-search .search-query::-webkit-input-placeholder{color:#eeeeee;} +.bootstrap-iso .navbar-search .search-query:hover{color:#ffffff;background-color:#999999;background-color:rgba(255, 255, 255, 0.5);} +.bootstrap-iso .navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} +.bootstrap-iso .navbar-fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;} +.bootstrap-iso .navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.bootstrap-iso .navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} +.bootstrap-iso .navbar .nav.pull-right{float:right;} +.bootstrap-iso .navbar .nav>li{display:block;float:left;} +.bootstrap-iso .navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} +.bootstrap-iso .navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} +.bootstrap-iso .navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;} +.bootstrap-iso .navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} +.bootstrap-iso .navbar .nav.pull-right{margin-left:10px;margin-right:0;} +.bootstrap-iso .navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} +.bootstrap-iso .navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} +.bootstrap-iso .navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;} +.bootstrap-iso .navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} +.bootstrap-iso .navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} +.bootstrap-iso .navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} +.bootstrap-iso .navbar .nav.pull-right .dropdown-menu{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before{left:auto;right:12px;} +.bootstrap-iso .navbar .nav.pull-right .dropdown-menu:after{left:auto;right:13px;} +.bootstrap-iso .breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;text-shadow:0 1px 0 #ffffff;} +.bootstrap-iso .breadcrumb .divider{padding:0 5px;color:#999999;} +.bootstrap-iso .breadcrumb .active a{color:#333333;} +.bootstrap-iso .pagination{height:36px;margin:18px 0;} +.bootstrap-iso .pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} +.bootstrap-iso .pagination li{display:inline;} +.bootstrap-iso .pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} +.bootstrap-iso .pagination a:hover,.pagination .active a{background-color:#f5f5f5;} +.bootstrap-iso .pagination .active a{color:#999999;cursor:default;} +.bootstrap-iso .pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} +.bootstrap-iso .pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.bootstrap-iso .pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} +.bootstrap-iso .pagination-centered{text-align:center;} +.bootstrap-iso .pagination-right{text-align:right;} +.bootstrap-iso .pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} +.bootstrap-iso .pager:after{clear:both;} +.bootstrap-iso .pager li{display:inline;} +.bootstrap-iso .pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} +.bootstrap-iso .pager a:hover{text-decoration:none;background-color:#f5f5f5;} +.bootstrap-iso .pager .next a{float:right;} +.bootstrap-iso .pager .previous a{float:left;} +.bootstrap-iso .modal-open .dropdown-menu{z-index:2050;} +.bootstrap-iso .modal-open .dropdown.open{*z-index:2050;} +.bootstrap-iso .modal-open .popover{z-index:2060;} +.bootstrap-iso .modal-open .tooltip{z-index:2070;} +.bootstrap-iso .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} +.bootstrap-iso .modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} +.bootstrap-iso .modal{position:fixed;top:50%;left:50%;z-index:1050;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} +.bootstrap-iso .modal.fade.in{top:50%;} +.bootstrap-iso .modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} +.bootstrap-iso .modal-body{padding:15px;} +.bootstrap-iso .modal-body .modal-form{margin-bottom:0;} +.bootstrap-iso .modal-footer{padding:14px 15px 15px;margin-bottom:0;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} +.bootstrap-iso .modal-footer:after{clear:both;} +.bootstrap-iso .modal-footer .btn{float:right;margin-left:5px;margin-bottom:0;} +.bootstrap-iso .tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} +.bootstrap-iso .tooltip.top{margin-top:-2px;} +.bootstrap-iso .tooltip.right{margin-left:2px;} +.bootstrap-iso .tooltip.bottom{margin-top:2px;} +.bootstrap-iso .tooltip.left{margin-left:-2px;} +.bootstrap-iso .tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.bootstrap-iso .tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.bootstrap-iso .tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.bootstrap-iso .tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.bootstrap-iso .tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.bootstrap-iso .tooltip-arrow{position:absolute;width:0;height:0;} +.bootstrap-iso .popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} +.bootstrap-iso .popover.right{margin-left:5px;} +.bootstrap-iso .popover.bottom{margin-top:5px;} +.bootstrap-iso .popover.left{margin-left:-5px;} +.bootstrap-iso .popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.bootstrap-iso .popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.bootstrap-iso .popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.bootstrap-iso .popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.bootstrap-iso .popover .arrow{position:absolute;width:0;height:0;} +.bootstrap-iso .popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} +.bootstrap-iso .popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} +.bootstrap-iso .popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} +.bootstrap-iso .thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} +.bootstrap-iso .thumbnails:after{clear:both;} +.bootstrap-iso .thumbnails>li{float:left;margin:0 0 18px 20px;} +.bootstrap-iso .thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} +.bootstrap-iso a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} +.bootstrap-iso .thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} +.bootstrap-iso .thumbnail .caption{padding:9px;} +.bootstrap-iso .label{padding:2px 4px 3px;font-size:11.049999999999999px;font-weight:bold;color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.bootstrap-iso .label:hover{color:#ffffff;text-decoration:none;} +.bootstrap-iso .label-important{background-color:#b94a48;} +.bootstrap-iso .label-important:hover{background-color:#953b39;} +.bootstrap-iso .label-warning{background-color:#f89406;} +.bootstrap-iso .label-warning:hover{background-color:#c67605;} +.bootstrap-iso .label-success{background-color:#468847;} +.bootstrap-iso .label-success:hover{background-color:#356635;} +.bootstrap-iso .label-info{background-color:#3a87ad;} +.bootstrap-iso .label-info:hover{background-color:#2d6987;} +.bootstrap-iso @-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.bootstrap-iso .progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} +.bootstrap-iso .progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} +.bootstrap-iso .progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} +.bootstrap-iso .progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} +.bootstrap-iso .progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} +.bootstrap-iso .progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} +.bootstrap-iso .progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} +.bootstrap-iso .progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} +.bootstrap-iso .progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} +.bootstrap-iso .accordion{margin-bottom:18px;} +.bootstrap-iso .accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.bootstrap-iso .accordion-heading{border-bottom:0;} +.bootstrap-iso .accordion-heading .accordion-toggle{display:block;padding:8px 15px;} +.bootstrap-iso .accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} +.bootstrap-iso .carousel{position:relative;margin-bottom:18px;line-height:1;} +.bootstrap-iso .carousel-inner{overflow:hidden;width:100%;position:relative;} +.bootstrap-iso .carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} +.bootstrap-iso .carousel .item>img{display:block;line-height:1;} +.bootstrap-iso .carousel .active,.carousel .next,.carousel .prev{display:block;} +.bootstrap-iso .carousel .active{left:0;} +.bootstrap-iso .carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} +.bootstrap-iso .carousel .next{left:100%;} +.bootstrap-iso .carousel .prev{left:-100%;} +.bootstrap-iso .carousel .next.left,.carousel .prev.right{left:0;} +.bootstrap-iso .carousel .active.left{left:-100%;} +.bootstrap-iso .carousel .active.right{left:100%;} +.bootstrap-iso .carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} +.bootstrap-iso .carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} +.bootstrap-iso .carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} +.bootstrap-iso .carousel-caption h4,.carousel-caption p{color:#ffffff;} +.bootstrap-iso .hero-unit{padding:60px;margin-bottom:30px;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} +.bootstrap-iso .hero-unit p{font-size:18px;font-weight:200;line-height:27px;} +.bootstrap-iso .pull-right{float:right;} +.bootstrap-iso .pull-left{float:left;} +.bootstrap-iso .hide{display:none;} +.bootstrap-iso .show{display:block;} +.bootstrap-iso .invisible{visibility:hidden;} \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/img/glyphicons-halflings-white.png b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..a20760bfde58d1c92cee95116059fba03c68d689 GIT binary patch literal 4352 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 literal 0 HcmV?d00001 diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/style.css b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/style.css new file mode 100644 index 0000000..d9bcef2 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/css/style.css @@ -0,0 +1,96 @@ +.pseudoLink{ + color: #00008b; + border-bottom: 1px dotted #00008b; + cursor: pointer; +} + +.pseudoLink:hover{ + color: #4b0082; + border-bottom: 1px dotted #4b0082; +} + +#apiparams { + width: 100%; + height: 200px; +} + +#saveRequestParams { + width: 350px; + height: 200px; +} + +.tt-menu { +background-color: #fff; +border-bottom: 1px solid #ccc; +border-left: 1px solid #ccc; +border-right: 1px solid #ccc; +border-radius: 4px; +margin-top: 3px; +min-width: 180px; +} + +.tt-selectable { +cursor: pointer; +padding: 2px 8px 2px 8px; +} + +.tt-selectable:hover { +background-color: #0088CC; +color: #fff; +} +.btn-mini { +margin-top: 8px; +padding: 5px 8px; +} +#testResult { +margin-top: 0.5em; +} +#rsp { +margin-top: 12px; +margin-bottom: 14px; +} +#load { + position: absolute; + left: 10px; + top: 170px; + width: 98%; + height: 95%; + display:none; + background-color: #fff; + z-index: 1000; +} +.spinner { + display: inline-block; + opacity: 0; + width: 0; + + -webkit-transition: opacity 0s, width 0s; + -moz-transition: opacity 0s, width 0s; + -o-transition: opacity 0s, width 0s; + transition: opacity 0s, width 0s; +} +.has-spinner.active { + cursor:progress; +} + +.has-spinner.active .spinner { + opacity: 1; + width: auto; /* This doesn't work, just fix for unkown width elements */ +} + +.has-spinner.active .play { + opacity: 0; + width: 0; + display: none; +} +.has-spinner .play { + display: inline-block; + width: 10px; +} + +.has-spinner.btn.active .spinner { + width: 14px; +} +#apimethod { +background-color: white; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/js.js b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/js.js new file mode 100644 index 0000000..c7f7ad8 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/js.js @@ -0,0 +1,506 @@ +function CConfig(){ + this.init(); +} +var methods = ["action.create", + "action.delete", + "action.get", + "action.update", + "alert.get", + "apiinfo.version", + "application.create", + "application.delete", + "application.get", + "application.massadd", + "application.update", + "configuration.export", + "configuration.import", + "correlation.create", + "correlation.delete", + "correlation.get", + "correlation.update", + "dashboard.create", + "dashboard.delete", + "dashboard.get", + "dashboard.update", + "dhost.get", + "dservice.get", + "dcheck.get", + "drule.create", + "drule.delete", + "drule.get", + "drule.update", + "event.acknowledge", + "event.get", + "graph.create", + "graph.delete", + "graph.get", + "graph.update", + "graphitem.get", + "graphprototype.create", + "graphprototype.delete", + "graphprototype.get", + "graphprototype.update", + "history.get", + "host.create", + "host.delete", + "host.get", + "host.massadd", + "host.massremove", + "host.massupdate", + "host.update", + "hostgroup.create", + "hostgroup.delete", + "hostgroup.get", + "hostgroup.massadd", + "hostgroup.massremove", + "hostgroup.massupdate", + "hostgroup.update", + "hostinterface.create", + "hostinterface.delete", + "hostinterface.get", + "hostinterface.massadd", + "hostinterface.massremove", + "hostinterface.replacehostinterfaces", + "hostinterface.update", + "hostprototype.create", + "hostprototype.delete", + "hostprototype.get", + "hostprototype.update", + "iconmap.create", + "iconmap.delete", + "iconmap.get", + "iconmap.update", + "image.create", + "image.delete", + "image.get", + "image.update", + "item.create", + "item.delete", + "item.get", + "item.update", + "itemprototype.create", + "itemprototype.delete", + "itemprototype.get", + "itemprototype.update", + "service.adddependencies", + "service.addtimes", + "service.create", + "service.delete", + "service.deletedependencies", + "service.deletetimes", + "service.get", + "service.getsla", + "service.update", + "discoveryrule.copy", + "discoveryrule.create", + "discoveryrule.delete", + "discoveryrule.get", + "discoveryrule.update", + "maintenance.create", + "maintenance.delete", + "maintenance.get", + "maintenance.update", + "map.create", + "map.delete", + "map.get", + "map.update", + "usermedia.get", + "mediatype.create", + "mediatype.delete", + "mediatype.get", + "mediatype.update", + "problem.get", + "proxy.create", + "proxy.delete", + "proxy.get", + "proxy.update", + "screen.create", + "screen.delete", + "screen.get", + "screen.update", + "screenitem.create", + "screenitem.delete", + "screenitem.get", + "screenitem.update", + "screenitem.updatebyposition", + "script.create", + "script.delete", + "script.execute", + "script.get", + "script.getscriptsbyhosts", + "script.update", + "template.create", + "template.delete", + "template.get", + "template.massadd", + "template.massremove", + "template.massupdate", + "template.update", + "templatescreen.copy", + "templatescreen.create", + "templatescreen.delete", + "templatescreen.get", + "templatescreen.update", + "templatescreenitem.get", + "trend.get", + "trigger.adddependencies", + "trigger.deletedependencies", + "trigger.create", + "trigger.delete", + "trigger.get", + "trigger.update", + "triggerprototype.create", + "triggerprototype.delete", + "triggerprototype.get", + "triggerprototype.update", + "user.addmedia", + "user.create", + "user.delete", + "user.deletemedia", + "user.get", + "user.login", + "user.logout", + "user.update", + "user.updatemedia", + "user.updateprofile", + "usergroup.create", + "usergroup.delete", + "usergroup.get", + "usergroup.massadd", + "usergroup.massupdate", + "usergroup.update", + "usermacro.create", + "usermacro.createglobal", + "usermacro.delete", + "usermacro.deleteglobal", + "usermacro.get", + "usermacro.update", + "usermacro.updateglobal", + "valuemap.create", + "valuemap.delete", + "valuemap.get", + "valuemap.update", + "httptest.create", + "httptest.delete", + "httptest.get", + "httptest.update" +]; + +CConfig.prototype = { + connections: {}, + host: '', + login: '', + password: '', + auth: '', + + init: function(){ + this.connections = JSON.parse(localStorage.getItem('connections')) || {}; + + var that = this; + $jq('#host').change(function(){ + that.host = this.value; + }); + $jq('#login').change(function(){ + that.login = this.value; + }); + $jq('#password').change(function(){ + that.password = this.value; + }); + $jq('#connAdd').click(function(){ + that.addConnection(); + }); + $jq('#connList').change(function(){ + that.loadConnection($jq('#connList').val()); + }); + $jq('#connRemove').click(function(){ + that.removeConnection(); + }); + this.syncConnectionsList(); + }, + + addConnection: function(){ + this.connections[this.host] = { + host: this.host, + login: this.login, + password: this.password + }; + localStorage.setItem('connections', JSON.stringify(this.connections)); + + this.syncConnectionsList(); + }, + removeConnection: function(){ + delete this.connections[$jq('#connList').val()]; + + localStorage.setItem('connections', JSON.stringify(this.connections)); + + this.syncConnectionsList(); + }, + loadConnection: function(host){ + this.host = this.connections[host].host; + this.login = this.connections[host].login; + this.password = this.connections[host].password; + + this.syncConnectionsConfig(); + }, + + syncConnectionsList: function(){ + $jq('#connList').empty(); + for(var key in this.connections){ + $jq('#connList').append(new Option(this.connections[key].host, this.connections[key].host)); + } + }, + syncConnectionsConfig: function(){ + $jq('#host').val(this.host); + $jq('#login').val(this.login); + $jq('#password').val(this.password); + } +}; + +$jq(document).ready(function() { + $jq('#loadMe').click(function (e) { + if ($jq('#load').css('display') == 'none') { + var docUrl = "https://www.zabbix.com/documentation/3.0/manual/api/reference/" + $jq('#apimethod').val().replace('.','/') + if ($jq("#load").attr("src") != docUrl) { + $jq("#load").attr("src", docUrl); + } + $jq('#load').show(); + } else { + $jq('#load').hide(); + } + }); + + config = new CConfig(); + + $jq('#saveRequest').click(function() { + $jq('#saveRequestMethod').val($jq('#apimethod').val()); + $jq('#saveRequestParams').val($jq('#apiparams').val()); + }); + + $jq('#saveRequestOk').click(function() { + var request = { + name: $jq('#saveRequestName').val(), + method: $jq('#saveRequestMethod').val(), + params: $jq('#saveRequestParams').val() + }, + requests = JSON.parse(localStorage.getItem('requests')) || {}; + + requests[request.name] = request; + + localStorage.setItem('requests', JSON.stringify(requests)); + + $jq('#saveRequestModal').modal('hide'); + }); + + + $jq('#loadRequest').click(function() { + var requests = JSON.parse(localStorage.getItem('requests')) || {}; + $jq('#savedRequests').empty(); + for (var name in requests) { + $jq('#savedRequests').append(new Option(name, name)); + } + }); + + $jq('#loadRequestOk').click(function() { + var request, + requests = JSON.parse(localStorage.getItem('requests')) || {}; + + if ($jq('#savedRequests').val()) { + request = requests[$jq('#savedRequests').val()]; + $jq('#apimethod').val(request.method); + $jq('#apiparams').val(request.params); + } + + $jq('#loadRequestModal').modal('hide'); + }); + + $jq('#removeSavedRequest').click(function() { + var requests = JSON.parse(localStorage.getItem('requests')) || {}; + + delete requests[$jq('#savedRequests').val()]; + localStorage.setItem('requests', JSON.stringify(requests)); + + $jq('#savedRequests').empty(); + for(var name in requests){ + $jq('#savedRequests').append(new Option(name, name)); + } + }); + + + $jq('#loginButton').click(function() { + jsonRpc.connect(config.host, config.login, config.password); + }); + + $jq('#execute').click(function() { + testOnly(); + paramsUpdate(); + var params; + try { + params = $jq('#apiparams').val(); + if (params !== '') { + params = JSON.parse($jq('#apiparams').val()); + } + jsonRpc.call($jq('#apimethod').val(), params); + } + catch(e) { + //alert(e); + } + }); + + function testOnly(){ + if ($jq('#apiparams').val() == '') { + $jq('#apiparams').parent().removeClass('error'); + $jq('#testResult').hide(); + return true; + } + lint = window.JSONLint( $jq('#apiparams').val(), { comments: false } ); + + if ( ! lint.error ) { + $jq('#apiparams').parent().removeClass('error'); + $jq('#testResult').hide(); + } + else { + $jq('#apiparams').parent().addClass('error'); + $jq('#response, #request').empty(); + $jq('#responsetime').text(""); + $jq('#testResult').show(); + $jq('#testResult').html([ + lint.error + "
      " + + "Evidence: " + lint.evidence + "
      " + + "Line: " + lint.line + "
      " + + "Character: " + lint.character + ].join('')); + } + } + + function paramsUpdate() { + location.hash = 'apimethod=' + encodeURIComponent($jq('#apimethod').val()) + '&apiparams=' + encodeURIComponent($jq('#apiparams').val()); + } + + $jq('#compressJSON').click(function(){ + var params; + params = JSON.parse($jq('#apiparams').val()); + $jq('#apiparams').val(JSON.stringify(params, null, null)); + paramsUpdate(); + }); + + $jq('#formatJSON').click(function(){ + var params; + if ($jq('#apiparams').val() == '') { + $jq('#apiparams').parent().removeClass('error'); + $jq('#testResult').hide(); + return true; + } + lint = window.JSONLint( $jq('#apiparams').val(), { comments: false } ); + + if ( ! lint.error ) { + $jq('#apiparams').parent().removeClass('error'); + $jq('#response, #request').empty(); + $jq('#responsetime').text(""); + $jq('#testResult').hide(); + try { + params = JSON.parse($jq('#apiparams').val()); + $jq('#apiparams').val(JSON.stringify(params, null, 4)); + paramsUpdate(); + } + catch(e) { + alert(e); + } + } + else { + $jq('#apiparams').parent().addClass('error'); + $jq('#testResult').show(); + $jq('#testResult').html([ + lint.error + "
      " + + "Evidence: " + lint.evidence + "
      " + + "Line: " + lint.line + "
      " + + "Character: " + lint.character + ].join('')); + } + }); + + var substringMatcher = function(strs) { + return function findMatches(q, cb) { + var matches, substringRegex; + + // an array that will be populated with substring matches + matches = []; + + // regex used to determine if a string contains the substring `q` + substrRegex = new RegExp(q, 'i'); + + // iterate through the pool of strings and for any string that + // contains the substring `q`, add it to the `matches` array + $jq.each(strs, function(i, str) { + if (substrRegex.test(str)) { + matches.push(str); + } + }); + + cb(matches); + }; + }; + + $jq('#apimethod').typeahead({ + hint: true, + highlight: true, + minLength: 1 + }, + { + name: 'apimethods', + limit: 14, + source: substringMatcher(methods), + }); + + if (location.hash.length) { + var prms = getHashParams(); + if ('apimethod' in prms) { + $jq('#apimethod').val(prms['apimethod']); + } + if ('apiparams' in prms) { + $jq('#apiparams').val(prms['apiparams']); + } + } + + if (methods.indexOf($jq('#apimethod').val()) > -1 ) { + $jq('#loadMe').removeClass('disabled'); + } else { + $jq('#loadMe').addClass('disabled'); + } +}); + +$jq(document).on('search keyup change typeahead:selected typeahead:autocompleted', '#apimethod', function () { + var prms = getHashParams(); + var hash = ''; + delete prms['apimethod']; + $jq.each( prms, function( key, value ) { + hash = key + "=" + encodeURIComponent(value) + '&'; + }); + location.hash = 'apimethod=' + encodeURIComponent($jq(this).val()) + '&' + hash; + if (methods.indexOf($jq(this).val()) > -1 ) { + $jq('#loadMe').removeClass('disabled'); + } else { + $jq('#loadMe').addClass('disabled'); + } +}) + +$jq(document).on('search keyup change', '#apiparams', function () { + var prms = getHashParams(); + var hash = ''; + delete prms['apiparams']; + $jq.each( prms, function( key, value ) { + hash = key + "=" + encodeURIComponent(value) + '&'; + }); + location.hash = hash + 'apiparams=' + encodeURIComponent($jq(this).val()); +}) + +function getHashParams() { + var hashParams = {}; + var e, + a = /\+/g, //Regex for replacing addition symbol with a space + r = /([^&;=]+)=?([^&;]*)/g, + d = function (s) { return decodeURIComponent(s.replace(a, " ")); }, + q = window.location.hash.substring(1); + while (e = r.exec(q)) + hashParams[d(e[1])] = d(e[2]); + return hashParams; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonlint.js b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonlint.js new file mode 100644 index 0000000..4fa3cb4 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonlint.js @@ -0,0 +1,504 @@ +(function( glob, undefined ) { + +var rnumber = /[0-9]/, + rnewline = /(\r\n|\r|\n)/, + revidence = /\r\n|\r|\n/, + rwhitespace = /(\s|\t)/, + rvalidsolidus = /\\("|\\|\/|b|f|n|r|t|u[0-9]{4})/, + rE = /^(\-|\+)?[0-9]/; + + +// Leeeeeeerrrrroooyy Jennkkkiiinnnss +function JSONLint( json, options ) { + var self = this; + + if ( ! ( self instanceof JSONLint ) ) { + return new JSONLint( json, options ); + } + + // Argument handling + self.json = json || ''; + self.options = options || {}; + self.lower = self.json.toLowerCase(); + + // Allow comments by default + if ( ! self.options.hasOwnProperty( 'comments' ) ) { + self.options.comments = true; + } + + // Internals + self.c = ''; + self.i = -1; + self.length = self.json.length; + self.line = 1; + self.character = 0; + self._evidence = self.json.split( revidence ); + self.endblock = ''; + self.commabreak = false; + + try { + self.render(); + } catch ( e ) { + if ( typeof e != 'string' ) { + throw e; + } + self.error = e; + self.setEvidence(); + } +} + + +// Meta (Please change contact info for republishing with changes) +JSONLint.contact = "Corey Hart (corey@codenothing.com)"; +JSONLint.version = '0.1.1'; + + +// Methods +JSONLint.prototype = { + + // Rendering Start + render: function(){ + var self = this, peek = '', content = false; + + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( self.options.comments && self.c == '/' ) { + peek = self.json[ self.i + 1 ]; + if ( peek == '*' ) { + self.multicomment(); + } + else if ( peek == '/' ) { + self.comment(); + } + else { + throw "Unknown character '/', maybe a comment?"; + } + } + else if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + } + else if ( rwhitespace.exec( self.c ) ) { + continue; + } + else if ( content ) { + throw "Unknown character '" + self.c + "', expecting end of file."; + } + else if ( self.c == '[' ) { + content = true; + self.array(); + } + else if ( self.c == '{' ) { + content = true; + self.object(); + } + else { + throw "Unknown character '" + self.c + "', expecting opening block '{' or '[', or maybe a comment"; + } + } + + // Check for pure whitespace + if ( ! content ) { + throw "Invalid JSON, no content."; + } + }, + + // Multi line comment + multicomment: function(){ + var self = this; + + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( self.c == "*" && self.json[ self.i + 1 ] == "/" ) { + self.i++; + self.character++; + break; + } + else if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + } + } + }, + + // Single line comment + comment: function(){ + var self = this; + + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + break; + } + } + }, + + // Array Block + array: function(){ + // Keep reference of current endblock + var self = this, + _endblock = self.endblock, + _commabreak = self.commabreak, + ended = false; + + self.endblock = ']'; + self.commabreak = false; + while ( ( ended = self.value() ) !== true && self.i < self.length ) { + // Do nothing, just wait for array values to finish + } + + if ( ! ended ) { + throw "EOF Error. Expecting closing ']'"; + } + + // Reset previous endblock + self.endblock = _endblock; + self.commabreak = _commabreak; + }, + + // Object Block + object: function(){ + // Keep reference of current endblock + var self = this, + _endblock = self.endblock, + _commabreak = self.commabreak, + found = false, peek = '', empty = true; + + self.endblock = '}'; + self.commabreak = false; + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( self.options.comments && self.c == '/' ) { + peek = self.json[ self.i + 1 ]; + if ( peek == '*' ) { + self.multicomment(); + } + else if ( peek == '/' ) { + self.comment(); + } + else { + throw "Unknown character '/', maybe a comment?"; + } + } + else if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + } + else if ( rwhitespace.exec( self.c ) ) { + continue; + } + else if ( self.c == '"' ) { + empty = false; + if ( self.key() === true ) { + // Reset old endblock + self.endblock = _endblock; + self.commabreak = _commabreak; + found = true; + break; + } + } + else if ( empty && self.c == '}' ) { + self.endblock = _endblock; + self.commabreak = _commabreak; + found = true; + break; + } + else { + throw "Unknown Character '" + self.c + "', expecting a string for key statement."; + } + } + + if ( ! found ) { + throw "EOF Error, expecting closing '}'."; + } + }, + + // Key Statement + key: function(){ + var self = this; + self.string(); + + for ( var peek = ''; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( self.options.comments && self.c == '/' ) { + peek = self.json[ self.i + 1 ]; + if ( peek == '*' ) { + self.multicomment(); + } + else if ( peek == '/' ) { + self.comment(); + } + else { + throw "Unknown character '/', maybe a comment?"; + } + } + else if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + } + else if ( rwhitespace.exec( self.c ) ) { + continue; + } + else if ( self.c == ":" ) { + return self.value(); + } + else { + throw "Unknown Character '" + self.c + "', expecting a semicolon."; + } + } + }, + + // Value statement + value: function(){ + var self = this, peek = ''; + + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( self.options.comments && self.c == '/' ) { + peek = self.json[ self.i + 1 ]; + if ( peek == '*' ) { + self.multicomment(); + } + else if ( peek == '/' ) { + self.comment(); + } + else { + throw "Unknown character '/', maybe a comment?"; + } + } + else if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + } + else if ( rwhitespace.exec( self.c ) ) { + continue; + } + else if ( self.c == '{' ) { + self.object(); + return self.endval(); + } + else if ( self.c == '[' ) { + self.array(); + return self.endval(); + } + else if ( self.c == '"' ) { + self.string(); + return self.endval(); + } + else if ( self.json.indexOf( 'true', self.i ) === self.i ) { + self.i += 3; + self.character += 3; + return self.endval(); + } + else if ( self.json.indexOf( 'false', self.i ) === self.i ) { + self.i += 4; + self.character += 4; + return self.endval(); + } + else if ( self.json.indexOf( 'null', self.i ) === self.i ) { + self.i += 3; + self.character += 3; + return self.endval(); + } + else if ( self.c == '-' || rnumber.exec( self.c ) ) { + return self.numeric(); + } + else if ( self.c == ']' && self.endblock == ']' ) { + if ( self.commabreak ) { + throw "Unexpected End Of Array Error. Expecting a value statement."; + } + return true; + } + else { + throw "Unknown Character '" + self.c + "', expecting a value."; + } + } + }, + + // String statement + string: function(){ + var self = this, found = false, m; + + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( self.c == "\\" ) { + if ( ( m = rvalidsolidus.exec( self.json.substr( self.i ) ) ) && m.index === 0 ) { + self.i += m[ 1 ].length; + self.character += m[ 1 ].length; + } + else { + throw "Invalid Reverse Solidus '\\' declaration."; + } + } + else if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + } + else if ( self.c == '"' ) { + found = true; + break; + } + } + + // Make sure close string is found + if ( ! found ) { + throw "EOF: No close string '\"' found."; + } + }, + + // Numeric Value + numeric: function(){ + var self = this, + negative = true, + decimal = null, + e = null, + peek = ''; + + // We need to jump back a character to catch the whole number + self.i--; + self.character--; + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + // Handle initial negative sign + if ( negative ) { + negative = false; + if ( self.c == '-' ) { + if ( ! rnumber.exec( self.json[ self.i + 1 ] ) ) { + throw "Unknown Character '" + self.c + "' following a negative, expecting a numeric value."; + } + continue; + } + } + + // Only a single decimal is allowed in a numeric value + if ( decimal && self.c == '.' ) { + decimal = false; + e = true; + continue; + } + // Only a single e notation is allowed in a numeric value + else if ( e && self.c.toLowerCase() == 'e' ) { + e = false; + negative = true; + if ( rE.exec( self.json.substr( self.i + 1, 2 ) ) ) { + self.character++; + self.i++; + } + else { + self.character++; + throw "Unknown Character '" + self.json[ self.i + 1 ] + "' following e notation, expecting a numeric value."; + } + } + // Normal Digit + else if ( rnumber.exec( self.c ) ) { + if ( decimal === null ) { + decimal = true; + } + } + // Assume end of number, and allow endval to handle it + else { + // Jump back a character to include the current one + self.i--; + self.character--; + return self.endval(); + } + } + }, + + // Ending a value statement + endval: function(){ + var self = this, peek = ''; + self.commabreak = false; + + for ( ; ++self.i < self.length; ) { + self.c = self.json[ self.i ]; + self.character++; + + if ( self.options.comments && self.c == '/' ) { + peek = self.json[ self.i + 1 ]; + if ( peek == '*' ) { + self.multicomment(); + } + else if ( peek == '/' ) { + self.comment(); + } + else { + throw "Unknown character '/', maybe a comment?"; + } + } + else if ( rnewline.exec( self.c ) ) { + self.line++; + self.character = 0; + } + else if ( rwhitespace.exec( self.c ) ) { + continue; + } + else if ( self.c == ',' ) { + self.commabreak = true; + break; + } + else if ( self.c == self.endblock ) { + return true; + } + else { + throw "Unknown Character '" + self.c + "', expecting a comma or a closing '" + self.endblock + "'"; + } + } + }, + + // Expose line of the error + setEvidence: function(){ + var self = this, start = self.line - 5, end = start + 8, evidence = ''; + + // Min start + if ( start < 0 ) { + start = 0; + end = 8; + } + + // Max end + if ( end >= self._evidence.length ) { + end = self._evidence.length; + } + + // Evidence display + for ( ; start < end; start++ ) { + evidence += ( start === ( self.line - 1 ) ? "-> " : " " ) + + ( start + 1 ) + '| ' + + self._evidence[ start ] + "\n"; + } + + // Set the evidence display + self.evidence = evidence; + } +}; + + +// Check for nodejs module system +if ( typeof exports == 'object' && typeof module == 'object' ) { + module.exports = JSONLint; +} +// In a browser +else { + glob.JSONLint = JSONLint; +} + +})( this ); diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonrpc.js b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonrpc.js new file mode 100644 index 0000000..421b3d1 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-dockbix-xxl/usr/local/src/zabbix/frontends/php/zapix/js/jsonrpc.js @@ -0,0 +1,103 @@ +"use strict"; + +function getCookie(cname) { + var name = cname + "="; + var ca = document.cookie.split(';'); + for(var i = 0; i /usr/local/etc/zabbix_server.conf + # enable default one java poller for Java gateway + if $ZJ_enabled; then + if [ -z ${ZS_StartJavaPollers+x} ]; then + export ZS_StartJavaPollers=1 + fi + fi + for i in $( printenv | grep ^ZS_ | grep -v '^ZS_enabled' | awk -F'=' '{print $1}' | sort -rn ); do + reg=$(echo ${i} | sed 's|^ZS_||' | sed -E "s/_[0-9]+$//") + val=$(echo ${!i}) + echo "${reg}=${val}" >> /usr/local/etc/zabbix_server.conf + sed -i "s#ZS_${reg}#${val}#g" /usr/local/src/zabbix/frontends/php/conf/zabbix.conf.php + done + + # ^ZA_: /usr/local/etc/zabbix_agentd.conf + export ZA_Hostname_e=$(echo ${ZA_Hostname} | sed -e 's/ /\\\ /g') + sed -i "s#ZA_Hostname#${ZA_Hostname_e}#g" /usr/local/etc/zabbix_agentd.conf + unset ZA_Hostname_e + > /usr/local/etc/zabbix_agentd.conf + for i in $( printenv | grep ^ZA_ | grep -v '^ZA_enabled' | awk -F'=' '{print $1}' | sort -rn ); do + reg=$(echo ${i} | sed 's|^ZA_||' | sed -E "s/_[0-9]+$//") + val=$(echo ${!i}) + echo "${reg}=${val}" >> /usr/local/etc/zabbix_agentd.conf + done + + # ^ZW_: /usr/local/src/zabbix/frontends/php/conf/zabbix.conf.php + export ZW_ZBX_SERVER_NAME_e=$(echo ${ZW_ZBX_SERVER_NAME} | sed -e 's/ /\\\ /g') + sed -i "s#ZW_ZBX_SERVER_NAME#${ZW_ZBX_SERVER_NAME_e}#g" /usr/local/src/zabbix/frontends/php/conf/zabbix.conf.php + unset ZW_ZBX_SERVER_NAME_e + for i in $( printenv | grep ^ZW_ | grep -v '^ZW_ZBX_SERVER_NAME' | awk -F'=' '{print $1}' | sort -rn ); do + reg=$(echo ${i} | sed 's|^ZW_||') + val=$(echo ${!i}) + sed -i "s#ZW_${reg}#${val}#g" /usr/local/src/zabbix/frontends/php/conf/zabbix.conf.php + done + + # ^PHP_: /etc/php.d/zz-zabbix.ini + for i in $( printenv | grep ^PHP_ | sort -rn ); do + reg=$(echo ${i} | awk -F'=' '{print $1}') + val=$(echo ${i} | awk -F'=' '{print $2}') + sed -i "s#${reg}\$#${val}#g" /etc/php.d/zz-zabbix.ini + done + + ZBX_GRAPH_FONT_NAME=${ZBX_GRAPH_FONT_NAME:-DejaVuSans} + if [ $ZBX_GRAPH_FONT_NAME == "ipagp" ]; then + sed -i "/ZBX_GRAPH_FONT_NAME/c\define('ZBX_GRAPH_FONT_NAME','ipagp');" /usr/local/src/zabbix/frontends/php/include/defines.inc.php + fi + + if [ -f /etc/custom-config/php-zabbix.ini ]; then + cp -f /etc/custom-config/php-zabbix.ini /etc/php.d/zz-zabbix.ini + fi + if [ -f /etc/custom-config/zabbix_server.conf ]; then + cp -f /etc/custom-config/zabbix_server.conf /usr/local/etc/zabbix_server.conf + fi +} +####################### End of default settings ####################### +# Zabbix default sql files +ZABBIX_SQL_DIR="/usr/local/src/zabbix/database/mysql" +# load DB config from custom config file if exist +if [ -f /etc/custom-config/zabbix_server.conf ]; then + FZS_DBPassword=$(grep ^DBPassword= /etc/custom-config/zabbix_server.conf | awk -F= '{print $2}') + if [ ! -z "$FZS_DBPassword" ]; then + export ZS_DBPassword=$FZS_DBPassword + fi + FZS_DBUser=$(grep ^DBUser= /etc/custom-config/zabbix_server.conf | awk -F= '{print $2}') + if [ ! -z "$FZS_DBUser" ]; then + export ZS_DBUser=$FZS_DBUser + fi + FZS_DBHost=$(grep ^DBHost= /etc/custom-config/zabbix_server.conf | awk -F= '{print $2}') + if [ ! -z "$FZS_DBHost" ]; then + export ZS_DBHost=$FZS_DBHost + fi + FZS_DBPort=$(grep ^DBPort= /etc/custom-config/zabbix_server.conf | awk -F= '{print $2}') + if [ ! -z "$FZS_DBPort" ]; then + export ZS_DBPort=$FZS_DBPort + fi + FZS_DBName=$(grep ^DBName= /etc/custom-config/zabbix_server.conf | awk -F= '{print $2}') + if [ ! -z "$FZS_DBName" ]; then + export ZS_DBName=$FZS_DBName + fi +fi +log "Preparing server configuration" +update_config +log "Config updated." +log "Enabling logging and pid management" +logging +system_pids +fix_permissions +log "Done" + +if $ZS_enabled; then + # wait 120sec for DB server initialization + retry=24 + log "Waiting for database server" + until mysql -u ${ZS_DBUser} -p${ZS_DBPassword} -h ${ZS_DBHost} -P ${ZS_DBPort} -e "exit" &>/dev/null + do + log "Waiting for database server, it's still not available" + retry=`expr $retry - 1` + if [ $retry -eq 0 ]; then + error "Database server is not available!" + exit 1 + fi + sleep 5 + done + log "Database server is available" + + log "Checking if database exists or SQL import is required" + if ! mysql -u ${ZS_DBUser} -p${ZS_DBPassword} -h ${ZS_DBHost} -P ${ZS_DBPort} -e "use ${ZS_DBName};" &>/dev/null; then + warning "Zabbix database doesn't exist. Installing and importing default settings" + log `create_db` + log "Database and user created, importing default SQL" + log `import_zabbix_db` + log "Import finished, starting" + else + log "Zabbix database exists, starting server" + fi +else + # Zabbix server is disabled + rm -rf /etc/supervisor.d/zabbix-server.conf +fi + +if ! $ZA_enabled; then + # Zabbix agent is disabled + rm -rf /etc/supervisor.d/zabbix-agent.conf +fi + +if ! $ZW_enabled; then + # Zabbix web UI is disabled + rm -rf /etc/supervisor.d/nginx.conf + rm -rf /etc/supervisor.d/php-fpm.conf +fi + +if ! $ZJ_enabled; then + # Zabbix Java Gateway disabled + rm -rf /etc/supervisor.d/zabbix-java-gateway.conf +else + rm -rf /usr/local/sbin/zabbix_java/lib/logback.xml + cp /usr/local/etc/logback.xml /usr/local/sbin/zabbix_java/lib/ + if [ -f /etc/custom-config/logback.xml ]; then + rm -rf /usr/local/sbin/zabbix_java/lib/logback.xml + cp /etc/custom-config/logback.xml /usr/local/sbin/zabbix_java/lib/ + else + sed -i "s###g" /usr/local/sbin/zabbix_java/lib/logback.xml + fi + export ZJ_JarFile=$(find /usr/local/sbin/zabbix_java/ -name 'zabbix-java-gateway*.jar' | awk -F'zabbix_java/bin/' '{print $2}') + export ZJ_JarFile_android_json=$(find /usr/local/sbin/zabbix_java/ -name 'android-json*.jar' | awk -F'zabbix_java/lib/' '{print $2}') + export ZJ_JarFile_logback_classic=$(find /usr/local/sbin/zabbix_java/ -name 'logback-classic*.jar' | awk -F'zabbix_java/lib/' '{print $2}') + export ZJ_JarFile_logback_core=$(find /usr/local/sbin/zabbix_java/ -name 'logback-core*.jar' | awk -F'zabbix_java/lib/' '{print $2}') + export ZJ_JarFile_slf4j_api=$(find /usr/local/sbin/zabbix_java/ -name 'slf4j-api*.jar' | awk -F'zabbix_java/lib/' '{print $2}') +fi + +if ! $ZP_enabled; then + # Zabbix proxy disabled + rm -rf /etc/supervisor.d/zabbix-proxy.conf +else + # Zabbix proxy configuration + if [ -f /etc/custom-config/zabbix_proxy.conf ]; then + rm -rf /usr/local/etc/zabbix_proxy.conf + cp /etc/custom-config/zabbix_proxy.conf /usr/local/etc/ + FZP_DBPassword=$(grep ^DBPassword= /etc/custom-config/zabbix_proxy.conf | awk -F= '{print $2}') + if [ ! -z "$FZP_DBPassword" ]; then + export ZP_DBPassword=$FZP_DBPassword + fi + FZP_DBUser=$(grep ^DBUser= /etc/custom-config/zabbix_proxy.conf | awk -F= '{print $2}') + if [ ! -z "$FZP_DBUser" ]; then + export ZP_DBUser=$FZP_DBUser + fi + FZP_DBHost=$(grep ^DBHost= /etc/custom-config/zabbix_proxy.conf | awk -F= '{print $2}') + if [ ! -z "$FZP_DBHost" ]; then + export ZP_DBHost=$FZP_DBHost + fi + FZP_DBPort=$(grep ^DBPort= /etc/custom-config/zabbix_proxy.conf | awk -F= '{print $2}') + if [ ! -z "$FZP_DBPort" ]; then + export ZP_DBPort=$FZP_DBPort + fi + FZP_DBName=$(grep ^DBName= /etc/custom-config/zabbix_proxy.conf | awk -F= '{print $2}') + if [ ! -z "$FZP_DBName" ]; then + export ZP_DBName=$FZP_DBName + fi + else + > /usr/local/etc/zabbix_proxy.conf + for i in $( printenv | grep ^ZP_ | grep -v '^ZP_enabled' | awk -F'=' '{print $1}' | sort -rn ); do + reg=$(echo ${i} | sed 's|^ZP_||' | sed -E "s/_[0-9]+$//") + val=$(echo ${!i}) + echo "${reg}=${val}" >> /usr/local/etc/zabbix_proxy.conf + done + fi + # wait 120sec for DB server initialization + retry=24 + log "Waiting for database server" + until mysql -u ${ZP_DBUser} -p${ZP_DBPassword} -h ${ZP_DBHost} -P ${ZP_DBPort} -e "exit" &>/dev/null + do + log "Waiting for database server, it's still not available" + retry=`expr $retry - 1` + if [ $retry -eq 0 ]; then + error "Database server is not available!" + exit 1 + fi + sleep 5 + done + log "Database server is available" + log "Checking if proxy database exists or SQL import is required" + if ! mysql -u ${ZP_DBUser} -p${ZP_DBPassword} -h ${ZP_DBHost} -P ${ZP_DBPort} -e "use ${ZP_DBName};" &>/dev/null; then + warning "Zabbix proxy database doesn't exist. Installing and importing default settings" + log `create_proxy_db` + log "Proxy database and user created, importing default SQL" + log `import_zabbix_proxy_db` + log "Import finished, starting" + else + log "Zabbix proxy database exists, starting proxy" + fi +fi + +if ! $SNMPTRAP_enabled; then + # SNMP trap process is disabled + rm -rf /etc/supervisor.d/snmptrapd.conf + rm -rf /etc/logrotate.d/zabbix-traps +fi + +# Zabbix version detection +export ZABBIX_VERSION_FULL=$(zabbix_server -V | grep "(Zabbix)" | awk '{print $3" "$4}') + +log "Starting Zabbix version $ZABBIX_VERSION_FULL" diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/config/pyzabbix.py b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/config/pyzabbix.py new file mode 100644 index 0000000..e97fbb4 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/config/pyzabbix.py @@ -0,0 +1,6 @@ +from zabbix.api import ZabbixAPI +zapi = ZabbixAPI(url='http://localhost/', user='Admin', password='zabbix') +hosts = zapi.host.getobjects(status=1) +for host in hosts: + print 'Enabling host: %s' % host['name'] + zapi.host.update(hostid=host['hostid'],status=0) diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/default.conf b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/default.conf new file mode 100644 index 0000000..84cf63d --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/default.conf @@ -0,0 +1,12 @@ +server { + listen 80 default; + root /usr/local/src/zabbix/frontends/php; + index index.php index.html; + + include /etc/nginx/conf.d/default-*.conf; + include /data/conf/nginx/conf.d/default-*.conf; + + # PHP backend is not in the default-*.conf file set, + # as some vhost might not want to include it. + include /etc/nginx/conf.d/php-location.conf; +} \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/ssl-nginx.conf b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/ssl-nginx.conf new file mode 100644 index 0000000..c3d14f9 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/nginx/hosts.d/ssl-nginx.conf @@ -0,0 +1,41 @@ +server { + listen 443 ssl http2; + listen [::]:443 ssl http2; + + # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate + ssl_certificate /etc/nginx/ssl/dummy.crt; + ssl_certificate_key /etc/nginx/ssl/dummy.key; + ssl_session_timeout 1d; + ssl_session_cache shared:SSL:50m; + ssl_session_tickets off; + + + # modern configuration. tweak to your needs. + ssl_protocols TLSv1.2; + ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256'; + ssl_prefer_server_ciphers on; + + # HSTS caching header + #add_header Strict-Transport-Security "max-age=31536000;"; + + # OCSP Stapling --- + # fetch OCSP records from URL in ssl_certificate and cache them + ssl_stapling on; + ssl_stapling_verify on; + + ## verify chain of trust of OCSP response using Root CA and Intermediate certs + #ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates; + + #resolver ; + + # Zabbix/PHP config + root /usr/local/src/zabbix/frontends/php; + index index.php index.html; + + include /etc/nginx/conf.d/default-*.conf; + include /data/conf/nginx/conf.d/default-*.conf; + + # PHP backend is not in the default-*.conf file set, + # as some vhost might not want to include it. + include /etc/nginx/conf.d/php-location.conf; +} diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/php.d/zz-zabbix.ini b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/php.d/zz-zabbix.ini new file mode 100644 index 0000000..8e8cd27 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/php.d/zz-zabbix.ini @@ -0,0 +1,5 @@ +date.timezone = PHP_date_timezone +max_execution_time = PHP_max_execution_time +max_input_time = PHP_max_input_time +memory_limit = PHP_memory_limit +error_reporting = PHP_error_reporting diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptrapd.conf b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptrapd.conf new file mode 100644 index 0000000..813b2c8 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptrapd.conf @@ -0,0 +1,16 @@ +# Ref: ZBXNEXT-747 +authCommunity execute public +# snmptt as standalone app - estimated performance 5 traps/second +traphandle default snmptt + +# TODO log traps directly to zabbix_traps file +#logoption f /tmp/zabbix_traps2.tmp +#format1 %H:%M:%S %Y/%m/%d %N %W %W %B - ZBXTRAP %A %A +#format2 %H:%M:%S %Y/%m/%d %N %W %W %B - ZBXTRAP %A %A + +# TODO +#perl do "/usr/share/snmptt/snmptthandler-embedded"; + +# TODO +# perl do "/usr/local/src/zabbix/misc/snmptrap/zabbix_trap_receiver.pl"; + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.conf b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.conf new file mode 100644 index 0000000..0974cb3 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.conf @@ -0,0 +1,67 @@ +# Default config for Zabbix +EVENT general .* "General event" Normal +FORMAT ZBXTRAP $aA $ar +# +# +# +#EVENT coldStart .1.3.6.1.6.3.1.1.5.1 "Status Events" Normal +#FORMAT Device reinitialized (coldStart) +#EXEC qpage -f TRAP notifygroup1 "Device reinitialized (coldStart)" +#SDESC +#A coldStart trap signifies that the SNMPv2 entity, acting +#in an agent role, is reinitializing itself and that its +#configuration may have been altered. +#EDESC +# +# +# +#EVENT warmStart .1.3.6.1.6.3.1.1.5.2 "Status Events" Normal +#FORMAT Device reinitialized (warmStart) +#EXEC qpage -f TRAP notifygroup1 "Device reinitialized (warmStart)" +#SDESC +#A warmStart trap signifies that the SNMPv2 entity, acting +#in an agent role, is reinitializing itself such that its +#configuration is unaltered. +#EDESC +# +# +# +#EVENT linkDown .1.3.6.1.6.3.1.1.5.3 "Status Events" Normal +#FORMAT Link down on interface $1. Admin state: $2. Operational state: $3 +#EXEC qpage -f TRAP notifygroup1 "Link down on interface $1. Admin state: $2. Operational state: $3" +#SDESC +#A linkDown trap signifies that the SNMP entity, acting in +#an agent role, has detected that the ifOperStatus object for +#one of its communication links is about to enter the down +#state from some other state (but not from the notPresent +#state). This other state is indicated by the included value +#of ifOperStatus. +#EDESC +# +# +# +#EVENT linkUp .1.3.6.1.6.3.1.1.5.4 "Status Events" Normal +#FORMAT Link up on interface $1. Admin state: $2. Operational state: $3 +#EXEC qpage -f TRAP notifygroup1 "Link up on interface $1. Admin state: $2. Operational state: $3" +#SDESC +#A linkUp trap signifies that the SNMP entity, acting in an +#agent role, has detected that the ifOperStatus object for +#one of its communication links left the down state and +#transitioned into some other state (but not into the +#notPresent state). This other state is indicated by the +#included value of ifOperStatus. +#EDESC +# +# +# +#EVENT authenticationFailure .1.3.6.1.6.3.1.1.5.5 "Status Events" Normal +#FORMAT SNMP athentication failure +#EXEC qpage -f TRAP notifygroup1 "SNMP authentication failure" +#SDESC +#An authenticationFailure trap signifies that the SNMPv2 +#entity, acting in an agent role, has received a protocol +#message that is not properly authenticated. While all +#implementations of the SNMPv2 must be capable of generating +#this trap, the snmpEnableAuthenTraps object indicates +#whether this trap will be generated. +#EDESC diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.ini b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.ini new file mode 100644 index 0000000..9dd556c --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/etc/snmp/snmptt.ini @@ -0,0 +1,626 @@ +# +# SNMPTT v1.4beta2 Configuration File +# +# Linux / Unix +# + +[General] +# Name of this system for $H variable. If blank, system name will be the computer's +# hostname via Sys::Hostname. +snmptt_system_name = + +# Set to either 'standalone' or 'daemon' +# standalone: snmptt called from snmptrapd.conf +# daemon: snmptrapd.conf calls snmptthandler +# Ignored by Windows. See documentation +mode = standalone + +# Set to 1 to allow multiple trap definitions to be executed for the same trap. +# Set to 0 to have it stop after the first match. +# This option should normally be set to 1. See the section 'SNMPTT.CONF Configuration +# file Notes' in the SNMPTT documentation for more information. +# Note: Wildcard matches are only matched if there are NO exact matches. This takes +# into consideration the NODES list. Therefore, if there is a matching trap, but +# the NODES list prevents it from being considered a match, the wildcard entry will +# only be used if there are no other exact matches. +multiple_event = 1 + +# SNMPTRAPD passes the IP address of device sending the trap, and the IP address of the +# actual SNMP agent. These addresses could differ if the trap was sent on behalf of another +# device (relay, proxy etc). +# If DNS is enabled, the agent IP address is converted to a host name using a DNS lookup +# (which includes the local hosts file, depending on how the OS is configured). This name +# will be used for: NODES entry matches, hostname field in logged traps (file / database), +# and the $A variable. Host names on the NODES line will be resolved and the IP address +# will then be used for comparing. +# Set to 0 to disable DNS resolution +# Set to 1 to enable DNS resolution +dns_enable = 0 + +# Set to 0 to enable the use of FQDN (Fully Qualified Domain Names). If a host name is +# passed to SNMPTT that contains a domain name, it will not be altered in any way by +# SNMPTT. This also affects resolve_value_ip_addresses. +# Set to 1 to have SNMPTT strip the domain name from the host name passed to it. For +# example, server01.domain.com would be changed to server01 +# Set to 2 to have SNMPTT strip the domain name from the host name passed to it +# based on the list of domains in strip_domain_list +strip_domain = 0 + +# List of domain names that should be stripped when strip_domain is set to 2. +# List can contain one or more domains. For example, if the FQDN of a host is +# server01.city.domain.com and the list contains domain.com, the 'host' will be +# set as server01.city. +strip_domain_list = < diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/logback.xml b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/logback.xml new file mode 100644 index 0000000..87e3ddc --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/logback.xml @@ -0,0 +1,11 @@ + + + System.err + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/web/zabbix.conf.php b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/web/zabbix.conf.php new file mode 100644 index 0000000..18833ea --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/web/zabbix.conf.php @@ -0,0 +1,20 @@ + diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_agentd.conf b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_agentd.conf new file mode 100644 index 0000000..64b0625 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_agentd.conf @@ -0,0 +1,8 @@ +# This is a configuration file for Zabbix agent daemon (Unix) +# To get more information about Zabbix, visit http://www.zabbix.com + +# Specify value by using environment variables with prefix ZA_ +# For example: ZA_AllowRoot=1 means AllowRoot=1 for zabbix-agent +# If you don't specify envirotnment variable, then default value from Dockerfile +# will be used, or default Zabbix setting value will be used. See: +# https://www.zabbix.com/documentation/3.0/manual/appendix/config/zabbix_agentd diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_java_gateway.conf b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_java_gateway.conf new file mode 100644 index 0000000..99b2153 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_java_gateway.conf @@ -0,0 +1,2 @@ +LISTEN_IP="0.0.0.0" +PID_FILE="/var/run/zabbix_java.pid" diff --git a/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_server.conf b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_server.conf new file mode 100644 index 0000000..0b76a94 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/container-files-zabbix/usr/local/etc/zabbix_server.conf @@ -0,0 +1,9 @@ +# This is a configuration file for Zabbix Server process +# To get more information about Zabbix, +# visit http://www.zabbix.com + +# Specify value by using environment variables with prefix ZS_ +# For example: ZS_AllowRoot=1 means AllowRoot=1 for zabbix-server +# If you don't specify envirotnment variable, then default value from Dockerfile +# will be used, or default Zabbix setting value will be used. See: +# https://www.zabbix.com/documentation/3.0/manual/appendix/config/zabbix_server \ No newline at end of file diff --git a/Dockerfile/dockbix-xxl-4.2/docker-compose-v2.yml b/Dockerfile/dockbix-xxl-4.2/docker-compose-v2.yml new file mode 100644 index 0000000..f712b1b --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/docker-compose-v2.yml @@ -0,0 +1,31 @@ +version: '2' +services: + zabbix-db: + image: monitoringartist/zabbix-db-mariadb + volumes: + - zabbix-db-storage:/var/lib/mysql + - backups:/backups + - /etc/localtime:/etc/localtime:ro + environment: + - MARIADB_USER=zabbix + - MARIADB_PASS=my_password + zabbix-server: + image: monitoringartist/dockbix-xxl:latest + depends_on: + - zabbix-db + ports: + - "80:80" + - "10051:10051" + volumes: + - /etc/localtime:/etc/localtime:ro + links: + - zabbix-db:zabbix.db + environment: + - ZS_DBHost=zabbix.db + - ZS_DBUser=zabbix + - ZS_DBPassword=my_password +volumes: + zabbix-db-storage: + driver: local + backups: + driver: local diff --git a/Dockerfile/dockbix-xxl-4.2/docker-compose.yml b/Dockerfile/dockbix-xxl-4.2/docker-compose.yml new file mode 100644 index 0000000..245f774 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/docker-compose.yml @@ -0,0 +1,29 @@ +zabbix-db-storage: + image: busybox:latest + volumes: + - /var/lib/mysql + +zabbix-db: + image: monitoringartist/zabbix-db-mariadb + volumes: + - /backups:/backups + - /etc/localtime:/etc/localtime:ro + volumes_from: + - zabbix-db-storage + environment: + - MARIADB_USER=zabbix + - MARIADB_PASS=my_password + +zabbix-server: + image: monitoringartist/dockbix-xxl:latest + ports: + - "80:80" + - "10051:10051" + volumes: + - /etc/localtime:/etc/localtime:ro + links: + - zabbix-db:zabbix.db + environment: + - ZS_DBHost=zabbix.db + - ZS_DBUser=zabbix + - ZS_DBPassword=my_password diff --git a/Dockerfile/dockbix-xxl-4.2/retag.sh b/Dockerfile/dockbix-xxl-4.2/retag.sh new file mode 100755 index 0000000..0aedb82 --- /dev/null +++ b/Dockerfile/dockbix-xxl-4.2/retag.sh @@ -0,0 +1,46 @@ +#!/bin/bash +# use on master branch and retag also older tags + +# delete all current tags +git fetch --tags --force +tags=() +for t in `git tag` +do + if [[ "$t" != 4.0* ]]; then + continue + fi + echo "Deleting tag $t" + git tag -d $t + git push origin :refs/tags/$t + tags=("${tags[@]}" "$t") +done +git push origin master +git push origin --tags + +# create tags from the list +tags=('4.0.0' '4.0.1' '4.0.2' '4.0.3' '4.0.4' '4.0.5' '4.0.6'); +for t in "${tags[@]}" +do + echo "Creating tag $t" + git checkout master + sed -i -e "s#^[[:space:]]*ZABBIX_VERSION=.*# ZABBIX_VERSION=tags/$t \\\#" Dockerfile + sleep 5 + git add Dockerfile + sleep 5 + git commit -m "Tag $t" + sleep 5 + git tag -a $t -m "Tag $t" + sleep 5 + last=$t +done +git push origin master +git push origin --tags + +# master is the latest stable tag +git checkout master +sed -i -e "s#^[[:space:]]*ZABBIX_VERSION=.*# ZABBIX_VERSION=tags/4.0.6 \\\#" Dockerfile +sleep 5 +git add Dockerfile +sleep 5 +git commit -m "Master = the latest stable tag" +git push origin master