#!/usr/bin/env php 1) { db_switch_remote_to_main(); } // process calling arguments $parms = $_SERVER['argv']; array_shift($parms); // utility requires input parameters if (cacti_sizeof($parms) == 0) { print 'ERROR: You must supply input parameters' . PHP_EOL . PHP_EOL; display_help(); exit(1); } $debug = false; $host_id = ''; $filter = ''; if (cacti_sizeof($parms)) { foreach ($parms as $parameter) { if (str_contains($parameter, '=')) { [$arg, $value] = explode('=', $parameter, 2); } else { $arg = $parameter; $value = ''; } switch ($arg) { case '-id': case '--id': case '--host-id': $host_id = $value; break; case '-s': case '--filter': $filter = $value; break; case '-d': case '--debug': $debug = true; break; case '--version': case '-v': case '-V': display_version(); exit(0); case '--help': case '-H': case '-h': display_help(); exit(0); default: print 'ERROR: Invalid Parameter ' . $parameter . PHP_EOL . PHP_EOL; display_help(); exit(1); } } } // form the 'where' clause for our main sql query if ($filter != '') { $sql_where = "AND (data_template_data.name_cache like '%" . $filter . "%'" . " OR data_template_data.local_data_id like '%" . $filter . "%'" . " OR data_template.name like '%" . $filter . "%'" . " OR data_input.name like '%" . $filter . "%')"; } else { $sql_where = ''; } if (cacti_strtolower($host_id) == 'all') { // Act on all graphs } elseif (substr_count($host_id, ',')) { $hosts = explode(',', $host_id); $host_str = ''; foreach ($hosts as $host) { if (is_numeric($host) && $host > 0) { $host_str .= ($host_str != '' ? ', ' : '') . $host; } } $sql_where .= " AND data_local.host_id IN ($host_str)"; } elseif ($host_id == '0') { $sql_where .= ' AND data_local.host_id=0'; } elseif (!empty($host_id) && $host_id > 0) { $sql_where .= ' AND data_local.host_id=' . $host_id; } else { print "ERROR: You must specify either a host_id or 'all' to proceed." . PHP_EOL; display_help(); exit; } $data_source_list_sql = "SELECT data_template_data.local_data_id, data_template_data.name_cache, data_template_data.active, data_input.name as data_input_name, data_template.name as data_template_name, data_local.host_id FROM (data_local,data_template_data) LEFT JOIN data_input ON (data_input.id=data_template_data.data_input_id) LEFT JOIN data_template ON (data_local.data_template_id=data_template.id) WHERE data_local.id=data_template_data.local_data_id $sql_where"; $data_source_list = db_fetch_assoc($data_source_list_sql); // issue warnings and start message if applicable if (cacti_sizeof($data_source_list)) { print 'WARNING: Do not interrupt this script. Interrupting during rename can cause issues' . PHP_EOL; debug("There are '" . cacti_sizeof($data_source_list) . "' Data Sources to rename"); $i = 1; foreach ($data_source_list as $data_source) { if (!$debug) { print '.'; } debug("Data Source Name '" . $data_source['name_cache'] . "' starting"); api_reapply_suggested_data_source_data($data_source['local_data_id']); update_data_source_title_cache($data_source['local_data_id']); debug("Data Source Rename Done for Data Source '" . addslashes(get_data_source_title($data_source['local_data_id'])) . "'"); $i++; } } else { if ($debug) { print PHP_EOL; print '--------------------------' . PHP_EOL; print 'Data Source Selection SQL:' . PHP_EOL; print '--------------------------' . PHP_EOL; print $data_source_list_sql . PHP_EOL; print '--------------------------' . PHP_EOL . PHP_EOL; } print 'WARNING: No Data Sources where found matching the selected criteria.' . PHP_EOL; } function debug(string $message) : void { global $debug; if ($debug) { print('DEBUG: ' . trim($message) . PHP_EOL); } } /** * display_version - displays version information * * @return void */ function display_version() : void { $version = get_cacti_cli_version(); print "Cacti Reapply Data Source Names Utility, Version $version, " . COPYRIGHT_YEARS . PHP_EOL; } /** * display_help - displays the usage of the function * * @return void */ function display_help() : void { display_version(); print PHP_EOL; print ('usage: poller_data_sources_reapply_names.php ' . '--host-id=[id|all][N1,N2,...] [--filter=string] [--debug]') . PHP_EOL . PHP_EOL; print 'A utility that will recalculate Data Source names for the selected Data Templates.' . PHP_EOL . PHP_EOL; print 'Required:' . PHP_EOL; print " --host-id=N|all|N1,N2,... - The devices id, 'all' or a comma delimited list of id's" . PHP_EOL; print 'Optional:' . PHP_EOL; print ' --filter=search - A Data Template name or Data Source Title to search for' . PHP_EOL; print ' --debug - Display verbose output during execution' . PHP_EOL . PHP_EOL; }