diff --git a/scripts/lua/active_monitoring.lua b/scripts/lua/active_monitoring.lua index 1805efd297..6088b2d31a 100644 --- a/scripts/lua/active_monitoring.lua +++ b/scripts/lua/active_monitoring.lua @@ -28,6 +28,7 @@ dofile(dirs.installdir .. "/scripts/lua/inc/menu.lua") local page = _GET["page"] or 'overview' local host = _GET["host"] local measurement = _GET["measurement"] +local is_infrastructure = _GET["is_infrastructure"] -- ########################################### @@ -87,11 +88,17 @@ if (page == "overview") then vue_page_name = "PageActiveMonitoring", page_context = json_context }) -elseif ((page == "historical") and (not isEmptyString(host)) and (not isEmptyString(measurement))) then +elseif ((page == "historical") and (not isEmptyString(host))) then local graph_utils = require("graph_utils") + local host_tag = host + if not isEmptyString(measurement) then + host_tag = host .. ",metric:" .. measurement + elseif not isEmptyString(is_infrastructure) then + host_tag = host .. ",metric:infrastructure" + end graph_utils.drawNewGraphs({ ifid = -1, - host = host .. ",metric:" .. measurement + host = host_tag }) end diff --git a/scripts/lua/modules/http_lint.lua b/scripts/lua/modules/http_lint.lua index e3297a7909..9d16dcf999 100644 --- a/scripts/lua/modules/http_lint.lua +++ b/scripts/lua/modules/http_lint.lua @@ -2181,6 +2181,7 @@ local known_parameters = { ["netbox_activation_url"] = validateSingleWord, ["netbox_default_site"] = validateSingleWord, ["netbox_personal_access_token"] = validateSingleWord, + ["is_infrastructure"] = validateBool, -- Service Map ["service_id"] = validateNumber, diff --git a/scripts/lua/modules/timeseries_info.lua b/scripts/lua/modules/timeseries_info.lua index 0e36ba5073..0e87bba4e9 100644 --- a/scripts/lua/modules/timeseries_info.lua +++ b/scripts/lua/modules/timeseries_info.lua @@ -2009,7 +2009,7 @@ local community_timeseries = { { local function add_active_monitoring_timeseries(tags, timeseries) local am_utils = require "am_utils" - + -- google.com,metric:cicmp local data = split(tags.host, ',') local metric = split(data[2], ':')[2] @@ -3238,6 +3238,33 @@ function timeseries_info.retrieve_specific_timeseries(tags, prefix) local timeseries_list = community_timeseries local timeseries = {} + if ntop.isEnterprise() then + -- Check for the infrastructure active monitoring + if tags.host then + if tags.host:find("metric:infrastructure") then + local host = split(tags.host, ",") + local am_utils = require("am_utils") + local active_monitoring_hosts = am_utils.getHosts() or {} + for key, info in pairs(active_monitoring_hosts or {}) do + if key:find(host[1]) then + local measurement_key = split(key, "@")[2] + tags.host = measurement_key .. ",metric:" .. info.measurement + timeseries = add_active_monitoring_timeseries(tags, timeseries) + timeseries[#timeseries].query = 'host:' .. tags.host + -- HTTP measurement has 2 timeseries, so add to both the query + if info.measurement == 'http' then + timeseries[#timeseries - 1].query = 'host:' .. tags.host + end + end + end + if table.len(timeseries) > 0 then + timeseries[1].default_visible = true + end + return timeseries + end + end + end + if ntop.isPro() then package.path = dirs.installdir .. "/scripts/lua/pro/modules/?.lua;" .. package.path local timeseries_info_ext = require "timeseries_info_ext" diff --git a/scripts/lua/rest/v2/get/active_monitoring/timeseries_list.lua b/scripts/lua/rest/v2/get/active_monitoring/timeseries_list.lua index b44cdff4c6..4ce2c8dd3e 100644 --- a/scripts/lua/rest/v2/get/active_monitoring/timeseries_list.lua +++ b/scripts/lua/rest/v2/get/active_monitoring/timeseries_list.lua @@ -4,13 +4,19 @@ local dirs = ntop.getDirs() package.path = dirs.installdir .. "/scripts/lua/modules/?.lua;" .. package.path +if ntop.isEnterprise() then + package.path = dirs.installdir .. "/pro/scripts/lua/enterprise/modules/?.lua;" .. package.path +end require "lua_utils" local rest_utils = require "rest_utils" local json = require("dkjson") local script_manager = require("script_manager") local am_utils = require "am_utils" - +local infrastructure_utils = nil +if ntop.isEnterprise() then + infrastructure_utils = require("infrastructure_utils") +end -- -- List of active monitoring hosts (replaces get_active_monitoring_hosts.lua) -- Example: curl -u admin:admin -H "Content-Type: application/json" -d '{ }' http://localhost:3000/lua/rest/v2/get/am_host/list.lua @@ -90,29 +96,39 @@ for key, am_host in pairs(am_hosts) do res[#res + 1] = { key = key, label = am_host.label, - html_label = html_label, host = am_host.host, - alerted = alerted, measurement = i18n(m_info.i18n_label), measurement_key = am_host.measurement, - chart = chart, - threshold = am_host.threshold, last_measure = column_last_value or "", - value_js_formatter = m_info.value_js_formatter, - last_mesurement_time = column_last_update, last_ip = column_last_ip, ifname = column_ifname, - granularity = am_host.granularity, - availability = availability or "", - hours = hourly_stats or {}, - unit = i18n(m_info.i18n_unit) or m_info.i18n_unit, - jitter = column_jitter, - readonly = am_host.readonly } ::continue:: end + +if infrastructure_utils then + local infrastructure_instances = infrastructure_utils.get_all_instances() + + for _, instance in pairs(infrastructure_instances or {}) do + local host = instance.url + local measurement_host_tag = instance.url + if table.len(measurement_host_tag:split("//")) == 2 then + measurement_host_tag = measurement_host_tag:split("//")[2] + end + if table.len(measurement_host_tag:split(":")) == 2 then + measurement_host_tag = measurement_host_tag:split(":")[1] + end + res[#res + 1] = { + label = host, + host = measurement_host_tag, + measurement = '', + measurement_key = "infrastructure" + } + end +end + -- ################################################ rest_utils.answer(rest_utils.consts.success.ok, res)