1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
|
--
-- (C) 2013-22 - ntop.org
--
--
-- This script is executed once at startup similar to /etc/rc.local on Unix
--
local dirs = ntop.getDirs()
package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path
require "lua_utils"
-- Important: load this before any other alert related module
local plugins_utils = require "plugins_utils"
plugins_utils.loadPlugins()
local recipients = require "recipients"
recipients.initialize()
local alert_utils = require "alert_utils"
local discover_utils = require "discover_utils"
local host_pools_nedge = require "host_pools_nedge"
local os_utils = require "os_utils"
local lists_utils = require "lists_utils"
local recovery_utils = require "recovery_utils"
local delete_data_utils = require "delete_data_utils"
local ts_utils = require "ts_utils"
local presets_utils = require "presets_utils"
local blog_utils = require("blog_utils")
-- ##################################################################
traceError(TRACE_NORMAL, TRACE_CONSOLE, "Processing startup.lua: please hold on...")
if ntop.isPro() then
package.path = dirs.installdir .. "/pro/scripts/callbacks/system/?.lua;" .. package.path
require("startup")
end
-- ##################################################################
if ntop.isAppliance() then
package.path = dirs.installdir .. "/scripts/lua/modules/system_config/?.lua;" .. package.path
-- Discard any pending, unfinished, unsaved configuration
local appliance_config = require("appliance_config"):create(true):discard()
-- Load the actual valid configuration
appliance_config = require("appliance_config"):create(false)
-- Apply some config prefs
local vlan_trunk = appliance_config:isBridgeOverVLANTrunkEnabled()
ntop.setPref("ntopng.prefs.enable_vlan_trunk_bridge", ternary(vlan_trunk, "1", "0"))
-- Load possibly changed prefs
ntop.reloadPreferences()
end
host_pools_nedge.migrateHostPools()
if ntop.isnEdge() then
host_pools_nedge.initPools()
end
if(ntop.isPro()) then
shaper_utils = require "shaper_utils"
shaper_utils.initShapers()
end
-- ##################################################################
local has_pcap_dump_interface = false
local function cleanupIfname(ifname, ifid)
interface.select(ifname)
local ifid = getInterfaceId(ifname)
if interface.isPcapDumpInterface() then
has_pcap_dump_interface = true
end
local alerts_status_path = os_utils.fixPath(dirs.workingdir .. "/" .. ifid .. "/json/")
ntop.rmdir(alerts_status_path)
-- Remove the active devices and pools keys
alert_utils.deleteActiveDevicesKey(ifid)
alert_utils.deleteActivePoolsKey(ifid)
-- Remove network discovery request on startup
discover_utils.clearNetworkDiscovery(ifid)
-- Clean old InfluxDB export cache
local export_dir = os_utils.fixPath(dirs.workingdir .. "/".. ifid .."/ts_export")
ntop.rmdir(export_dir)
end
-- Remove the json dumps previously needed for alerts generation
for ifid, ifname in pairs(interface.getIfNames()) do
cleanupIfname(ifname, ifid)
end
cleanupIfname(getSystemInterfaceName(), getSystemInterfaceId())
-- Also flush the export queue
ntop.delCache("ntopng.influx_file_queue")
-- ##################################################################
local recording_utils = require "recording_utils"
recording_utils.checkAvailable()
-- ##################################################################
local companion_interface_utils = require "companion_interface_utils"
companion_interface_utils.initCompanions()
-- ##################################################################
lists_utils.startup()
-- ##################################################################
-- Initialize device policies (presets)
-- NOTE: Must go after lists_utils initialization and reload
-- as new custom protocols can be set by lists utils
presets_utils.init()
presets_utils.reloadAllDevicePolicies()
-- TODO: migrate custom re-arm settings
-- this will retrieve host pools and policers configurtions via HTTP if enabled
if ntop.isnEdge() then
local http_bridge_conf_utils = require "http_bridge_conf_utils"
http_bridge_conf_utils.configureBridge()
end
alert_utils.notify_ntopng_start()
if not recovery_utils.check_clean_shutdown() then
package.path = dirs.installdir .. "/scripts/callbacks/system/?.lua;" .. package.path
end
recovery_utils.unmark_clean_shutdown()
-- Need to run setup at startup since the schemas may be changed
ts_utils.setupAgain()
-- Migrate "iface:ndpi_categories" under the correct folder
if(ntop.getCache("ntopng.cache.rrd_category_migration") ~= "1") then
for ifid, ifname in pairs(delete_data_utils.list_all_interfaces()) do
ntop.mkdir(dirs.workingdir .. "/" .. ifid .. "/rrd/ndpi_categories")
for cat_name, cat_id in pairs(interface.getnDPICategories()) do
local old_path = os_utils.fixPath(dirs.workingdir .. "/" .. ifid .. "/rrd/"..cat_name..".rrd")
if ntop.exists(old_path) then
local new_path = os_utils.fixPath(dirs.workingdir .. "/" .. ifid .. "/rrd/ndpi_categories/"..cat_name..".rrd")
traceError(TRACE_INFO, TRACE_CONSOLE, "Migrating Category RRD: " .. old_path)
os.rename(old_path, new_path)
end
end
end
-- do not perform migration again
ntop.setCache("ntopng.cache.rrd_category_migration", "1")
end
-- Clear the unused DHCP cache keys
for ifid, ifname in pairs(delete_data_utils.list_all_interfaces()) do
ntop.delCache("ntopng.dhcp."..ifid..".cache")
end
if(has_pcap_dump_interface) then
-- Load the lists at the very beginning in order to avoid misclassification
-- when reading from PCAP dump. This can take some time.
traceError(TRACE_NORMAL, TRACE_CONSOLE, "Loading category lists...")
lists_utils.checkReloadLists()
traceError(TRACE_NORMAL, TRACE_CONSOLE, "Loading category lists done")
end
-- Show the warning at most 1 time per run
ntop.delCache("ntopng.cache.rrd_format_change_warning_shown")
-- Check if there is a local file to run
local local_startup_file = "/usr/share/ntopng/local/scripts/callbacks/system/startup.lua"
if(ntop.exists(local_startup_file)) then
traceError(TRACE_NORMAL, TRACE_CONSOLE, "Running "..local_startup_file)
dofile(local_startup_file)
end
if(ntop.isPro()) then
-- Import ClickHouse dumps if any
local silence_import_warnings = true
ntop.importClickHouseDumps(silence_import_warnings)
end
blog_utils.fetchLatestPosts()
traceError(TRACE_NORMAL, TRACE_CONSOLE, "Completed startup.lua")
|