mirror of
https://github.com/Cacti/cacti.git
synced 2026-10-30 00:26:50 +09:00
* feat(auth): rename User Domains to Login Providers Collapses user_domains/user_domains_ldap into a single login_providers table with a JSON parameters column, migrated in place during the 1.3.0 upgrade. Renames the admin page, menu, breadcrumbs, and help links to match. * feat(auth): rework login providers as Cacti\Auth classes Introduces LoginProviderInterface with credential (LDAP/AD) and redirect (SAML2/OpenID) flavors, replacing the procedural domains_login_process()/domains_ldap_*() functions. Adds blank-field group membership gating shared by every provider type. * feat(auth): add SAML2 and OpenID Connect login providers Adds onelogin/php-saml and firebase/php-jwt, a new cacti_http() SSRF-hardened outbound request helper for every OpenID discovery/token/JWKS call, and login_sso.php to handle the redirect-based SSO flow. Login page now shows a button per enabled SAML2/OpenID provider, and per-provider auth cookie opt-out is enforced on both the password and SSO login paths. * chore(i18n): regenerate cacti.pot * feat(auth): add Local and Basic auth as Cacti\Auth providers LocalAuthLoginProvider (CredentialLoginProviderInterface) and BasicAuthLoginProvider (new PreAuthenticatedLoginProviderInterface, since Basic Auth has no password for Cacti to check) are thin adapters over the existing local_auth_login_process()/basic_auth_login_process() functions, which are left untouched to avoid disturbing their regression-tested lockout/timing/rehash behavior. * feat(auth): move local password verification into LocalAuthLoginProvider secpass_login_process() and local_auth_login_process() are retired; their lockout, constant-time verification, forced-password-change, and rehash-on-login logic now live end to end in the class (verifyCredential/enforcePasswordPolicy/rehashIfNeeded). secpass_check_pass() stays a shared lib/auth.php function since password change/reset/user_admin also call it outside any login flow. Local auth still has no login_providers row: isEnabled() is always true and it cannot be disabled or deleted. * feat(auth): move Login Provider CRUD into Cacti\Auth classes AbstractLoginProvider gains static deleteById()/enableById()/disableById()/makeDefaultById()/persist(); each concrete provider owns its own collectParameters(), dispatched via LoginProviderFactory. login_providers.php's form_save()/form_actions() call these instead of doing raw SQL, and the retired provider_remove()/provider_disable()/provider_enable()/provider_default()/provider_collect_parameters() procedural functions are gone. Local/Basic auth are unaffected: they never extend AbstractLoginProvider, so they structurally cannot expose delete/disable. * fix(auth): address Copilot review findings on SSO/SAML/OIDC security Fixes callback/ACS/SLS/metadata URLs that used the raw provider id instead of the login realm (broke every SSO login), adds InResponseTo correlation for SAML and sub/azp validation for OIDC, requires HTTPS for OIDC discovery/endpoints, pins cacti_http() connections against DNS rebinding via CURLOPT_RESOLVE, exempts login_sso.php from the authenticated-page redirect guard and gates it on auth_method, wraps provider dispatch in a exception boundary, adds a dedicated SAML SLO path instead of routing it through login completion, makes remember-me an explicit opt-in for SSO, fixes disabled/deleted providers not revoking existing auth cookies, restricts the default-realm action to LDAP/AD, and fixes the 1.3.0 migration silently enabling group enforcement for installs that had it off. Also updates the E2E seed script for the login_providers schema. * chore(auth): refresh CI security baselines and document no-op validation Regenerate the sink inventory baseline for the new/renamed lib/Auth/* and login_providers.php files, and add '// no-validation:' comments on the intentionally-unconstrained admin/free-text/secret fields (LDAP DNs/filters, SAML certs/keys, OIDC client credentials, provider display fields) flagged by the validator constraint ratchet. Refreshes the validator baseline to drop the deleted user_domains.php entries. * refactor(ldap): remove dead DB-lookup path from Ldap::__construct The domain_id>0 branch duplicated the JSON-parameter-to-property mapping already owned by LdapLoginProvider::buildLdap(), and nothing constructs Ldap with a real id anymore (all call sites pass 0). Drop the parameter and the branch so Ldap stays a pure connection/protocol class with no DB coupling. Also fixes a latent bug: group_require is a typed bool property, but LdapLoginProvider::authenticate() assigned it an int (1/0) from a strict_types=1 file, which throws a TypeError on every LDAP/AD login attempt. Assign a real bool instead. * fix(auth): fix LDAP login, upgrade ordering, and hardening guard failures LdapLoginProvider compared LdapError::GetErrorDetails()'s int error_num against the string '0' with strict equality, so it never matched and every LDAP/AD login was rejected regardless of valid credentials. Compare against int 0 instead. install/upgrades/1_3_0.php called login_providers_convert_1_3_0() (which reads and then drops user_domains/user_domains_ldap) before the pre-existing legacy ALTER TABLE statements that add the debug/network_timeout/bind_timeout columns those reads depend on, so upgrades failed once the tables were already gone. Moved the call to run after those ALTERs. OpenIdLoginProvider::complete() read state/code from raw \ instead of gnrv(), tripping the hardening pattern guard; switched to the request helper. * style(auth): apply php-cs-fixer formatting and normalize line endings to LF Runs php-cs-fixer across the new lib/Auth/* classes, login_providers.php, login_sso.php, and the other touched files, fixing indentation/alignment/docblock style to match project convention. Also normalizes several files that had picked up CRLF line endings back to the LF the project's .php-cs-fixer.php config (setLineEnding) and the rest of the tracked tree actually use. * fix(auth): address second Copilot review round (9 high/medium findings) - Make login_providers_convert_1_3_0() resumable: CREATE TABLE IF NOT EXISTS and INSERT ... ON DUPLICATE KEY UPDATE so an interrupted upgrade can be re-run instead of leaving a half-migrated, unrecoverable table. - SamlLoginProvider::complete() now fails closed when no saved AuthnRequest ID exists instead of passing null to processResponse(), which skipped InResponseTo validation and accepted unsolicited IdP-initiated assertions. - LoginResult gains an isCredentialFailure flag; only a genuine wrong-password LDAP bind (LdapError::Failure) counts toward the lockout counter now, not connection errors or group-membership denials. - Fixed button_label/debug being read from the JSON parameters column in OpenIdLoginProvider/SamlLoginProvider/LdapLoginProvider when they are actually top-level login_providers columns; AbstractLoginProvider now hydrates and exposes both. - Removed SamlLoginProvider's wantMessagesSigned, which silently required the outer SAML message (not just the assertion) to be signed, rejecting IdPs that only sign the assertion as the UI promises. - Added getTemplateUserId() to CredentialLoginProviderInterface and implemented it on LocalAuthLoginProvider so the contract (not just incidental AbstractLoginProvider inheritance) guarantees the method lib/auth.php calls. - cacti_http()'s CURLOPT_RESOLVE entries now bracket IPv6 literals correctly, and safe-IP validation strips parse_url()'s brackets before checking, fixing IPv6 target pinning. - login_providers.php's type dropdown now swaps the Full Name attribute default (cn/displayName) on an actual user-driven type change, not on page load, so a new Active Directory provider does not silently save the LDAP default. - Extracted auth_apply_group_login_opts() and call it from both auth_login.php and login_sso.php, so SSO logins honor a user's group-derived login_opts the same way password logins already do. * fix(auth): fix PHPStan level 8 errors and pest harness stub drift Test harness fix: the LoginProvidersLoginRealmValidationTest stub LoginResult class was missing the isCredentialFailure property added to the real class, causing 'Undefined property' warnings that broke the harness's JSON output. Added the property and set it on the simulated bad-password failure. PHPStan (48+ errors, all newly introduced by this branch's rewrite, never actually verified until now): narrowed db_fetch_row_prepared()/db_fetch_assoc()'s array|bool (including bare true, which survives a '?: []' short-circuit - fixed with explicit is_array() checks instead) at every call site across auth_login.php, login_sso.php, lib/auth.php, lib/Auth/LocalAuthLoginProvider.php, lib/Auth/LoginProviderFactory.php, and install/upgrades/1_3_0.php. Fixed OpenIdLoginProvider::discover()'s return shape to match its declared docblock instead of returning the raw decoded JSON. Fixed lib/functions.php's cacti_http() to narrow curl_exec()'s string|bool result with is_string() (not ===false, which still leaves 'true' as a residual type) and guard / as non-empty for curl_setopt_array()'s stubs. Fixed a real bug in SamlLoginProvider::processLogout(): processSLO(true) was passing 'true' as \ (the first parameter) instead of \ (the fifth), so it always redirected/exited internally with the default \=false, making Cacti's own logout.php never regain control. Now calls processSLO(keepLocalSession: true, stay: true) and is typed ': never' to match; login_sso.php's now-genuinely-unreachable break statements after processLogout()/initiate() are removed. Fixed login_providers.php passing a expression (not a variable) to inject_form_variables()'s by-reference parameter. Verified: PHPStan analyse clean (0 errors), full Pest Unit/Security suite passes (128 tests), hardening guard/sink inventory/validator ratchet all still clean. * fix(auth): fix ambiguous column and array+bool crash in user_log filter The user filter dropdown query selected a bare 'id' column after joining user_auth and login_providers, which is ambiguous now that login_providers also has an id column (unlike the old user_domains.domain_id) - MySQL rejected the query outright. Qualified as ua.id. Also narrow db_fetch_assoc()'s array|bool result before the \ + \ + \ merge, which was throwing a TypeError whenever the query failed instead of surfacing the real SQL error. * fix(auth): address third Copilot review round (5 findings + tests) - AbstractLoginProvider::persist() now disables the template account for every provider type; SAML2/OpenID also copy it via user_copy() in login_sso_complete() and were left directly usable as a local login. - cacti_http_resolve_safe_ips() now detects IPv4-mapped IPv6 literals (::ffff:0:0/96) via inet_pton() and validates the embedded IPv4 address, closing an SSRF bypass via e.g. ::ffff:169.254.169.254. - login_providers_convert_1_3_0() now tracks db_install_execute()'s status for every row and only drops the legacy user_domains/user_domains_ldap tables once every row (and the final row count) is confirmed migrated. - Ldap::Getcn() now looks up ldap_get_entries()'s always-lowercased attribute keys case-insensitively while still storing the result under the originally-requested key, fixing AD's displayName (and any other mixed-case configured attribute) always resolving to a blank full name. - SamlLoginProvider::processLogout() now redirects to the LogoutResponse URL processSLO() returns for a LogoutRequest (stay:true), instead of discarding it and always redirecting to Cacti's own logout page - federated logout was never actually acknowledged to the IdP. - Added tests/Unit/Security/Auth/OpenIdLoginProviderTest.php (13 tests) covering verifyIdToken() signature/issuer/audience/azp/nonce validation, discover()'s HTTPS enforcement, and complete()'s callback-state and UserInfo-subject-matching checks, against a locally-generated RSA keypair/JWKS. - Regenerated the sink inventory baseline for the new header_redirect call in SamlLoginProvider::processLogout(). Verified: PHPStan clean, full Pest Security/Auth suite passes (830 tests including the 13 new ones), php-cs-fixer/hardening-guard/sink-inventory/validator-ratchet all clean.
3130 lines
91 KiB
PHP
3130 lines
91 KiB
PHP
<?php
|
|
/*
|
|
+-------------------------------------------------------------------------+
|
|
| Copyright (C) 2004-2026 The Cacti Group |
|
|
| |
|
|
| This program is free software; you can redistribute it and/or |
|
|
| modify it under the terms of the GNU General Public License |
|
|
| as published by the Free Software Foundation; either version 2 |
|
|
| of the License, or (at your option) any later version. |
|
|
| |
|
|
| This program is distributed in the hope that it will be useful, |
|
|
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
| GNU General Public License for more details. |
|
|
+-------------------------------------------------------------------------+
|
|
| Cacti: The Complete RRDtool-based Graphing Solution |
|
|
+-------------------------------------------------------------------------+
|
|
| This code is designed, written, and maintained by the Cacti Group. See |
|
|
| about.php and/or the AUTHORS file for specific developer information. |
|
|
+-------------------------------------------------------------------------+
|
|
| http://www.cacti.net/ |
|
|
+-------------------------------------------------------------------------+
|
|
*/
|
|
|
|
global $menu, $menu_glyphs, $graph_sources;
|
|
|
|
/* Array of Cacti versions and template hash codes
|
|
Remember to add every version here. */
|
|
$cacti_version_codes = [
|
|
'0.8' => 'NaN',
|
|
'0.8.1' => 'NaN',
|
|
'0.8.2' => 'NaN',
|
|
'0.8.2a' => 'NaN',
|
|
'0.8.3' => 'NaN',
|
|
'0.8.3a' => 'NaN',
|
|
'0.8.4' => '0000',
|
|
'0.8.5' => '0001',
|
|
'0.8.5a' => '0002',
|
|
'0.8.6' => '0003',
|
|
'0.8.6a' => '0004',
|
|
'0.8.6b' => '0005',
|
|
'0.8.6c' => '0006',
|
|
'0.8.6d' => '0007',
|
|
'0.8.6e' => '0008',
|
|
'0.8.6f' => '0009',
|
|
'0.8.6g' => '0010',
|
|
'0.8.6h' => '0011',
|
|
'0.8.6i' => '0012',
|
|
'0.8.6j' => '0013',
|
|
'0.8.7' => '0014',
|
|
'0.8.7a' => '0015',
|
|
'0.8.7b' => '0016',
|
|
'0.8.7c' => '0017',
|
|
'0.8.7d' => '0018',
|
|
'0.8.7e' => '0019',
|
|
'0.8.7f' => '0020',
|
|
'0.8.7g' => '0021',
|
|
'0.8.7h' => '0022',
|
|
'0.8.7i' => '0023',
|
|
'0.8.8' => '0024',
|
|
'0.8.8a' => '0024',
|
|
'0.8.8b' => '0024',
|
|
'0.8.8c' => '0025',
|
|
'0.8.8d' => '0025',
|
|
'0.8.8e' => '0025',
|
|
'0.8.8f' => '0025',
|
|
'0.8.8g' => '0025',
|
|
'0.8.8h' => '0025',
|
|
'1.0.0' => '0100',
|
|
'1.0.1' => '0100',
|
|
'1.0.2' => '0100',
|
|
'1.0.3' => '0100',
|
|
'1.0.4' => '0100',
|
|
'1.0.5' => '0100',
|
|
'1.0.6' => '0100',
|
|
'1.1.0' => '0100',
|
|
'1.1.1' => '0100',
|
|
'1.1.2' => '0100',
|
|
'1.1.3' => '0100',
|
|
'1.1.4' => '0100',
|
|
'1.1.5' => '0100',
|
|
'1.1.6' => '0101',
|
|
'1.1.7' => '0101',
|
|
'1.1.8' => '0101',
|
|
'1.1.9' => '0101',
|
|
'1.1.10' => '0101',
|
|
'1.1.11' => '0101',
|
|
'1.1.12' => '0101',
|
|
'1.1.13' => '0101',
|
|
'1.1.14' => '0101',
|
|
'1.1.15' => '0101',
|
|
'1.1.16' => '0101',
|
|
'1.1.17' => '0101',
|
|
'1.1.18' => '0101',
|
|
'1.1.19' => '0101',
|
|
'1.1.20' => '0101',
|
|
'1.1.21' => '0101',
|
|
'1.1.22' => '0101',
|
|
'1.1.23' => '0101',
|
|
'1.1.24' => '0101',
|
|
'1.1.25' => '0101',
|
|
'1.1.26' => '0101',
|
|
'1.1.27' => '0101',
|
|
'1.1.28' => '0101',
|
|
'1.1.29' => '0101',
|
|
'1.1.30' => '0101',
|
|
'1.1.31' => '0101',
|
|
'1.1.32' => '0101',
|
|
'1.1.33' => '0101',
|
|
'1.1.34' => '0101',
|
|
'1.1.35' => '0101',
|
|
'1.1.36' => '0101',
|
|
'1.1.37' => '0101',
|
|
'1.1.38' => '0101',
|
|
'1.2.0' => '0101',
|
|
'1.2.1' => '0101',
|
|
'1.2.2' => '0101',
|
|
'1.2.3' => '0102',
|
|
'1.2.4' => '0102',
|
|
'1.2.5' => '0102',
|
|
'1.2.6' => '0102',
|
|
'1.2.7' => '0102',
|
|
'1.2.8' => '0102',
|
|
'1.2.9' => '0102',
|
|
'1.2.10' => '0102',
|
|
'1.2.11' => '0102',
|
|
'1.2.12' => '0102',
|
|
'1.2.13' => '0102',
|
|
'1.2.14' => '0102',
|
|
'1.2.15' => '0102',
|
|
'1.2.16' => '0102',
|
|
'1.2.17' => '0102',
|
|
'1.2.18' => '0102',
|
|
'1.2.19' => '0103',
|
|
'1.2.20' => '0103',
|
|
'1.2.21' => '0103',
|
|
'1.2.22' => '0103',
|
|
'1.2.23' => '0103',
|
|
'1.2.24' => '0103',
|
|
'1.2.25' => '0103',
|
|
'1.2.26' => '0103',
|
|
'1.2.27' => '0103',
|
|
'1.2.28' => '0103',
|
|
'1.2.29' => '0103',
|
|
'1.2.30' => '0103',
|
|
'1.2.31' => '0103',
|
|
'1.3.0' => '0104',
|
|
];
|
|
|
|
$messages = [
|
|
1 => [
|
|
'message' => __('Save Successful.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
2 => [
|
|
'message' => __('Save Failed.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
3 => [
|
|
'message' => __('Save Failed due to field input errors (Check red fields).'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
4 => [
|
|
'message' => __('Passwords do not match, please retype.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
5 => [
|
|
'message' => __('You must select at least one field.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
6 => [
|
|
'message' => __('You must have built in user authentication turned on to use this feature.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
7 => [
|
|
'message' => __('XML parse error.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
8 => [
|
|
'message' => __('The directory highlighted does not exist. Please enter a valid directory.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
9 => [
|
|
'message' => __('The Cacti log file must have the extension \'.log\''),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
10 => [
|
|
'message' => __('Data Input for method does not appear to be whitelisted.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
11 => [
|
|
'message' => __('Data Source does not exist.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
12 => [
|
|
'message' => __('Username already in use.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
13 => [
|
|
'message' => __('The SNMP v3 Privacy Passphrases do not match'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
14 => [
|
|
'message' => __('The SNMP v3 Authentication Passphrases do not match'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
15 => [
|
|
'message' => __('XML: Cacti version does not exist.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
16 => [
|
|
'message' => __('XML: Hash version does not exist.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
17 => [
|
|
'message' => __('XML: Generated with a newer version of Cacti.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
18 => [
|
|
'message' => __('XML: Cannot locate type code.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
19 => [
|
|
'message' => __('Username already exists.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
20 => [
|
|
'message' => __('Username change not permitted for designated template or guest user.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
21 => [
|
|
'message' => __('User delete not permitted for designated template or guest user.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
22 => [
|
|
'message' => __('User delete not permitted for designated graph export user.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
23 => [
|
|
'message' => __('Data Template includes deleted Data Source Profile. Please resave the Data Template with an existing Data Source Profile.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
24 => [
|
|
'message' => __('Graph Template includes deleted GPrint Prefix. Please run database repair script to identify and/or correct.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
25 => [
|
|
'message' => __('Graph Template includes deleted CDEFs. Please run database repair script to identify and/or correct.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
26 => [
|
|
'message' => __('Graph Template includes deleted Data Input Method. Please run database repair script to identify.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
27 => [
|
|
'message' => __('Data Template not found during Export. Please run database repair script to identify.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
28 => [
|
|
'message' => __('Device Template not found during Export. Please run database repair script to identify.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
29 => [
|
|
'message' => __('Data Query not found during Export. Please run database repair script to identify.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
30 => [
|
|
'message' => __('Graph Template not found during Export. Please run database repair script to identify.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
31 => [
|
|
'message' => __('Graph not found. Either it has been deleted or your database needs repair.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
32 => [
|
|
'message' => __('SNMPv3 Auth Passphrases must be 8 characters or greater.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
33 => [
|
|
'message' => __('Some Graphs not updated. Unable to change device for Data Query based Graphs.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
34 => [
|
|
'message' => __('Unable to change device for Data Query based Graphs.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
35 => [
|
|
'message' => __('Some settings not saved. Check messages below. Check red fields for errors.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
36 => [
|
|
'message' => __('The file highlighted does not exist. Please enter a valid file name.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
37 => [
|
|
'message' => __('All User Settings have been returned to their default values.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
38 => [
|
|
'message' => __('Suggested Field Name was not entered. Please enter a field name and try again.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
39 => [
|
|
'message' => __('Suggested Value was not entered. Please enter a suggested value and try again.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
40 => [
|
|
'message' => __('You must select at least one object from the list.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
41 => [
|
|
'message' => __('Device Template updated. Remember to Sync Devices to push all changes to Devices that use this Device Template.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
42 => [
|
|
'message' => __('Save Successful. Settings replicated to Remote Data Collectors.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
43 => [
|
|
'message' => __('Save Failed. Minimum Values must be less than Maximum Value.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
44 => [
|
|
'message' => __('Unable to change password. User account not found.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
45 => [
|
|
'message' => __('Data Source Item field holds a value the Data Source form would reject.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'input_save_wo_ds' => [
|
|
'message' => __('Data Input Saved. You must update the Data Templates referencing this Data Input Method before creating Graphs or Data Sources.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'input_save_w_ds' => [
|
|
'message' => __('Data Input Saved. You must update the Data Templates referencing this Data Input Method before the Data Collectors will start using any new or modified Data Input - Input Fields.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'input_field_save_wo_ds' => [
|
|
'message' => __('Data Input Field Saved. You must update the Data Templates referencing this Data Input Method before creating Graphs or Data Sources.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'input_field_save_w_ds' => [
|
|
'message' => __('Data Input Field Saved. You must update the Data Templates referencing this Data Input Method before the Data Collectors will start using any new or modified Data Input - Input Fields.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'clog_invalid' => [
|
|
'message' => __('Log file specified is not a Cacti log or archive file.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'clog_remove' => [
|
|
'message' => __('Log file specified was Cacti archive file and was removed.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'clog_purged' => [
|
|
'message' => __('Cacti log purged successfully'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'password_change' => [
|
|
'message' => __('If you force a password change, you must also allow the user to change their password.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'nopassword' => [
|
|
'message' => __('You are not allowed to change your password.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'nopasswordlen' => [
|
|
'message' => __('Unable to determine size of password field, please check permissions of db user'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'nopasswordinc' => [
|
|
'message' => __('Unable to increase size of password field, please check permission of db user'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'nodomainpassword' => [
|
|
'message' => __('LDAP/AD based password change not supported.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'password_success' => [
|
|
'message' => __('Password successfully changed.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'clog_permissions' => [
|
|
'message' => __('Unable to clear log, no write permissions'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'clog_missing' => [
|
|
'message' => __('Unable to clear log, file does not exist'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'csrf_timeout' => [
|
|
'message' => __('CSRF Timeout, refreshing page.'),
|
|
'level' => MESSAGE_LEVEL_CSRF],
|
|
'csrf_ptimeout' => [
|
|
'message' => __('CSRF Timeout occurred due to inactivity, page refreshed.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'mg_mailtime_invalid' => [
|
|
'message' => __('Invalid timestamp. Select timestamp in the future.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'poller_sync' => [
|
|
'message' => __('Data Collector(s) synchronized for offline operation'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'poller_notfound' => [
|
|
'message' => __('Data Collector(s) not found when attempting synchronization'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'poller_noconnect' => [
|
|
'message' => __('Unable to establish MySQL connection with Remote Data Collector.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'poller_nosync' => [
|
|
'message' => __('Data Collector synchronization must be initiated from the main Cacti server.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'poller_nomain' => [
|
|
'message' => __('Synchronization does not include the Central Cacti Database server.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'poller_nodupe' => [
|
|
'message' => __('When saving a Remote Data Collector, the Database Hostname must be unique from all others.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'poller_dbhost' => [
|
|
'message' => __('Your Remote Database Hostname must be something other than \'localhost\' for each Remote Data Collector.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'poller_paths' => [
|
|
'message' => __('Path variables on this page were only saved locally.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'reports_save' => [
|
|
'message' => __('Report Saved'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'reports_save_failed' => [
|
|
'message' => __('Report Save Failed'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'reports_item_save' => [
|
|
'message' => __('Report Item Saved'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'reports_item_save_failed' => [
|
|
'message' => __('Report Item Save Failed'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'reports_graph_not_found' => [
|
|
'message' => __('Graph was not found attempting to Add to Report'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'reports_not_owner' => [
|
|
'message' => __('Unable to Add Graphs. Current user is not owner'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'reports_add_error' => [
|
|
'message' => __('Unable to Add all Graphs. See error message for details.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'reports_no_graph' => [
|
|
'message' => __('You must select at least one Graph to add to a Report.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'reports_graphs_added' => [
|
|
'message' => __('All Graphs have been added to the Report. Duplicate Graphs with the same Timespan were skipped.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'resource_cache_rebuild' => [
|
|
'message' => __('Poller Resource Cache cleared. Main Data Collector will rebuild at the next poller start, and Remote Data Collectors will sync afterwards.'),
|
|
'level' => MESSAGE_LEVEL_INFO],
|
|
'permission_denied' => [
|
|
'message' => __('Permission Denied. You do not have permission to the requested action.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'page_not_defined' => [
|
|
'message' => __('Page is not defined. Therefore, it can not be displayed.'),
|
|
'level' => MESSAGE_LEVEL_ERROR],
|
|
'custom_error' => [
|
|
'message' => __('Unexpected error occurred'),
|
|
'level' => MESSAGE_LEVEL_ERROR]
|
|
];
|
|
|
|
$cdef_operators = [
|
|
1 => '+',
|
|
2 => '-',
|
|
3 => '*',
|
|
4 => '/',
|
|
5 => '%'
|
|
];
|
|
|
|
$cdef_functions = [
|
|
1 => 'SIN',
|
|
2 => 'COS',
|
|
3 => 'LOG',
|
|
4 => 'EXP',
|
|
5 => 'FLOOR',
|
|
6 => 'CEIL',
|
|
7 => 'LT',
|
|
8 => 'LE',
|
|
9 => 'GT',
|
|
10 => 'GE',
|
|
11 => 'EQ',
|
|
12 => 'IF',
|
|
13 => 'MIN',
|
|
14 => 'MAX',
|
|
15 => 'LIMIT',
|
|
16 => 'DUP',
|
|
17 => 'EXC',
|
|
18 => 'POP',
|
|
19 => 'UN',
|
|
20 => 'UNKN',
|
|
21 => 'PREV',
|
|
22 => 'INF',
|
|
23 => 'NEGINF',
|
|
24 => 'NOW',
|
|
25 => 'TIME',
|
|
26 => 'LTIME',
|
|
27 => 'ADDNAN',
|
|
28 => 'TREND',
|
|
29 => 'TRENDNAN',
|
|
30 => 'PREDICT',
|
|
31 => 'PREDICTSIGMA',
|
|
32 => 'PREDICTPERC',
|
|
33 => 'SQRT',
|
|
34 => 'ATAN',
|
|
35 => 'ATAN2',
|
|
36 => 'POW',
|
|
37 => 'ISINF',
|
|
38 => 'MINNAN',
|
|
39 => 'MAXNAN',
|
|
40 => 'DEG2RAD',
|
|
41 => 'RAD2DEG',
|
|
42 => 'ABS',
|
|
43 => 'REV',
|
|
44 => 'SMIN',
|
|
45 => 'SMAX',
|
|
46 => 'MEDIAN',
|
|
47 => 'STDEV',
|
|
48 => 'PERCENT',
|
|
49 => 'COUNT',
|
|
50 => 'STEPWIDTH',
|
|
51 => 'NEWDAY',
|
|
52 => 'NEWWEEK',
|
|
53 => 'NEWMONTH',
|
|
54 => 'NEWYEAR',
|
|
55 => 'DEPTH',
|
|
56 => 'COPY',
|
|
57 => 'INDEX',
|
|
58 => 'ROLL'
|
|
];
|
|
|
|
$phperrors = [
|
|
E_ERROR => 'ERROR',
|
|
E_WARNING => 'WARNING',
|
|
E_PARSE => 'PARSE',
|
|
E_NOTICE => 'NOTICE',
|
|
E_CORE_ERROR => 'CORE_ERROR',
|
|
E_CORE_WARNING => 'CORE_WARNING',
|
|
E_COMPILE_ERROR => 'COMPILE_ERROR',
|
|
E_COMPILE_WARNING => 'COMPILE_WARNING',
|
|
E_USER_ERROR => 'USER_ERROR',
|
|
E_USER_WARNING => 'USER_WARNING',
|
|
E_USER_NOTICE => 'USER_NOTICE',
|
|
E_RECOVERABLE_ERROR => 'RECOVERABLE_ERROR',
|
|
E_DEPRECATED => 'DEPRECATED',
|
|
E_USER_DEPRECATED => 'USER_DEPRECATED',
|
|
E_ALL => 'ALL'
|
|
];
|
|
|
|
if (cacti_version_compare(get_rrdtool_version(), '1.8.0', '>=')) {
|
|
$cdef_functions[] = 'ROUND';
|
|
}
|
|
|
|
$vdef_functions = [
|
|
1 => 'MAXIMUM',
|
|
2 => 'MINIMUM',
|
|
3 => 'AVERAGE',
|
|
4 => 'STDEV',
|
|
5 => 'LAST',
|
|
6 => 'FIRST',
|
|
7 => 'TOTAL',
|
|
8 => 'PERCENT',
|
|
9 => 'PERCENTNAN',
|
|
10 => 'LSLSLOPE',
|
|
11 => 'LSLINT',
|
|
12 => 'LSLCORREL'
|
|
];
|
|
|
|
$vdef_item_types = [
|
|
CVDEF_ITEM_TYPE_FUNCTION => __('Function'),
|
|
CVDEF_ITEM_TYPE_SPEC_DS => __('Special Data Source'),
|
|
CVDEF_ITEM_TYPE_STRING => __('Custom String'),
|
|
];
|
|
|
|
$custom_vdef_data_source_types = [ // this may change as soon as RRDtool supports math in VDEF, until then only reference to CDEF may help
|
|
'CURRENT_DATA_SOURCE' => __('Current Graph Item Data Source'),
|
|
];
|
|
|
|
$input_types = [
|
|
DATA_INPUT_TYPE_SNMP => __('SNMP Get'), // Action 0:
|
|
DATA_INPUT_TYPE_SNMP_QUERY => __('SNMP Query'),
|
|
DATA_INPUT_TYPE_SCRIPT => __('Script/Command'), // Action 1:
|
|
DATA_INPUT_TYPE_SCRIPT_QUERY => __('Script Query'), // Action 1:
|
|
DATA_INPUT_TYPE_PHP_SCRIPT_SERVER => __('Script Server'),
|
|
DATA_INPUT_TYPE_QUERY_SCRIPT_SERVER => __('Script Server Query'),
|
|
DATA_INPUT_TYPE_STREAM => __('Stream Data'),
|
|
DATA_INPUT_TYPE_STREAM_QUERY => __('Stream Data Query')
|
|
];
|
|
|
|
$input_types_script = [
|
|
DATA_INPUT_TYPE_SCRIPT => __('Script/Command'), // Action 1:
|
|
DATA_INPUT_TYPE_PHP_SCRIPT_SERVER => __('Script Server'),
|
|
];
|
|
|
|
$reindex_types = [
|
|
DATA_QUERY_AUTOINDEX_NONE => __('None'),
|
|
DATA_QUERY_AUTOINDEX_BACKWARDS_UPTIME => __('Uptime'),
|
|
DATA_QUERY_AUTOINDEX_INDEX_NUM_CHANGE => __('Index Count'),
|
|
DATA_QUERY_AUTOINDEX_FIELD_VERIFICATION => __('Verify All')
|
|
];
|
|
|
|
$reindex_types_tips = [
|
|
DATA_QUERY_AUTOINDEX_NONE => __('All Re-Indexing will be manual or managed through scripts or Device Automation.'),
|
|
DATA_QUERY_AUTOINDEX_BACKWARDS_UPTIME => __('When the Devices SNMP uptime goes backward, a Re-Index will be performed.'),
|
|
DATA_QUERY_AUTOINDEX_INDEX_NUM_CHANGE => __('When the Data Query index count changes, a Re-Index will be performed.'),
|
|
DATA_QUERY_AUTOINDEX_FIELD_VERIFICATION => __('Every polling cycle, a Re-Index will be performed. Very expensive.')
|
|
];
|
|
|
|
$snmp_query_field_actions = [
|
|
1 => __('SNMP Field Name (Dropdown)'),
|
|
2 => __('SNMP Field Value (From User)'),
|
|
3 => __('SNMP Output Type (Dropdown)')
|
|
];
|
|
|
|
$consolidation_functions = [
|
|
1 => 'AVERAGE',
|
|
2 => 'MIN',
|
|
3 => 'MAX',
|
|
4 => 'LAST'
|
|
];
|
|
|
|
$data_source_types = [
|
|
1 => 'GAUGE',
|
|
2 => 'COUNTER',
|
|
3 => 'DERIVE',
|
|
4 => 'ABSOLUTE',
|
|
5 => 'COMPUTE'
|
|
];
|
|
|
|
if (cacti_version_compare(get_rrdtool_version(), '1.5', '>=')) {
|
|
$data_source_types[6] = 'DCOUNTER';
|
|
$data_source_types[7] = 'DDERIVE';
|
|
}
|
|
|
|
$rrd_font_render_modes = [
|
|
RRD_FONT_RENDER_NORMAL => __('Normal'),
|
|
RRD_FONT_RENDER_LIGHT => __('Light'),
|
|
RRD_FONT_RENDER_MONO => __('Mono'),
|
|
];
|
|
|
|
$rrd_graph_render_modes = [
|
|
RRD_GRAPH_RENDER_NORMAL => __('Normal'),
|
|
RRD_GRAPH_RENDER_MONO => __('Mono'),
|
|
];
|
|
|
|
$rrd_legend_position = [
|
|
RRD_LEGEND_POS_NORTH => __('North'),
|
|
RRD_LEGEND_POS_SOUTH => __('South'),
|
|
RRD_LEGEND_POS_WEST => __('West'),
|
|
RRD_LEGEND_POS_EAST => __('East'),
|
|
];
|
|
|
|
$rrd_textalign = [
|
|
RRD_ALIGN_NONE => __('None'),
|
|
RRD_ALIGN_LEFT => __('Left'),
|
|
RRD_ALIGN_RIGHT => __('Right'),
|
|
RRD_ALIGN_JUSTIFIED => __('Justified'),
|
|
RRD_ALIGN_CENTER => __('Center'),
|
|
];
|
|
|
|
$rrd_legend_direction = [
|
|
RRD_LEGEND_DIR_TOPDOWN => __('Top -> Down'),
|
|
RRD_LEGEND_DIR_BOTTOMUP => __('Bottom -> Up'),
|
|
];
|
|
|
|
$rrd_axis_formatters = [
|
|
'numeric' => __('Numeric'),
|
|
'timestamp' => __('Timestamp'),
|
|
'duration' => __('Duration')
|
|
];
|
|
|
|
$graph_item_types = [
|
|
GRAPH_ITEM_TYPE_COMMENT => 'COMMENT',
|
|
GRAPH_ITEM_TYPE_HRULE => 'HRULE',
|
|
GRAPH_ITEM_TYPE_VRULE => 'VRULE',
|
|
GRAPH_ITEM_TYPE_LINE1 => 'LINE1',
|
|
GRAPH_ITEM_TYPE_LINE2 => 'LINE2',
|
|
GRAPH_ITEM_TYPE_LINE3 => 'LINE3',
|
|
GRAPH_ITEM_TYPE_AREA => 'AREA',
|
|
GRAPH_ITEM_TYPE_STACK => 'AREA:STACK',
|
|
GRAPH_ITEM_TYPE_GPRINT => 'GPRINT',
|
|
GRAPH_ITEM_TYPE_GPRINT_AVERAGE => 'GPRINT:AVERAGE',
|
|
GRAPH_ITEM_TYPE_GPRINT_LAST => 'GPRINT:LAST',
|
|
GRAPH_ITEM_TYPE_GPRINT_MAX => 'GPRINT:MAX',
|
|
GRAPH_ITEM_TYPE_GPRINT_MIN => 'GPRINT:MIN',
|
|
GRAPH_ITEM_TYPE_LEGEND => 'LEGEND',
|
|
GRAPH_ITEM_TYPE_LEGEND_CAMM => 'LEGEND_CAMM',
|
|
GRAPH_ITEM_TYPE_LINESTACK => 'LINE:STACK',
|
|
GRAPH_ITEM_TYPE_TIC => 'TICK',
|
|
GRAPH_ITEM_TYPE_TEXTALIGN => 'TEXTALIGN',
|
|
];
|
|
|
|
asort($graph_item_types);
|
|
|
|
$automation_log_levels = [
|
|
AUTOMATION_LOG_LOW => __('Warnings, Errors, Device and Tree Creation'),
|
|
AUTOMATION_LOG_MEDIUM => __('Low Level plus Graph Creation/Non-Creation Events'),
|
|
AUTOMATION_LOG_HIGH => __('All Events plus Global Log Level Specific Trace Events')
|
|
];
|
|
|
|
$image_types = [
|
|
1 => 'PNG',
|
|
3 => 'SVG'
|
|
];
|
|
|
|
$snmp_security_levels = [
|
|
'noAuthNoPriv' => 'noAuthNoPriv',
|
|
'authNoPriv' => 'authNoPriv',
|
|
'authPriv' => 'authPriv'
|
|
];
|
|
|
|
$snmp_versions = [0 => __('Not In Use'),
|
|
__('Version %d', 1),
|
|
__('Version %d', 2),
|
|
__('Version %d', 3)
|
|
];
|
|
|
|
$snmp_auth_protocols = [
|
|
'[None]' => __('[None]'),
|
|
'MD5' => __('MD5'),
|
|
'SHA' => __('SHA'),
|
|
'SHA224' => __('SHA-224'),
|
|
'SHA256' => __('SHA-256'),
|
|
'SHA384' => __('SHA-384'),
|
|
'SHA512' => __('SHA-512'),
|
|
];
|
|
|
|
$snmp_priv_protocols = [
|
|
'[None]' => __('[None]'),
|
|
'DES' => __('DES'),
|
|
'AES' => __('AES'),
|
|
'AES128' => __('AES-128'),
|
|
'AES192' => __('AES-192'),
|
|
'AES192C' => __('AES-192-C'),
|
|
'AES256' => __('AES-256'),
|
|
'AES256C' => __('AES-256-C')
|
|
];
|
|
|
|
$banned_snmp_strings = [
|
|
'End of MIB',
|
|
'No Such'
|
|
];
|
|
|
|
$logfile_options = [
|
|
1 => __('Logfile Only'),
|
|
2 => __('Logfile and Syslog/Eventlog'),
|
|
3 => __('Syslog/Eventlog Only')
|
|
];
|
|
|
|
$logfile_actions = [
|
|
LOG_ACTION_PURGE => __('Purge'),
|
|
LOG_ACTION_ROTATE => __('Rotate'),
|
|
LOG_ACTION_PURGE_ROTATE => __('Purge and Rotate')
|
|
];
|
|
|
|
$availability_options = [
|
|
AVAIL_NONE => __('None'),
|
|
AVAIL_SNMP_AND_PING => __('Ping and SNMP Uptime'),
|
|
AVAIL_SNMP_OR_PING => __('Ping or SNMP Uptime'),
|
|
AVAIL_SNMP => __('SNMP Uptime'),
|
|
AVAIL_SNMP_GET_SYSDESC => __('SNMP Desc'),
|
|
AVAIL_SNMP_GET_NEXT => __('SNMP getNext'),
|
|
AVAIL_PING => __('Ping'),
|
|
AVAIL_STREAM => __('Stream Device')
|
|
];
|
|
|
|
$ping_methods = [
|
|
PING_ICMP => __('ICMP Ping'),
|
|
PING_TCP => __('TCP Ping'),
|
|
PING_TCP_CLOSED => __('TCP Ping Closed'),
|
|
PING_UDP => __('UDP Ping')
|
|
];
|
|
|
|
$logfile_verbosity = [
|
|
POLLER_VERBOSITY_NONE => __('NONE - Syslog Only if Selected'),
|
|
POLLER_VERBOSITY_LOW => __('LOW - Statistics and Errors'),
|
|
POLLER_VERBOSITY_MEDIUM => __('MEDIUM - Statistics, Errors and Results'),
|
|
POLLER_VERBOSITY_HIGH => __('HIGH - Statistics, Errors, Results and Major I/O Events'),
|
|
POLLER_VERBOSITY_DEBUG => __('DEBUG - Statistics, Errors, Results, I/O and Program Flow'),
|
|
POLLER_VERBOSITY_DEVDBG => __('DEVEL - Developer DEBUG Level')
|
|
];
|
|
|
|
$logfile_expansion = [
|
|
LOG_EXPAND_NONE => ('NONE - No expansion'),
|
|
LOG_EXPAND_DISPLAY => ('DISPLAY - Only when displaying'),
|
|
LOG_EXPAND_FULL => ('FULL - Display and search expansion'),
|
|
];
|
|
|
|
$logfile_validation = [
|
|
INPUT_VALIDATION_NONE => ('NONE - No reporting'),
|
|
INPUT_VALIDATION_LOG => ('LOG - Only record to log'),
|
|
INPUT_VALIDATION_FULL => ('FULL - Display and log'),
|
|
];
|
|
|
|
$poller_options = [
|
|
1 => 'cmd.php',
|
|
2 => 'spine'
|
|
];
|
|
|
|
if (read_config_option('path_spine') != '' && (!file_exists(read_config_option('path_spine')) || !is_executable(read_config_option('path_spine')))) {
|
|
unset($poller_options[2]);
|
|
}
|
|
|
|
$aggregation_levels = [
|
|
1 => __('Selected Poller Interval'),
|
|
30 => __('%d Seconds', 30),
|
|
60 => __('1 Minute'),
|
|
300 => __('%d Minutes', 5),
|
|
600 => __('%d Minutes', 10),
|
|
900 => __('%d Minutes', 15),
|
|
1800 => __('%d Minutes', 30),
|
|
3600 => __('1 Hour'),
|
|
7200 => __('%d Hours', 2),
|
|
10800 => __('%d Hours', 3),
|
|
14400 => __('%d Hours', 4),
|
|
21600 => __('%d Hours', 6),
|
|
43200 => __('%d Hours', 12),
|
|
86400 => __('%d Day', 1),
|
|
604800 => __('%d Week', 1)
|
|
];
|
|
|
|
$sampling_intervals = [
|
|
10 => __('Every %d Seconds', 10),
|
|
15 => __('Every %d Seconds', 15),
|
|
20 => __('Every %d Seconds', 20),
|
|
30 => __('Every %d Seconds', 30),
|
|
60 => __('Every Minute'),
|
|
300 => __('Every %d Minutes', 5),
|
|
600 => __('Every %d Minutes', 10),
|
|
900 => __('Every %d Minutes', 15),
|
|
1200 => __('Every %d Minutes', 20),
|
|
1800 => __('Every %d Minutes', 30),
|
|
3600 => __('Every Hour'),
|
|
7200 => __('Every %d Hours', 2),
|
|
14400 => __('Every %d Hours', 4),
|
|
28800 => __('Every %d Hours', 8),
|
|
43200 => __('Every %d Hours', 12),
|
|
86400 => __('Every %d Day', 1)
|
|
];
|
|
|
|
$heartbeats = [
|
|
20 => __('%d Seconds', 20),
|
|
30 => __('%d Seconds', 30),
|
|
40 => __('%d Seconds', 40),
|
|
45 => __('%d Seconds', 45),
|
|
60 => __('%d Seconds', 60),
|
|
90 => __('%d Seconds', 90),
|
|
120 => __('%d Minutes', 2),
|
|
300 => __('%d Minutes', 5),
|
|
330 => __('%0.1f Minutes', 5.5),
|
|
600 => __('%d Minutes', 10),
|
|
660 => __('%d Minutes', 11),
|
|
900 => __('%d Minutes', 15),
|
|
1200 => __('%d Minutes', 20),
|
|
1800 => __('%d Minutes', 30),
|
|
2400 => __('%d Minutes', 40),
|
|
3600 => __('%d Hour', 1),
|
|
7200 => __('%d Hours', 2),
|
|
14400 => __('%d Hours', 4),
|
|
28800 => __('%d Hours', 8),
|
|
57600 => __('%d Hours', 16),
|
|
86400 => __('%d Day', 1),
|
|
172800 => __('%d Days', 2)
|
|
];
|
|
|
|
$timespans = [
|
|
3600 => __('%d Hour', 1),
|
|
7200 => __('%d Hours', 2),
|
|
14400 => __('%d Hours', 4),
|
|
21600 => __('%d Hours', 6),
|
|
43200 => __('%d Hours', 12),
|
|
86400 => __('%d Day', 1),
|
|
172800 => __('%d Days', 2),
|
|
345600 => __('%d Days', 4),
|
|
604800 => __('%d Week', 1),
|
|
1209600 => __('%d Weeks', 2),
|
|
1814400 => __('%d Weeks', 3),
|
|
2618784 => __('%d Month', 1),
|
|
5237568 => __('%d Months', 2),
|
|
7856352 => __('%d Months', 3),
|
|
10475136 => __('%d Months', 4),
|
|
15712704 => __('%d Months', 6),
|
|
31536000 => __('%d Year', 1),
|
|
63072000 => __('%d Years', 2),
|
|
94608000 => __('%d Years', 3),
|
|
126144000 => __('%d Years', 4),
|
|
157680000 => __('%d Years', 5),
|
|
189216000 => __('%d Years', 6),
|
|
220752000 => __('%d Years', 7),
|
|
252288000 => __('%d Years', 8),
|
|
283824000 => __('%d Years', 9),
|
|
315360000 => __('%d Years', 10)
|
|
];
|
|
|
|
$daily_timespans = [
|
|
7 => __('%d Week', 1),
|
|
14 => __('%d Weeks', 2),
|
|
21 => __('%d Weeks', 3),
|
|
30 => __('%d Month', 1),
|
|
60 => __('%d Months', 2),
|
|
90 => __('%d Months', 3),
|
|
182 => __('%d Months', 6),
|
|
365 => __('%d Year', 1),
|
|
];
|
|
|
|
$weekly_timespans = [
|
|
1 => __('%d Week', 1),
|
|
2 => __('%d Weeks', 2),
|
|
3 => __('%d Weeks', 3),
|
|
4 => __('%d Month', 1),
|
|
8 => __('%d Months', 2),
|
|
13 => __('%d Months', 3),
|
|
17 => __('%d Months', 4),
|
|
26 => __('%d Months', 6),
|
|
52 => __('%d Year', 1),
|
|
104 => __('%d Year', 2),
|
|
156 => __('%d Year', 3),
|
|
208 => __('%d Year', 4),
|
|
];
|
|
|
|
$monthly_timespans = [
|
|
1 => __('%d Month', 1),
|
|
2 => __('%d Months', 2),
|
|
3 => __('%d Months', 3),
|
|
6 => __('%d Months', 6),
|
|
12 => __('%d Year', 1),
|
|
24 => __('%d Year', 2),
|
|
36 => __('%d Year', 3),
|
|
48 => __('%d Year', 4),
|
|
];
|
|
|
|
$yearly_timespans = [
|
|
1 => __('%d Year', 1),
|
|
2 => __('%d Years', 2),
|
|
3 => __('%d Years', 3),
|
|
4 => __('%d Years', 4),
|
|
5 => __('%d Years', 5),
|
|
6 => __('%d Years', 6),
|
|
7 => __('%d Years', 7),
|
|
8 => __('%d Years', 8),
|
|
9 => __('%d Years', 9),
|
|
10 => __('%d Years', 10),
|
|
];
|
|
|
|
$poller_intervals = [
|
|
10 => __('Every %d Seconds', 10),
|
|
15 => __('Every %d Seconds', 15),
|
|
20 => __('Every %d Seconds', 20),
|
|
30 => __('Every %d Seconds', 30),
|
|
60 => __('Every Minute'),
|
|
300 => __('Every %d Minutes', 5)
|
|
];
|
|
|
|
$poller_sync_intervals = [
|
|
0 => __('Disabled/Manual'),
|
|
1800 => __('Every %d Minutes', 30),
|
|
3600 => __('Every Hour'),
|
|
7200 => __('Every %d Hours', 2),
|
|
14400 => __('Every %d Hours', 4),
|
|
28800 => __('Every %d Hours', 8),
|
|
57600 => __('Every %d Hours', 16),
|
|
86400 => __('Every day'),
|
|
];
|
|
|
|
$device_threads = [
|
|
1 => __('1 Thread'),
|
|
2 => __('%d Threads', 2),
|
|
3 => __('%d Threads', 3),
|
|
4 => __('%d Threads', 4),
|
|
5 => __('%d Threads', 5),
|
|
6 => __('%d Threads', 6),
|
|
7 => __('%d Threads', 7),
|
|
8 => __('%d Threads', 8),
|
|
9 => __('%d Threads', 9),
|
|
10 => __('%d Threads', 10)
|
|
];
|
|
|
|
$device_change_fields = [
|
|
'preg_field' => [
|
|
'/^snmp_/',
|
|
'/^ping_/'
|
|
],
|
|
'match_field' => [
|
|
'poller_id',
|
|
'site_id',
|
|
'host_template_id',
|
|
'availability_method',
|
|
'bulk_walk_size',
|
|
'device_threads',
|
|
'location',
|
|
'max_oids'
|
|
]
|
|
];
|
|
|
|
$cron_intervals = [
|
|
60 => __('Every Minute'),
|
|
300 => __('Every %d Minutes', 5)
|
|
];
|
|
|
|
$registered_cacti_names = [
|
|
'path_cacti'
|
|
];
|
|
|
|
$graph_views = [
|
|
1 => __('Tree View'),
|
|
2 => __('List View'),
|
|
3 => __('Preview View')
|
|
];
|
|
|
|
$auth_methods = [
|
|
AUTH_METHOD_CACTI => __('Cacti Builtin Authentication'),
|
|
AUTH_METHOD_BASIC => __('Web Basic Authentication')
|
|
];
|
|
|
|
$auth_methods[AUTH_METHOD_PROVIDERS] = __('Login Providers');
|
|
|
|
$provider_types = [
|
|
PROVIDER_TYPE_LDAP => __('LDAP'),
|
|
PROVIDER_TYPE_AD => __('Active Directory'),
|
|
PROVIDER_TYPE_SAML2 => __('SAML2'),
|
|
PROVIDER_TYPE_OPENID => __('OpenID Connect'),
|
|
];
|
|
|
|
$auth_realms = get_auth_realms();
|
|
|
|
$ldap_versions = [
|
|
2 => __('Version %d', 2),
|
|
3 => __('Version %d', 3)
|
|
];
|
|
|
|
$ldap_encryption = [
|
|
0 => __('None'),
|
|
1 => __('LDAPS'),
|
|
2 => __('LDAP + TLS')
|
|
];
|
|
|
|
$ldap_tls_cert_req = [
|
|
LDAP_OPT_X_TLS_NEVER => __('Never'),
|
|
LDAP_OPT_X_TLS_HARD => __('Hard'),
|
|
LDAP_OPT_X_TLS_DEMAND => __('Demand'),
|
|
LDAP_OPT_X_TLS_ALLOW => __('Allow'),
|
|
LDAP_OPT_X_TLS_TRY => __('Try')
|
|
];
|
|
|
|
$ldap_modes = [
|
|
0 => __('No Searching'),
|
|
1 => __('Anonymous Searching'),
|
|
2 => __('Specific Searching')
|
|
];
|
|
|
|
$rrdtool_versions = [
|
|
'1.5.0' => 'RRDtool 1.5+',
|
|
'1.6.0' => 'RRDtool 1.6+',
|
|
'1.7.0' => 'RRDtool 1.7+',
|
|
'1.7.1' => 'RRDtool 1.7.1+',
|
|
'1.7.2' => 'RRDtool 1.7.2+',
|
|
'1.8.0' => 'RRDtool 1.8+',
|
|
'1.9.0' => 'RRDtool 1.9+',
|
|
'1.10.0' => 'RRDtool 1.10+',
|
|
'1.11.0' => 'RRDtool 1.11+'
|
|
];
|
|
|
|
$i18n_modes = [
|
|
0 => __('Disabled'),
|
|
1 => __('Enabled'),
|
|
2 => __('Enabled (strict mode)'),
|
|
];
|
|
|
|
$cdef_item_types = [
|
|
CVDEF_ITEM_TYPE_FUNCTION => __('Function'),
|
|
CVDEF_ITEM_TYPE_OPERATOR => __('Operator'),
|
|
CVDEF_ITEM_TYPE_SPEC_DS => __('Special Data Source'),
|
|
CVDEF_ITEM_TYPE_CDEF => __('Another CDEF'),
|
|
CVDEF_ITEM_TYPE_STRING => __('Custom String')
|
|
];
|
|
|
|
$graph_color_alpha = [
|
|
'00' => ' 0%',
|
|
'19' => ' 10%',
|
|
'33' => ' 20%',
|
|
'4C' => ' 30%',
|
|
'66' => ' 40%',
|
|
'7F' => ' 50%',
|
|
'99' => ' 60%',
|
|
'B2' => ' 70%',
|
|
'CC' => ' 80%',
|
|
'E5' => ' 90%',
|
|
'FF' => '100%'
|
|
];
|
|
|
|
$tree_sort_types = [
|
|
TREE_ORDERING_INHERIT => __('Inherit Parent Sorting'),
|
|
TREE_ORDERING_NONE => __('Manual Ordering (No Sorting)'),
|
|
TREE_ORDERING_ALPHABETIC => __('Alphabetic Ordering'),
|
|
TREE_ORDERING_NATURAL => __('Natural Ordering'),
|
|
TREE_ORDERING_NUMERIC => __('Numeric Ordering')
|
|
];
|
|
|
|
$tree_item_types = [
|
|
TREE_ITEM_TYPE_HEADER => __('Header'),
|
|
TREE_ITEM_TYPE_GRAPH => __('Graph'),
|
|
TREE_ITEM_TYPE_HOST => __('Device')
|
|
];
|
|
|
|
$host_group_types = [
|
|
HOST_GROUPING_GRAPH_TEMPLATE => __('Graph Template'),
|
|
HOST_GROUPING_DATA_QUERY_INDEX => __('Data Query Index')
|
|
];
|
|
|
|
$custom_data_source_types = [
|
|
'CURRENT_DATA_SOURCE' => __('Current Graph Item Data Source'),
|
|
'CURRENT_DATA_SOURCE_PI' => __('Current Graph Item Polling Interval'),
|
|
'ALL_DATA_SOURCES_NODUPS' => __('All Data Sources (Do not Include Duplicates)'),
|
|
'ALL_DATA_SOURCES_DUPS' => __('All Data Sources (Include Duplicates)'),
|
|
'SIMILAR_DATA_SOURCES_NODUPS' => __('All Similar Data Sources (Do not Include Duplicates)'),
|
|
'SIMILAR_DATA_SOURCES_NODUPS_PI' => __('All Similar Data Sources (Do not Include Duplicates) Polling Interval'),
|
|
'SIMILAR_DATA_SOURCES_DUPS' => __('All Similar Data Sources (Include Duplicates)'),
|
|
'CURRENT_DS_MINIMUM_VALUE' => __('Current Data Source Item: Minimum Value'),
|
|
'CURRENT_DS_MAXIMUM_VALUE' => __('Current Data Source Item: Maximum Value'),
|
|
'CURRENT_DS_LSLFUNCTION' => __('Current Data Source Item: Least Squares Line Function'),
|
|
'CURRENT_DS_LSLINT' => __('Current Data Source Item: Least Squares Line Y-intercept'),
|
|
'CURRENT_DS_LSLSLOPE' => __('Current Data Source Item: Least Squares Line Slope'),
|
|
'CURRENT_DS_LSLCORREL' => __('Current Data Source Item: Least Squares Line Correlation Coefficient'),
|
|
'CURRENT_GRAPH_MINIMUM_VALUE' => __('Graph: Lower Limit'),
|
|
'CURRENT_GRAPH_MAXIMUM_VALUE' => __('Graph: Upper Limit'),
|
|
'COUNT_ALL_DS_NODUPS' => __('Count of All Data Sources (Do not Include Duplicates)'),
|
|
'COUNT_ALL_DS_DUPS' => __('Count of All Data Sources (Include Duplicates)'),
|
|
'COUNT_SIMILAR_DS_NODUPS' => __('Count of All Similar Data Sources (Do not Include Duplicates)'),
|
|
'COUNT_SIMILAR_DS_DUPS' => __('Count of All Similar Data Sources (Include Duplicates)')
|
|
];
|
|
|
|
$copyrights = [
|
|
'Apache License 2.0' => __('Apache License 2.0'),
|
|
'Creative Commons' => __('Creative Commons'),
|
|
'GNU General Public License' => __('GNU General Public License'),
|
|
'MIT License' => __('MIT License'),
|
|
'Eclipse Public License version 2.0' => __('Eclipse Public License version 2.0'),
|
|
];
|
|
|
|
if (POLLER_ID || $config['connection'] == 'online') { // @phpstan-ignore-line
|
|
$menu = [
|
|
__('Main Console') => [
|
|
'index.php' => __('Console Page')
|
|
],
|
|
__('Create') => [
|
|
'graphs_new.php' => __('New Graphs'),
|
|
'host.php?action=edit&create=true' => __('New Device')
|
|
],
|
|
__('Management') => [
|
|
'host.php' => __('Devices'),
|
|
'sites.php' => __('Sites'),
|
|
'tree.php' => __('Trees'),
|
|
'graphs.php' => __('Graphs'),
|
|
'data_sources.php' => __('Data Sources'),
|
|
'aggregate_graphs.php' => __('Aggregates'),
|
|
],
|
|
__('Data Collection') => [
|
|
'pollers.php' => __('Data Collectors'),
|
|
'data_queries.php' => __('Data Queries'),
|
|
'data_input.php' => __('Data Input Methods')
|
|
],
|
|
__('Templates') => [
|
|
'host_templates.php' => __('Device'),
|
|
'graph_templates.php' => __('Graph'),
|
|
'data_templates.php' => __('Data Source'),
|
|
'aggregate_templates.php' => __('Aggregate'),
|
|
'color_templates.php' => __('Color')
|
|
],
|
|
__('Automation') => [
|
|
'automation_networks.php' => __('Networks'),
|
|
'automation_devices.php' => __('Discovered Devices'),
|
|
'automation_templates.php' => __('Device Rules'),
|
|
'automation_graph_rules.php' => __('Graph Rules'),
|
|
'automation_tree_rules.php' => __('Tree Rules'),
|
|
],
|
|
__('Presets') => [
|
|
'data_source_profiles.php' => __('Data Profiles'),
|
|
'automation_snmp.php' => __('SNMP'),
|
|
'cdef.php' => __('CDEFs'),
|
|
'vdef.php' => __('VDEFs'),
|
|
'color.php' => __('Colors'),
|
|
'gprint_presets.php' => __('GPRINTs'),
|
|
],
|
|
__('Import/Export') => [
|
|
'package_import.php' => __('Import Packages'),
|
|
'templates_import.php' => __('Import Templates'),
|
|
'templates_export.php' => __('Export Templates'),
|
|
'package.php' => __('Create Packages'),
|
|
'package_repos.php' => __('Repositories'),
|
|
'package_keys.php' => __('Public Keys'),
|
|
],
|
|
__('Configuration') => [
|
|
'settings.php' => __('Settings'),
|
|
'user_admin.php' => __('Users'),
|
|
'user_group_admin.php' => __('User Groups'),
|
|
'login_providers.php' => __('Login Providers')
|
|
],
|
|
__('Utilities') => [
|
|
'utilities.php' => __('System Utilities'),
|
|
'rrdcleaner.php' => __('RRDfile Cleaner'),
|
|
'managers.php' => __('SNMP Managers'),
|
|
'links.php' => __('External Links'),
|
|
'user_log.php' => __('User Log'),
|
|
],
|
|
__('Troubleshooting') => [
|
|
'data_debug.php' => __('Data Sources'),
|
|
'rrdcheck.php' => __('RRDfile Checker'),
|
|
'support.php' => __('Technical Info'),
|
|
'changelog.php' => __('Change Log'),
|
|
]
|
|
];
|
|
|
|
if (POLLER_ID > 1) {
|
|
unset($menu[__('Utilities')]['rrdcleaner.php']);
|
|
unset($menu[__('Troubleshooting')]['rrdcheck.php']);
|
|
}
|
|
} else {
|
|
$menu = [
|
|
__('Management') => [
|
|
'host.php' => __('Devices'),
|
|
],
|
|
__('Data Collection') => [
|
|
'pollers.php' => __('Data Collectors'),
|
|
],
|
|
__('Configuration') => [
|
|
'settings.php' => __('Settings'),
|
|
],
|
|
__('Utilities') => [
|
|
'utilities.php' => __('System Utilities'),
|
|
'user_log.php' => __('User Log'),
|
|
]
|
|
];
|
|
}
|
|
|
|
$menu_glyphs = [
|
|
__('Main Console') => 'ti ti-map',
|
|
__('Create') => 'ti ti-chart-area-line',
|
|
__('Management') => 'ti ti-devices',
|
|
__('Data Collection') => 'ti ti-affiliate',
|
|
__('Templates') => 'ti ti-template',
|
|
__('Automation') => 'ti ti-automation',
|
|
__('Presets') => 'ti ti-archive',
|
|
__('Import/Export') => 'ti ti-transfer',
|
|
__('Configuration') => 'ti ti-adjustments-cog',
|
|
__('Utilities') => 'ti ti-tools',
|
|
__('External Links') => 'ti ti-external-link',
|
|
__('Support') => 'ti ti-help',
|
|
__('Troubleshooting') => 'ti ti-bug'
|
|
];
|
|
|
|
$device_classes = [
|
|
'wireless' => __('Access Points, Controllers'),
|
|
'application' => __('Application Related'),
|
|
'cacti' => __('Cacti Related'),
|
|
'database' => __('Database Related'),
|
|
'facilities' => __('Facilities Related'),
|
|
'general' => __('Generic Device'),
|
|
'hpc' => __('HPC/Grid Computing'),
|
|
'hypervisor' => __('Hypervisor Related'),
|
|
'remotemgmt' => __('ILO, IPMI, iDrac, etc.'),
|
|
'license' => __('Licensing Related'),
|
|
'linux' => __('Linux Related'),
|
|
'loadbalancer' => __('Load Balancer'),
|
|
'switch' => __('Network Switch'),
|
|
'router' => __('Network Router'),
|
|
'nassan' => __('NAS/SAN Related'),
|
|
'firewall' => __('Network Firewalls'),
|
|
'power' => __('Power Related PDUs/STS, etc.'),
|
|
'printer' => __('Printer Related'),
|
|
'storage' => __('Storage Related'),
|
|
'telephony' => __('Telco Related'),
|
|
'webserver' => __('Web Server Related'),
|
|
'windows' => __('Windows Related'),
|
|
'ups' => __('UPS Related'),
|
|
'unassigned' => __('Unassigned')
|
|
];
|
|
|
|
$graph_template_classes = [
|
|
'amon' => __('Amon Server Stats'),
|
|
'amqp' => __('AMQP Stats'),
|
|
'cpu' => __('CPU Stats'),
|
|
'disk' => __('Disk Stats'),
|
|
'diskio' => __('Disk I/O Stats'),
|
|
'health' => __('Health Stats'),
|
|
'http' => __('Webserver Stats'),
|
|
'kafka' => __('Kafka Stats'),
|
|
'kernel' => __('Kernel Stats'),
|
|
'kernel_vmstat' => __('Kernel Memory'),
|
|
'linux_cpu' => __('Linux CPU Stats'),
|
|
'linux_sysctl_fs' => __('Linux Kernel Params'),
|
|
'mongodb' => __('MongoDB Stats'),
|
|
'mysql' => __('MariaDB/MySQL Stats'),
|
|
'mem' => __('Memory Stats'),
|
|
'mqqt' => __('Mosquitto Stats'),
|
|
'net' => __('Network Stats'),
|
|
'process' => __('Process Stats'),
|
|
'qos' => __('QOS Stats'),
|
|
'swap' => __('Swap Stats'),
|
|
'syslog' => __('Syslog Stats'),
|
|
'system' => __('System Stats'),
|
|
'unassigned' => __('Unassigned'),
|
|
'unspecified' => __('Unspecified'),
|
|
];
|
|
|
|
if ((isset($_SESSION[SESS_USER_ID]))) {
|
|
if (db_table_exists('external_links')) {
|
|
$consoles = db_fetch_assoc('SELECT id, title, extendedstyle
|
|
FROM external_links
|
|
WHERE style="CONSOLE"
|
|
AND enabled="on"
|
|
ORDER BY extendedstyle, sortorder, id');
|
|
|
|
if (cacti_sizeof($consoles)) {
|
|
foreach ($consoles as $page) {
|
|
if (!CACTI_WEB || is_realm_allowed($page['id'] + 10000)) {
|
|
$menuname = (isset($page['extendedstyle']) && $page['extendedstyle'] != '' ? htmle($page['extendedstyle']) : __('External Links'));
|
|
|
|
$menu[$menuname]['link.php?id=' . $page['id']] = htmle($page['title']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$log_tail_lines = [
|
|
-1 => __('All Lines'),
|
|
10 => __('%d Lines', 10),
|
|
15 => __('%d Lines', 15),
|
|
20 => __('%d Lines', 20),
|
|
50 => __('%d Lines', 50),
|
|
100 => __('%d Lines', 100),
|
|
200 => __('%d Lines', 200),
|
|
500 => __('%d Lines', 500),
|
|
1000 => __('%d Lines', 1000),
|
|
2000 => __('%d Lines', 2000),
|
|
3000 => __('%d Lines', 3000),
|
|
5000 => __('%d Lines', 5000),
|
|
10000 => __('%d Lines', 10000)
|
|
];
|
|
|
|
$item_rows = [
|
|
-1 => __('Default'),
|
|
10 => '10',
|
|
15 => '15',
|
|
16 => '16',
|
|
17 => '17',
|
|
18 => '18',
|
|
19 => '19',
|
|
20 => '20',
|
|
21 => '21',
|
|
22 => '22',
|
|
23 => '23',
|
|
24 => '24',
|
|
25 => '25',
|
|
26 => '26',
|
|
27 => '27',
|
|
30 => '30',
|
|
40 => '40',
|
|
44 => '44',
|
|
45 => '45',
|
|
50 => '50',
|
|
100 => '100',
|
|
250 => '250',
|
|
500 => '500',
|
|
750 => '750',
|
|
1000 => '1000',
|
|
2000 => '2000',
|
|
3000 => '3000',
|
|
4000 => '4000',
|
|
5000 => '5000',
|
|
];
|
|
|
|
// Adjust the number of items rows based upon max_input_vars
|
|
$max_size = ini_get('max_input_vars') - 20;
|
|
|
|
foreach ($item_rows as $index => $row) {
|
|
if ($index > $max_size) {
|
|
unset($item_rows[$index]);
|
|
}
|
|
}
|
|
|
|
$graphs_per_page = [
|
|
4 => '4',
|
|
6 => '6',
|
|
8 => '8',
|
|
9 => '9',
|
|
10 => '10',
|
|
12 => '12',
|
|
14 => '14',
|
|
15 => '15',
|
|
16 => '16',
|
|
18 => '18',
|
|
20 => '20',
|
|
24 => '24',
|
|
25 => '25',
|
|
27 => '27',
|
|
28 => '28',
|
|
30 => '30',
|
|
32 => '32',
|
|
35 => '35',
|
|
40 => '40',
|
|
50 => '50',
|
|
100 => '100'
|
|
];
|
|
|
|
$page_refresh_interval = [
|
|
5 => __('%d Seconds', 5),
|
|
10 => __('%d Seconds', 10),
|
|
20 => __('%d Seconds', 20),
|
|
30 => __('%d Seconds', 30),
|
|
60 => __('1 Minute'),
|
|
300 => __('%d Minutes', 5),
|
|
600 => __('%d Minutes', 10),
|
|
9999999 => __('Never')
|
|
];
|
|
|
|
$user_auth_realms = [
|
|
8 => __('Console Access'),
|
|
7 => __('View Graphs'),
|
|
25 => __('Realtime Graphs'),
|
|
20 => __('Update Profile'),
|
|
24 => __('External Links'),
|
|
|
|
1 => __('Users/Groups'),
|
|
15 => __('Settings/Utilities'),
|
|
23 => __('Automation'),
|
|
26 => __('Installation/Upgrades'),
|
|
|
|
2 => __('Data Input Methods'),
|
|
13 => __('Data Queries'),
|
|
|
|
3 => __('Sites/Devices/Data'),
|
|
5 => __('Graphs'),
|
|
4 => __('Trees'),
|
|
1043 => __('Spike Handling'),
|
|
|
|
9 => __('Data Source Profiles'),
|
|
14 => __('Presets'),
|
|
|
|
10 => __('Graph Templates'),
|
|
11 => __('Data Templates'),
|
|
12 => __('Device Templates'),
|
|
|
|
16 => __('Export Templates'),
|
|
17 => __('Import Templates'),
|
|
29 => __('Package Management'),
|
|
|
|
18 => __('Log Administration'),
|
|
19 => __('Log Viewing'),
|
|
|
|
21 => __('Reports Administration'),
|
|
22 => __('Reports Creation'),
|
|
27 => __('Show Graph Action Icons'),
|
|
28 => __('Show User Help Links'),
|
|
101 => __('Plugin Administration')
|
|
];
|
|
|
|
$user_auth_roles = [
|
|
__('Normal User') => [7, 19, 20, 22, 24, 25, 27, 28],
|
|
__('Template Editor') => [8, 2, 9, 10, 11, 12, 13, 14, 16, 17, 29],
|
|
__('General Administration') => [8, 3, 4, 5, 23, 1043],
|
|
__('System Administration') => [8, 15, 26, 1, 18, 21, 101]
|
|
];
|
|
|
|
$user_auth_realm_filenames = [
|
|
'about.php' => -1,
|
|
'cdef.php' => 14,
|
|
'clog.php' => 18,
|
|
'clog_user.php' => 19,
|
|
'color.php' => 5,
|
|
'data_debug.php' => 15,
|
|
'data_input.php' => 2,
|
|
'data_sources.php' => 3,
|
|
'data_source_profiles.php' => 9,
|
|
'data_templates.php' => 11,
|
|
'gprint_presets.php' => 5,
|
|
'graph.php' => 7,
|
|
'graph_image.php' => 7,
|
|
'graph_json.php' => 7,
|
|
'graph_xport.php' => 7,
|
|
'graph_templates.php' => 10,
|
|
'graph_view.php' => 7,
|
|
'graph_realtime.php' => 25,
|
|
'graphs.php' => 5,
|
|
'graphs_new.php' => 5,
|
|
'sites.php' => 3,
|
|
'pollers.php' => 3,
|
|
'host.php' => 3,
|
|
'host_templates.php' => 12,
|
|
'index.php' => 8,
|
|
'install.php' => 26,
|
|
'step_json.php' => 26,
|
|
'managers.php' => 15,
|
|
'rrdcleaner.php' => 15,
|
|
'rrdcheck.php' => 15,
|
|
'settings.php' => 15,
|
|
'links.php' => 15,
|
|
'data_queries.php' => 13,
|
|
'templates_export.php' => 16,
|
|
'templates_import.php' => 17,
|
|
'package_import.php' => 17,
|
|
'package.php' => 29,
|
|
'package_repos.php' => 29,
|
|
'package_keys.php' => 29,
|
|
'tree.php' => 4,
|
|
'user_admin.php' => 1,
|
|
'login_providers.php' => 1,
|
|
'user_group_admin.php' => 1,
|
|
'utilities.php' => 15,
|
|
'user_log.php' => 15,
|
|
'vdef.php' => 14,
|
|
'smtp_servers.php' => 8,
|
|
'email_templates.php' => 8,
|
|
'event_queue.php' => 8,
|
|
'smtp_queue.php' => 8,
|
|
'logout.php' => -1,
|
|
'auth_profile.php' => 20,
|
|
'auth_changepassword.php' => -1,
|
|
'reports.php' => 22,
|
|
'automation_graph_rules.php' => 23,
|
|
'automation_tree_rules.php' => 23,
|
|
'automation_templates.php' => 23,
|
|
'automation_networks.php' => 23,
|
|
'automation_devices.php' => 23,
|
|
'automation_snmp.php' => 23,
|
|
'color_templates.php' => 5,
|
|
'aggregate_templates.php' => 5,
|
|
'aggregate_graphs.php' => 5,
|
|
'spikekill.php' => 1043,
|
|
'support.php' => 15,
|
|
'changelog.php' => 15,
|
|
'permission_denied.php' => -1,
|
|
'help.php' => -1,
|
|
'oauth2.php' => -1
|
|
];
|
|
|
|
$hash_type_codes = [
|
|
'round_robin_archive' => '15',
|
|
'cdef' => '05',
|
|
'cdef_item' => '14',
|
|
'gprint_preset' => '06',
|
|
'data_input_method' => '03',
|
|
'data_input_field' => '07',
|
|
'data_template' => '01',
|
|
'data_template_item' => '08',
|
|
'graph_template' => '00',
|
|
'graph_template_item' => '10',
|
|
'graph_template_input' => '09',
|
|
'data_query' => '04',
|
|
'data_query_graph' => '11',
|
|
'data_query_sv_graph' => '12',
|
|
'data_query_sv_data_source' => '13',
|
|
'host_template' => '02',
|
|
'vdef' => '18',
|
|
'vdef_item' => '19',
|
|
'data_source_profile' => '20'
|
|
];
|
|
|
|
$hash_type_names = [
|
|
'cdef' => __('CDEF'),
|
|
'cdef_item' => __('CDEF Item'),
|
|
'gprint_preset' => __('GPRINT Preset'),
|
|
'data_template' => __('Data Template'),
|
|
'data_input_method' => __('Data Input Method'),
|
|
'data_input_field' => __('Data Input Field'),
|
|
'data_source_profile' => __('Data Source Profile'),
|
|
'data_template_item' => __('Data Template Item'),
|
|
'graph_template' => __('Graph Template'),
|
|
'graph_template_item' => __('Graph Template Item'),
|
|
'graph_template_input' => __('Graph Template Input'),
|
|
'data_query' => __('Data Query'),
|
|
'host_template' => __('Device Template'),
|
|
'vdef' => __('VDEF'),
|
|
'vdef_item' => __('VDEF Item')
|
|
];
|
|
|
|
$hash_system_data_inputs = [
|
|
'3eb92bb845b9660a7445cf9740726522', // Get SNMP Data
|
|
'bf566c869ac6443b0c75d1c32b5a350e', // Get SNMP Data (Indexed)
|
|
'80e9e4c4191a5da189ae26d0e237f015', // Get Script Data (Indexed)
|
|
'332111d8b54ac8ce939af87a7eac0c06', // Get Script Server Data (Indexed)
|
|
'7ed649bfa9cd627d7482b7700e88db53', // Get Stream Data
|
|
'8489967af7ec4addacc6a67ca4e36c16' // Get Stream Data (Indexed)
|
|
];
|
|
|
|
$host_struc = [
|
|
'host_template_id',
|
|
'description',
|
|
'hostname',
|
|
'site_id',
|
|
'poller_id',
|
|
'notes',
|
|
'snmp_options',
|
|
'snmp_community',
|
|
'snmp_version',
|
|
'snmp_username',
|
|
'snmp_password',
|
|
'snmp_auth_protocol',
|
|
'snmp_priv_passphrase',
|
|
'snmp_priv_protocol',
|
|
'snmp_context',
|
|
'snmp_engine_id',
|
|
'snmp_port',
|
|
'snmp_timeout',
|
|
'snmp_retries',
|
|
'max_oids',
|
|
'bulk_walk_size',
|
|
'device_threads',
|
|
'availability_method',
|
|
'location',
|
|
'external_id',
|
|
'ping_method',
|
|
'ping_port',
|
|
'ping_timeout',
|
|
'ping_retries',
|
|
'disabled',
|
|
'status',
|
|
'status_event_count',
|
|
'status_fail_date',
|
|
'status_rec_date',
|
|
'status_last_error',
|
|
'min_time',
|
|
'max_time',
|
|
'cur_time',
|
|
'avg_time',
|
|
'total_polls',
|
|
'failed_polls',
|
|
'availability'
|
|
];
|
|
|
|
$graph_timespans = [
|
|
GT_LAST_HALF_HOUR => __('Last Half Hour'),
|
|
GT_LAST_HOUR => __('Last Hour'),
|
|
GT_LAST_2_HOURS => __('Last %d Hours', 2),
|
|
GT_LAST_4_HOURS => __('Last %d Hours', 4),
|
|
GT_LAST_6_HOURS => __('Last %d Hours', 6),
|
|
GT_LAST_12_HOURS => __('Last %d Hours', 12),
|
|
GT_LAST_DAY => __('Last Day'),
|
|
GT_LAST_2_DAYS => __('Last %d Days', 2),
|
|
GT_LAST_3_DAYS => __('Last %d Days', 3),
|
|
GT_LAST_4_DAYS => __('Last %d Days', 4),
|
|
GT_LAST_WEEK => __('Last Week'),
|
|
GT_LAST_2_WEEKS => __('Last %d Weeks', 2),
|
|
GT_LAST_MONTH => __('Last Month'),
|
|
GT_LAST_2_MONTHS => __('Last %d Months', 2),
|
|
GT_LAST_3_MONTHS => __('Last %d Months', 3),
|
|
GT_LAST_4_MONTHS => __('Last %d Months', 4),
|
|
GT_LAST_6_MONTHS => __('Last %d Months', 6),
|
|
GT_LAST_YEAR => __('Last Year'),
|
|
GT_LAST_2_YEARS => __('Last %d Years', 2),
|
|
GT_DAY_SHIFT => __('Day Shift'),
|
|
GT_THIS_DAY => __('This Day'),
|
|
GT_THIS_WEEK => __('This Week'),
|
|
GT_THIS_MONTH => __('This Month'),
|
|
GT_THIS_YEAR => __('This Year'),
|
|
GT_PREV_DAY => __('Previous Day'),
|
|
GT_PREV_WEEK => __('Previous Week'),
|
|
GT_PREV_MONTH => __('Previous Month'),
|
|
GT_PREV_YEAR => __('Previous Year')
|
|
];
|
|
|
|
// ***** MUST BE KEPT IN SYNC WITH graph_timeshifts_vals *********
|
|
$graph_timeshifts = [
|
|
GTS_HALF_HOUR => __('%d Min', 30),
|
|
GTS_1_HOUR => __('%d Hour', 1),
|
|
GTS_2_HOURS => __('%d Hours', 2),
|
|
GTS_4_HOURS => __('%d Hours', 4),
|
|
GTS_6_HOURS => __('%d Hours', 6),
|
|
GTS_12_HOURS => __('%d Hours', 12),
|
|
GTS_1_DAY => __('%d Day', 1),
|
|
GTS_2_DAYS => __('%d Days', 2),
|
|
GTS_3_DAYS => __('%d Days', 3),
|
|
GTS_4_DAYS => __('%d Days', 4),
|
|
GTS_1_WEEK => __('%d Week', 1),
|
|
GTS_2_WEEKS => __('%d Weeks', 2),
|
|
GTS_1_MONTH => __('%d Month', 1),
|
|
GTS_2_MONTHS => __('%d Months', 2),
|
|
GTS_3_MONTHS => __('%d Months', 3),
|
|
GTS_4_MONTHS => __('%d Months', 4),
|
|
GTS_6_MONTHS => __('%d Months', 6),
|
|
GTS_1_YEAR => __('%d Year', 1),
|
|
GTS_2_YEARS => __('%d Years', 2)
|
|
];
|
|
|
|
// ***** MUST BE KEPT IN SYNC WITH graph_timeshifts *********
|
|
$graph_timeshifts_vals = [
|
|
GTS_HALF_HOUR => sprintf('%d Min', 30),
|
|
GTS_1_HOUR => sprintf('%d Hour', 1),
|
|
GTS_2_HOURS => sprintf('%d Hours', 2),
|
|
GTS_4_HOURS => sprintf('%d Hours', 4),
|
|
GTS_6_HOURS => sprintf('%d Hours', 6),
|
|
GTS_12_HOURS => sprintf('%d Hours', 12),
|
|
GTS_1_DAY => sprintf('%d Day', 1),
|
|
GTS_2_DAYS => sprintf('%d Days', 2),
|
|
GTS_3_DAYS => sprintf('%d Days', 3),
|
|
GTS_4_DAYS => sprintf('%d Days', 4),
|
|
GTS_1_WEEK => sprintf('%d Week', 1),
|
|
GTS_2_WEEKS => sprintf('%d Weeks', 2),
|
|
GTS_1_MONTH => sprintf('%d Month', 1),
|
|
GTS_2_MONTHS => sprintf('%d Months', 2),
|
|
GTS_3_MONTHS => sprintf('%d Months', 3),
|
|
GTS_4_MONTHS => sprintf('%d Months', 4),
|
|
GTS_6_MONTHS => sprintf('%d Months', 6),
|
|
GTS_1_YEAR => sprintf('%d Year', 1),
|
|
GTS_2_YEARS => sprintf('%d Years', 2)
|
|
];
|
|
|
|
$graph_weekdays = [
|
|
WD_SUNDAY => date('l', strtotime('Sunday')),
|
|
WD_MONDAY => date('l', strtotime('Monday')),
|
|
WD_TUESDAY => date('l', strtotime('Tuesday')),
|
|
WD_WEDNESDAY => date('l', strtotime('Wednesday')),
|
|
WD_THURSDAY => date('l', strtotime('Thursday')),
|
|
WD_FRIDAY => date('l', strtotime('Friday')),
|
|
WD_SATURDAY => date('l', strtotime('Saturday'))
|
|
];
|
|
|
|
$dateformats = [
|
|
GD_MO_D_Y => __('Month Number, Day, Year'),
|
|
GD_MN_D_Y => __('Month Name, Day, Year'),
|
|
GD_D_MO_Y => __('Day, Month Number, Year'),
|
|
GD_D_MN_Y => __('Day, Month Name, Year'),
|
|
GD_Y_MO_D => __('Year, Month Number, Day'),
|
|
GD_Y_MN_D => __('Year, Month Name, Day')
|
|
];
|
|
|
|
$datechar = [
|
|
GDC_HYPHEN => '-',
|
|
GDC_SLASH => '/',
|
|
GDC_DOT => '.'
|
|
];
|
|
|
|
$dsstats_refresh_interval = [
|
|
'boost' => __('After Boost'),
|
|
'60' => __('1 Hour'),
|
|
'120' => __('%d Hours', 2),
|
|
'180' => __('%d Hours', 3),
|
|
'240' => __('%d Hours', 4),
|
|
'300' => __('%d Hours', 5),
|
|
'360' => __('%d Hours', 6)
|
|
];
|
|
|
|
$dsstats_max_memory = [
|
|
'32' => __('%d MBytes', 32),
|
|
'64' => __('%d MBytes', 64),
|
|
'128' => __('%d MBytes', 128),
|
|
'256' => __('%d MBytes', 256),
|
|
'512' => __('%d MBytes', 512),
|
|
'1024' => __('1 GByte'),
|
|
'1536' => __('%s GBytes', '1.5'),
|
|
'2048' => __('%d GBytes', 2),
|
|
'3072' => __('%d GBytes', 3)
|
|
];
|
|
|
|
$dsstats_hourly_avg = [
|
|
'60' => __('1 Hour'),
|
|
'120' => __('%d Hours', 2),
|
|
'180' => __('%d Hours', 3),
|
|
'240' => __('%d Hours', 4),
|
|
'300' => __('%d Hours', 5),
|
|
'360' => __('%d Hours', 6)
|
|
];
|
|
|
|
$rrdcheck_intervals = [
|
|
'boost' => __('After Boost'),
|
|
'60' => __('1 Hour'),
|
|
'240' => __('%d Hours', 4),
|
|
'1440' => __('%d Hours', 24)
|
|
];
|
|
|
|
$boost_max_rows_per_select = [
|
|
'2000' => __('2,000 Data Source Items'),
|
|
'5000' => __('5,000 Data Source Items'),
|
|
'10000' => __('10,000 Data Source Items'),
|
|
'15000' => __('15,000 Data Source Items'),
|
|
'25000' => __('25,000 Data Source Items'),
|
|
'50000' => __('50,000 Data Source Items (Default)'),
|
|
'100000' => __('100,000 Data Source Items'),
|
|
'200000' => __('200,000 Data Source Items'),
|
|
'400000' => __('400,000 Data Source Items')
|
|
];
|
|
|
|
$boost_utilities_interval = [
|
|
'999999' => __('Disabled'),
|
|
'5' => __('%d Seconds', 5),
|
|
'10' => __('%d Seconds', 10),
|
|
'15' => __('%d Seconds', 15),
|
|
'20' => __('%d Seconds', 20),
|
|
'30' => __('%d Seconds', 30),
|
|
'60' => __('1 Minute'),
|
|
'300' => __('%d Minutes', 5)
|
|
];
|
|
|
|
$boost_refresh_interval = [
|
|
'30' => __('%d Minutes', 30),
|
|
'60' => __('1 Hour'),
|
|
'120' => __('2 Hours', 2),
|
|
'240' => __('4 Hours', 4),
|
|
'360' => __('6 Hours', 6)
|
|
];
|
|
|
|
$boost_max_runtime = [
|
|
'1200' => __('%d Minutes', 20),
|
|
'2400' => __('%d Minutes', 40),
|
|
'3600' => __('1 Hour'),
|
|
'4800' => __('%s Hours', '1.5')
|
|
];
|
|
|
|
$boost_max_memory = [
|
|
'256' => __('%d MBytes', 256),
|
|
'512' => __('%d MBytes', 512),
|
|
'1024' => __('%d GByte', 1),
|
|
'1536' => __('%s GBytes', '1.5'),
|
|
'2048' => __('%d GBytes', 2),
|
|
'3072' => __('%d GBytes', 3),
|
|
'4096' => __('%d GBytes', 4),
|
|
'5120' => __('%d GBytes', 5),
|
|
'6144' => __('%d GBytes', 6),
|
|
'8192' => __('%d GBytes', 8),
|
|
'-1' => __('Unlimited')
|
|
];
|
|
|
|
$realtime_window = [
|
|
30 => __('%d Seconds', 30),
|
|
45 => __('%d Seconds', 45),
|
|
60 => __('1 Minute'),
|
|
90 => __('%s Minutes', '1.5'),
|
|
120 => __('%d Minutes', 2),
|
|
300 => __('%d Minutes', 5),
|
|
600 => __('%d Minutes', 10),
|
|
1200 => __('%d Minutes', 20),
|
|
1800 => __('%d Minutes', 30),
|
|
3600 => __('1 Hour')
|
|
];
|
|
|
|
$realtime_refresh = [
|
|
1 => __('%d Seconds', 1),
|
|
2 => __('%d Seconds', 2),
|
|
5 => __('%d Seconds', 5),
|
|
10 => __('%d Seconds', 10),
|
|
15 => __('%d Seconds', 15),
|
|
20 => __('%d Seconds', 20),
|
|
30 => __('%d Seconds', 30),
|
|
60 => __('1 Minute'),
|
|
120 => __('%d Minutes', 2)
|
|
];
|
|
|
|
$attachment_sizes = [
|
|
1048576 => __('1 Megabyte'),
|
|
2097152 => __('%d Megabytes', 2),
|
|
4194304 => __('%d Megabytes', 4),
|
|
10485760 => __('%d Megabytes', 10),
|
|
20971520 => __('%d Megabytes', 20),
|
|
52428800 => __('%d Megabytes', 50),
|
|
104857600 => __('%d Megabytes', 100),
|
|
];
|
|
|
|
$reports_actions = [
|
|
REPORTS_DELETE => __('Delete'),
|
|
REPORTS_DISABLE => __('Disable'),
|
|
REPORTS_DUPLICATE => __('Duplicate'),
|
|
REPORTS_ENABLE => __('Enable'),
|
|
REPORTS_SEND_NOW => __('Send Now'),
|
|
];
|
|
|
|
if (!CACTI_WEB || is_realm_allowed(21)) {
|
|
$reports_actions[REPORTS_OWN] = __('Take Ownership');
|
|
}
|
|
|
|
$attach_types = [
|
|
REPORTS_TYPE_INLINE_PNG => __('Inline PNG Image'),
|
|
];
|
|
|
|
if (extension_loaded(REPORTS_EXTENSION_GD)) {
|
|
$attach_types[REPORTS_TYPE_INLINE_JPG] = __('Inline JPEG Image');
|
|
$attach_types[REPORTS_TYPE_INLINE_GIF] = __('Inline GIF Image');
|
|
}
|
|
|
|
$attach_types[REPORTS_TYPE_ATTACH_PNG] = __('Attached PNG Image');
|
|
|
|
if (extension_loaded(REPORTS_EXTENSION_GD)) {
|
|
$attach_types[REPORTS_TYPE_ATTACH_JPG] = __('Attached JPEG Image');
|
|
$attach_types[REPORTS_TYPE_ATTACH_GIF] = __('Attached GIF Image');
|
|
}
|
|
|
|
$item_types = [
|
|
REPORTS_ITEM_TEXT => __('Text'),
|
|
REPORTS_ITEM_TREE => __('Tree'),
|
|
REPORTS_ITEM_GRAPH => __('Graph'),
|
|
REPORTS_ITEM_HOST => __('Device'),
|
|
REPORTS_ITEM_HR => __('Horizontal Rule')
|
|
];
|
|
|
|
$alignment = [
|
|
REPORTS_ALIGN_LEFT => __('left'),
|
|
REPORTS_ALIGN_CENTER => __('center'),
|
|
REPORTS_ALIGN_RIGHT => __('right')
|
|
];
|
|
|
|
$reports_interval = [
|
|
REPORTS_SCHED_INTVL_MINUTE => __('Minute(s)'),
|
|
REPORTS_SCHED_INTVL_HOUR => __('Hour(s)'),
|
|
REPORTS_SCHED_INTVL_DAY => __('Day(s)'),
|
|
REPORTS_SCHED_INTVL_WEEK => __('Week(s)'),
|
|
REPORTS_SCHED_INTVL_MONTH_DAY => __('Month(s), Day of Month'),
|
|
REPORTS_SCHED_INTVL_MONTH_WEEKDAY => __('Month(s), Day of Week'),
|
|
REPORTS_SCHED_INTVL_YEAR => __('Year(s)'),
|
|
];
|
|
|
|
$agg_graph_types = [
|
|
AGGREGATE_GRAPH_TYPE_KEEP => __('Keep Graph Types'),
|
|
AGGREGATE_GRAPH_TYPE_KEEP_STACKED => __('Keep Type and STACK'),
|
|
GRAPH_ITEM_TYPE_STACK => __('Convert to AREA/STACK Graph'),
|
|
GRAPH_ITEM_TYPE_LINE1 => __('Convert to LINE1 Graph'),
|
|
GRAPH_ITEM_TYPE_LINE2 => __('Convert to LINE2 Graph'),
|
|
GRAPH_ITEM_TYPE_LINE3 => __('Convert to LINE3 Graph'),
|
|
AGGREGATE_GRAPH_TYPE_LINE1_STACK => __('Convert to LINE1/STACK Graph'),
|
|
AGGREGATE_GRAPH_TYPE_LINE2_STACK => __('Convert to LINE2/STACK Graph'),
|
|
AGGREGATE_GRAPH_TYPE_LINE3_STACK => __('Convert to LINE3/STACK Graph'),
|
|
];
|
|
|
|
$agg_totals = [
|
|
AGGREGATE_TOTAL_NONE => __('No Totals'),
|
|
AGGREGATE_TOTAL_ALL => __('Print All Legend Items'),
|
|
AGGREGATE_TOTAL_ONLY => __('Print Totaling Legend Items Only'),
|
|
];
|
|
|
|
$agg_totals_type = [
|
|
AGGREGATE_TOTAL_TYPE_SIMILAR => __('Total Similar Data Sources'),
|
|
AGGREGATE_TOTAL_TYPE_ALL => __('Total All Data Sources'),
|
|
];
|
|
|
|
$agg_order_types = [
|
|
AGGREGATE_ORDER_NONE => __('No Reordering'),
|
|
AGGREGATE_ORDER_DS_GRAPH => __('Data Source, Graph'),
|
|
AGGREGATE_ORDER_GRAPH_DS => __('Graph, Data Source'),
|
|
AGGREGATE_ORDER_BASE_GRAPH => __('Base Graph Order')
|
|
];
|
|
|
|
// operators for use with SQL/pattern matching
|
|
$automation_op_array = [
|
|
'display' => [
|
|
AUTOMATION_OP_NONE => __('None'),
|
|
AUTOMATION_OP_MATCHES => __('Matches (=)'),
|
|
AUTOMATION_OP_MATCHES_NOT => __('Is Not Equal to (!=)'),
|
|
AUTOMATION_OP_LT => __('Is Less Than (<)'),
|
|
AUTOMATION_OP_LE => __('Is Less Than or Equal (<=)'),
|
|
AUTOMATION_OP_GT => __('Is Greater Than (>=)'),
|
|
AUTOMATION_OP_GE => __('Is Greater Than or Equal'),
|
|
AUTOMATION_OP_UNKNOWN => __('Is NULL'),
|
|
AUTOMATION_OP_NOT_UNKNOWN => __('Is Not NULL'),
|
|
AUTOMATION_OP_EMPTY => __('Is Empty'),
|
|
AUTOMATION_OP_NOT_EMPTY => __('Is Not Empty'),
|
|
AUTOMATION_OP_CONTAINS => __('Contains (LIKE %xxx%)'),
|
|
AUTOMATION_OP_CONTAINS_NOT => __('Does Not Contain (NOT LIKE %xxx%)'),
|
|
AUTOMATION_OP_BEGINS => __('Begins with (LIKE xxx%)'),
|
|
AUTOMATION_OP_BEGINS_NOT => __('Does Not Begin with (NOT LIKE xxx%)'),
|
|
AUTOMATION_OP_ENDS => __('Ends with (LIKE %xxx)'),
|
|
AUTOMATION_OP_ENDS_NOT => __('Does Not End with (NOT LIKE %xxx)'),
|
|
AUTOMATION_OP_REGEXP => __('Matches Regular Expression'),
|
|
AUTOMATION_OP_NOT_REGEXP => __('Does Not Match Regular Expression'),
|
|
],
|
|
'op' => [
|
|
AUTOMATION_OP_NONE => '',
|
|
AUTOMATION_OP_MATCHES => '=',
|
|
AUTOMATION_OP_MATCHES_NOT => '!=',
|
|
AUTOMATION_OP_LT => '<',
|
|
AUTOMATION_OP_LE => '<=',
|
|
AUTOMATION_OP_GT => '>',
|
|
AUTOMATION_OP_GE => '>=',
|
|
AUTOMATION_OP_UNKNOWN => 'IS NULL',
|
|
AUTOMATION_OP_NOT_UNKNOWN => 'IS NOT NULL',
|
|
AUTOMATION_OP_EMPTY => "LIKE ''",
|
|
AUTOMATION_OP_NOT_EMPTY => "NOT LIKE ''",
|
|
AUTOMATION_OP_CONTAINS => 'LIKE',
|
|
AUTOMATION_OP_CONTAINS_NOT => 'NOT LIKE',
|
|
AUTOMATION_OP_BEGINS => 'LIKE',
|
|
AUTOMATION_OP_BEGINS_NOT => 'NOT LIKE',
|
|
AUTOMATION_OP_ENDS => 'LIKE',
|
|
AUTOMATION_OP_ENDS_NOT => 'NOT LIKE',
|
|
AUTOMATION_OP_REGEXP => 'REGEXP',
|
|
AUTOMATION_OP_NOT_REGEXP => 'NOT REGEXP',
|
|
],
|
|
'binary' => [
|
|
AUTOMATION_OP_NONE => false,
|
|
AUTOMATION_OP_CONTAINS => true,
|
|
AUTOMATION_OP_CONTAINS_NOT => true,
|
|
AUTOMATION_OP_BEGINS => true,
|
|
AUTOMATION_OP_BEGINS_NOT => true,
|
|
AUTOMATION_OP_ENDS => true,
|
|
AUTOMATION_OP_ENDS_NOT => true,
|
|
AUTOMATION_OP_MATCHES => true,
|
|
AUTOMATION_OP_MATCHES_NOT => true,
|
|
AUTOMATION_OP_LT => true,
|
|
AUTOMATION_OP_LE => true,
|
|
AUTOMATION_OP_GT => true,
|
|
AUTOMATION_OP_GE => true,
|
|
AUTOMATION_OP_UNKNOWN => false,
|
|
AUTOMATION_OP_NOT_UNKNOWN => false,
|
|
AUTOMATION_OP_EMPTY => false,
|
|
AUTOMATION_OP_NOT_EMPTY => false,
|
|
AUTOMATION_OP_REGEXP => true,
|
|
AUTOMATION_OP_NOT_REGEXP => true,
|
|
],
|
|
'pre' => [
|
|
AUTOMATION_OP_NONE => '',
|
|
AUTOMATION_OP_CONTAINS => '%',
|
|
AUTOMATION_OP_CONTAINS_NOT => '%',
|
|
AUTOMATION_OP_BEGINS => '',
|
|
AUTOMATION_OP_BEGINS_NOT => '',
|
|
AUTOMATION_OP_ENDS => '%',
|
|
AUTOMATION_OP_ENDS_NOT => '%',
|
|
AUTOMATION_OP_MATCHES => '',
|
|
AUTOMATION_OP_MATCHES_NOT => '',
|
|
AUTOMATION_OP_LT => '',
|
|
AUTOMATION_OP_LE => '',
|
|
AUTOMATION_OP_GT => '',
|
|
AUTOMATION_OP_GE => '',
|
|
AUTOMATION_OP_UNKNOWN => '',
|
|
AUTOMATION_OP_NOT_UNKNOWN => '',
|
|
AUTOMATION_OP_EMPTY => '',
|
|
AUTOMATION_OP_NOT_EMPTY => '',
|
|
AUTOMATION_OP_REGEXP => '',
|
|
AUTOMATION_OP_NOT_REGEXP => '',
|
|
],
|
|
'post' => [
|
|
AUTOMATION_OP_NONE => '',
|
|
AUTOMATION_OP_CONTAINS => '%',
|
|
AUTOMATION_OP_CONTAINS_NOT => '%',
|
|
AUTOMATION_OP_BEGINS => '%',
|
|
AUTOMATION_OP_BEGINS_NOT => '%',
|
|
AUTOMATION_OP_ENDS => '',
|
|
AUTOMATION_OP_ENDS_NOT => '',
|
|
AUTOMATION_OP_MATCHES => '',
|
|
AUTOMATION_OP_MATCHES_NOT => '',
|
|
AUTOMATION_OP_LT => '',
|
|
AUTOMATION_OP_LE => '',
|
|
AUTOMATION_OP_GT => '',
|
|
AUTOMATION_OP_GE => '',
|
|
AUTOMATION_OP_UNKNOWN => '',
|
|
AUTOMATION_OP_NOT_UNKNOWN => '',
|
|
AUTOMATION_OP_EMPTY => '',
|
|
AUTOMATION_OP_NOT_EMPTY => '',
|
|
AUTOMATION_OP_REGEXP => '',
|
|
AUTOMATION_OP_NOT_REGEXP => '',
|
|
]
|
|
];
|
|
|
|
$automation_oper = [
|
|
AUTOMATION_OPER_NULL => '',
|
|
AUTOMATION_OPER_AND => 'AND',
|
|
AUTOMATION_OPER_OR => 'OR',
|
|
AUTOMATION_OPER_LEFT_BRACKET => '(',
|
|
AUTOMATION_OPER_RIGHT_BRACKET => ')',
|
|
];
|
|
|
|
$automation_tree_item_types = [
|
|
TREE_ITEM_TYPE_GRAPH => __('Graph'),
|
|
TREE_ITEM_TYPE_HOST => __('Device')
|
|
];
|
|
|
|
$automation_tree_header_types = [
|
|
AUTOMATION_TREE_ITEM_TYPE_STRING => __('Fixed String'),
|
|
];
|
|
|
|
$automation_frequencies = [
|
|
'disabled' => __('Disabled'),
|
|
'60' => __('Every 1 Hour'),
|
|
'120' => __('Every %d Hours', 2),
|
|
'240' => __('Every %d Hours', 4),
|
|
'360' => __('Every %d Hours', 6),
|
|
'480' => __('Every %d Hours', 8),
|
|
'720' => __('Every %d Hours', 12),
|
|
'1440' => __('Every Day'),
|
|
'10080' => __('Every Week'),
|
|
'20160' => __('Every %d Weeks', 2),
|
|
'40320' => __('Every %d Weeks', 4)
|
|
];
|
|
|
|
$logrotate_frequency = [
|
|
'1' => __('Daily'),
|
|
'7' => __('Weekly'),
|
|
'30' => __('Monthly')
|
|
];
|
|
|
|
$no_session_write = [
|
|
'graph_xport.php',
|
|
'graph_image.php',
|
|
'graph_json.php'
|
|
];
|
|
|
|
$i18n_months = [
|
|
'January' => __('January'),
|
|
'February' => __('February'),
|
|
'March' => __('March'),
|
|
'April' => __('April'),
|
|
'May' => __('May'),
|
|
'June' => __('June'),
|
|
'July' => __('July'),
|
|
'August' => __('August'),
|
|
'September' => __('September'),
|
|
'October' => __('October'),
|
|
'November' => __('November'),
|
|
'December' => __('December'),
|
|
];
|
|
|
|
$i18n_months_short = [
|
|
'Jan' => __x('A short textual representation of a month, three letters', 'Jan'),
|
|
'Feb' => __x('A short textual representation of a month, three letters', 'Feb'),
|
|
'Mar' => __x('A short textual representation of a month, three letters', 'Mar'),
|
|
'Arp' => __x('A short textual representation of a month, three letters', 'Apr'),
|
|
'May' => __x('A short textual representation of a month, three letters', 'May'),
|
|
'Jun' => __x('A short textual representation of a month, three letters', 'Jun'),
|
|
'Jul' => __x('A short textual representation of a month, three letters', 'Jul'),
|
|
'Aug' => __x('A short textual representation of a month, three letters', 'Aug'),
|
|
'Sep' => __x('A short textual representation of a month, three letters', 'Sep'),
|
|
'Oct' => __x('A short textual representation of a month, three letters', 'Oct'),
|
|
'Nov' => __x('A short textual representation of a month, three letters', 'Nov'),
|
|
'Dec' => __x('A short textual representation of a month, three letters', 'Dec'),
|
|
];
|
|
|
|
$i18n_supported_languages = [
|
|
CACTI_LANGUAGE_HANDLER_DEFAULT => __('Use the First Handler Found'),
|
|
];
|
|
|
|
if (is_dir(CACTI_PATH_INCLUDE . '/vendor/phpgettext')) {
|
|
$i18n_supported_languages[CACTI_LANGUAGE_HANDLER_PHPGETTEXT] = __('Use the PHP GetText Handler');
|
|
}
|
|
|
|
if (is_dir(CACTI_PATH_INCLUDE . '/vendor/monotranslator')) {
|
|
$i18n_supported_languages[CACTI_LANGUAGE_HANDLER_MOTRANSLATOR] = __('Use the MonoTranslator GetText Handler');
|
|
}
|
|
|
|
$i18n_weekdays = [
|
|
'Sunday' => __('Sunday'),
|
|
'Monday' => __('Monday'),
|
|
'Tuesday' => __('Tuesday'),
|
|
'Wednesday' => __('Wednesday'),
|
|
'Thursday' => __('Thursday'),
|
|
'Friday' => __('Friday'),
|
|
'Saturday' => __('Saturday')
|
|
];
|
|
|
|
$i18n_weekdays_short = [
|
|
'Sun' => __x('A textual representation of a day, three letters', 'Sun'),
|
|
'Mon' => __x('A textual representation of a day, three letters', 'Mon'),
|
|
'Tue' => __x('A textual representation of a day, three letters', 'Tue'),
|
|
'Wed' => __x('A textual representation of a day, three letters', 'Wed'),
|
|
'Thu' => __x('A textual representation of a day, three letters', 'Thu'),
|
|
'Fri' => __x('A textual representation of a day, three letters', 'Fri'),
|
|
'Sat' => __x('A textual representation of a day, three letters', 'Sat')
|
|
];
|
|
|
|
$i18n_languages = [
|
|
__('Arabic'),
|
|
__('Bulgarian'),
|
|
__('Chinese (China)'),
|
|
__('Chinese (Taiwan)'),
|
|
__('Dutch'),
|
|
__('English'),
|
|
__('French'),
|
|
__('German'),
|
|
__('Greek'),
|
|
__('Hebrew'),
|
|
__('Hindi'),
|
|
__('Italian'),
|
|
__('Japanese'),
|
|
__('Korean'),
|
|
__('Polish'),
|
|
__('Portuguese'),
|
|
__('Portuguese (Brazil)'),
|
|
__('Russian'),
|
|
__('Spanish'),
|
|
__('Swedish'),
|
|
__('Turkish'),
|
|
__('Vietnamese')
|
|
];
|
|
|
|
$i18n_themes = [
|
|
__('Classic'),
|
|
__('Modern'),
|
|
__('Dark'),
|
|
__('Paper-plane'),
|
|
__('Paw'),
|
|
__('Sunrise'),
|
|
];
|
|
|
|
$database_statuses = [
|
|
0 => __('[Fail]'),
|
|
1 => __('[Warning]'),
|
|
2 => __('[Restart]'),
|
|
3 => __('[Success]'),
|
|
4 => __('[Skipped]'),
|
|
];
|
|
|
|
$navigation = [
|
|
'auth_profile.php:' => [
|
|
'title' => __('User Profile (Edit)'),
|
|
'mapping' => '',
|
|
'url' => '',
|
|
'level' => '0'
|
|
],
|
|
'auth_profile.php:edit' => [
|
|
'title' => __('User Profile (Edit)'),
|
|
'mapping' => '',
|
|
'url' => '',
|
|
'level' => '0'
|
|
],
|
|
'graph_view.php:' => [
|
|
'title' => __('Graphs'),
|
|
'mapping' => '',
|
|
'url' => 'graph_view.php',
|
|
'level' => '0'
|
|
],
|
|
'graph_view.php:tree' => [
|
|
'title' => __('Tree Mode'),
|
|
'mapping' => 'graph_view.php:',
|
|
'url' => 'graph_view.php?action=tree',
|
|
'level' => '0'
|
|
],
|
|
'graph_view.php:tree_content' => [
|
|
'title' => __('Tree Mode'),
|
|
'mapping' => 'graph_view.php:',
|
|
'url' => 'graph_view.php?action=tree',
|
|
'level' => '0'
|
|
],
|
|
'graph_view.php:list' => [
|
|
'title' => __('List Mode'),
|
|
'mapping' => '',
|
|
'url' => 'graph_view.php?action=list',
|
|
'level' => '0'
|
|
],
|
|
'graph_view.php:preview' => [
|
|
'title' => __('Preview Mode'),
|
|
'mapping' => '',
|
|
'url' => 'graph_view.php?action=preview',
|
|
'level' => '0'
|
|
],
|
|
'graph_view.php:view-preview' => [
|
|
'title' => __('Single Graph View'),
|
|
'mapping' => 'graph_view.php:preview',
|
|
'url' => 'graph_view.php?action=view',
|
|
'level' => '1'
|
|
],
|
|
'graph_view.php:view-tree' => [
|
|
'title' => __('Single Graph View'),
|
|
'mapping' => 'graph_view.php:tree',
|
|
'url' => 'graph_view.php?action=view',
|
|
'level' => '1'
|
|
],
|
|
'graph_view.php:zoom-preview' => [
|
|
'title' => __('Graph Details View'),
|
|
'mapping' => 'graph_view.php:preview',
|
|
'url' => 'graph_view.php?action=zoom',
|
|
'level' => '1'
|
|
],
|
|
'graph_view.php:zoom-tree' => [
|
|
'title' => __('Graph Details View'),
|
|
'mapping' => 'graph_view.php:tree',
|
|
'url' => 'graph_view.php?action=zoom',
|
|
'level' => '1'
|
|
],
|
|
'graph_view.php:properties-preview' => [
|
|
'title' => __('Graph Properties'),
|
|
'mapping' => 'graph_view.php:preview',
|
|
'url' => 'graph_view.php?action=properties',
|
|
'level' => '1'
|
|
],
|
|
'graph_view.php:properties-tree' => [
|
|
'title' => __('Graph Properties'),
|
|
'mapping' => 'graph_view.php:tree',
|
|
'url' => 'graph_view.php?action=properties',
|
|
'level' => '1'
|
|
],
|
|
'graph.php:' => [
|
|
'title' => '|current_graph_title|',
|
|
'mapping' => CACTI_PATH_URL . 'index.php:',
|
|
'level' => '1'
|
|
],
|
|
'graph.php:view' => [
|
|
'title' => '|current_graph_title|',
|
|
'mapping' => CACTI_PATH_URL . 'index.php:',
|
|
'level' => '1'
|
|
],
|
|
'graph.php:zoom' => [
|
|
'title' => '|current_graph_title|',
|
|
'mapping' => CACTI_PATH_URL . 'index.php:',
|
|
'level' => '1'
|
|
],
|
|
'graph.php:update_timespan' => [
|
|
'title' => '|current_graph_title|',
|
|
'mapping' => CACTI_PATH_URL . 'index.php:',
|
|
'level' => '1'
|
|
],
|
|
'index.php:' => [
|
|
'title' => __('Console'),
|
|
'mapping' => '',
|
|
'url' => CACTI_PATH_URL . 'index.php',
|
|
'level' => '0'
|
|
],
|
|
'index.php:login' => [
|
|
'title' => __('Console'),
|
|
'mapping' => '',
|
|
'url' => CACTI_PATH_URL . 'index.php',
|
|
'level' => '0'
|
|
],
|
|
'graphs.php:' => [
|
|
'title' => __('Graph Management'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'graphs.php',
|
|
'level' => '1'
|
|
],
|
|
'graphs.php:graph_edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,graphs.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'graphs.php:graph_diff' => [
|
|
'title' => __('Change Graph Template'),
|
|
'mapping' => 'index.php:,graphs.php:,graphs.php:graph_edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'graphs.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,graphs.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'graphs.php:item_edit' => [
|
|
'title' => __('Graph Items'),
|
|
'mapping' => 'index.php:,graphs.php:,graphs.php:graph_edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'graphs_new.php:' => [
|
|
'title' => __('Create New Graphs'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'graphs_new.php',
|
|
'level' => '1'
|
|
],
|
|
'graphs_new.php:save' => [
|
|
'title' => __('Create Graphs from Data Query'),
|
|
'mapping' => 'index.php:,graphs_new.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'gprint_presets.php:' => [
|
|
'title' => __('GPRINT Presets'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'gprint_presets.php',
|
|
'level' => '1'
|
|
],
|
|
'gprint_presets.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,gprint_presets.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'gprint_presets.php:remove' => [
|
|
'title' => __('(Remove)'),
|
|
'mapping' => 'index.php:,gprint_presets.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'cdef.php:' => [
|
|
'title' => __('CDEFs'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'cdef.php',
|
|
'level' => '1'
|
|
],
|
|
'cdef.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,cdef.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'cdef.php:remove' => [
|
|
'title' => __('(Remove)'),
|
|
'mapping' => 'index.php:,cdef.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'cdef.php:item_edit' => [
|
|
'title' => __('CDEF Items'),
|
|
'mapping' => 'index.php:,cdef.php:,cdef.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'cdef.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,cdef.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'clog.php:' => [
|
|
'title' => __('View Log'),
|
|
'mapping' => '',
|
|
'url' => 'clog.php',
|
|
'level' => '0'
|
|
],
|
|
'clog.php:preview' => [
|
|
'title' => __('View Log'),
|
|
'mapping' => '',
|
|
'url' => 'clog.php',
|
|
'level' => '0'
|
|
],
|
|
'clog_user.php:' => [
|
|
'title' => __('View Log'),
|
|
'mapping' => '',
|
|
'url' => 'clog_user.php',
|
|
'level' => '0'
|
|
],
|
|
'clog_user.php:preview' => [
|
|
'title' => __('View Log'),
|
|
'mapping' => '',
|
|
'url' => 'clog_user.php',
|
|
'level' => '0'
|
|
],
|
|
'tree.php:' => [
|
|
'title' => __('Graph Trees'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'tree.php',
|
|
'level' => '1'
|
|
],
|
|
'tree.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,tree.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'pollers.php:' => [
|
|
'title' => __('Data Collectors'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'pollers.php',
|
|
'level' => '1'
|
|
],
|
|
'pollers.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,pollers.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'links.php:' => [
|
|
'title' => __('External Links'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'links.php',
|
|
'level' => '1'
|
|
],
|
|
'links.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,links.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'color.php:' => [
|
|
'title' => __('Colors'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'color.php',
|
|
'level' => '1'
|
|
],
|
|
'color.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,color.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'graph_templates.php:' => [
|
|
'title' => __('Graph Templates'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'graph_templates.php',
|
|
'level' => '1'
|
|
],
|
|
'graph_templates.php:template_edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,graph_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'graph_templates.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,graph_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'graph_templates.php:item_edit' => [
|
|
'title' => __('Graph Template Items'),
|
|
'mapping' => 'index.php:,graph_templates.php:,graph_templates.php:template_edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'graph_templates.php:input_edit' => [
|
|
'title' => __('Graph Item Inputs'),
|
|
'mapping' => 'index.php:,graph_templates.php:,graph_templates.php:template_edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'graph_templates.php:input_remove' => [
|
|
'title' => __('(Remove)'),
|
|
'mapping' => 'index.php:,graph_templates.php:,graph_templates.php:template_edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'host_templates.php:' => [
|
|
'title' => __('Device Templates'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'host_templates.php',
|
|
'level' => '1'
|
|
],
|
|
'host_templates.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,host_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'host_templates.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,host_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_templates.php:' => [
|
|
'title' => __('Data Templates'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'data_templates.php',
|
|
'level' => '1'
|
|
],
|
|
'data_templates.php:template_edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,data_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_templates.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,data_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_sources.php:' => [
|
|
'title' => __('Data Sources'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'data_sources.php',
|
|
'level' => '1'
|
|
],
|
|
'data_sources.php:ds_edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,data_sources.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_sources.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,data_sources.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'host.php:' => [
|
|
'title' => __('Devices'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'host.php',
|
|
'level' => '1'
|
|
],
|
|
'host.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,host.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'host.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,host.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'rra.php:' => [
|
|
'title' => __('Round Robin Archives'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'rra.php',
|
|
'level' => '1'
|
|
],
|
|
'rra.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,rra.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'rra.php:remove' => [
|
|
'title' => __('(Remove)'),
|
|
'mapping' => 'index.php:,rra.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_input.php:' => [
|
|
'title' => __('Data Input Methods'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'data_input.php',
|
|
'level' => '1'
|
|
],
|
|
'data_input.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,data_input.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_input.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,data_input.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_input.php:remove' => [
|
|
'title' => __('(Remove)'),
|
|
'mapping' => 'index.php:,data_input.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_input.php:field_edit' => [
|
|
'title' => __('Data Input Fields'),
|
|
'mapping' => 'index.php:,data_input.php:,data_input.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'data_input.php:field_remove' => [
|
|
'title' => __('(Remove Item)'),
|
|
'mapping' => 'index.php:,data_input.php:,data_input.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'data_queries.php:' => [
|
|
'title' => __('Data Queries'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'data_queries.php',
|
|
'level' => '1'
|
|
],
|
|
'data_queries.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,data_queries.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_queries.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,data_queries.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'data_queries.php:item_edit' => [
|
|
'title' => __('Associated Graph Templates'),
|
|
'mapping' => 'index.php:,data_queries.php:,data_queries.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'data_queries.php:item_remove' => [
|
|
'title' => __('(Remove Item)'),
|
|
'mapping' => 'index.php:,data_queries.php:,data_queries.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'rrdcleaner.php:' => [
|
|
'title' => __('RRD Cleaner'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'rrdcleaner.php',
|
|
'level' => '2'
|
|
],
|
|
'rrdcleaner.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,rrdcleaner.php:',
|
|
'url' => 'rrdcleaner.php?action=actions',
|
|
'level' => '2'
|
|
],
|
|
'rrdcleaner.php:restart' => [
|
|
'title' => __('List unused Files'),
|
|
'mapping' => 'rrdcleaner.php:',
|
|
'url' => 'rrdcleaner.php?action=restart',
|
|
'level' => '2'
|
|
],
|
|
'rrdcheck.php:' => [
|
|
'title' => __('RRD Check'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'rrdcheck.php',
|
|
'level' => '2'
|
|
],
|
|
'support.php' => [
|
|
'title' => __('Technical Support'),
|
|
'mapping' => 'index.php:,support.php:',
|
|
'url' => 'support.php',
|
|
'level' => '2'
|
|
],
|
|
'user_log.php:' => [
|
|
'title' => __('User Log'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'user_log.php',
|
|
'level' => '1'
|
|
],
|
|
'user_log.php:view' => [
|
|
'title' => __('View User Log'),
|
|
'mapping' => 'index.php:,user_log.php:',
|
|
'url' => 'user_log.php',
|
|
'level' => '2'
|
|
],
|
|
'user_log.php:clear' => [
|
|
'title' => __('Clear User Log'),
|
|
'mapping' => 'index.php:,user_log.php:',
|
|
'url' => 'user_log.php',
|
|
'level' => '2'
|
|
],
|
|
'user_log.php:purge' => [
|
|
'title' => __('Purge User Log'),
|
|
'mapping' => 'index.php:,user_log.php:',
|
|
'url' => 'user_log.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:' => [
|
|
'title' => __('Utilities'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '1'
|
|
],
|
|
'utilities.php:view_poller_cache' => [
|
|
'title' => __('View Poller Cache'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:view_snmp_cache' => [
|
|
'title' => __('View Data Query Cache'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:clear_poller_cache' => [
|
|
'title' => __('View Poller Cache'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:view_logfile' => [
|
|
'title' => __('View Log'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:clear_logfile' => [
|
|
'title' => __('Clear Log'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:view_boost_status' => [
|
|
'title' => __('Boost Status'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:view_snmpagent_cache' => [
|
|
'title' => __('View SNMP Agent Cache'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'utilities.php:view_snmpagent_events' => [
|
|
'title' => __('View SNMP Agent Notification Log'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'utilities.php',
|
|
'level' => '2'
|
|
],
|
|
'vdef.php:' => [
|
|
'title' => __('VDEFs'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'vdef.php',
|
|
'level' => '1'
|
|
],
|
|
'vdef.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,vdef.php:',
|
|
'url' => 'vdef.php',
|
|
'level' => '2'
|
|
],
|
|
'vdef.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,vdef.php:',
|
|
'url' => 'vdef.php',
|
|
'level' => '2'
|
|
],
|
|
'vdef.php:remove' => [
|
|
'title' => __('(Remove)'),
|
|
'mapping' => 'index.php:,vdef.php:',
|
|
'url' => 'vdef.php',
|
|
'level' => '2'
|
|
],
|
|
'vdef.php:item_edit' => [
|
|
'title' => __('VDEF Items'),
|
|
'mapping' => 'index.php:,vdef.php:,vdef.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'managers.php:' => [
|
|
'title' => __('View SNMP Notification Receivers'),
|
|
'mapping' => 'index.php:,utilities.php:',
|
|
'url' => 'managers.php',
|
|
'level' => '2'
|
|
],
|
|
'managers.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,utilities.php:,managers.php:',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'settings.php:' => [
|
|
'title' => __('Cacti Settings'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'settings.php',
|
|
'level' => '1'
|
|
],
|
|
'link.php:' => [
|
|
'title' => __('External Link'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'link.php',
|
|
'level' => '1'
|
|
],
|
|
'user_admin.php:' => [
|
|
'title' => __('Users'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'user_admin.php',
|
|
'level' => '1'
|
|
],
|
|
'user_admin.php:user_edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,user_admin.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'user_admin.php:actions' => [
|
|
'title' => __('(Action)'),
|
|
'mapping' => 'index.php:,user_admin.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'login_providers.php:' => [
|
|
'title' => __('Login Providers'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'login_providers.php',
|
|
'level' => '1'
|
|
],
|
|
'login_providers.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'login_providers.php:,index.php:',
|
|
'url' => 'login_providers.php',
|
|
'level' => '2'
|
|
],
|
|
'user_group_admin.php:' => [
|
|
'title' => __('User Groups'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'user_group_admin.php',
|
|
'level' => '1'
|
|
],
|
|
'user_group_admin.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,user_group_admin.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'user_group_admin.php:actions' => [
|
|
'title' => __('(Action)'),
|
|
'mapping' => 'index.php:,user_group_admin.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'about.php:' => [
|
|
'title' => __('About Cacti'),
|
|
'mapping' => '',
|
|
'url' => 'about.php',
|
|
'level' => '1'
|
|
],
|
|
'help.php:' => [
|
|
'title' => __('Cacti Help'),
|
|
'mapping' => '',
|
|
'url' => 'help.php',
|
|
'level' => '1'
|
|
],
|
|
'templates_export.php:' => [
|
|
'title' => __('Export Templates'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'templates_export.php',
|
|
'level' => '1'
|
|
],
|
|
'templates_export.php:save' => [
|
|
'title' => __('Export Results'),
|
|
'mapping' => 'index.php:,templates_export.php:',
|
|
'url' => 'templates_export.php',
|
|
'level' => '2'
|
|
],
|
|
'templates_import.php:' => [
|
|
'title' => __('Import Templates'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'templates_import.php',
|
|
'level' => '1'
|
|
],
|
|
'package_import.php:' => [
|
|
'title' => __('Import Packages'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'package_import.php',
|
|
'level' => '1'
|
|
],
|
|
'package.php:' => [
|
|
'title' => __('Package Cacti Template'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'package.php',
|
|
'level' => '1'
|
|
],
|
|
'package_repos.php' => [
|
|
'title' => __('Package Repositories'),
|
|
'mapping' => 'index.php',
|
|
'url' => 'package_repos.php',
|
|
'level' => '1'
|
|
],
|
|
'package_keys.php' => [
|
|
'title' => __('Package Public Keys'),
|
|
'mapping' => 'index.php',
|
|
'url' => 'package_keys.php',
|
|
'level' => '1'
|
|
],
|
|
'reports.php:' => [
|
|
'title' => __('Reporting'),
|
|
'mapping' => '',
|
|
'url' => 'reports.php',
|
|
'level' => '0'
|
|
],
|
|
'reports.php:actions' => [
|
|
'title' => __('Report Add'),
|
|
'mapping' => 'reports.php:',
|
|
'url' => 'reports.php',
|
|
'level' => '1'
|
|
],
|
|
'reports.php:delete' => [
|
|
'title' => __('Report Delete'),
|
|
'mapping' => 'reports.php:',
|
|
'url' => 'reports.php',
|
|
'level' => '1'
|
|
],
|
|
'reports.php:edit' => [
|
|
'title' => __('Report Edit'),
|
|
'mapping' => 'reports.php:',
|
|
'url' => 'reports.php?action=edit',
|
|
'level' => '1'
|
|
],
|
|
'reports.php:item_edit' => [
|
|
'title' => __('Report Edit Item'),
|
|
'mapping' => 'reports.php:,reports.php:edit',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'color_templates.php:' => [
|
|
'title' => __('Color Templates'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'color_templates.php',
|
|
'level' => '1'
|
|
],
|
|
'color_templates.php:template_edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,color_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'color_templates.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,color_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'color_templates.php:item_edit' => [
|
|
'title' => __('Color Template Items'),
|
|
'mapping' => 'index.php:,color_templates.php:,color_templates.php:template_edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'aggregate_templates.php:' => [
|
|
'title' => __('Aggregate Templates'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'aggregate_templates.php',
|
|
'level' => '1'
|
|
],
|
|
'aggregate_templates.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,aggregate_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'aggregate_templates.php:actions'=> [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,aggregate_templates.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'aggregate_graphs.php:' => [
|
|
'title' => __('Aggregate Graphs'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'aggregate_graphs.php',
|
|
'level' => '1'
|
|
],
|
|
'aggregate_graphs.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,aggregate_graphs.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'aggregate_graphs.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,aggregate_graphs.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'aggregate_graphs.php:item_edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,aggregate_graphs.php:,aggregate_graphs.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'automation_graph_rules.php:' => [
|
|
'title' => __('Graph Rules'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'automation_graph_rules.php',
|
|
'level' => '1'
|
|
],
|
|
'automation_graph_rules.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,automation_graph_rules.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'automation_graph_rules.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,automation_graph_rules.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'automation_graph_rules.php:item_edit' => [
|
|
'title' => __('Graph Rule Items'),
|
|
'mapping' => 'index.php:,automation_graph_rules.php:,automation_graph_rules.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'automation_tree_rules.php:' => [
|
|
'title' => __('Tree Rules'),
|
|
'mapping' => 'index.php:',
|
|
'url' => 'automation_tree_rules.php',
|
|
'level' => '1'
|
|
],
|
|
'automation_tree_rules.php:edit' => [
|
|
'title' => __('(Edit)'),
|
|
'mapping' => 'index.php:,automation_tree_rules.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'automation_tree_rules.php:actions' => [
|
|
'title' => __('Actions'),
|
|
'mapping' => 'index.php:,automation_tree_rules.php:',
|
|
'url' => '',
|
|
'level' => '2'
|
|
],
|
|
'automation_tree_rules.php:item_edit' => [
|
|
'title' => __('Tree Rule Items'),
|
|
'mapping' => 'index.php:,automation_tree_rules.php:,automation_tree_rules.php:edit',
|
|
'url' => '',
|
|
'level' => '3'
|
|
],
|
|
'changelog.php' => [
|
|
'title' => __('Change Log'),
|
|
'mapping' => 'index.php:,changelog.php:',
|
|
'url' => 'changelog.php',
|
|
'level' => '2'
|
|
],
|
|
];
|
|
|
|
$snmpagent_event_severity = [
|
|
SNMPAGENT_EVENT_SEVERITY_LOW => 'low',
|
|
SNMPAGENT_EVENT_SEVERITY_MEDIUM => 'medium',
|
|
SNMPAGENT_EVENT_SEVERITY_HIGH => 'high',
|
|
SNMPAGENT_EVENT_SEVERITY_CRITICAL => 'critical'
|
|
];
|
|
|
|
$days_from_time_settings = [
|
|
'mods' => [
|
|
'y' => 31536000,
|
|
'd' => 86400,
|
|
'h' => 3600,
|
|
'm' => '60',
|
|
's' => 0,
|
|
],
|
|
'text' => [
|
|
DAYS_FORMAT_SHORT => [
|
|
'y' => 'y',
|
|
'd' => 'd',
|
|
'h' => 'h',
|
|
'm' => 'm',
|
|
's' => 's',
|
|
'suffix' => ':',
|
|
'prefix' => '',
|
|
],
|
|
DAYS_FORMAT_MEDIUM => [
|
|
'y' => __('years'),
|
|
'd' => __('days'),
|
|
'h' => __('hrs'),
|
|
'm' => __('mins'),
|
|
's' => __('secs'),
|
|
'suffix' => ', ',
|
|
'prefix' => ' ',
|
|
],
|
|
DAYS_FORMAT_MEDIUM_LOG => [
|
|
'y' => 'years',
|
|
'd' => 'days',
|
|
'h' => 'hrs',
|
|
'm' => 'mins',
|
|
's' => 'secs',
|
|
'suffix' => ', ',
|
|
'prefix' => ' ',
|
|
],
|
|
DAYS_FORMAT_LONG => [
|
|
'y' => __('years'),
|
|
'd' => __('days'),
|
|
'h' => __('hours'),
|
|
'm' => __('minutes'),
|
|
's' => __('seconds'),
|
|
'suffix' => ', ',
|
|
'prefix' => ' ',
|
|
],
|
|
DAYS_FORMAT_LONG_LOG => [
|
|
'y' => 'years',
|
|
'd' => 'days',
|
|
'h' => 'hours',
|
|
'm' => 'minutes',
|
|
's' => 'seconds',
|
|
'suffix' => ', ',
|
|
'prefix' => ' ',
|
|
],
|
|
],
|
|
];
|
|
|
|
$graph_sources = [
|
|
0 => __('Not Templated'),
|
|
1 => __('Data Query'),
|
|
2 => __('Template'),
|
|
3 => __('Aggregate'),
|
|
];
|
|
|
|
$sched_types = [
|
|
SCHEDULE_MANUAL => __('Manual'),
|
|
SCHEDULE_HOURLY => __('Hourly'),
|
|
SCHEDULE_DAILY => __('Daily'),
|
|
SCHEDULE_WEEKLY => __('Weekly'),
|
|
SCHEDULE_MONTHLY => __('Monthly'),
|
|
SCHEDULE_MONTHLY_ON_DAY => __('Monthly on Day')
|
|
];
|
|
|
|
if (CACTI_SERVER_OS == 'unix') {
|
|
$dejavu_paths = [
|
|
'/usr/share/fonts/dejavu/', // RHEL/CentOS
|
|
'/usr/share/fonts/truetype/', // SLES
|
|
'/usr/share/fonts/truetype/dejavu/', // Ubuntu
|
|
'/usr/local/share/fonts/dejavu/', // FreeBSD
|
|
__DIR__ . '/fonts' // Built-in
|
|
];
|
|
} else {
|
|
$dejavu_paths = [
|
|
'C:/Windows/Fonts/' // Windows
|
|
];
|
|
}
|
|
|
|
$allowed_proxy_headers = [
|
|
'X-Forwarded-For',
|
|
'X-Client-IP',
|
|
'X-Real-IP',
|
|
'X-ProxyUser-Ip',
|
|
'CF-Connecting-IP',
|
|
'True-Client-IP',
|
|
'HTTP_X_FORWARDED',
|
|
'HTTP_X_FORWARDED_FOR',
|
|
'HTTP_X_CLUSTER_CLIENT_IP',
|
|
'HTTP_FORWARDED_FOR',
|
|
'HTTP_FORWARDED',
|
|
'HTTP_CLIENT_IP',
|
|
'REMOTE_ADDR',
|
|
];
|
|
|
|
api_plugin_hook('config_arrays');
|