From 77c531527c0bf218038f8349e81f50d5386739a6 Mon Sep 17 00:00:00 2001 From: Jellyfrog Date: Mon, 21 Sep 2020 14:54:51 +0200 Subject: [PATCH] Apply fixes from StyleCI (#12117) * Apply fixes from StyleCI * Disable style check --- LibreNMS/Alert/AlertDB.php | 32 +- LibreNMS/Alert/AlertData.php | 1 + LibreNMS/Alert/AlertRules.php | 28 +- LibreNMS/Alert/AlertUtil.php | 54 +- LibreNMS/Alert/RunAlerts.php | 259 ++++--- LibreNMS/Alert/Template.php | 9 +- LibreNMS/Alert/Transport.php | 15 +- LibreNMS/Alert/Transport/Alerta.php | 20 +- LibreNMS/Alert/Transport/Alertmanager.php | 28 +- LibreNMS/Alert/Transport/Api.php | 25 +- LibreNMS/Alert/Transport/Boxcar.php | 23 +- LibreNMS/Alert/Transport/Canopsis.php | 41 +- LibreNMS/Alert/Transport/Ciscospark.php | 30 +- LibreNMS/Alert/Transport/Clickatell.php | 11 +- LibreNMS/Alert/Transport/Discord.php | 38 +- LibreNMS/Alert/Transport/Dummy.php | 4 +- LibreNMS/Alert/Transport/Elasticsearch.php | 120 +-- LibreNMS/Alert/Transport/Gitlab.php | 38 +- LibreNMS/Alert/Transport/Hipchat.php | 10 +- LibreNMS/Alert/Transport/Hue.php | 59 +- LibreNMS/Alert/Transport/Irc.php | 9 +- LibreNMS/Alert/Transport/Jira.php | 50 +- LibreNMS/Alert/Transport/Kayako.php | 33 +- LibreNMS/Alert/Transport/Linenotify.php | 11 +- LibreNMS/Alert/Transport/Mail.php | 9 +- LibreNMS/Alert/Transport/Matrix.php | 25 +- LibreNMS/Alert/Transport/Mattermost.php | 7 +- LibreNMS/Alert/Transport/Msteams.php | 31 +- LibreNMS/Alert/Transport/Nagios.php | 7 +- LibreNMS/Alert/Transport/Opsgenie.php | 19 +- LibreNMS/Alert/Transport/Osticket.php | 37 +- LibreNMS/Alert/Transport/Pagerduty.php | 16 +- LibreNMS/Alert/Transport/Playsms.php | 23 +- LibreNMS/Alert/Transport/Pushbullet.php | 24 +- LibreNMS/Alert/Transport/Pushover.php | 23 +- LibreNMS/Alert/Transport/Rocket.php | 33 +- LibreNMS/Alert/Transport/Sensu.php | 30 +- LibreNMS/Alert/Transport/Slack.php | 23 +- LibreNMS/Alert/Transport/Smseagle.php | 14 +- LibreNMS/Alert/Transport/Smsfeedback.php | 14 +- LibreNMS/Alert/Transport/Splunk.php | 34 +- LibreNMS/Alert/Transport/Syslog.php | 52 +- LibreNMS/Alert/Transport/Telegram.php | 64 +- LibreNMS/Alert/Transport/Twilio.php | 16 +- LibreNMS/Alert/Transport/Victorops.php | 24 +- LibreNMS/Alerting/QueryBuilderFilter.php | 6 +- .../Alerting/QueryBuilderFluentParser.php | 18 +- LibreNMS/Alerting/QueryBuilderParser.php | 33 +- .../ADAuthorizationAuthorizer.php | 15 +- .../ActiveDirectoryAuthorizer.php | 34 +- .../Authentication/ActiveDirectoryCommon.php | 25 +- LibreNMS/Authentication/AuthorizerBase.php | 1 + .../Authentication/HttpAuthAuthorizer.php | 2 - .../LdapAuthorizationAuthorizer.php | 53 +- LibreNMS/Authentication/LdapAuthorizer.php | 35 +- LibreNMS/Authentication/LdapSessionCache.php | 5 +- LibreNMS/Authentication/LegacyAuth.php | 10 +- LibreNMS/Authentication/MysqlAuthorizer.php | 21 +- LibreNMS/Authentication/RadiusAuthorizer.php | 3 +- LibreNMS/Authentication/SSOAuthorizer.php | 10 +- LibreNMS/Authentication/TwoFactor.php | 13 +- LibreNMS/Cache/Device.php | 16 +- LibreNMS/Component.php | 14 +- LibreNMS/ComposerHelper.php | 13 +- LibreNMS/Config.php | 62 +- LibreNMS/DB/Eloquent.php | 9 +- LibreNMS/DB/Schema.php | 18 +- LibreNMS/Data/Measure/Measurement.php | 1 + .../Data/Measure/MeasurementCollection.php | 3 +- LibreNMS/Data/Store/BaseDatastore.php | 2 +- LibreNMS/Data/Store/Datastore.php | 4 +- LibreNMS/Data/Store/Graphite.php | 3 +- LibreNMS/Data/Store/InfluxDB.php | 11 +- LibreNMS/Data/Store/OpenTSDB.php | 19 +- LibreNMS/Data/Store/Prometheus.php | 8 +- LibreNMS/Data/Store/Rrd.php | 61 +- LibreNMS/Device/Availability.php | 23 +- LibreNMS/Device/Processor.php | 40 +- LibreNMS/Device/Sensor.php | 78 +- LibreNMS/Device/WirelessSensor.php | 8 +- LibreNMS/Device/YamlDiscovery.php | 31 +- LibreNMS/Enum/Alert.php | 12 +- LibreNMS/Exceptions/FileExistsException.php | 1 - LibreNMS/Exceptions/FileNotFoundException.php | 1 - .../Exceptions/FilePermissionsException.php | 11 +- LibreNMS/Exceptions/HostExistsException.php | 1 - LibreNMS/Exceptions/HostIpExistsException.php | 1 - .../Exceptions/HostUnreachableException.php | 3 +- .../HostUnreachablePingException.php | 1 - .../HostUnreachableSnmpException.php | 1 - .../InvalidPortAssocModeException.php | 1 - .../Exceptions/InvalidRrdTypeException.php | 1 - LibreNMS/Exceptions/JsonAppException.php | 1 - .../JsonAppPollingFailedException.php | 1 - LibreNMS/Exceptions/LockException.php | 1 - .../MaximumExecutionTimeExceeded.php | 2 +- .../SnmpVersionUnsupportedException.php | 1 - LibreNMS/Fping.php | 14 +- LibreNMS/IRCBot.php | 432 ++++++----- LibreNMS/Interfaces/Data/Datastore.php | 4 +- LibreNMS/Model.php | 32 +- LibreNMS/Modules/Nac.php | 2 +- LibreNMS/Modules/OS.php | 4 +- LibreNMS/OS.php | 15 +- LibreNMS/OS/Aen.php | 8 +- LibreNMS/OS/Airos.php | 59 +- LibreNMS/OS/AirosAf.php | 21 +- LibreNMS/OS/AirosAfLtu.php | 24 +- LibreNMS/OS/Airport.php | 7 +- LibreNMS/OS/Aix.php | 4 +- LibreNMS/OS/AlcomaAlmp.php | 19 +- LibreNMS/OS/Alfo80hd.php | 22 +- LibreNMS/OS/Allied.php | 10 +- LibreNMS/OS/Aos.php | 4 +- LibreNMS/OS/Apc.php | 2 +- LibreNMS/OS/ApexLynx.php | 20 +- LibreNMS/OS/ApexPlus.php | 26 +- LibreNMS/OS/Aprisa.php | 31 +- LibreNMS/OS/Apsoluteos.php | 2 +- LibreNMS/OS/ArrisDsr4410md.php | 23 +- LibreNMS/OS/ArubaInstant.php | 35 +- LibreNMS/OS/Arubaos.php | 9 +- LibreNMS/OS/AsuswrtMerlin.php | 6 +- LibreNMS/OS/AviatWtm.php | 1 - LibreNMS/OS/Avocent.php | 10 +- LibreNMS/OS/Awplus.php | 2 +- LibreNMS/OS/Barracudangfirewall.php | 1 - LibreNMS/OS/Boss.php | 1 - LibreNMS/OS/Ceraos.php | 3 +- LibreNMS/OS/Ciscosat.php | 4 +- LibreNMS/OS/Ciscowlc.php | 16 +- LibreNMS/OS/Cnpilote.php | 33 +- LibreNMS/OS/Comware.php | 4 +- LibreNMS/OS/Coriant.php | 4 +- LibreNMS/OS/Deliberant.php | 4 +- LibreNMS/OS/Dhcpatriot.php | 4 +- LibreNMS/OS/Dlink.php | 2 +- LibreNMS/OS/Dlinkap.php | 2 +- LibreNMS/OS/Dnos.php | 2 +- LibreNMS/OS/Edgecos.php | 16 +- LibreNMS/OS/Epmp.php | 34 +- LibreNMS/OS/EricssonMl.php | 26 +- LibreNMS/OS/Ewc.php | 62 +- LibreNMS/OS/Extendair.php | 20 +- LibreNMS/OS/Extremeware.php | 1 - LibreNMS/OS/Fortigate.php | 2 +- LibreNMS/OS/Fortios.php | 2 +- LibreNMS/OS/Fortiwlc.php | 18 +- LibreNMS/OS/FsGbn.php | 3 +- LibreNMS/OS/FsSwitch.php | 1 + LibreNMS/OS/Generic.php | 1 - LibreNMS/OS/Gepulsar.php | 2 +- LibreNMS/OS/HarmonyEnhanced.php | 22 +- LibreNMS/OS/Helios.php | 6 +- LibreNMS/OS/HiveosWireless.php | 24 +- LibreNMS/OS/Horizon.php | 25 +- LibreNMS/OS/Hpmsm.php | 6 +- LibreNMS/OS/Ifotec.php | 8 +- LibreNMS/OS/Ios.php | 3 +- LibreNMS/OS/Iosxr.php | 10 +- LibreNMS/OS/Ird.php | 12 +- LibreNMS/OS/Ironware.php | 1 + LibreNMS/OS/Jetdirect.php | 2 +- LibreNMS/OS/Lcos.php | 10 +- LibreNMS/OS/Mimosa.php | 25 +- LibreNMS/OS/MoxaEtherdevice.php | 6 +- LibreNMS/OS/Netscaler.php | 1 - LibreNMS/OS/Nios.php | 27 +- LibreNMS/OS/Openwrt.php | 6 +- LibreNMS/OS/Packetlight.php | 11 +- LibreNMS/OS/Panos.php | 2 +- LibreNMS/OS/Pbn.php | 2 +- LibreNMS/OS/Pepwave.php | 31 +- LibreNMS/OS/Pfsense.php | 2 +- LibreNMS/OS/Pmp.php | 49 +- LibreNMS/OS/Powerconnect.php | 12 +- LibreNMS/OS/ProtelevisionT1.php | 12 +- LibreNMS/OS/Ptp250.php | 29 +- LibreNMS/OS/Ptp500.php | 19 +- LibreNMS/OS/Ptp600.php | 22 +- LibreNMS/OS/Ptp650.php | 20 +- LibreNMS/OS/Ptp670.php | 20 +- LibreNMS/OS/Ptp800.php | 15 +- LibreNMS/OS/Pulse.php | 4 +- LibreNMS/OS/Radlan.php | 4 +- LibreNMS/OS/Radwin.php | 24 +- LibreNMS/OS/Ray.php | 32 +- LibreNMS/OS/Ray3.php | 26 +- LibreNMS/OS/Routeros.php | 66 +- LibreNMS/OS/Ruckuswireless.php | 19 +- LibreNMS/OS/RuckuswirelessHotzone.php | 28 +- LibreNMS/OS/RuckuswirelessSz.php | 19 +- LibreNMS/OS/RuckuswirelessUnleashed.php | 18 +- LibreNMS/OS/Rutos2xx.php | 12 +- LibreNMS/OS/Saf.php | 16 +- LibreNMS/OS/SafCfm.php | 14 +- LibreNMS/OS/SafIntegraB.php | 20 +- LibreNMS/OS/SafIntegraE.php | 20 +- LibreNMS/OS/SafIntegraW.php | 20 +- LibreNMS/OS/Schleifenbauer.php | 4 +- LibreNMS/OS/Secureplatform.php | 4 +- LibreNMS/OS/Serveriron.php | 1 - LibreNMS/OS/Sgos.php | 3 +- LibreNMS/OS/Shared/Cisco.php | 30 +- LibreNMS/OS/Shared/Foundry.php | 4 +- LibreNMS/OS/Shared/Unix.php | 12 +- LibreNMS/OS/Shared/Zyxel.php | 3 +- LibreNMS/OS/Siklu.php | 20 +- LibreNMS/OS/SmOs.php | 7 +- LibreNMS/OS/Sonicwall.php | 12 +- LibreNMS/OS/Symbol.php | 9 +- LibreNMS/OS/Terra.php | 6 +- LibreNMS/OS/ThreeCom.php | 1 + LibreNMS/OS/Timos.php | 37 +- LibreNMS/OS/Traits/CiscoCellular.php | 4 +- LibreNMS/OS/Traits/FrogfootResources.php | 6 +- LibreNMS/OS/Traits/HostResources.php | 16 +- LibreNMS/OS/Traits/UcdResources.php | 7 +- LibreNMS/OS/Traits/VxworksProcessorUsage.php | 11 +- LibreNMS/OS/Traits/YamlOSDiscovery.php | 5 +- LibreNMS/OS/Unifi.php | 49 +- LibreNMS/OS/Viptela.php | 2 +- LibreNMS/OS/Vrp.php | 50 +- LibreNMS/OS/XirrusAos.php | 12 +- LibreNMS/OS/Xos.php | 1 - LibreNMS/OS/Zynos.php | 2 +- LibreNMS/OS/Zyxelnwa.php | 8 +- LibreNMS/ObjectCache.php | 47 +- LibreNMS/Permissions.php | 37 +- LibreNMS/Plugins.php | 33 +- LibreNMS/Proc.php | 34 +- LibreNMS/RRD/RrdDefinition.php | 5 +- LibreNMS/RRDRecursiveFilterIterator.php | 3 +- LibreNMS/Snmptrap/Dispatcher.php | 6 +- .../AdvaAccThresholdCrossingAlert.php | 1 + .../Snmptrap/Handlers/AdvaAttributeChange.php | 15 + .../AdvaNetThresholdCrossingAlert.php | 3 + .../Snmptrap/Handlers/AdvaObjectCreation.php | 1 - .../Handlers/BgpBackwardTransition.php | 3 +- LibreNMS/Snmptrap/Handlers/BgpEstablished.php | 3 +- .../Snmptrap/Handlers/EquipStatusTrap.php | 1 + LibreNMS/Snmptrap/Handlers/Fallback.php | 3 +- .../Handlers/JnxBgpM2BackwardTransition.php | 3 +- .../Snmptrap/Handlers/JnxBgpM2Established.php | 4 +- LibreNMS/Snmptrap/Handlers/JnxCmCfgChange.php | 2 +- .../Snmptrap/Handlers/JnxDomAlarmCleared.php | 2 +- LibreNMS/Snmptrap/Handlers/JnxDomAlarmId.php | 45 +- LibreNMS/Snmptrap/Handlers/JnxDomAlarmSet.php | 2 +- .../Handlers/JnxDomLaneAlarmCleared.php | 5 +- .../Snmptrap/Handlers/JnxDomLaneAlarmId.php | 3 +- .../Snmptrap/Handlers/JnxDomLaneAlarmSet.php | 5 +- LibreNMS/Snmptrap/Handlers/JnxLdpLspDown.php | 2 +- LibreNMS/Snmptrap/Handlers/JnxLdpLspUp.php | 2 +- LibreNMS/Snmptrap/Handlers/JnxLdpSesDown.php | 4 +- LibreNMS/Snmptrap/Handlers/JnxLdpSesUp.php | 4 +- LibreNMS/Snmptrap/Handlers/JnxVpnIfDown.php | 1 - LibreNMS/Snmptrap/Handlers/JnxVpnPwDown.php | 3 +- LibreNMS/Snmptrap/Handlers/LinkDown.php | 3 +- LibreNMS/Snmptrap/Handlers/LinkUp.php | 4 +- LibreNMS/Snmptrap/Handlers/LogTrap.php | 16 +- .../Snmptrap/Handlers/OspfIfStateChange.php | 3 +- LibreNMS/Snmptrap/Handlers/RuckusSzApConf.php | 2 +- .../Snmptrap/Handlers/RuckusSzApConnect.php | 2 +- .../Snmptrap/Handlers/RuckusSzApMiscEvent.php | 2 +- .../Snmptrap/Handlers/RuckusSzApReboot.php | 2 +- .../Snmptrap/Handlers/RuckusSzSeverity.php | 1 + .../Snmptrap/Handlers/UpsTrapsOnBattery.php | 13 +- .../Snmptrap/Handlers/UpsmgUtilityFailure.php | 5 +- .../Handlers/UpsmgUtilityRestored.php | 5 +- LibreNMS/Snmptrap/Trap.php | 7 +- LibreNMS/Util/CiHelper.php | 41 +- LibreNMS/Util/Clean.php | 2 +- LibreNMS/Util/Colors.php | 10 +- LibreNMS/Util/DynamicConfig.php | 5 +- LibreNMS/Util/DynamicConfigItem.php | 12 +- LibreNMS/Util/EnvHelper.php | 12 +- LibreNMS/Util/FileCategorizer.php | 3 +- LibreNMS/Util/FileLock.php | 3 +- LibreNMS/Util/Git.php | 2 + LibreNMS/Util/GitHub.php | 40 +- LibreNMS/Util/Graph.php | 2 + LibreNMS/Util/Html.php | 19 +- LibreNMS/Util/IP.php | 23 +- LibreNMS/Util/IPv4.php | 18 +- LibreNMS/Util/IPv6.php | 13 +- LibreNMS/Util/Laravel.php | 6 +- LibreNMS/Util/MemcacheLock.php | 4 +- LibreNMS/Util/ModuleModelObserver.php | 4 +- LibreNMS/Util/ModuleTestHelper.php | 27 +- LibreNMS/Util/OS.php | 5 +- LibreNMS/Util/ObjectCache.php | 15 +- LibreNMS/Util/Rewrite.php | 11 +- LibreNMS/Util/Smokeping.php | 8 +- LibreNMS/Util/Snmpsim.php | 11 +- LibreNMS/Util/Time.php | 1 - LibreNMS/Util/Url.php | 39 +- LibreNMS/Util/Validate.php | 7 +- LibreNMS/Util/Version.php | 1 + LibreNMS/ValidationResult.php | 11 +- LibreNMS/Validations/BaseValidation.php | 2 +- LibreNMS/Validations/Configuration.php | 2 +- LibreNMS/Validations/Database.php | 32 +- LibreNMS/Validations/Dependencies.php | 13 +- LibreNMS/Validations/DistributedPoller.php | 14 +- LibreNMS/Validations/Mail.php | 12 +- LibreNMS/Validations/Php.php | 18 +- LibreNMS/Validations/Programs.php | 12 +- LibreNMS/Validations/Python.php | 1 + LibreNMS/Validations/Rrd.php | 5 +- LibreNMS/Validations/RrdCheck.php | 15 +- LibreNMS/Validations/Updates.php | 9 +- LibreNMS/Validations/User.php | 17 +- LibreNMS/Validator.php | 24 +- addhost.php | 48 +- adduser.php | 8 +- alerts.php | 10 +- app/ApiClients/BingApi.php | 6 +- app/ApiClients/GeocodingHelper.php | 3 +- app/ApiClients/GoogleMapsApi.php | 4 +- app/ApiClients/GraylogApi.php | 6 +- app/ApiClients/MapquestApi.php | 4 +- app/ApiClients/NominatimApi.php | 2 +- app/ApiClients/RipeApi.php | 8 +- app/Application.php | 2 +- app/Checks.php | 18 +- app/Console/Commands/AddUserCommand.php | 7 +- .../Commands/BashCompletionCommand.php | 12 +- app/Console/Commands/DevCheckCommand.php | 2 +- app/Console/Commands/GetConfigCommand.php | 7 +- app/Console/Commands/SetConfigCommand.php | 15 +- .../Commands/SmokepingGenerateCommand.php | 35 +- .../Traits/CompletesConfigArgument.php | 1 + .../Commands/TranslationGenerateCommand.php | 2 +- app/Console/Kernel.php | 2 +- app/Console/LnmsCommand.php | 1 + app/Console/ModelMakeCommand.php | 2 +- app/Exceptions/Handler.php | 8 +- .../Ajax/AvailabilityMapController.php | 4 +- app/Http/Controllers/Ajax/NetCommand.php | 6 +- .../Controllers/Ajax/ResolutionController.php | 4 +- app/Http/Controllers/Auth/LoginController.php | 2 + .../Controllers/Auth/RegisterController.php | 4 +- .../Controllers/Auth/TwoFactorController.php | 8 +- app/Http/Controllers/Controller.php | 6 +- .../Device/Tabs/LatencyController.php | 1 - .../Device/Tabs/LoadBalancerController.php | 2 +- .../Device/Tabs/NetflowController.php | 6 +- .../Device/Tabs/NotesController.php | 4 +- .../Device/Tabs/RoutingController.php | 2 +- .../Device/Tabs/ServicesController.php | 2 +- .../Device/Tabs/ShowConfigController.php | 9 +- .../Device/Tabs/SlasController.php | 1 - .../Device/Tabs/WirelessController.php | 1 - app/Http/Controllers/DeviceController.php | 5 +- .../Controllers/DeviceGroupController.php | 5 +- .../Form/WidgetSettingsController.php | 10 +- .../Controllers/Install/ChecksController.php | 4 +- .../Install/DatabaseController.php | 7 +- .../Install/FinalizeController.php | 7 +- .../Install/InstallationController.php | 13 +- .../Install/MakeUserController.php | 9 +- app/Http/Controllers/LegacyController.php | 11 +- app/Http/Controllers/LocationController.php | 1 - .../Maps/DeviceDependencyController.php | 6 +- app/Http/Controllers/Maps/MapController.php | 30 +- app/Http/Controllers/OverviewController.php | 52 +- app/Http/Controllers/PollerController.php | 8 +- .../Controllers/PollerGroupController.php | 1 + .../Controllers/PollerSettingsController.php | 6 +- .../Controllers/Select/DeviceController.php | 2 +- .../Select/GraphAggregateController.php | 6 +- .../Controllers/Select/GraphController.php | 18 +- .../Select/GraylogStreamsController.php | 4 +- .../Select/MuninPluginController.php | 3 +- .../Controllers/Select/PortController.php | 2 +- .../Controllers/Select/SelectController.php | 3 +- .../Controllers/Select/ServiceController.php | 3 +- app/Http/Controllers/SettingsController.php | 6 +- .../Table/AlertScheduleController.php | 2 +- .../Controllers/Table/CustomersController.php | 1 + .../Controllers/Table/DeviceController.php | 10 +- .../Controllers/Table/EventlogController.php | 6 +- .../Controllers/Table/FdbTablesController.php | 8 +- .../Controllers/Table/GraylogController.php | 18 +- .../Controllers/Table/OutagesController.php | 10 +- .../Controllers/Table/PortNacController.php | 2 +- .../Table/RoutesTablesController.php | 33 +- .../Controllers/Table/SyslogController.php | 4 +- .../Controllers/Table/TableController.php | 1 + app/Http/Controllers/UserController.php | 7 +- .../Controllers/UserPreferencesController.php | 14 +- .../Widgets/AlertlogController.php | 2 +- .../Widgets/AlertlogStatsController.php | 2 +- .../Widgets/AvailabilityMapController.php | 12 +- .../Widgets/ComponentStatusController.php | 2 +- .../Widgets/DeviceSummaryController.php | 4 +- .../Controllers/Widgets/GlobeController.php | 6 +- .../Controllers/Widgets/GraphController.php | 31 +- .../Controllers/Widgets/ImageController.php | 2 +- .../Widgets/TopDevicesController.php | 7 +- .../Widgets/TopInterfacesController.php | 1 - .../Controllers/Widgets/WidgetController.php | 16 +- .../Widgets/WorldMapController.php | 3 +- app/Http/Middleware/CheckInstalled.php | 4 +- app/Http/Middleware/LegacyExternalAuth.php | 6 +- app/Http/Middleware/LoadUserPreferences.php | 2 +- app/Http/Middleware/VerifyCsrfToken.php | 2 +- app/Http/Middleware/VerifyTwoFactor.php | 4 +- .../Requests/TwoFactorManagementRequest.php | 2 +- app/Http/Requests/UpdateUserRequest.php | 5 +- app/Http/ViewComposers/LayoutComposer.php | 2 +- app/Http/ViewComposers/MenuComposer.php | 11 +- app/Jobs/PingCheck.php | 20 +- app/Listeners/AuthEventListener.php | 4 +- app/Listeners/MarkNotificationsRead.php | 2 +- app/Models/AlertRule.php | 2 +- app/Models/AlertSchedule.php | 3 +- app/Models/ApiToken.php | 2 +- app/Models/BaseModel.php | 3 +- app/Models/BgpPeer.php | 1 - app/Models/Component.php | 6 +- app/Models/ComponentPref.php | 2 +- app/Models/ComponentStatusLog.php | 2 +- app/Models/Config.php | 2 +- app/Models/Device.php | 19 +- app/Models/DeviceGroup.php | 5 +- app/Models/DeviceOutage.php | 2 +- app/Models/DiskIo.php | 1 - app/Models/EntPhysical.php | 1 - app/Models/HrDevice.php | 1 - app/Models/Location.php | 10 +- app/Models/Mempool.php | 1 - app/Models/MplsSap.php | 2 +- app/Models/Notification.php | 4 +- app/Models/PollerCluster.php | 18 +- app/Models/PollerClusterStat.php | 2 +- app/Models/Port.php | 13 +- app/Models/Processor.php | 4 +- app/Models/Route.php | 2 +- app/Models/Sensor.php | 1 + app/Models/User.php | 17 +- app/Models/UserPref.php | 3 +- app/Observers/DeviceObserver.php | 2 +- app/Policies/DeviceGroupPolicy.php | 2 +- app/Policies/DevicePolicy.php | 2 +- app/Policies/PollerClusterPolicy.php | 2 +- app/Policies/PortPolicy.php | 2 +- app/Policies/UserPolicy.php | 1 - app/Providers/AppServiceProvider.php | 10 +- app/Providers/AuthServiceProvider.php | 3 +- app/Providers/BroadcastServiceProvider.php | 2 +- app/Providers/EventServiceProvider.php | 2 +- app/Providers/LegacyUserProvider.php | 9 +- app/Providers/RouteServiceProvider.php | 2 +- app/Providers/SnmptrapProvider.php | 1 + app/Providers/TokenUserProvider.php | 5 +- app/View/Components/Panel.php | 2 - billing-calculate.php | 69 +- build-base.php | 3 +- check-services.php | 35 +- config/cache.php | 2 +- config/database.php | 4 +- config/debugbar.php | 12 +- config/filesystems.php | 2 +- config/librenms.php | 1 - config/session.php | 2 +- config/snmptraps.php | 2 +- config/toastr.php | 2 +- contrib/generate-iplist.php | 14 +- daily.php | 37 +- database/factories/ModelFactory.php | 7 +- ...7_03_091314_create_access_points_table.php | 3 +- ...3_091314_create_alert_device_map_table.php | 3 +- ...03_091314_create_alert_group_map_table.php | 3 +- ...18_07_03_091314_create_alert_log_table.php | 1 - ..._07_03_091314_create_alert_rules_table.php | 4 +- ...091314_create_alert_schedulables_table.php | 1 - ..._03_091314_create_alert_schedule_table.php | 1 - ...091314_create_alert_template_map_table.php | 3 +- ...03_091314_create_alert_templates_table.php | 2 - ...14_create_alert_transport_groups_table.php | 2 - ...91314_create_alert_transport_map_table.php | 2 - ...3_091314_create_alert_transports_table.php | 2 - .../2018_07_03_091314_create_alerts_table.php | 4 +- ...8_07_03_091314_create_api_tokens_table.php | 1 - ...91314_create_application_metrics_table.php | 3 +- ...07_03_091314_create_applications_table.php | 3 +- ...2018_07_03_091314_create_authlog_table.php | 1 - ...7_03_091314_create_bgpPeers_cbgp_table.php | 5 +- ...018_07_03_091314_create_bgpPeers_table.php | 3 +- ...18_07_03_091314_create_bill_data_table.php | 4 +- ...07_03_091314_create_bill_history_table.php | 3 +- ...8_07_03_091314_create_bill_perms_table.php | 1 - ...091314_create_bill_port_counters_table.php | 3 +- ...8_07_03_091314_create_bill_ports_table.php | 1 - .../2018_07_03_091314_create_bills_table.php | 1 - ...018_07_03_091314_create_callback_table.php | 1 - ...7_03_091314_create_cef_switching_table.php | 3 +- ...018_07_03_091314_create_ciscoASA_table.php | 1 - ...03_091314_create_component_prefs_table.php | 1 - ...91314_create_component_statuslog_table.php | 1 - ...18_07_03_091314_create_component_table.php | 1 - .../2018_07_03_091314_create_config_table.php | 5 +- ...18_07_03_091314_create_customers_table.php | 1 - ...8_07_03_091314_create_dashboards_table.php | 1 - ...018_07_03_091314_create_dbSchema_table.php | 1 - ...7_03_091314_create_device_graphs_table.php | 1 - ...91314_create_device_group_device_table.php | 3 +- ...7_03_091314_create_device_groups_table.php | 1 - ..._07_03_091314_create_device_mibs_table.php | 3 +- ..._07_03_091314_create_device_oids_table.php | 3 +- ..._07_03_091314_create_device_perf_table.php | 1 - ...1314_create_device_relationships_table.php | 3 +- ...03_091314_create_devices_attribs_table.php | 1 - ...7_03_091314_create_devices_perms_table.php | 1 - ...2018_07_03_091314_create_devices_table.php | 7 +- ..._091314_create_entPhysical_state_table.php | 3 +- ..._07_03_091314_create_entPhysical_table.php | 1 - ..._07_03_091314_create_entityState_table.php | 1 - ...018_07_03_091314_create_eventlog_table.php | 1 - ..._07_03_091314_create_graph_types_table.php | 3 +- ...018_07_03_091314_create_hrDevice_table.php | 1 - ...7_03_091314_create_ipsec_tunnels_table.php | 3 +- ..._03_091314_create_ipv4_addresses_table.php | 1 - ...018_07_03_091314_create_ipv4_mac_table.php | 1 - ...7_03_091314_create_ipv4_networks_table.php | 1 - ..._03_091314_create_ipv6_addresses_table.php | 1 - ...7_03_091314_create_ipv6_networks_table.php | 1 - ...18_07_03_091314_create_juniAtmVp_table.php | 1 - .../2018_07_03_091314_create_links_table.php | 4 +- ...314_create_loadbalancer_rservers_table.php | 1 - ...314_create_loadbalancer_vservers_table.php | 1 - ...18_07_03_091314_create_locations_table.php | 1 - ..._03_091314_create_mac_accounting_table.php | 1 - ...2018_07_03_091314_create_mefinfo_table.php | 1 - ...018_07_03_091314_create_mempools_table.php | 1 - ...2018_07_03_091314_create_mibdefs_table.php | 3 +- ...3_091314_create_munin_plugins_ds_table.php | 7 +- ...7_03_091314_create_munin_plugins_table.php | 3 +- ...091314_create_netscaler_vservers_table.php | 1 - ...314_create_notifications_attribs_table.php | 1 - ...7_03_091314_create_notifications_table.php | 1 - ...8_07_03_091314_create_ospf_areas_table.php | 3 +- ..._03_091314_create_ospf_instances_table.php | 3 +- ...18_07_03_091314_create_ospf_nbrs_table.php | 3 +- ...8_07_03_091314_create_ospf_ports_table.php | 3 +- ...018_07_03_091314_create_packages_table.php | 3 +- ...07_03_091314_create_pdb_ix_peers_table.php | 1 - .../2018_07_03_091314_create_pdb_ix_table.php | 1 - ...8_07_03_091314_create_perf_times_table.php | 1 - ...2018_07_03_091314_create_plugins_table.php | 1 - ...1314_create_poller_cluster_stats_table.php | 1 - ..._03_091314_create_poller_cluster_table.php | 1 - ...7_03_091314_create_poller_groups_table.php | 1 - ...2018_07_03_091314_create_pollers_table.php | 1 - ...8_07_03_091314_create_ports_adsl_table.php | 1 - ...18_07_03_091314_create_ports_fdb_table.php | 1 - ...18_07_03_091314_create_ports_nac_table.php | 4 +- ..._07_03_091314_create_ports_perms_table.php | 1 - ..._07_03_091314_create_ports_stack_table.php | 3 +- ...3_091314_create_ports_statistics_table.php | 1 - ...18_07_03_091314_create_ports_stp_table.php | 3 +- .../2018_07_03_091314_create_ports_table.php | 3 +- ..._07_03_091314_create_ports_vlans_table.php | 3 +- ...18_07_03_091314_create_processes_table.php | 1 - ...8_07_03_091314_create_processors_table.php | 1 - ...7_03_091314_create_proxmox_ports_table.php | 3 +- ...2018_07_03_091314_create_proxmox_table.php | 3 +- ..._07_03_091314_create_pseudowires_table.php | 1 - .../2018_07_03_091314_create_route_table.php | 3 +- ...2018_07_03_091314_create_sensors_table.php | 3 +- ..._create_sensors_to_state_indexes_table.php | 3 +- ...018_07_03_091314_create_services_table.php | 1 - ...2018_07_03_091314_create_session_table.php | 1 - .../2018_07_03_091314_create_slas_table.php | 3 +- ...7_03_091314_create_state_indexes_table.php | 1 - ...091314_create_state_translations_table.php | 3 +- ...2018_07_03_091314_create_storage_table.php | 3 +- .../2018_07_03_091314_create_syslog_table.php | 3 +- ...8_07_03_091314_create_tnmsneinfo_table.php | 1 - .../2018_07_03_091314_create_toner_table.php | 1 - ...create_transport_group_transport_table.php | 2 - ...8_07_03_091314_create_ucd_diskio_table.php | 1 - ..._07_03_091314_create_users_prefs_table.php | 3 +- .../2018_07_03_091314_create_users_table.php | 1 - ...7_03_091314_create_users_widgets_table.php | 3 +- .../2018_07_03_091314_create_vlans_table.php | 3 +- .../2018_07_03_091314_create_vminfo_table.php | 1 - ..._03_091314_create_vrf_lite_cisco_table.php | 3 +- .../2018_07_03_091314_create_vrfs_table.php | 1 - ...2018_07_03_091314_create_widgets_table.php | 1 - ...3_091314_create_wireless_sensors_table.php | 1 - ..._foreign_keys_to_component_prefs_table.php | 1 - ...eign_keys_to_component_statuslog_table.php | 2 - ...eign_keys_to_device_group_device_table.php | 2 - ...ign_keys_to_device_relationships_table.php | 1 - ...1322_add_foreign_keys_to_sensors_table.php | 1 - ...keys_to_sensors_to_state_indexes_table.php | 1 - ...foreign_keys_to_wireless_sensors_table.php | 1 - ..._16_132200_add_vlan_and_elapsed_to_nac.php | 1 - ...01_16_195644_add_vrf_id_and_bgpLocalAs.php | 4 +- ...40857_remove_config_definition_from_db.php | 4 +- .../2019_02_10_220000_add_dates_to_fdb.php | 13 +- .../2019_04_22_220000_update_route_table.php | 39 +- ...19_05_12_202407_create_mpls_lsps_table.php | 14 +- ..._12_202408_create_mpls_lsp_paths_table.php | 14 +- ...019_05_30_225937_device_groups_rewrite.php | 4 +- ...19_06_30_190400_create_mpls_sdps_table.php | 16 +- ..._30_190401_create_mpls_sdp_binds_table.php | 14 +- ...6_30_190402_create_mpls_services_table.php | 18 +- ...19_07_03_132417_create_mpls_saps_table.php | 12 +- ...9_150217_update_users_widgets_settings.php | 6 +- ...2019_08_10_223200_add_enabled_to_users.php | 1 - ...19_08_28_105051_fix-template-linefeeds.php | 4 +- ...524_create_notifications_attribs_index.php | 5 +- ...lt_mempool_perc_warn_in_mempools_table.php | 4 +- .../2019_10_03_211702_serialize_config.php | 10 +- .../2019_10_21_105350_devices_group_perms.php | 6 +- ...91013_create_mpls_tunnel_ar_hops_table.php | 16 +- ...191013_create_mpls_tunnel_c_hops_table.php | 8 +- ...14_add_indexes_to_mpls_lsp_paths_table.php | 4 +- ...ts_disable_on_update_current_timestamp.php | 1 - ...9_12_16_140000_create_customoids_table.php | 5 +- ...7_151314_add_invert_map_to_alert_rules.php | 1 - ..._28_180000_add_overwrite_ip_to_devices.php | 2 +- ..._09_1300_migrate_devices_attribs_table.php | 1 - ...1_10_075852_alter_mpls_lsp_paths_table.php | 4 +- ...0_02_05_093457_add_inserted_to_devices.php | 4 +- ...2020_02_05_224042_device_inserted_null.php | 4 +- ...223323_create_alert_location_map_table.php | 3 +- ..._0844_add_primary_key_to_device_graphs.php | 3 +- .../2020_03_25_165300_add_column_to_ports.php | 2 +- ...20_04_06_001048_the_great_index_rename.php | 5 +- ...500_add_last_error_fields_to_bgp_peers.php | 2 +- ...0532_eventlog_sensor_reference_cleanup.php | 4 +- .../2020_05_22_020303_alter_metric_column.php | 4 +- ...0_05_24_212054_poller_cluster_settings.php | 2 +- ...05_30_162638_remove_mib_polling_tables.php | 6 +- ..._06_222222_create_device_outages_table.php | 3 +- ...3_00522_alter_availability_perc_column.php | 5 +- database/seeds/DefaultAlertTemplateSeeder.php | 12 +- database/seeds/DefaultLegacySchemaSeeder.php | 2 +- database/seeds/DefaultWidgetSeeder.php | 4 +- delhost.php | 7 +- discovery.php | 44 +- dist-pollers.php | 16 +- html/ajax_dash.php | 2 +- html/ajax_form.php | 10 +- html/ajax_list.php | 12 +- html/ajax_listports.php | 15 +- html/ajax_ossuggest.php | 17 +- html/ajax_output.php | 8 +- html/ajax_search.php | 112 ++- html/ajax_table.php | 10 +- html/api_v0.php | 4 +- html/bandwidth-graph.php | 9 +- html/billing-graph.php | 8 +- html/csv.php | 8 +- html/data.php | 19 +- html/graph-realtime.php | 138 ++-- html/graph.php | 8 +- html/index.php | 4 +- html/network-map.php | 37 +- html/pdf.php | 6 +- html/plugins/Test/Test.php | 25 +- irc.php | 2 +- poll-billing.php | 65 +- poller.php | 26 +- renamehost.php | 6 +- resources/lang/de/settings.php | 388 +++++----- resources/lang/de/syslog.php | 2 +- resources/lang/en/bgp.php | 6 +- resources/lang/en/commands.php | 6 +- resources/lang/en/exceptions.php | 13 +- resources/lang/en/install.php | 15 +- resources/lang/en/poller.php | 47 +- resources/lang/en/settings.php | 688 +++++++++--------- resources/lang/en/smokeping.php | 1 + resources/lang/en/syslog.php | 2 +- resources/lang/fr/settings.php | 490 ++++++------- resources/lang/it/commands.php | 2 +- resources/lang/it/settings.php | 664 ++++++++--------- resources/lang/it/syslog.php | 2 +- resources/lang/zh-CN/settings.php | 394 +++++----- resources/lang/zh-CN/syslog.php | 2 +- resources/lang/zh-TW/settings.php | 460 ++++++------ resources/lang/zh-TW/syslog.php | 2 +- routes/api.php | 3 - routes/console.php | 18 +- routes/web.php | 1 - scripts/auth_test.php | 10 +- scripts/collect-port-polling.php | 29 +- scripts/collect-snmp-data.php | 12 +- scripts/composer_wrapper.php | 8 +- scripts/gen_rancid.php | 47 +- scripts/gen_smokeping.php | 3 +- scripts/json-app-tool.php | 76 +- scripts/manage_bills.php | 109 ++- scripts/new-os.php | 7 +- scripts/purge-port.php | 7 +- scripts/removespikes.php | 204 +++--- scripts/rename-mibs.php | 12 +- scripts/rrdstep.php | 14 +- scripts/save-test-data.php | 24 +- scripts/test-alert.php | 2 +- scripts/test-template.php | 14 +- scripts/tune_port.php | 10 +- server.php | 5 +- snmptrap.php | 1 - syslog.php | 8 +- tests/AddHostCliTest.php | 34 +- tests/AddHostTest.php | 4 +- tests/AlertingTest.php | 11 +- tests/AuthHTTPTest.php | 4 +- tests/AuthSSOTest.php | 1 - tests/BasicApiTest.php | 2 +- tests/Browser/LoginTest.php | 4 +- tests/CommonFunctionsTest.php | 43 +- tests/ConfigTest.php | 21 +- tests/CreatesApplication.php | 2 +- tests/DBSetupTest.php | 2 +- tests/DBTestCase.php | 2 +- tests/DocsTest.php | 4 +- tests/Feature/SnmpTraps/CommonTrapTest.php | 2 +- tests/Feature/SnmpTraps/JnxBgpM2Test.php | 2 - .../Feature/SnmpTraps/JnxCmCfgChangeTest.php | 1 - tests/Feature/SnmpTraps/PortsTrapTest.php | 1 - tests/FunctionsTest.php | 70 +- tests/IpTest.php | 1 - tests/MibTest.php | 19 +- tests/OSDiscoveryTest.php | 12 +- tests/OSModulesTest.php | 4 +- tests/QueryBuilderTest.php | 4 +- tests/RrdDefinitionTest.php | 5 +- tests/RrdtoolTest.php | 2 - tests/SVGTest.php | 1 + tests/SchemaTest.php | 23 +- tests/SmokepingCliTest.php | 54 +- tests/SnmpsimHelpers.php | 5 +- tests/SyslogTest.php | 101 +-- tests/TestCase.php | 1 + tests/Unit/ComponentTest.php | 1 + tests/Unit/Data/DatastoreTest.php | 2 +- tests/Unit/Data/GraphiteStoreTest.php | 6 +- tests/Unit/Data/OpenTSDBStoreTest.php | 4 +- tests/Unit/Data/PrometheusStoreTest.php | 8 +- tests/Unit/FileCategorizerTest.php | 40 +- tests/Unit/PermissionsTest.php | 93 +-- tests/YamlTest.php | 3 +- tests/bootstrap.php | 6 +- tests/mocks/mock.snmp.inc.php | 15 +- validate.php | 21 +- 752 files changed, 6238 insertions(+), 5833 deletions(-) diff --git a/LibreNMS/Alert/AlertDB.php b/LibreNMS/Alert/AlertDB.php index 50e9ea5264..12e3e8f4b8 100644 --- a/LibreNMS/Alert/AlertDB.php +++ b/LibreNMS/Alert/AlertDB.php @@ -38,7 +38,6 @@ use LibreNMS\Alerting\QueryBuilderParser; class AlertDB { - /** * @param $rule * @param $query_builder @@ -56,7 +55,7 @@ class AlertDB /** * Generate SQL from Rule * @param string $rule Rule to generate SQL for - * @return string|boolean + * @return string|bool */ public static function genSQLOld($rule) { @@ -66,29 +65,29 @@ class AlertDB return false; } //Pretty-print rule to dissect easier - $pretty = array('&&' => ' && ', '||' => ' || '); + $pretty = ['&&' => ' && ', '||' => ' || ']; $rule = str_replace(array_keys($pretty), $pretty, $rule); $tmp = explode(" ", $rule); - $tables = array(); + $tables = []; foreach ($tmp as $opt) { if (strstr($opt, '%') && strstr($opt, '.')) { $tmpp = explode(".", $opt, 2); $tmpp[0] = str_replace("%", "", $tmpp[0]); $tables[] = mres(str_replace("(", "", $tmpp[0])); - $rule = str_replace($opt, $tmpp[0].'.'.$tmpp[1], $rule); + $rule = str_replace($opt, $tmpp[0] . '.' . $tmpp[1], $rule); } } $tables = array_keys(array_flip($tables)); - if (dbFetchCell('SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_NAME = ? && COLUMN_NAME = ?', array($tables[0],'device_id')) != 1) { + if (dbFetchCell('SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_NAME = ? && COLUMN_NAME = ?', [$tables[0], 'device_id']) != 1) { //Our first table has no valid glue, append the 'devices' table to it! array_unshift($tables, 'devices'); } - $x = sizeof($tables)-1; + $x = sizeof($tables) - 1; $i = 0; $join = ""; while ($i < $x) { - if (isset($tables[$i+1])) { - $gtmp = ResolveGlues(array($tables[$i+1]), 'device_id'); + if (isset($tables[$i + 1])) { + $gtmp = ResolveGlues([$tables[$i + 1]], 'device_id'); if ($gtmp === false) { //Cannot resolve glue-chain. Rule is invalid. return false; @@ -97,22 +96,23 @@ class AlertDB $qry = ""; foreach ($gtmp as $glue) { if (empty($last)) { - list($tmp,$last) = explode('.', $glue); - $qry .= $glue.' = '; + [$tmp,$last] = explode('.', $glue); + $qry .= $glue . ' = '; } else { - list($tmp,$new) = explode('.', $glue); - $qry .= $tmp.'.'.$last.' && '.$tmp.'.'.$new.' = '; + [$tmp,$new] = explode('.', $glue); + $qry .= $tmp . '.' . $last . ' && ' . $tmp . '.' . $new . ' = '; $last = $new; } - if (!in_array($tmp, $tables)) { + if (! in_array($tmp, $tables)) { $tables[] = $tmp; } } - $join .= "( ".$qry.$tables[0].".device_id ) && "; + $join .= "( " . $qry . $tables[0] . ".device_id ) && "; } $i++; } - $sql = "SELECT * FROM ".implode(",", $tables)." WHERE (".$join."".str_replace("(", "", $tables[0]).".device_id = ?) && (".str_replace(array("%","@","!~","~"), array("",".*","NOT REGEXP","REGEXP"), $rule).")"; + $sql = "SELECT * FROM " . implode(",", $tables) . " WHERE (" . $join . "" . str_replace("(", "", $tables[0]) . ".device_id = ?) && (" . str_replace(["%", "@", "!~", "~"], ["", ".*", "NOT REGEXP", "REGEXP"], $rule) . ")"; + return $sql; } } diff --git a/LibreNMS/Alert/AlertData.php b/LibreNMS/Alert/AlertData.php index 928ded3181..9acc4eb35d 100644 --- a/LibreNMS/Alert/AlertData.php +++ b/LibreNMS/Alert/AlertData.php @@ -32,6 +32,7 @@ class AlertData extends \Illuminate\Support\Collection if ($this->has($name)) { return $this->get($name); } + return "$name is not a valid \$alert data name"; } } diff --git a/LibreNMS/Alert/AlertRules.php b/LibreNMS/Alert/AlertRules.php index 0bc3f01779..5e2068c666 100644 --- a/LibreNMS/Alert/AlertRules.php +++ b/LibreNMS/Alert/AlertRules.php @@ -35,8 +35,8 @@ namespace LibreNMS\Alert; use App\Models\Device; use Carbon\Carbon; -use LibreNMS\Alert\AlertUtil; use LibreNMS\Alert\AlertDB; +use LibreNMS\Alert\AlertUtil; use LibreNMS\Enum\AlertState; class AlertRules @@ -47,6 +47,7 @@ class AlertRules //Check to see if under maintenance if (AlertUtil::isMaintenance($device_id) > 0) { echo "Under Maintenance, skipping alert rules check.\r\n"; + return false; } //Check to see if disable alerting is set @@ -55,12 +56,13 @@ class AlertRules $device_alert['state'] = AlertState::CLEAR; $device_alert['alerted'] = 0; $device_alert['open'] = 0; - dbUpdate($device_alert, 'alerts', '`device_id` = ?', array($device_id)); + dbUpdate($device_alert, 'alerts', '`device_id` = ?', [$device_id]); + return false; } //Checks each rule. foreach (AlertUtil::getRules($device_id) as $rule) { - c_echo('Rule %p#'.$rule['id'].' (' . $rule['name'] . '):%n '); + c_echo('Rule %p#' . $rule['id'] . ' (' . $rule['name'] . '):%n '); $extra = json_decode($rule['extra'], true); if (isset($extra['invert'])) { $inv = (bool) $extra['invert']; @@ -72,7 +74,7 @@ class AlertRules $rule['query'] = AlertDB::genSQL($rule['rule'], $rule['builder']); } $sql = $rule['query']; - $qry = dbFetchRows($sql, array($device_id)); + $qry = dbFetchRows($sql, [$device_id]); $cnt = count($qry); for ($i = 0; $i < $cnt; $i++) { if (isset($qry[$i]['ip'])) { @@ -99,20 +101,20 @@ class AlertRules // NOCHG here doesn't mean no change full stop. It means no change to the alert state // So we update the details column with any fresh changes to the alert output we might have. $alert_log = dbFetchRow('SELECT alert_log.id, alert_log.details FROM alert_log,alert_rules WHERE alert_log.rule_id = alert_rules.id && alert_log.device_id = ? && alert_log.rule_id = ? && alert_rules.disabled = 0 - ORDER BY alert_log.id DESC LIMIT 1', array($device_id, $rule['id'])); + ORDER BY alert_log.id DESC LIMIT 1', [$device_id, $rule['id']]); $details = []; - if (!empty($alert_log['details'])) { - $details = json_decode(gzuncompress($alert_log['details']), true); + if (! empty($alert_log['details'])) { + $details = json_decode(gzuncompress($alert_log['details']), true); } $details['contacts'] = AlertUtil::getContacts($qry); - $details['rule'] = $qry; - $details = gzcompress(json_encode($details), 9); - dbUpdate(array('details' => $details), 'alert_log', 'id = ?', array($alert_log['id'])); + $details['rule'] = $qry; + $details = gzcompress(json_encode($details), 9); + dbUpdate(['details' => $details], 'alert_log', 'id = ?', [$alert_log['id']]); } else { - $extra = gzcompress(json_encode(array('contacts' => AlertUtil::getContacts($qry), 'rule'=>$qry)), 9); + $extra = gzcompress(json_encode(['contacts' => AlertUtil::getContacts($qry), 'rule'=>$qry]), 9); if (dbInsert(['state' => AlertState::ACTIVE, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'details' => $extra], 'alert_log')) { if (is_null($current_state)) { - dbInsert(array('state' => AlertState::ACTIVE, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'open' => 1,'alerted' => 0), 'alerts'); + dbInsert(['state' => AlertState::ACTIVE, 'device_id' => $device_id, 'rule_id' => $rule['id'], 'open' => 1, 'alerted' => 0], 'alerts'); } else { dbUpdate(['state' => AlertState::ACTIVE, 'open' => 1, 'timestamp' => Carbon::now()], 'alerts', 'device_id = ? && rule_id = ?', [$device_id, $rule['id']]); } @@ -120,7 +122,7 @@ class AlertRules } } } else { - if (!is_null($current_state) && $current_state == AlertState::RECOVERED) { + if (! is_null($current_state) && $current_state == AlertState::RECOVERED) { c_echo('Status: %bNOCHG'); } else { if (dbInsert(['state' => AlertState::RECOVERED, 'device_id' => $device_id, 'rule_id' => $rule['id']], 'alert_log')) { diff --git a/LibreNMS/Alert/AlertUtil.php b/LibreNMS/Alert/AlertUtil.php index 6ca72bf8b7..3d50ef5d7b 100644 --- a/LibreNMS/Alert/AlertUtil.php +++ b/LibreNMS/Alert/AlertUtil.php @@ -34,7 +34,6 @@ use PHPMailer\PHPMailer\PHPMailer; class AlertUtil { /** - * * Get the rule_id for a specific alert * * @param $alert_id @@ -43,11 +42,11 @@ class AlertUtil private static function getRuleId($alert_id) { $query = "SELECT `rule_id` FROM `alerts` WHERE `id`=?"; + return dbFetchCell($query, [$alert_id]); } /** - * * Get the transport for a given alert_id * * @param $alert_id @@ -57,11 +56,11 @@ class AlertUtil { $query = "SELECT b.transport_id, b.transport_type, b.transport_name FROM alert_transport_map AS a LEFT JOIN alert_transports AS b ON b.transport_id=a.transport_or_group_id WHERE a.target_type='single' AND a.rule_id=? UNION DISTINCT SELECT d.transport_id, d.transport_type, d.transport_name FROM alert_transport_map AS a LEFT JOIN alert_transport_groups AS b ON a.transport_or_group_id=b.transport_group_id LEFT JOIN transport_group_transport AS c ON b.transport_group_id=c.transport_group_id LEFT JOIN alert_transports AS d ON c.transport_id=d.transport_id WHERE a.target_type='group' AND a.rule_id=?"; $rule_id = self::getRuleId($alert_id); + return dbFetchRows($query, [$rule_id, $rule_id]); } /** - * * Returns the default transports * * @return array @@ -69,10 +68,11 @@ class AlertUtil public static function getDefaultAlertTransports() { $query = "SELECT transport_id, transport_type, transport_name FROM alert_transports WHERE is_default=true"; + return dbFetchRows($query); } - /** + /** * Find contacts for alert * @param array $results Rule-Result * @return array @@ -84,21 +84,22 @@ class AlertUtil } if (Config::get('alert.default_only') === true || Config::get('alerts.email.default_only') === true) { $email = Config::get('alert.default_mail', Config::get('alerts.email.default')); + return $email ? [$email => ''] : []; } $users = User::query()->thisAuth()->get(); - $contacts = array(); - $uids = array(); + $contacts = []; + $uids = []; foreach ($results as $result) { - $tmp = null; + $tmp = null; if (is_numeric($result["bill_id"])) { - $tmpa = dbFetchRows("SELECT user_id FROM bill_perms WHERE bill_id = ?", array($result["bill_id"])); + $tmpa = dbFetchRows("SELECT user_id FROM bill_perms WHERE bill_id = ?", [$result["bill_id"]]); foreach ($tmpa as $tmp) { $uids[$tmp['user_id']] = $tmp['user_id']; } } if (is_numeric($result["port_id"])) { - $tmpa = dbFetchRows("SELECT user_id FROM ports_perms WHERE port_id = ?", array($result["port_id"])); + $tmpa = dbFetchRows("SELECT user_id FROM ports_perms WHERE port_id = ?", [$result["port_id"]]); foreach ($tmpa as $tmp) { $uids[$tmp['user_id']] = $tmp['user_id']; } @@ -106,15 +107,15 @@ class AlertUtil if (is_numeric($result["device_id"])) { if (Config::get('alert.syscontact') == true) { if (dbFetchCell("SELECT attrib_value FROM devices_attribs WHERE attrib_type = 'override_sysContact_bool' AND device_id = ?", [$result["device_id"]])) { - $tmpa = dbFetchCell("SELECT attrib_value FROM devices_attribs WHERE attrib_type = 'override_sysContact_string' AND device_id = ?", array($result["device_id"])); + $tmpa = dbFetchCell("SELECT attrib_value FROM devices_attribs WHERE attrib_type = 'override_sysContact_string' AND device_id = ?", [$result["device_id"]]); } else { - $tmpa = dbFetchCell("SELECT sysContact FROM devices WHERE device_id = ?", array($result["device_id"])); + $tmpa = dbFetchCell("SELECT sysContact FROM devices WHERE device_id = ?", [$result["device_id"]]); } - if (!empty($tmpa)) { + if (! empty($tmpa)) { $contacts[$tmpa] = ''; } } - $tmpa = dbFetchRows("SELECT user_id FROM devices_perms WHERE device_id = ?", array($result["device_id"])); + $tmpa = dbFetchRows("SELECT user_id FROM devices_perms WHERE device_id = ?", [$result["device_id"]]); foreach ($tmpa as $tmp) { $uids[$tmp['user_id']] = $tmp['user_id']; } @@ -127,8 +128,8 @@ class AlertUtil if (empty($user['realname'])) { $user['realname'] = $user['username']; } - if (Config::get('alert.globals') && ( $user['level'] >= 5 && $user['level'] < 10 )) { - $contacts[$user['email']] = $user['realname']; + if (Config::get('alert.globals') && ($user['level'] >= 5 && $user['level'] < 10)) { + $contacts[$user['email']] = $user['realname']; } elseif (Config::get('alert.admins') && $user['level'] == 10) { $contacts[$user['email']] = $user['realname']; } elseif (Config::get('alert.users') == true && in_array($user['user_id'], $uids)) { @@ -136,12 +137,12 @@ class AlertUtil } } - $tmp_contacts = array(); + $tmp_contacts = []; foreach ($contacts as $email => $name) { if (strstr($email, ',')) { $split_contacts = preg_split('/[,\s]+/', $email); foreach ($split_contacts as $split_email) { - if (!empty($split_email)) { + if (! empty($split_email)) { $tmp_contacts[$split_email] = $name; } } @@ -150,7 +151,7 @@ class AlertUtil } } - if (!empty($tmp_contacts)) { + if (! empty($tmp_contacts)) { // Validate contacts so we can fall back to default if configured. $mail = new PHPMailer(); foreach ($tmp_contacts as $tmp_email => $tmp_name) { @@ -160,12 +161,12 @@ class AlertUtil } } - # Copy all email alerts to default contact if configured. + // Copy all email alerts to default contact if configured. $default_mail = Config::get('alert.default_mail'); - if (!isset($tmp_contacts[$default_mail]) && Config::get('alert.default_copy')) { + if (! isset($tmp_contacts[$default_mail]) && Config::get('alert.default_copy')) { $tmp_contacts[$default_mail] = ''; } - # Send email to default contact if no other contact found + // Send email to default contact if no other contact found if (empty($tmp_contacts) && Config::get('alert.default_if_none') && $default_mail) { $tmp_contacts[$default_mail] = ''; } @@ -187,6 +188,7 @@ class AlertUtil )"; $params = [$device_id, $device_id, $device_id, $device_id, $device_id, $device_id, $device_id, $device_id]; + return dbFetchRows($query, $params); } @@ -208,22 +210,23 @@ class AlertUtil public static function hasDisableNotify($device_id) { $device = Device::find($device_id); - return !is_null($device) && $device->disable_notify; + + return ! is_null($device) && $device->disable_notify; } /** * Process Macros * @param string $rule Rule to process * @param int $x Recursion-Anchor - * @return string|boolean + * @return string|bool */ public static function runMacros($rule, $x = 1) { $macros = Config::get('alert.macros.rule', []) . krsort($macros); foreach ($macros as $macro => $value) { - if (!strstr($macro, " ")) { - $rule = str_replace('%macros.'.$macro, '('.$value.')', $rule); + if (! strstr($macro, " ")) { + $rule = str_replace('%macros.' . $macro, '(' . $value . ')', $rule); } } if (strstr($rule, "%macros.")) { @@ -233,6 +236,7 @@ class AlertUtil return false; } } + return $rule; } } diff --git a/LibreNMS/Alert/RunAlerts.php b/LibreNMS/Alert/RunAlerts.php index d925e01518..e583b4aaa8 100644 --- a/LibreNMS/Alert/RunAlerts.php +++ b/LibreNMS/Alert/RunAlerts.php @@ -32,18 +32,17 @@ namespace LibreNMS\Alert; use App\Models\DevicePerf; use LibreNMS\Config; -use LibreNMS\Util\Time; use LibreNMS\Enum\Alert; use LibreNMS\Enum\AlertState; +use LibreNMS\Util\Time; use Log; class RunAlerts { - /** * Populate variables * @param string $txt Text with variables - * @param boolean $wrap Wrap variable for text-usage (default: true) + * @param bool $wrap Wrap variable for text-usage (default: true) * @return string */ public function populate($txt, $wrap = true) @@ -51,81 +50,82 @@ class RunAlerts preg_match_all('/%([\w\.]+)/', $txt, $m); foreach ($m[1] as $tmp) { $orig = $tmp; - $rep = false; + $rep = false; if ($tmp == 'key' || $tmp == 'value') { - $rep = '$'.$tmp; + $rep = '$' . $tmp; } else { if (strstr($tmp, '.')) { $tmp = explode('.', $tmp, 2); - $pre = '$'.$tmp[0]; + $pre = '$' . $tmp[0]; $tmp = $tmp[1]; } else { $pre = '$obj'; } - $rep = $pre."['".str_replace('.', "']['", $tmp)."']"; + $rep = $pre . "['" . str_replace('.', "']['", $tmp) . "']"; if ($wrap) { - $rep = '{'.$rep.'}'; + $rep = '{' . $rep . '}'; } } - $txt = str_replace('%'.$orig, $rep, $txt); + $txt = str_replace('%' . $orig, $rep, $txt); } + return $txt; } /** * Describe Alert * @param array $alert Alert-Result from DB - * @return array|boolean + * @return array|bool */ public function describeAlert($alert) { - $obj = array(); - $i = 0; - $device = dbFetchRow('SELECT hostname, sysName, sysDescr, sysContact, os, type, ip, hardware, version, purpose, notes, uptime, status, status_reason, locations.location FROM devices LEFT JOIN locations ON locations.id = devices.location_id WHERE device_id = ?', array($alert['device_id'])); - $attribs = get_dev_attribs($alert['device_id']); + $obj = []; + $i = 0; + $device = dbFetchRow('SELECT hostname, sysName, sysDescr, sysContact, os, type, ip, hardware, version, purpose, notes, uptime, status, status_reason, locations.location FROM devices LEFT JOIN locations ON locations.id = devices.location_id WHERE device_id = ?', [$alert['device_id']]); + $attribs = get_dev_attribs($alert['device_id']); - $obj['hostname'] = $device['hostname']; - $obj['sysName'] = $device['sysName']; - $obj['sysDescr'] = $device['sysDescr']; - $obj['sysContact'] = $device['sysContact']; - $obj['os'] = $device['os']; - $obj['type'] = $device['type']; - $obj['ip'] = inet6_ntop($device['ip']); - $obj['hardware'] = $device['hardware']; - $obj['version'] = $device['version']; - $obj['serial'] = $device['serial']; - $obj['features'] = $device['features']; - $obj['location'] = $device['location']; - $obj['uptime'] = $device['uptime']; - $obj['uptime_short'] = Time::formatInterval($device['uptime'], 'short'); - $obj['uptime_long'] = Time::formatInterval($device['uptime']); - $obj['description'] = $device['purpose']; - $obj['notes'] = $device['notes']; - $obj['alert_notes'] = $alert['note']; - $obj['device_id'] = $alert['device_id']; - $obj['rule_id'] = $alert['rule_id']; - $obj['id'] = $alert['id']; - $obj['proc'] = $alert['proc']; - $obj['status'] = $device['status']; + $obj['hostname'] = $device['hostname']; + $obj['sysName'] = $device['sysName']; + $obj['sysDescr'] = $device['sysDescr']; + $obj['sysContact'] = $device['sysContact']; + $obj['os'] = $device['os']; + $obj['type'] = $device['type']; + $obj['ip'] = inet6_ntop($device['ip']); + $obj['hardware'] = $device['hardware']; + $obj['version'] = $device['version']; + $obj['serial'] = $device['serial']; + $obj['features'] = $device['features']; + $obj['location'] = $device['location']; + $obj['uptime'] = $device['uptime']; + $obj['uptime_short'] = Time::formatInterval($device['uptime'], 'short'); + $obj['uptime_long'] = Time::formatInterval($device['uptime']); + $obj['description'] = $device['purpose']; + $obj['notes'] = $device['notes']; + $obj['alert_notes'] = $alert['note']; + $obj['device_id'] = $alert['device_id']; + $obj['rule_id'] = $alert['rule_id']; + $obj['id'] = $alert['id']; + $obj['proc'] = $alert['proc']; + $obj['status'] = $device['status']; $obj['status_reason'] = $device['status_reason']; if (can_ping_device($attribs)) { $ping_stats = DevicePerf::where('device_id', $alert['device_id'])->latest('timestamp')->first(); $obj['ping_timestamp'] = $ping_stats->template; - $obj['ping_loss'] = $ping_stats->loss; - $obj['ping_min'] = $ping_stats->min; - $obj['ping_max'] = $ping_stats->max; - $obj['ping_avg'] = $ping_stats->avg; - $obj['debug'] = json_decode($ping_stats->debug, true); + $obj['ping_loss'] = $ping_stats->loss; + $obj['ping_min'] = $ping_stats->min; + $obj['ping_max'] = $ping_stats->max; + $obj['ping_avg'] = $ping_stats->avg; + $obj['debug'] = json_decode($ping_stats->debug, true); } - $extra = $alert['details']; + $extra = $alert['details']; - $tpl = new Template; - $template = $tpl->getTemplate($obj); + $tpl = new Template; + $template = $tpl->getTemplate($obj); if ($alert['state'] >= AlertState::ACTIVE) { - $obj['title'] = $template->title ?: 'Alert for device '.$device['hostname'].' - '.($alert['name'] ? $alert['name'] : $alert['rule']); + $obj['title'] = $template->title ?: 'Alert for device ' . $device['hostname'] . ' - ' . ($alert['name'] ? $alert['name'] : $alert['rule']); if ($alert['state'] == AlertState::ACKNOWLEDGED) { $obj['title'] .= ' got acknowledged'; } elseif ($alert['state'] == AlertState::WORSE) { @@ -139,79 +139,80 @@ class RunAlerts $obj['faults'][$i] = $incident; $obj['faults'][$i]['string'] = null; foreach ($incident as $k => $v) { - if (!empty($v) && $k != 'device_id' && (stristr($k, 'id') || stristr($k, 'desc') || stristr($k, 'msg')) && substr_count($k, '_') <= 1) { - $obj['faults'][$i]['string'] .= $k.' = '.$v.'; '; + if (! empty($v) && $k != 'device_id' && (stristr($k, 'id') || stristr($k, 'desc') || stristr($k, 'msg')) && substr_count($k, '_') <= 1) { + $obj['faults'][$i]['string'] .= $k . ' = ' . $v . '; '; } } } $obj['elapsed'] = $this->timeFormat(time() - strtotime($alert['time_logged'])); - if (!empty($extra['diff'])) { + if (! empty($extra['diff'])) { $obj['diff'] = $extra['diff']; } } elseif ($alert['state'] == AlertState::RECOVERED) { // Alert is now cleared - $id = dbFetchRow('SELECT alert_log.id,alert_log.time_logged,alert_log.details FROM alert_log WHERE alert_log.state != ? && alert_log.state != ? && alert_log.rule_id = ? && alert_log.device_id = ? && alert_log.id < ? ORDER BY id DESC LIMIT 1', array(AlertState::ACKNOWLEDGED, AlertState::RECOVERED, $alert['rule_id'], $alert['device_id'], $alert['id'])); + $id = dbFetchRow('SELECT alert_log.id,alert_log.time_logged,alert_log.details FROM alert_log WHERE alert_log.state != ? && alert_log.state != ? && alert_log.rule_id = ? && alert_log.device_id = ? && alert_log.id < ? ORDER BY id DESC LIMIT 1', [AlertState::ACKNOWLEDGED, AlertState::RECOVERED, $alert['rule_id'], $alert['device_id'], $alert['id']]); if (empty($id['id'])) { return false; } $extra = []; - if (!empty($id['details'])) { + if (! empty($id['details'])) { $extra = json_decode(gzuncompress($id['details']), true); } // Reset count to 0 so alerts will continue $extra['count'] = 0; - dbUpdate(array('details' => gzcompress(json_encode($id['details']), 9)), 'alert_log', 'id = ?', array($alert['id'])); + dbUpdate(['details' => gzcompress(json_encode($id['details']), 9)], 'alert_log', 'id = ?', [$alert['id']]); - $obj['title'] = $template->title_rec ?: 'Device '.$device['hostname'].' recovered from '.($alert['name'] ? $alert['name'] : $alert['rule']); + $obj['title'] = $template->title_rec ?: 'Device ' . $device['hostname'] . ' recovered from ' . ($alert['name'] ? $alert['name'] : $alert['rule']); $obj['elapsed'] = $this->timeFormat(strtotime($alert['time_logged']) - strtotime($id['time_logged'])); - $obj['id'] = $id['id']; + $obj['id'] = $id['id']; foreach ($extra['rule'] as $incident) { $i++; $obj['faults'][$i] = $incident; foreach ($incident as $k => $v) { - if (!empty($v) && $k != 'device_id' && (stristr($k, 'id') || stristr($k, 'desc') || stristr($k, 'msg')) && substr_count($k, '_') <= 1) { - $obj['faults'][$i]['string'] .= $k.' => '.$v.'; '; + if (! empty($v) && $k != 'device_id' && (stristr($k, 'id') || stristr($k, 'desc') || stristr($k, 'msg')) && substr_count($k, '_') <= 1) { + $obj['faults'][$i]['string'] .= $k . ' => ' . $v . '; '; } } } } else { return 'Unknown State'; }//end if - $obj['builder'] = $alert['builder']; - $obj['uid'] = $alert['id']; - $obj['alert_id'] = $alert['alert_id']; - $obj['severity'] = $alert['severity']; - $obj['rule'] = $alert['rule']; - $obj['name'] = $alert['name']; + $obj['builder'] = $alert['builder']; + $obj['uid'] = $alert['id']; + $obj['alert_id'] = $alert['alert_id']; + $obj['severity'] = $alert['severity']; + $obj['rule'] = $alert['rule']; + $obj['name'] = $alert['name']; $obj['timestamp'] = $alert['time_logged']; - $obj['contacts'] = $extra['contacts']; - $obj['state'] = $alert['state']; - $obj['alerted'] = $alert['alerted']; - $obj['template'] = $template; + $obj['contacts'] = $extra['contacts']; + $obj['state'] = $alert['state']; + $obj['alerted'] = $alert['alerted']; + $obj['template'] = $template; + return $obj; } /** * Format Elapsed Time - * @param integer $secs Seconds elapsed + * @param int $secs Seconds elapsed * @return string */ public function timeFormat($secs) { - $bit = array( + $bit = [ 'y' => $secs / 31556926 % 12, 'w' => $secs / 604800 % 52, 'd' => $secs / 86400 % 7, 'h' => $secs / 3600 % 24, 'm' => $secs / 60 % 60, 's' => $secs % 60, - ); - $ret = array(); + ]; + $ret = []; foreach ($bit as $k => $v) { if ($v > 0) { - $ret[] = $v.$k; + $ret[] = $v . $k; } } @@ -224,10 +225,10 @@ class RunAlerts public function clearStaleAlerts() { - $sql = "SELECT `alerts`.`id` AS `alert_id`, `devices`.`hostname` AS `hostname` FROM `alerts` LEFT JOIN `devices` ON `alerts`.`device_id`=`devices`.`device_id` RIGHT JOIN `alert_rules` ON `alerts`.`rule_id`=`alert_rules`.`id` WHERE `alerts`.`state`!=".AlertState::CLEAR." AND `devices`.`hostname` IS NULL"; + $sql = "SELECT `alerts`.`id` AS `alert_id`, `devices`.`hostname` AS `hostname` FROM `alerts` LEFT JOIN `devices` ON `alerts`.`device_id`=`devices`.`device_id` RIGHT JOIN `alert_rules` ON `alerts`.`rule_id`=`alert_rules`.`id` WHERE `alerts`.`state`!=" . AlertState::CLEAR . " AND `devices`.`hostname` IS NULL"; foreach (dbFetchRows($sql) as $alert) { if (empty($alert['hostname']) && isset($alert['alert_id'])) { - dbDelete('alerts', '`id` = ?', array($alert['alert_id'])); + dbDelete('alerts', '`id` = ?', [$alert['alert_id']]); echo "Stale-alert: #{$alert['alert_id']}" . PHP_EOL; } } @@ -235,14 +236,14 @@ class RunAlerts /** * Re-Validate Rule-Mappings - * @param integer $device_id Device-ID - * @param integer $rule Rule-ID - * @return boolean + * @param int $device_id Device-ID + * @param int $rule Rule-ID + * @return bool */ public function isRuleValid($device_id, $rule) { global $rulescache; - if (empty($rulescache[$device_id]) || !isset($rulescache[$device_id])) { + if (empty($rulescache[$device_id]) || ! isset($rulescache[$device_id])) { foreach (AlertUtil::getRules($device_id) as $chk) { $rulescache[$device_id][$chk['id']] = true; } @@ -255,11 +256,10 @@ class RunAlerts return false; } - /** * Issue Alert-Object * @param array $alert - * @return boolean + * @return bool */ public function issueAlert($alert) { @@ -268,13 +268,13 @@ class RunAlerts $alert['query'] = AlertDB::genSQL($alert['rule'], $alert['builder']); } $sql = $alert['query']; - $qry = dbFetchRows($sql, array($alert['device_id'])); + $qry = dbFetchRows($sql, [$alert['device_id']]); $alert['details']['contacts'] = AlertUtil::getContacts($qry); } $obj = $this->describeAlert($alert); if (is_array($obj)) { - echo 'Issuing Alert-UID #'.$alert['id'].'/'.$alert['state'].':' . PHP_EOL; + echo 'Issuing Alert-UID #' . $alert['id'] . '/' . $alert['state'] . ':' . PHP_EOL; $this->extTransports($obj); echo "\r\n"; @@ -283,17 +283,15 @@ class RunAlerts return true; } - /** * Issue ACK notification * @return void */ public function runAcks() { - - foreach ($this->loadAlerts('alerts.state = '.AlertState::ACKNOWLEDGED.' && alerts.open = '.AlertState::ACTIVE) as $alert) { + foreach ($this->loadAlerts('alerts.state = ' . AlertState::ACKNOWLEDGED . ' && alerts.open = ' . AlertState::ACTIVE) as $alert) { $this->issueAlert($alert); - dbUpdate(array('open' => AlertState::CLEAR), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id'])); + dbUpdate(['open' => AlertState::CLEAR], 'alerts', 'rule_id = ? && device_id = ?', [$alert['rule_id'], $alert['device_id']]); } } @@ -303,7 +301,7 @@ class RunAlerts */ public function runFollowUp() { - foreach ($this->loadAlerts('alerts.state > '.AlertState::CLEAR.' && alerts.open = 0') as $alert) { + foreach ($this->loadAlerts('alerts.state > ' . AlertState::CLEAR . ' && alerts.open = 0') as $alert) { if ($alert['state'] != AlertState::ACKNOWLEDGED || ($alert['info']['until_clear'] === false)) { $rextra = json_decode($alert['extra'], true); if ($rextra['invert']) { @@ -313,7 +311,7 @@ class RunAlerts if (empty($alert['query'])) { $alert['query'] = AlertDB::genSQL($alert['rule'], $alert['builder']); } - $chk = dbFetchRows($alert['query'], array($alert['device_id'])); + $chk = dbFetchRows($alert['query'], [$alert['device_id']]); //make sure we can json_encode all the datas later $cnt = count($chk); for ($i = 0; $i < $cnt; $i++) { @@ -337,13 +335,13 @@ class RunAlerts if ($state > AlertState::CLEAR && $n > 0) { $alert['details']['rule'] = $chk; - if (dbInsert(array( + if (dbInsert([ 'state' => $state, 'device_id' => $alert['device_id'], 'rule_id' => $alert['rule_id'], - 'details' => gzcompress(json_encode($alert['details']), 9) - ), 'alert_log')) { - dbUpdate(array('state' => $state, 'open' => 1, 'alerted' => 1), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id'])); + 'details' => gzcompress(json_encode($alert['details']), 9), + ], 'alert_log')) { + dbUpdate(['state' => $state, 'open' => 1, 'alerted' => 1], 'alerts', 'rule_id = ? && device_id = ?', [$alert['rule_id'], $alert['device_id']]); } echo $ret . ' (' . $o . '/' . $n . ")\r\n"; @@ -358,10 +356,10 @@ class RunAlerts foreach (dbFetchRows("SELECT alerts.id, alerts.alerted, alerts.device_id, alerts.rule_id, alerts.state, alerts.note, alerts.info FROM alerts WHERE $where") as $alert_status) { $alert = dbFetchRow( 'SELECT alert_log.id,alert_log.rule_id,alert_log.device_id,alert_log.state,alert_log.details,alert_log.time_logged,alert_rules.rule,alert_rules.severity,alert_rules.extra,alert_rules.name,alert_rules.query,alert_rules.builder,alert_rules.proc FROM alert_log,alert_rules WHERE alert_log.rule_id = alert_rules.id && alert_log.device_id = ? && alert_log.rule_id = ? && alert_rules.disabled = 0 ORDER BY alert_log.id DESC LIMIT 1', - array($alert_status['device_id'], $alert_status['rule_id']) + [$alert_status['device_id'], $alert_status['rule_id']] ); - if (empty($alert['rule_id']) || !$this->isRuleValid($alert_status['device_id'], $alert_status['rule_id'])) { + if (empty($alert['rule_id']) || ! $this->isRuleValid($alert_status['device_id'], $alert_status['rule_id'])) { echo 'Stale-Rule: #' . $alert_status['rule_id'] . '/' . $alert_status['device_id'] . "\r\n"; // Alert-Rule does not exist anymore, let's remove the alert-state. dbDelete('alerts', 'rule_id = ? && device_id = ?', [$alert_status['rule_id'], $alert_status['device_id']]); @@ -370,7 +368,7 @@ class RunAlerts $alert['state'] = $alert_status['state']; $alert['alerted'] = $alert_status['alerted']; $alert['note'] = $alert_status['note']; - if (!empty($alert['details'])) { + if (! empty($alert['details'])) { $alert['details'] = json_decode(gzuncompress($alert['details']), true); } $alert['info'] = json_decode($alert_status['info'], true); @@ -387,27 +385,27 @@ class RunAlerts */ public function runAlerts() { - foreach ($this->loadAlerts('alerts.state != '.AlertState::ACKNOWLEDGED.' && alerts.open = 1') as $alert) { - $noiss = false; - $noacc = false; - $updet = false; - $rextra = json_decode($alert['extra'], true); - if (!isset($rextra['recovery'])) { + foreach ($this->loadAlerts('alerts.state != ' . AlertState::ACKNOWLEDGED . ' && alerts.open = 1') as $alert) { + $noiss = false; + $noacc = false; + $updet = false; + $rextra = json_decode($alert['extra'], true); + if (! isset($rextra['recovery'])) { // backwards compatibility check $rextra['recovery'] = true; } - $chk = dbFetchRow('SELECT alerts.alerted,devices.ignore,devices.disabled FROM alerts,devices WHERE alerts.device_id = ? && devices.device_id = alerts.device_id && alerts.rule_id = ?', array($alert['device_id'], $alert['rule_id'])); + $chk = dbFetchRow('SELECT alerts.alerted,devices.ignore,devices.disabled FROM alerts,devices WHERE alerts.device_id = ? && devices.device_id = alerts.device_id && alerts.rule_id = ?', [$alert['device_id'], $alert['rule_id']]); if ($chk['alerted'] == $alert['state']) { $noiss = true; } $tolerence_window = Config::get('alert.tolerance_window'); - if (!empty($rextra['count']) && empty($rextra['interval'])) { + if (! empty($rextra['count']) && empty($rextra['interval'])) { // This check below is for compat-reasons - if (!empty($rextra['delay']) && $alert['state'] != AlertState::RECOVERED) { - if ((time() - strtotime($alert['time_logged']) + $tolerence_window) < $rextra['delay'] || (!empty($alert['details']['delay']) && (time() - $alert['details']['delay'] + $tolerence_window) < $rextra['delay'])) { + if (! empty($rextra['delay']) && $alert['state'] != AlertState::RECOVERED) { + if ((time() - strtotime($alert['time_logged']) + $tolerence_window) < $rextra['delay'] || (! empty($alert['details']['delay']) && (time() - $alert['details']['delay'] + $tolerence_window) < $rextra['delay'])) { continue; } else { $alert['details']['delay'] = time(); @@ -415,7 +413,7 @@ class RunAlerts } } - if ($alert['state'] == AlertState::ACTIVE && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) { + if ($alert['state'] == AlertState::ACTIVE && ! empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) { if ($alert['details']['count'] < $rextra['count']) { $noacc = true; } @@ -425,12 +423,12 @@ class RunAlerts } } else { // This is the new way - if (!empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $tolerence_window) < $rextra['delay'] && $alert['state'] != AlertState::RECOVERED) { + if (! empty($rextra['delay']) && (time() - strtotime($alert['time_logged']) + $tolerence_window) < $rextra['delay'] && $alert['state'] != AlertState::RECOVERED) { continue; } - if (!empty($rextra['interval'])) { - if (!empty($alert['details']['interval']) && (time() - $alert['details']['interval'] + $tolerence_window) < $rextra['interval']) { + if (! empty($rextra['interval'])) { + if (! empty($alert['details']['interval']) && (time() - $alert['details']['interval'] + $tolerence_window) < $rextra['interval']) { continue; } else { $alert['details']['interval'] = time(); @@ -438,7 +436,7 @@ class RunAlerts } } - if (in_array($alert['state'], [AlertState::ACTIVE, AlertState::WORSE, AlertState::BETTER]) && !empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) { + if (in_array($alert['state'], [AlertState::ACTIVE, AlertState::WORSE, AlertState::BETTER]) && ! empty($rextra['count']) && ($rextra['count'] == -1 || $alert['details']['count']++ < $rextra['count'])) { if ($alert['details']['count'] < $rextra['count']) { $noacc = true; } @@ -459,11 +457,11 @@ class RunAlerts } if ($updet) { - dbUpdate(array('details' => gzcompress(json_encode($alert['details']), 9)), 'alert_log', 'id = ?', array($alert['id'])); + dbUpdate(['details' => gzcompress(json_encode($alert['details']), 9)], 'alert_log', 'id = ?', [$alert['id']]); } - if (!empty($rextra['mute'])) { - echo 'Muted Alert-UID #'.$alert['id']."\r\n"; + if (! empty($rextra['mute'])) { + echo 'Muted Alert-UID #' . $alert['id'] . "\r\n"; $noiss = true; } @@ -477,18 +475,17 @@ class RunAlerts $noiss = true; } - if (!$noiss) { + if (! $noiss) { $this->issueAlert($alert); - dbUpdate(array('alerted' => $alert['state']), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id'])); + dbUpdate(['alerted' => $alert['state']], 'alerts', 'rule_id = ? && device_id = ?', [$alert['rule_id'], $alert['device_id']]); } - if (!$noacc) { - dbUpdate(array('open' => 0), 'alerts', 'rule_id = ? && device_id = ?', array($alert['rule_id'], $alert['device_id'])); + if (! $noacc) { + dbUpdate(['open' => 0], 'alerts', 'rule_id = ? && device_id = ?', [$alert['rule_id'], $alert['device_id']]); } } } - /** * Run external transports * @param array $obj Alert-Array @@ -496,17 +493,17 @@ class RunAlerts */ public function extTransports($obj) { - $type = new Template; + $type = new Template; // If alert transport mapping exists, override the default transports $transport_maps = AlertUtil::getAlertTransports($obj['alert_id']); - if (!$transport_maps) { + if (! $transport_maps) { $transport_maps = AlertUtil::getDefaultAlertTransports(); } // alerting for default contacts, etc - if (Config::get('alert.transports.mail') === true && !empty($obj['contacts'])) { + if (Config::get('alert.transports.mail') === true && ! empty($obj['contacts'])) { $transport_maps[] = [ 'transport_id' => null, 'transport_type' => 'mail', @@ -515,16 +512,16 @@ class RunAlerts } foreach ($transport_maps as $item) { - $class = 'LibreNMS\\Alert\\Transport\\'.ucfirst($item['transport_type']); + $class = 'LibreNMS\\Alert\\Transport\\' . ucfirst($item['transport_type']); if (class_exists($class)) { //FIXME remove Deprecated transport $transport_title = "Transport {$item['transport_type']}"; $obj['transport'] = $item['transport_type']; $obj['transport_name'] = $item['transport_name']; - $obj['alert'] = new AlertData($obj); - $obj['title'] = $type->getTitle($obj); + $obj['alert'] = new AlertData($obj); + $obj['title'] = $type->getTitle($obj); $obj['alert']['title'] = $obj['title']; - $obj['msg'] = $type->getBody($obj); + $obj['msg'] = $type->getBody($obj); c_echo(" :: $transport_title => "); try { $instance = new $class($item['transport_id']); @@ -548,8 +545,8 @@ class RunAlerts { $prefix = [ AlertState::RECOVERED => "recovery", - AlertState::ACTIVE => $obj['severity']." alert", - AlertState::ACKNOWLEDGED => "acknowledgment" + AlertState::ACTIVE => $obj['severity'] . " alert", + AlertState::ACKNOWLEDGED => "acknowledgment", ]; $prefix[3] = &$prefix[0]; $prefix[4] = &$prefix[0]; @@ -557,7 +554,7 @@ class RunAlerts if ($obj['state'] == AlertState::RECOVERED) { $severity = Alert::OK; } elseif ($obj['state'] == AlertState::ACTIVE) { - $severity = Alert::SEVERITIES[$obj['severity']] ?? Alert::UNKNOWN; + $severity = Alert::SEVERITIES[$obj['severity']] ?? Alert::UNKNOWN; } elseif ($obj['state'] == AlertState::ACKNOWLEDGED) { $severity = Alert::NOTICE; } else { @@ -574,7 +571,6 @@ class RunAlerts echo "ERROR: $result\r\n"; Log::event('Could not issue ' . $prefix[$obj['state']] . " for rule '" . $obj['name'] . "' to transport '" . $transport . "' Error: " . $result, $obj['device_id'], 'error', Alert::ERROR); } - return; } /** @@ -585,13 +581,12 @@ class RunAlerts */ public function isParentDown($device) { - $parent_count = dbFetchCell("SELECT count(*) from `device_relationships` WHERE `child_device_id` = ?", array($device)); - if (!$parent_count) { + $parent_count = dbFetchCell("SELECT count(*) from `device_relationships` WHERE `child_device_id` = ?", [$device]); + if (! $parent_count) { return false; } - - $down_parent_count = dbFetchCell("SELECT count(*) from devices as d LEFT JOIN devices_attribs as a ON d.device_id=a.device_id LEFT JOIN device_relationships as r ON d.device_id=r.parent_device_id WHERE d.status=0 AND d.ignore=0 AND d.disabled=0 AND r.child_device_id=? AND (d.status_reason='icmp' OR (a.attrib_type='override_icmp_disable' AND a.attrib_value=true))", array($device)); + $down_parent_count = dbFetchCell("SELECT count(*) from devices as d LEFT JOIN devices_attribs as a ON d.device_id=a.device_id LEFT JOIN device_relationships as r ON d.device_id=r.parent_device_id WHERE d.status=0 AND d.ignore=0 AND d.disabled=0 AND r.child_device_id=? AND (d.status_reason='icmp' OR (a.attrib_type='override_icmp_disable' AND a.attrib_value=true))", [$device]); if ($down_parent_count == $parent_count) { return true; } diff --git a/LibreNMS/Alert/Template.php b/LibreNMS/Alert/Template.php index 247726e6f4..df11894489 100644 --- a/LibreNMS/Alert/Template.php +++ b/LibreNMS/Alert/Template.php @@ -33,7 +33,6 @@ class Template public $template; /** - * * Get the template details * * @param null $obj @@ -48,9 +47,10 @@ class Template $this->template = AlertTemplate::whereHas('map', function ($query) use ($obj) { $query->where('alert_rule_id', '=', $obj['rule_id']); })->first(); - if (!$this->template) { + if (! $this->template) { $this->template = AlertTemplate::where('name', '=', 'Default Alert Template')->first(); } + return $this->template; } @@ -65,7 +65,6 @@ class Template } /** - * * Parse Blade body * * @param $data @@ -82,7 +81,6 @@ class Template } /** - * * Parse Blade title * * @param $data @@ -99,7 +97,6 @@ class Template } /** - * * Get the default template * * @return string @@ -108,7 +105,7 @@ class Template { return '{{ $alert->title }}' . PHP_EOL . 'Severity: {{ $alert->severity }}' . PHP_EOL . - '@if ($alert->state == '.AlertState::RECOVERED.')Time elapsed: {{ $alert->elapsed }} @endif ' . PHP_EOL . + '@if ($alert->state == ' . AlertState::RECOVERED . ')Time elapsed: {{ $alert->elapsed }} @endif ' . PHP_EOL . 'Timestamp: {{ $alert->timestamp }}' . PHP_EOL . 'Unique-ID: {{ $alert->uid }}' . PHP_EOL . 'Rule: @if ($alert->name) {{ $alert->name }} @else {{ $alert->rule }} @endif ' . PHP_EOL . diff --git a/LibreNMS/Alert/Transport.php b/LibreNMS/Alert/Transport.php index 04f9083b71..fce28b488e 100644 --- a/LibreNMS/Alert/Transport.php +++ b/LibreNMS/Alert/Transport.php @@ -3,9 +3,9 @@ namespace LibreNMS\Alert; use Illuminate\Support\Str; -use LibreNMS\Interfaces\Alert\Transport as TransportInterface; use LibreNMS\Config; use LibreNMS\Enum\AlertState; +use LibreNMS\Interfaces\Alert\Transport as TransportInterface; abstract class Transport implements TransportInterface { @@ -17,7 +17,7 @@ abstract class Transport implements TransportInterface */ public function __construct($transport_id = null) { - if (!empty($transport_id)) { + if (! empty($transport_id)) { $sql = "SELECT `transport_config` FROM `alert_transports` WHERE `transport_id`=?"; $this->config = json_decode(dbFetchCell($sql, [$transport_id]), true); } @@ -34,27 +34,28 @@ abstract class Transport implements TransportInterface $options = []; foreach (explode(PHP_EOL, $input) as $option) { if (Str::contains($option, '=')) { - list($k,$v) = explode('=', $option, 2); + [$k,$v] = explode('=', $option, 2); $options[$k] = trim($v); } } + return $options; } - /** + /** * Get the hex color string for a particular state - * @param integer $state State code from alert + * @param int $state State code from alert * @return string Hex color, default to #337AB7 blue if state unrecognised */ public static function getColorForState($state) { - $colors = array( + $colors = [ AlertState::CLEAR => Config::get('alert_colour.ok'), AlertState::ACTIVE => Config::get('alert_colour.bad'), AlertState::ACKNOWLEDGED => Config::get('alert_colour.acknowledged'), AlertState::WORSE => Config::get('alert_colour.worse'), AlertState::BETTER => Config::get('alert_colour.better'), - ); + ]; return isset($colors[$state]) ? $colors[$state] : '#337AB7'; } diff --git a/LibreNMS/Alert/Transport/Alerta.php b/LibreNMS/Alert/Transport/Alerta.php index ab4fe3d6e8..fcbe7f9388 100644 --- a/LibreNMS/Alert/Transport/Alerta.php +++ b/LibreNMS/Alert/Transport/Alerta.php @@ -5,7 +5,7 @@ * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. Please see LICENSE.txt at the top level of * the source code distribution for details. */ - /** +/** * API Transport * @author GitStoph * @copyright 2019 GitStoph @@ -13,11 +13,12 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; use LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Config; +use LibreNMS\Enum\AlertState; class Alerta extends Transport { @@ -28,8 +29,10 @@ class Alerta extends Transport $opts['apikey'] = $this->config['apikey']; $opts['alertstate'] = $this->config['alertstate']; $opts['recoverstate'] = $this->config['recoverstate']; + return $this->contactAlerta($obj, $opts); } + public function contactAlerta($obj, $opts) { $host = $opts['url']; @@ -55,30 +58,33 @@ class Alerta extends Transport 'type' => $obj['type'], 'ip' => $obj['ip'], 'uptime' => $obj['uptime_long'], - 'moreInfo' => ''.$devicehostname.'', + 'moreInfo' => '' . $devicehostname . '', ], 'origin' => $obj['rule'], 'type' => $obj['title'], ]; $alert_message = json_encode($data); set_curl_proxy($curl); - $headers = array('Content-Type: application/json', 'Authorization: Key ' . $opts['apikey']); + $headers = ['Content-Type: application/json', 'Authorization: Key ' . $opts['apikey']]; curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_URL, $host); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $alert_message); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 201) { var_dump("API '$host' returned Error"); var_dump("Params: " . $alert_message); var_dump("Return: " . $ret); var_dump("Headers: " . $headers); + return 'HTTP Status code ' . $code; } + return true; } + public static function configTemplate() { return [ @@ -112,12 +118,12 @@ class Alerta extends Transport 'name' => 'recoverstate', 'descr' => 'What severity you want Alerta to reflect when rule unmatches/recovers.', 'type' => 'text', - ] + ], ], 'validation' => [ 'alerta-url' => 'required|url', 'apikey' => 'required|string', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Alertmanager.php b/LibreNMS/Alert/Transport/Alertmanager.php index bc19cce960..7983988793 100644 --- a/LibreNMS/Alert/Transport/Alertmanager.php +++ b/LibreNMS/Alert/Transport/Alertmanager.php @@ -20,11 +20,12 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; use LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Config; +use LibreNMS\Enum\AlertState; class Alertmanager extends Transport { @@ -43,11 +44,11 @@ class Alertmanager extends Transport } else { $alertmanager_status = 'startsAt'; } - $gen_url = (Config::get('base_url') . 'device/device=' . $obj['device_id']); - $host = ($api['url'] . '/api/v2/alerts'); - $curl = curl_init(); + $gen_url = (Config::get('base_url') . 'device/device=' . $obj['device_id']); + $host = ($api['url'] . '/api/v2/alerts'); + $curl = curl_init(); $alertmanager_msg = strip_tags($obj['msg']); - $data = [[ + $data = [[ $alertmanager_status => date("c"), 'generatorURL' => $gen_url, 'annotations' => [ @@ -56,16 +57,16 @@ class Alertmanager extends Transport 'description' => $alertmanager_msg, ], 'labels' => [ - 'alertname' => $obj['name'], - 'severity' => $obj['severity'], - 'instance' => $obj['hostname'], - ], + 'alertname' => $obj['name'], + 'severity' => $obj['severity'], + 'instance' => $obj['hostname'], + ], ]]; unset($api['url']); foreach ($api as $label => $value) { $data[0]['labels'][$label] = $value; - }; + } $alert_message = json_encode($data); curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); @@ -75,11 +76,12 @@ class Alertmanager extends Transport curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $alert_message); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200) { return 'HTTP Status code ' . $code; } + return true; } @@ -98,11 +100,11 @@ class Alertmanager extends Transport 'name' => 'alertmanager-options', 'descr' => 'Alertmanager Options', 'type' => 'textarea', - ] + ], ], 'validation' => [ 'alertmanager-url' => 'required|url', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Api.php b/LibreNMS/Alert/Transport/Api.php index 17384ec8ff..8f9858ae0a 100644 --- a/LibreNMS/Alert/Transport/Api.php +++ b/LibreNMS/Alert/Transport/Api.php @@ -25,9 +25,9 @@ namespace LibreNMS\Alert\Transport; +use GuzzleHttp\Client; use LibreNMS\Alert\Transport; use LibreNMS\Enum\AlertState; -use GuzzleHttp\Client; class Api extends Transport { @@ -39,6 +39,7 @@ class Api extends Transport $body = $this->config['api-body']; $method = $this->config['api-method']; $auth = [$this->config['api-auth-username'], $this->config['api-auth-password']]; + return $this->contactAPI($obj, $url, $options, $method, $auth, $headers, $body); } @@ -53,7 +54,7 @@ class Api extends Transport //get each line of key-values and process the variables for Headers; foreach (preg_split("/\\r\\n|\\r|\\n/", $headers, -1, PREG_SPLIT_NO_EMPTY) as $current_line) { - list($u_key, $u_val) = explode('=', $current_line, 2); + [$u_key, $u_val] = explode('=', $current_line, 2); foreach ($obj as $p_key => $p_val) { $u_val = str_replace("{{ $" . $p_key . ' }}', $p_val, $u_val); } @@ -62,7 +63,7 @@ class Api extends Transport } //get each line of key-values and process the variables for Options; foreach (preg_split("/\\r\\n|\\r|\\n/", $options, -1, PREG_SPLIT_NO_EMPTY) as $current_line) { - list($u_key, $u_val) = explode('=', $current_line, 2); + [$u_key, $u_val] = explode('=', $current_line, 2); // Replace the values foreach ($obj as $p_key => $p_val) { $u_val = str_replace("{{ $" . $p_key . ' }}', $p_val, $u_val); @@ -73,7 +74,7 @@ class Api extends Transport $client = new \GuzzleHttp\Client(); $request_opts['proxy'] = get_guzzle_proxy(); - if (isset($auth) && !empty($auth[0])) { + if (isset($auth) && ! empty($auth[0])) { $request_opts['auth'] = $auth; } if (count($request_heads) > 0) { @@ -98,9 +99,11 @@ class Api extends Transport var_dump($query); var_dump("Response headers:"); var_dump($res->getHeaders()); - var_dump("Return: ".$res->getReasonPhrase()); - return 'HTTP Status code '.$code; + var_dump("Return: " . $res->getReasonPhrase()); + + return 'HTTP Status code ' . $code; } + return true; } @@ -116,8 +119,8 @@ class Api extends Transport 'options' => [ 'GET' => 'GET', 'POST' => 'POST', - 'PUT' => 'PUT' - ] + 'PUT' => 'PUT', + ], ], [ 'title' => 'API URL', @@ -154,12 +157,12 @@ class Api extends Transport 'name' => 'api-auth-password', 'descr' => 'Auth Password', 'type' => 'password', - ] + ], ], 'validation' => [ 'api-method' => 'in:GET,POST,PUT', - 'api-url' => 'required|url' - ] + 'api-url' => 'required|url', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Boxcar.php b/LibreNMS/Alert/Transport/Boxcar.php index 9e68ffc206..3705547480 100644 --- a/LibreNMS/Alert/Transport/Boxcar.php +++ b/LibreNMS/Alert/Transport/Boxcar.php @@ -39,8 +39,8 @@ namespace LibreNMS\Alert\Transport; use LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Config; +use LibreNMS\Enum\AlertState; class Boxcar extends Transport { @@ -54,19 +54,19 @@ class Boxcar extends Transport public static function contactBoxcar($obj, $api) { - $data = []; - $data['user_credentials'] = $api['access_token']; + $data = []; + $data['user_credentials'] = $api['access_token']; $data['notification[source_name]'] = Config::get('project_id', 'librenms'); switch ($obj['severity']) { case "critical": $severity = "Critical"; - if (!empty($api['sound_critical'])) { + if (! empty($api['sound_critical'])) { $data['notification[sound]'] = $api['sound_critical']; } break; case "warning": $severity = "Warning"; - if (!empty($api['sound_warning'])) { + if (! empty($api['sound_warning'])) { $data['notification[sound]'] = $api['sound_warning']; } break; @@ -74,7 +74,7 @@ class Boxcar extends Transport switch ($obj['state']) { case AlertState::RECOVERED: $title_text = "OK"; - if (!empty($api['sound_ok'])) { + if (! empty($api['sound_ok'])) { $data['notification[sound]'] = $api['sound_ok']; } break; @@ -86,15 +86,15 @@ class Boxcar extends Transport break; } $data['notification[title]'] = $title_text . " - " . $obj['hostname'] . " - " . $obj['name']; - $message_text = "Timestamp: " . $obj['timestamp']; - if (!empty($obj['faults'])) { + $message_text = "Timestamp: " . $obj['timestamp']; + if (! empty($obj['faults'])) { $message_text .= "\n\nFaults:\n"; foreach ($obj['faults'] as $k => $faults) { $message_text .= "#" . $k . " " . $faults['string'] . "\n"; } } $data['notification[long_message]'] = $message_text; - $curl = curl_init(); + $curl = curl_init(); set_curl_proxy($curl); curl_setopt($curl, CURLOPT_URL, 'https://new.boxcar.io/api/notifications'); curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); @@ -104,6 +104,7 @@ class Boxcar extends Transport $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 201) { var_dump("Boxcar returned error"); //FIXME: proper debugging + return false; } @@ -125,11 +126,11 @@ class Boxcar extends Transport 'name' => 'boxcar-options', 'descr' => 'Boxcar Options', 'type' => 'textarea', - ] + ], ], 'validation' => [ 'boxcar-token' => 'required', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Canopsis.php b/LibreNMS/Alert/Transport/Canopsis.php index 3410c3b27f..052ec33cfe 100644 --- a/LibreNMS/Alert/Transport/Canopsis.php +++ b/LibreNMS/Alert/Transport/Canopsis.php @@ -1,36 +1,38 @@ config)) { + if (! empty($this->config)) { $opts['host'] = $this->config['canopsis-host']; $opts['port'] = $this->config['canopsis-port']; $opts['user'] = $this->config['canopsis-user']; $opts['pass'] = $this->config['canopsis-pass']; $opts['vhost'] = $this->config['canopsis-vhost']; } + return $this->contactCanopsis($obj, $opts); } public function contactCanopsis($obj, $opts) { // Configurations - $host = $opts["host"]; - $port = $opts["port"]; - $user = $opts["user"]; - $pass = $opts["pass"]; - $vhost = $opts["vhost"]; + $host = $opts["host"]; + $port = $opts["port"]; + $user = $opts["user"]; + $pass = $opts["pass"]; + $vhost = $opts["vhost"]; $exchange = "canopsis.events"; // Connection $conn = new \PhpAmqpLib\Connection\AMQPConnection($host, $port, $user, $pass, $vhost); - $ch = $conn->channel(); + $ch = $conn->channel(); // Declare exchange (if not exist) // exchange_declare($exchange, $type, $passive=false, $durable=false, $auto_delete=true, $internal=false, $nowait=false, $arguments=null, $ticket=null) @@ -50,7 +52,7 @@ class Canopsis extends Transport default: $state = 0; } - $msg_body = array( + $msg_body = [ "timestamp" => time(), "connector" => "librenms", "connector_name" => "LibreNMS1", @@ -60,9 +62,9 @@ class Canopsis extends Transport "resource" => $obj['name'], "state" => $state, "output" => $obj['msg'], - "display_name" => "librenms" - ); - $msg_raw = json_encode($msg_body); + "display_name" => "librenms", + ]; + $msg_raw = json_encode($msg_body); // Build routing key if ($msg_body['source_type'] == "resource") { @@ -72,12 +74,13 @@ class Canopsis extends Transport } // Publish Event - $msg = new \PhpAmqpLib\Message\AMQPMessage($msg_raw, array('content_type' => 'application/json', 'delivery_mode' => 2)); + $msg = new \PhpAmqpLib\Message\AMQPMessage($msg_raw, ['content_type' => 'application/json', 'delivery_mode' => 2]); $ch->basic_publish($msg, $exchange, $msg_rk); // Close connection $ch->close(); $conn->close(); + return true; } @@ -89,31 +92,31 @@ class Canopsis extends Transport 'title' => 'Hostname', 'name' => 'canopsis-host', 'descr' => 'Canopsis Hostname', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Port Number', 'name' => 'canopsis-port', 'descr' => 'Canopsis Port Number', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'User', 'name' => 'canopsis-user', 'descr' => 'Canopsis User', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Password', 'name' => 'canopsis-pass', 'descr' => 'Canopsis Password', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Vhost', 'name' => 'canopsis-vhost', 'descr' => 'Canopsis Vhost', - 'type' => 'text' + 'type' => 'text', ], ], 'validation' => [ @@ -122,7 +125,7 @@ class Canopsis extends Transport 'canopsis-user' => 'required|string', 'canopsis-pass' => 'required|string', 'canopsis-vhost' => 'required|string', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Ciscospark.php b/LibreNMS/Alert/Transport/Ciscospark.php index 791b10fc73..2aa3cb252b 100644 --- a/LibreNMS/Alert/Transport/Ciscospark.php +++ b/LibreNMS/Alert/Transport/Ciscospark.php @@ -9,10 +9,11 @@ * option) any later version. Please see LICENSE.txt at the top level of * the source code distribution for details. */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Ciscospark extends Transport { @@ -25,15 +26,16 @@ class Ciscospark extends Transport $room_id = $this->config['room-id']; $token = $this->config['api-token']; } + return $this->contactCiscospark($obj, $room_id, $token); } public function contactCiscospark($obj, $room_id, $token) { $text = null; - $data = array ( - 'roomId' => $room_id - ); + $data = [ + 'roomId' => $room_id, + ]; $akey = 'text'; if ($this->config['use-markdown'] === 'on') { @@ -55,23 +57,25 @@ class Ciscospark extends Transport } $data[$akey] = $text; - $curl = curl_init(); + $curl = curl_init(); set_curl_proxy($curl); curl_setopt($curl, CURLOPT_URL, 'https://api.ciscospark.com/v1/messages'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($curl, CURLOPT_HTTPHEADER, array( + curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-type' => 'application/json', 'Expect:', - 'Authorization: Bearer ' . $token - )); + 'Authorization: Bearer ' . $token, + ]); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200) { - echo("Cisco Spark returned Error, retry later\r\n"); + echo "Cisco Spark returned Error, retry later\r\n"; + return false; } + return true; } @@ -97,12 +101,12 @@ class Ciscospark extends Transport 'descr' => 'Use Markdown when sending the alert', 'type' => 'checkbox', 'default' => false, - ] + ], ], 'validation' => [ 'api-token' => 'required|string', - 'room-id' => 'required|string' - ] + 'room-id' => 'required|string', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Clickatell.php b/LibreNMS/Alert/Transport/Clickatell.php index 3fb0156c55..8018f8edb0 100644 --- a/LibreNMS/Alert/Transport/Clickatell.php +++ b/LibreNMS/Alert/Transport/Clickatell.php @@ -21,10 +21,11 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Clickatell extends Transport { @@ -32,6 +33,7 @@ class Clickatell extends Transport { $clickatell_opts['token'] = $this->config['clickatell-token']; $clickatell_opts['to'] = preg_split('/([,\r\n]+)/', $this->config['clickatell-numbers']); + return $this->contactClickatell($obj, $clickatell_opts); } @@ -44,11 +46,12 @@ class Clickatell extends Transport curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code > 200) { return var_dump($ret); } + return true; } @@ -67,12 +70,12 @@ class Clickatell extends Transport 'name' => 'clickatell-numbers', 'descr' => 'Enter mobile numbers, can be new line or comma separated', 'type' => 'textarea', - ] + ], ], 'validation' => [ 'clickatell-token' => 'required|string', 'clickatell-numbers' => 'required|string', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Discord.php b/LibreNMS/Alert/Transport/Discord.php index 76a2535a6a..44f57bdc77 100644 --- a/LibreNMS/Alert/Transport/Discord.php +++ b/LibreNMS/Alert/Transport/Discord.php @@ -28,8 +28,8 @@ namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Discord extends Transport { @@ -38,7 +38,7 @@ class Discord extends Transport 'severity' => 'Severity', 'hostname' => 'Hostname', 'name' => 'Rule Name', - 'rule' => 'Rule' + 'rule' => 'Rule', ]; public function deliverAlert($obj, $opts) @@ -53,16 +53,16 @@ class Discord extends Transport public function contactDiscord($obj, $discord_opts) { - $host = $discord_opts['url']; - $curl = curl_init(); - $discord_title = '#' . $obj['uid'] . ' ' . $obj['title']; - $discord_msg = strip_tags($obj['msg']); - $color = self::getColorForState($obj['state']); + $host = $discord_opts['url']; + $curl = curl_init(); + $discord_title = '#' . $obj['uid'] . ' ' . $obj['title']; + $discord_msg = strip_tags($obj['msg']); + $color = self::getColorForState($obj['state']); // Special handling for the elapsed text in the footer if the elapsed is not set. $footer_text = $obj['elapsed'] ? 'alert took ' . $obj['elapsed'] : ''; - $data = [ + $data = [ 'embeds' => [ [ 'title' => $discord_title, @@ -70,31 +70,33 @@ class Discord extends Transport 'description' => $discord_msg, 'fields' => $this->createDiscordFields($obj, $discord_opts), 'footer' => [ - 'text' => $footer_text - ] - ] - ] + 'text' => $footer_text, + ], + ], + ], ]; - if (!empty($discord_opts['options'])) { + if (! empty($discord_opts['options'])) { $data = array_merge($data, $discord_opts['options']); } $alert_message = json_encode($data); - curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); + curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); set_curl_proxy($curl); curl_setopt($curl, CURLOPT_URL, $host); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $alert_message); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 204) { var_dump("API '$host' returned Error"); //FIXME: propper debuging var_dump("Params: " . $alert_message); //FIXME: propper debuging var_dump("Return: " . $ret); //FIXME: propper debuging + return 'HTTP Status code ' . $code; } + return true; } @@ -104,7 +106,7 @@ class Discord extends Transport foreach (self::ALERT_FIELDS_TO_DISCORD_FIELDS as $objKey => $discordKey) { // Skip over keys that do not exist so Discord does not give us a 400. - if (!$obj[$objKey]) { + if (! $obj[$objKey]) { continue; } @@ -132,11 +134,11 @@ class Discord extends Transport 'name' => 'options', 'descr' => 'Enter the config options (format: option=value separated by new lines)', 'type' => 'textarea', - ] + ], ], 'validation' => [ 'url' => 'required|url', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Dummy.php b/LibreNMS/Alert/Transport/Dummy.php index 8c1dc7866c..0a0623236a 100644 --- a/LibreNMS/Alert/Transport/Dummy.php +++ b/LibreNMS/Alert/Transport/Dummy.php @@ -21,16 +21,18 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Dummy extends Transport { public function deliverAlert($obj, $opts) { var_dump($obj); + return true; } diff --git a/LibreNMS/Alert/Transport/Elasticsearch.php b/LibreNMS/Alert/Transport/Elasticsearch.php index e39a2038d5..5669b1d9e9 100644 --- a/LibreNMS/Alert/Transport/Elasticsearch.php +++ b/LibreNMS/Alert/Transport/Elasticsearch.php @@ -14,20 +14,21 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Elasticsearch extends Transport { public function deliverAlert($obj, $opts) { - if (!empty($this->config)) { + if (! empty($this->config)) { $opts['es_host'] = $this->config['es-host']; $opts['es_port'] = $this->config['es-port']; $opts['es_index'] = $this->config['es-pattern']; - $opts['es_proxy'] = $this-> config['es-proxy']; + $opts['es_proxy'] = $this->config['es-proxy']; } return $this->contactElasticsearch($obj, $opts); @@ -35,14 +36,14 @@ class Elasticsearch extends Transport public function contactElasticsearch($obj, $opts) { - $es_host = '127.0.0.1'; - $es_port = 9200; - $index = strftime("librenms-%Y.%m.%d"); - $type = 'alert'; + $es_host = '127.0.0.1'; + $es_port = 9200; + $index = strftime("librenms-%Y.%m.%d"); + $type = 'alert'; $severity = $obj['severity']; - $device = device_by_id_cache($obj['device_id']); // for event logging + $device = device_by_id_cache($obj['device_id']); // for event logging - if (!empty($opts['es_host'])) { + if (! empty($opts['es_host'])) { if (preg_match("/[a-zA-Z]/", $opts['es_host'])) { $es_host = gethostbyname($opts['es_host']); if ($es_host === $opts['es_host']) { @@ -55,11 +56,11 @@ class Elasticsearch extends Transport } } - if (!empty($opts['es_port']) && preg_match("/^\d+$/", $opts['es_port'])) { + if (! empty($opts['es_port']) && preg_match("/^\d+$/", $opts['es_port'])) { $es_port = $opts['es_port']; } - if (!empty($opts['es_index'])) { + if (! empty($opts['es_index'])) { $index = strftime($opts['es_index']); } @@ -83,7 +84,7 @@ class Elasticsearch extends Transport break; } - $data = array( + $data = [ '@timestamp' => date('c'), "host" => gethostname(), "location" => $obj['location'], @@ -101,60 +102,60 @@ class Elasticsearch extends Transport "entity_id" => $obj['device_id'], "entity_name" => $obj['hostname'], "entity_descr" => $obj['sysDescr'], - ); + ]; - if (!empty($obj['faults'])) { + if (! empty($obj['faults'])) { foreach ($obj['faults'] as $k => $v) { - $curl = curl_init(); + $curl = curl_init(); $data['message'] = $v['string']; switch (true) { - case (array_key_exists('port_id', $v)): - $data['entity_type'] = 'port'; - $data['entity_tab'] = 'port'; - $data['entity_id'] = $v['port_id']; - $data['entity_name'] = $v['ifName']; + case array_key_exists('port_id', $v): + $data['entity_type'] = 'port'; + $data['entity_tab'] = 'port'; + $data['entity_id'] = $v['port_id']; + $data['entity_name'] = $v['ifName']; $data['entity_descr'] = $v['ifAlias']; break; - case (array_key_exists('sensor_id', $v)): - $data['entity_type'] = $v['sensor_class']; - $data['entity_tab'] = 'health'; - $data['entity_id'] = $v['sensor_id']; - $data['entity_name'] = $v['sensor_descr']; + case array_key_exists('sensor_id', $v): + $data['entity_type'] = $v['sensor_class']; + $data['entity_tab'] = 'health'; + $data['entity_id'] = $v['sensor_id']; + $data['entity_name'] = $v['sensor_descr']; $data['entity_descr'] = $v['sensor_type']; break; - case (array_key_exists('mempool_id', $v)): - $data['entity_type'] = 'mempool'; - $data['entity_tab'] = 'health'; - $data['entity_id'] = $v['mempool_id']; - $data['entity_name'] = $v['mempool_index']; + case array_key_exists('mempool_id', $v): + $data['entity_type'] = 'mempool'; + $data['entity_tab'] = 'health'; + $data['entity_id'] = $v['mempool_id']; + $data['entity_name'] = $v['mempool_index']; $data['entity_descr'] = $v['mempool_descr']; break; - case (array_key_exists('storage_id', $v)): - $data['entity_type'] = 'storage'; - $data['entity_tab'] = 'health'; - $data['entity_id'] = $v['storage_id']; - $data['entity_name'] = $v['storage_index']; + case array_key_exists('storage_id', $v): + $data['entity_type'] = 'storage'; + $data['entity_tab'] = 'health'; + $data['entity_id'] = $v['storage_id']; + $data['entity_name'] = $v['storage_index']; $data['entity_descr'] = $v['storage_descr']; break; - case (array_key_exists('processor_id', $v)): - $data['entity_type'] = 'processor'; - $data['entity_tab'] = 'health'; - $data['entity_id'] = $v['processor_id']; - $data['entity_name'] = $v['processor_type']; + case array_key_exists('processor_id', $v): + $data['entity_type'] = 'processor'; + $data['entity_tab'] = 'health'; + $data['entity_id'] = $v['processor_id']; + $data['entity_name'] = $v['processor_type']; $data['entity_descr'] = $v['processor_descr']; break; - case (array_key_exists('bgpPeer_id', $v)): - $data['entity_type'] = 'bgp'; - $data['entity_tab'] = 'routing'; - $data['entity_id'] = $v['bgpPeer_id']; - $data['entity_name'] = 'local: ' . $v['bgpPeerLocalAddr'] . ' - AS' . $obj['bgpLocalAs']; + case array_key_exists('bgpPeer_id', $v): + $data['entity_type'] = 'bgp'; + $data['entity_tab'] = 'routing'; + $data['entity_id'] = $v['bgpPeer_id']; + $data['entity_name'] = 'local: ' . $v['bgpPeerLocalAddr'] . ' - AS' . $obj['bgpLocalAs']; $data['entity_descr'] = 'remote: ' . $v['bgpPeerIdentifier'] . ' - AS' . $v['bgpPeerRemoteAs']; break; - case (array_key_exists('tunnel_id', $v)): - $data['entity_type'] = 'ipsec_tunnel'; - $data['entity_tab'] = 'routing'; - $data['entity_id'] = $v['tunnel_id']; - $data['entity_name'] = $v['tunnel_name']; + case array_key_exists('tunnel_id', $v): + $data['entity_type'] = 'ipsec_tunnel'; + $data['entity_tab'] = 'routing'; + $data['entity_id'] = $v['tunnel_id']; + $data['entity_name'] = $v['tunnel_name']; $data['entity_descr'] = 'local: ' . $v['local_addr'] . ':' . $v['local_port'] . ', remote: ' . $v['peer_addr'] . ':' . $v['peer_port']; break; default: @@ -162,7 +163,7 @@ class Elasticsearch extends Transport break; } $alert_message = json_encode($data); - curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); + curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); if ($opts['es_proxy'] === true) { set_curl_proxy($curl); } @@ -171,16 +172,16 @@ class Elasticsearch extends Transport curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $alert_message); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200 && $code != 201) { return $host . ' returned HTTP Status code ' . $code . ' for ' . $alert_message; } } } else { - $curl = curl_init(); + $curl = curl_init(); $alert_message = json_encode($data); - curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); + curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); if ($opts['es_proxy'] === true) { set_curl_proxy($curl); } @@ -189,12 +190,13 @@ class Elasticsearch extends Transport curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $alert_message); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200 && $code != 201) { return $host . ' returned HTTP Status code ' . $code . ' for ' . $alert_message; } } + return true; } @@ -225,14 +227,14 @@ class Elasticsearch extends Transport 'name' => 'es-proxy', 'descr' => 'Elasticsearch Proxy', 'type' => 'checkbox', - 'default' => false - ] + 'default' => false, + ], ], 'validation' => [ 'es-host' => 'required|string', 'es-port' => 'required|string', - 'es-pattern' => 'required|string' - ] + 'es-pattern' => 'required|string', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Gitlab.php b/LibreNMS/Alert/Transport/Gitlab.php index 35d302424a..c660930155 100644 --- a/LibreNMS/Alert/Transport/Gitlab.php +++ b/LibreNMS/Alert/Transport/Gitlab.php @@ -21,20 +21,22 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Gitlab extends Transport { public function deliverAlert($obj, $opts) { - if (!empty($this->config)) { + if (! empty($this->config)) { $opts['project-id'] = $this->config['gitlab-id']; $opts['key'] = $this->config['gitlab-key']; $opts['host'] = $this->config['gitlab-host']; } + return $this->contactGitlab($obj, $opts); } @@ -44,24 +46,24 @@ class Gitlab extends Transport if ($obj['state'] != AlertState::CLEAR) { $device = device_by_id_cache($obj['device_id']); // for event logging - $project_id = $opts['project-id']; + $project_id = $opts['project-id']; $project_key = $opts['key']; - $details = "Librenms alert for: " . $obj['hostname']; + $details = "Librenms alert for: " . $obj['hostname']; $description = $obj['msg']; - $title = urlencode($details); - $desc = urlencode($description); - $url = $opts['host'] . "/api/v4/projects/$project_id/issues?title=$title&description=$desc"; - $curl = curl_init(); + $title = urlencode($details); + $desc = urlencode($description); + $url = $opts['host'] . "/api/v4/projects/$project_id/issues?title=$title&description=$desc"; + $curl = curl_init(); - $data = array("title" => $details, - "description" => $description - ); - $postdata = array("fields" => $data); + $data = ["title" => $details, + "description" => $description, + ]; + $postdata = ["fields" => $data]; $datastring = json_encode($postdata); set_curl_proxy($curl); - $headers = array('Accept: application/json', 'Content-Type: application/json', 'PRIVATE-TOKEN: '.$project_key); + $headers = ['Accept: application/json', 'Content-Type: application/json', 'PRIVATE-TOKEN: ' . $project_key]; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); @@ -70,14 +72,16 @@ class Gitlab extends Transport curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $datastring); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code == 200) { $gitlabout = json_decode($ret, true); d_echo("Created Gitlab issue " . $gitlabout['key'] . " for " . $device); + return true; } else { d_echo("Gitlab connection error: " . serialize($ret)); + return false; } } @@ -104,13 +108,13 @@ class Gitlab extends Transport 'name' => 'gitlab-key', 'descr' => 'Personal Access Token', 'type' => 'text', - ] + ], ], 'validation' => [ 'gitlab-host' => 'required|string', 'gitlab-id' => 'required|string', - 'gitlab-key' => 'required|string' - ] + 'gitlab-key' => 'required|string', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Hipchat.php b/LibreNMS/Alert/Transport/Hipchat.php index 18e49bc4a8..f92e792d68 100644 --- a/LibreNMS/Alert/Transport/Hipchat.php +++ b/LibreNMS/Alert/Transport/Hipchat.php @@ -21,10 +21,11 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Hipchat extends Transport { @@ -92,9 +93,9 @@ class Hipchat extends Transport curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); - curl_setopt($curl, CURLOPT_HTTPHEADER, array( + curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded', - )); + ]); $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); @@ -102,6 +103,7 @@ class Hipchat extends Transport var_dump("API '$url' returned Error"); var_dump("Params: " . $message); var_dump("Return: " . $ret); + return 'HTTP Status code ' . $code; } @@ -140,7 +142,7 @@ class Hipchat extends Transport 'validation' => [ 'hipchat-url' => 'required|url', 'hipchat-room-id' => 'required|numeric', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Hue.php b/LibreNMS/Alert/Transport/Hue.php index 1728dc7dc0..b1ebbecc6a 100644 --- a/LibreNMS/Alert/Transport/Hue.php +++ b/LibreNMS/Alert/Transport/Hue.php @@ -21,10 +21,11 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; /** * The Hue API currently is fairly limited for alerts. @@ -35,7 +36,7 @@ class Hue extends Transport { public function deliverAlert($obj, $opts) { - if (!empty($this->config)) { + if (! empty($this->config)) { $opts['user'] = $this->config['hue-user']; $opts['bridge'] = $this->config['hue-host']; $opts['duration'] = $this->config['hue-duration']; @@ -51,16 +52,16 @@ class Hue extends Transport return true; } else { $device = device_by_id_cache($obj['device_id']); // for event logging - $hue_user = $opts['user']; - $url = $opts['bridge'] . "/api/$hue_user/groups/0/action"; - $curl = curl_init(); - $duration = $opts['duration']; - $data = array("alert" => $duration); + $hue_user = $opts['user']; + $url = $opts['bridge'] . "/api/$hue_user/groups/0/action"; + $curl = curl_init(); + $duration = $opts['duration']; + $data = ["alert" => $duration]; $datastring = json_encode($data); set_curl_proxy($curl); - $headers = array('Accept: application/json', 'Content-Type: application/json'); + $headers = ['Accept: application/json', 'Content-Type: application/json']; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); @@ -69,13 +70,15 @@ class Hue extends Transport curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $datastring); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code == 200) { d_echo("Sent alert to Phillips Hue Bridge " . $opts['host'] . " for " . $device); + return true; } else { d_echo("Hue bridge connection error: " . serialize($ret)); + return false; } } @@ -86,33 +89,33 @@ class Hue extends Transport return [ 'config'=>[ [ - 'title'=> 'Host', - 'name' => 'hue-host', - 'descr' => 'Hue Host', - 'type' => 'text', + 'title'=> 'Host', + 'name' => 'hue-host', + 'descr' => 'Hue Host', + 'type' => 'text', ], [ - 'title'=> 'Hue User', - 'name' => 'hue-user', - 'descr' => 'Phillips Hue Host', - 'type' => 'text', + 'title'=> 'Hue User', + 'name' => 'hue-user', + 'descr' => 'Phillips Hue Host', + 'type' => 'text', ], [ - 'title'=> 'Duration', - 'name' => 'hue-duration', - 'descr' => 'Phillips Hue Duration', - 'type' => 'select', - 'options' => [ - '1 Second' => 'select', - '15 Seconds' => 'lselect' - ] - ] + 'title'=> 'Duration', + 'name' => 'hue-duration', + 'descr' => 'Phillips Hue Duration', + 'type' => 'select', + 'options' => [ + '1 Second' => 'select', + '15 Seconds' => 'lselect', + ], + ], ], 'validation' => [ 'hue-host' => 'required|string', 'hue-user' => 'required|string', - 'hue-duration' => 'required|string' - ] + 'hue-duration' => 'required|string', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Irc.php b/LibreNMS/Alert/Transport/Irc.php index 5d58881f62..7a47904b86 100644 --- a/LibreNMS/Alert/Transport/Irc.php +++ b/LibreNMS/Alert/Transport/Irc.php @@ -21,11 +21,12 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; use LibreNMS\Config; +use LibreNMS\Enum\AlertState; class Irc extends Transport { @@ -61,11 +62,11 @@ class Irc extends Transport 'descr' => 'Enable IRC alerts', 'type' => 'checkbox', 'default' => true, - ] + ], ], 'validation' => [ - 'irc' => 'required' - ] + 'irc' => 'required', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Jira.php b/LibreNMS/Alert/Transport/Jira.php index 8737cf6832..83a61c4f5a 100644 --- a/LibreNMS/Alert/Transport/Jira.php +++ b/LibreNMS/Alert/Transport/Jira.php @@ -21,22 +21,24 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Jira extends Transport { public function deliverAlert($obj, $opts) { - if (!empty($this->config)) { + if (! empty($this->config)) { $opts['username'] = $this->config['jira-username']; $opts['password'] = $this->config['jira-password']; $opts['prjkey'] = $this->config['jira-key']; $opts['issuetype'] = $this->config['jira-type']; $opts['url'] = $this->config['jira-url']; } + return $this->contactJira($obj, $opts); } @@ -49,25 +51,25 @@ class Jira extends Transport $device = device_by_id_cache($obj['device_id']); // for event logging - $username = $opts['username']; - $password = $opts['password']; - $prjkey = $opts['prjkey']; - $issuetype = $opts['issuetype']; - $details = "Librenms alert for: " . $obj['hostname']; + $username = $opts['username']; + $password = $opts['password']; + $prjkey = $opts['prjkey']; + $issuetype = $opts['issuetype']; + $details = "Librenms alert for: " . $obj['hostname']; $description = $obj['msg']; - $url = $opts['url'] . '/rest/api/latest/issue'; - $curl = curl_init(); + $url = $opts['url'] . '/rest/api/latest/issue'; + $curl = curl_init(); - $data = array("project" => array("key" => $prjkey), - "summary" => $details, - "description" => $description, - "issuetype" => array("name" => $issuetype)); - $postdata = array("fields" => $data); + $data = ["project" => ["key" => $prjkey], + "summary" => $details, + "description" => $description, + "issuetype" => ["name" => $issuetype], ]; + $postdata = ["fields" => $data]; $datastring = json_encode($postdata); set_curl_proxy($curl); - $headers = array('Accept: application/json', 'Content-Type: application/json'); + $headers = ['Accept: application/json', 'Content-Type: application/json']; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); @@ -77,18 +79,20 @@ class Jira extends Transport curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $datastring); - $ret = curl_exec($curl); + $ret = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code == 200) { $jiraout = json_decode($ret, true); d_echo("Created jira issue " . $jiraout['key'] . " for " . $device); + return true; } else { d_echo("Jira connection error: " . serialize($ret)); + return false; } } - + public static function configTemplate() { return [ @@ -97,31 +101,31 @@ class Jira extends Transport 'title' => 'URL', 'name' => 'jira-url', 'descr' => 'Jira URL', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Project Key', 'name' => 'jira-key', 'descr' => 'Jira Project Key', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Issue Type', 'name' => 'jira-type', 'descr' => 'Jira Issue Type', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Jira Username', 'name' => 'jira-username', 'descr' => 'Jira Username', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Jira Password', 'name' => 'jira-password', 'descr' => 'Jira Password', - 'type' => 'text' + 'type' => 'text', ], ], 'validation' => [ @@ -130,7 +134,7 @@ class Jira extends Transport 'jira-type' => 'required|string', 'jira-username' => 'required|string', 'jira-password' => 'required|string', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Kayako.php b/LibreNMS/Alert/Transport/Kayako.php index f3c4bfc10d..358e51c474 100644 --- a/LibreNMS/Alert/Transport/Kayako.php +++ b/LibreNMS/Alert/Transport/Kayako.php @@ -9,39 +9,41 @@ * option) any later version. Please see LICENSE.txt at the top level of * the source code distribution for details. */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; use LibreNMS\Config; +use LibreNMS\Enum\AlertState; class Kayako extends Transport { public function deliverAlert($host, $kayako) { - if (!empty($this->config)) { + if (! empty($this->config)) { $kayako['url'] = $this->config['kayako-url']; $kayako['key'] = $this->config['kayako-key']; $kayako['secret'] = $this->config['kayako-secret']; $kayako['department'] = $this->config['kayako-department']; } + return $this->contactKayako($host, $kayako); } public function contactKayako($host, $kayako) { - $url = $kayako['url']."/Tickets/Ticket"; + $url = $kayako['url'] . "/Tickets/Ticket"; $key = $kayako['key']; $secret = $kayako['secret']; $user = Config::get('email_from'); $department = $kayako['department']; - $ticket_type= 1; + $ticket_type = 1; $ticket_status = 1; $ticket_prio = 1; $salt = mt_rand(); $signature = base64_encode(hash_hmac('sha256', $salt, $secret, true)); - $protocol = array( + $protocol = [ 'subject' => ($host['name'] ? $host['name'] . ' on ' . $host['hostname'] : $host['title']), 'fullname' => 'LibreNMS Alert', 'email' => $user, @@ -54,11 +56,11 @@ class Kayako extends Transport 'ignoreautoresponder' => true, 'apikey' => $key, 'salt' => $salt, - 'signature' => $signature - ); + 'signature' => $signature, + ]; $post_data = http_build_query($protocol, '', '&'); - $curl = curl_init(); + $curl = curl_init(); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); @@ -68,6 +70,7 @@ class Kayako extends Transport $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200) { var_dump("Kayako returned Error, retry later"); + return false; } @@ -82,33 +85,33 @@ class Kayako extends Transport 'title' => 'Kayako URL', 'name' => 'kayako-url', 'descr' => 'ServiceDesk API URL', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Kayako API Key', 'name' => 'kayako-key', 'descr' => 'ServiceDesk API Key', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Kayako API Secret', 'name' => 'kayako-secret', 'descr' => 'ServiceDesk API Secret Key', - 'type' => 'text' + 'type' => 'text', ], [ 'title' => 'Kayako Department', 'name' => 'kayako-department', 'descr' => 'Department to post a ticket', - 'type' => 'text' - ] + 'type' => 'text', + ], ], 'validation' => [ 'kayako-url' => 'required|url', 'kayako-key' => 'required|string', 'kayako-secret' => 'required|string', - 'kayako-department' => 'required|string' - ] + 'kayako-department' => 'required|string', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Linenotify.php b/LibreNMS/Alert/Transport/Linenotify.php index e551876304..e3108a615a 100644 --- a/LibreNMS/Alert/Transport/Linenotify.php +++ b/LibreNMS/Alert/Transport/Linenotify.php @@ -4,16 +4,18 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Linenotify extends Transport { public function deliverAlert($obj, $opts) { $opts['line-notify-access-token'] = $this->config['line-notify-access-token']; + return $this->contactLineNotify($obj, $opts); } @@ -36,6 +38,7 @@ class Linenotify extends Transport if ($code != 200) { return 'HTTP Status code ' . $code; } + return true; } @@ -47,12 +50,12 @@ class Linenotify extends Transport 'title' => 'Token', 'name' => 'line-notify-access-token', 'descr' => 'LINE Notify Token', - 'type' => 'text' - ] + 'type' => 'text', + ], ], 'validation' => [ 'line-notify-access-token' => 'required|string', - ] + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Mail.php b/LibreNMS/Alert/Transport/Mail.php index d9a5df1b9b..84c2897ddb 100644 --- a/LibreNMS/Alert/Transport/Mail.php +++ b/LibreNMS/Alert/Transport/Mail.php @@ -21,11 +21,12 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; use LibreNMS\Config; +use LibreNMS\Enum\AlertState; class Mail extends Transport { @@ -51,11 +52,11 @@ class Mail extends Transport 'name' => 'email', 'descr' => 'Email address of contact', 'type' => 'text', - ] + ], ], 'validation' => [ - 'email' => 'required|email' - ] + 'email' => 'required|email', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Matrix.php b/LibreNMS/Alert/Transport/Matrix.php index 2fea77c0a6..15a636077b 100644 --- a/LibreNMS/Alert/Transport/Matrix.php +++ b/LibreNMS/Alert/Transport/Matrix.php @@ -24,18 +24,19 @@ namespace LibreNMS\Alert\Transport; +use GuzzleHttp\Client; use LibreNMS\Alert\Transport; use LibreNMS\Enum\AlertState; -use GuzzleHttp\Client; class Matrix extends Transport { public function deliverAlert($obj, $opts) { - $server = $this->config['matrix-server']; - $room = $this->config['matrix-room']; + $server = $this->config['matrix-server']; + $room = $this->config['matrix-room']; $authtoken = $this->config['matrix-authtoken']; - $message = $this->config['matrix-message']; + $message = $this->config['matrix-message']; + return $this->contactMatrix($obj, $server, $room, $authtoken, $message); } @@ -46,7 +47,7 @@ class Matrix extends Transport $txnid = rand(1111, 9999) . time(); $server = preg_replace('/\/$/', '', $server); - $host = $server."/_matrix/client/r0/rooms/".urlencode($room)."/send/m.room.message/".$txnid; + $host = $server . "/_matrix/client/r0/rooms/" . urlencode($room) . "/send/m.room.message/" . $txnid; $request_heads['Authorization'] = "Bearer $authtoken"; $request_heads['Content-Type'] = "application/json"; @@ -56,7 +57,7 @@ class Matrix extends Transport $message = str_replace("{{ $" . $p_key . ' }}', $p_val, $message); } - $body = array('body'=>$message, 'msgtype'=>'m.text'); + $body = ['body'=>$message, 'msgtype'=>'m.text']; $client = new \GuzzleHttp\Client(); $request_opts['proxy'] = get_guzzle_proxy(); @@ -70,9 +71,11 @@ class Matrix extends Transport var_dump("Params:"); var_dump("Response headers:"); var_dump($res->getHeaders()); - var_dump("Return: ".$res->getReasonPhrase()); - return 'HTTP Status code '.$code; + var_dump("Return: " . $res->getReasonPhrase()); + + return 'HTTP Status code ' . $code; } + return true; } @@ -103,13 +106,13 @@ class Matrix extends Transport 'name' => 'matrix-message', 'descr' => 'Enter the message', 'type' => 'textarea', - ] + ], ], 'validation' => [ 'matrix-server' => 'required', 'matrix-room' => 'required', - 'matrix-authtoken' => 'required' - ] + 'matrix-authtoken' => 'required', + ], ]; } } diff --git a/LibreNMS/Alert/Transport/Mattermost.php b/LibreNMS/Alert/Transport/Mattermost.php index 11b65272c3..7f27ec37b5 100755 --- a/LibreNMS/Alert/Transport/Mattermost.php +++ b/LibreNMS/Alert/Transport/Mattermost.php @@ -21,10 +21,11 @@ * @package LibreNMS * @subpackage Alerts */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Mattermost extends Transport { @@ -67,7 +68,7 @@ class Mattermost extends Transport set_curl_proxy($curl); - $httpheaders = array('Accept: application/json', 'Content-Type: application/json'); + $httpheaders = ['Accept: application/json', 'Content-Type: application/json']; $alert_payload = json_encode($data); curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheaders); @@ -80,9 +81,11 @@ class Mattermost extends Transport $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200) { d_echo("Mattermost Connection Error: " . $ret); + return 'HTTP Status code ' . $code; } else { d_echo("Mattermost message sent for " . $device); + return true; } } diff --git a/LibreNMS/Alert/Transport/Msteams.php b/LibreNMS/Alert/Transport/Msteams.php index 0193d574cd..9405ba7f8c 100644 --- a/LibreNMS/Alert/Transport/Msteams.php +++ b/LibreNMS/Alert/Transport/Msteams.php @@ -9,16 +9,17 @@ * option) any later version. Please see LICENSE.txt at the top level of * the source code distribution for details. */ + namespace LibreNMS\Alert\Transport; -use LibreNMS\Enum\AlertState; use LibreNMS\Alert\Transport; +use LibreNMS\Enum\AlertState; class Msteams extends Transport { public function deliverAlert($obj, $opts) { - if (!empty($this->config)) { + if (! empty($this->config)) { $opts['url'] = $this->config['msteam-url']; } @@ -27,30 +28,32 @@ class Msteams extends Transport public function contactMsteams($obj, $opts) { - $url = $opts['url']; - $data = array( + $url = $opts['url']; + $data = [ 'title' => $obj['title'], 'themeColor' => self::getColorForState($obj['state']), - 'text' => strip_tags($obj['msg'], '