diff --git a/pandora_server/ChangeLog b/pandora_server/ChangeLog index e60b8e923a..917fb8975f 100644 --- a/pandora_server/ChangeLog +++ b/pandora_server/ChangeLog @@ -1,3 +1,14 @@ +2014-08-18 Alejandro Gallardo + + * lib/PandoraFMS/Core.pm: Added an internal action to + create a Integria IMS incident on the function + "pandora_execute_action". Added the function + "pandora_create_integria_ticket". + + * util/pandora_manage.pl: Added an option to recreate + a collection with the function "cli_recreate_collection". + Added a call to get the Pandora FMS shared config. + 2014-08-14 Ramon Novoa * conf/pandora_server.conf.new: Added recon_timing_template to the diff --git a/pandora_server/lib/PandoraFMS/Core.pm b/pandora_server/lib/PandoraFMS/Core.pm index 2eb80a0935..174cfa8587 100644 --- a/pandora_server/lib/PandoraFMS/Core.pm +++ b/pandora_server/lib/PandoraFMS/Core.pm @@ -982,6 +982,46 @@ sub pandora_execute_action ($$$$$$$$$;$) { } } + # Integria IMS Ticket + } elsif ($clean_name eq "Integria IMS Ticket") { + $field1 = subst_alert_macros ($field1, \%macros); + $field3 = subst_alert_macros ($field3, \%macros); + $field4 = subst_alert_macros ($field4, \%macros); + $field6 = subst_alert_macros ($field6, \%macros); + $field7 = subst_alert_macros ($field7, \%macros); + + # Field 1 (Integria IMS API path) + my $api_path = $field1; + + # Field 2 (Integria IMS API pass) + my $api_pass = $field2; + + # Field 3 (Integria IMS user) + my $integria_user = $field3; + + # Field 4 (Ticket name) + my $ticket_name = $field4; + if ($ticket_name eq "") { + $ticket_name = "Pandora FMS alert action created by API"; + } + + # Field 5 (Ticket group ID) + my $ticket_group_id = $field5; + if ($ticket_group_id eq '') { + $ticket_group_id = 0; + } + + # Field 6 (Ticket priority); + my $ticket_priority = $field6; + if ($ticket_priority eq '') { + $ticket_priority = 0; + } + + # Field 7 (Ticket description); + my $ticket_description = $field7; + + pandora_create_integria_ticket($pa_config, $api_path, $api_pass, $integria_user, $ticket_name, $ticket_group_id, $ticket_priority, $ticket_description); + # Unknown } else { logger($pa_config, "Unknown action '" . $action->{'name'} . "' for alert '". $alert->{'name'} . "' agent '" . (defined ($agent) ? $agent->{'nombre'} : 'N/A') . "'.", 3); @@ -4628,6 +4668,50 @@ sub pandora_edit_custom_graph ($$$$$$$$$$$) { return $res; } +sub pandora_create_integria_ticket ($$$$$$$$) { + my ($pa_config,$api_path,$api_pass,$integria_user,$ticket_name,$group_id,$ticket_priority,$ticket_description) = @_; + + my $data_ticket; + my $call_api; + + if ($api_path eq "") { + return 0; + } + if ($integria_user eq "") { + $integria_user = "admin"; + } + if ($ticket_name eq "") { + $ticket_name = "Ticket created by Pandora FMS"; + } + if ($group_id eq "") { + $group_id = 0; + } + if ($ticket_priority eq "") { + $ticket_priority = 1; + } + + $data_ticket = $ticket_name . + "|;|" . $group_id . + "|;|" . $ticket_priority . + "|;|" . $ticket_description; + + $call_api = $api_path . '?' . + 'user=' . $integria_user . '&' . + 'pass=' . $api_pass . '&' . + 'op=create_incident&' . + 'params=' . $data_ticket .'&' . + 'token=|;|'; + logger($pa_config, "Integria ticket call:" . $call_api . "", 3); + my $content = get($call_api); + logger($pa_config, "Integria ticket res:" . $content . "", 3); + if (is_numeric($content) && $content ne "-1") { + return $content; + } + else { + return 0; + } +} + # End of function declaration # End of defined Code diff --git a/pandora_server/util/integria_rticket.pl b/pandora_server/util/integria_rticket.pl new file mode 100644 index 0000000000..8d3af6022b --- /dev/null +++ b/pandora_server/util/integria_rticket.pl @@ -0,0 +1,237 @@ +#!/usr/bin/perl + +######################################################################## +# Integria IMS - Remote Ticket Tool (via WEB API) +######################################################################## +# Copyright (c) 2013 Artica Soluciones Tecnologicas S.L +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 2 +######################################################################## + +# Includes list +use strict; +use LWP::Simple; + +# Init +tool_api_init(); + +# Main +tool_api_main(); + +######################################################################## +# Print a help screen and exit. +######################################################################## +sub help_screen{ + + print "Options to create event: + + $0 -p -c -create_ticket + +Where options: + + -u + -create_ticket + -name : Free text + -group : Group ID (use 0 for 'all') + +Optional parameters: + + [-priority ] : 10 Maintance, 0 Informative, 1 Low, 2 Medium, 3 Serious, 4 Very serious + [-desc ] : Free text + [-type ] : Type ID (must exist in Integria IMS) + [-inventory ] : Inventory ID (must exist in Integria IMS) + [-email ] : 1 or 0\n\n"; + + print "Credential/API syntax: \n\n"; + print ": API credentials separated by comma: ,\n\n"; + + print "Example of ticket generation:\n\n"; + + print "\t$0 -p http://localhost/integria/include/api.php -u 1234,admin \ + \t-create_ticket -name \"SampleTicket\" -group 1 -priority 2 -desc \"This is a sample\" \ + \t-type 4 -inventory 6 -email 1"; + print "\n\n\n"; + exit; +} + +############################################################################## +# Init screen +############################################################################## +sub tool_api_init () { + + print "\nIntegria IMS Remote Ticket Tool Copyright (c) 2013 Artica ST\n"; + print "This program is Free Software, licensed under the terms of GPL License v2\n"; + print "You can download latest versions and documentation at http://www.integriaims.com\n\n"; + + if ($#ARGV < 0) { + help_screen(); + } + + if (($ARGV[0] eq '-h') || ($ARGV[0] eq '-help')) { + help_screen(); + } + +} + +######################################################################## +######################################################################## +# MAIN +######################################################################## +######################################################################## + +sub tool_api_main () { + + my $api_path; + my $credentials; + my $api_pass; + my $db_user; + my @db_info; + + my $ticket_name = ""; + my $group_id = -1; + my $ticket_priority = 0; + my $ticket_description = ''; + my $ticket_type = ''; + my $ticket_inventory = ''; + my $email_copy = 0; + + my $option = $ARGV[4]; + my $data_ticket; + my $call_api; + + #~ help or api path (required) + if ($ARGV[0] eq '-h') { + print "HELP!\n"; + help_screen(); + } + elsif ($ARGV[0] ne '-p') { + print "[ERROR] Missing API path! Read help info:\n\n"; + help_screen(); + exit; + } + else { + $api_path = $ARGV[1]; + } + + #~ credentials of database + if ($ARGV[2] eq '-u') { + $credentials = $ARGV[3]; + @db_info = split(',', $credentials); + + if ($#db_info < 1) { + print "[ERROR] Invalid database credentials! Read help info:\n\n"; + help_screen(); + } + else { + $api_pass = $db_info[0]; + $db_user = $db_info[1]; + } + } + else { + print "[ERROR] Missing database credentials! Read help info:\n\n"; + help_screen(); + exit; + } + + if ($option eq '-create_ticket') { + my $i = 0; + foreach (@ARGV) { + my $line = $_; + + #-------------------DEBUG-------------------- + #print("i " . $i . " line " . $line . "\n"); + + if ($line eq '-name') { + $ticket_name = $ARGV[$i + 1]; + } + if ($line eq '-group') { + $group_id = $ARGV[$i + 1]; + } + if ($line eq '-priority') { + $ticket_priority = $ARGV[$i + 1]; + } + if ($line eq '-desc') { + $ticket_description = $ARGV[$i + 1]; + } + if ($line eq '-type') { + $ticket_type = $ARGV[$i + 1]; + } + if ($line eq '-inventory') { + $ticket_inventory = $ARGV[$i + 1]; + } + if ($line eq '-email') { + $email_copy = $ARGV[$i + 1]; + } + + $i++; + } + + if ($ticket_name eq "") { + print "[ERROR] Missing ticket name! Read help info:\n\n"; + help_screen(); + exit; + } + if ($group_id == -1) { + print "[ERROR] Missing ticket group! Read help info:\n\n"; + help_screen(); + exit; + } + + $data_ticket = $ticket_name . + "|;|" . $group_id . + "|;|" . $ticket_priority . + "|;|" . $ticket_description . + "|;|" . $ticket_inventory . + "|;|" . $ticket_type . + "|;|" . $email_copy; + $call_api = $api_path . '?' . + 'user=' . $db_user . '&' . + 'pass=' . $api_pass . '&' . + 'op=create_incident&' . + 'params=' . $data_ticket .'&' . + 'token=|;|'; + + } + else { + print "[ERROR] No valid option selected! Read help info:\n\n"; + help_screen(); + exit; + } + + my @args = @ARGV; + my $ltotal = $#args; + + if ($ltotal < 0) { + print "[ERROR] No valid arguments. Read help info:\n\n"; + help_screen(); + exit; + } + else { + #-----------DEBUG------------ + #print($call_api . "\n\n\n"); + + my $content = get($call_api); + + #-----------DEBUG----------- + #print($content . "\n\n\n"); + + if ($option eq '-create_ticket') { + if ($content eq undef) { + print "[ERROR] Not respond or bad syntax. Read help info:\n\n"; + help_screen(); + exit; + } + else { + print "Ticket ID: $content"; + } + } + else { + print "[ERROR] No valid option selected!"; + } + } + + print "\nExiting!\n\n"; + + exit; +} \ No newline at end of file diff --git a/pandora_server/util/pandora_manage.pl b/pandora_server/util/pandora_manage.pl index 3d23171079..ae5d131ef6 100755 --- a/pandora_server/util/pandora_manage.pl +++ b/pandora_server/util/pandora_manage.pl @@ -69,6 +69,9 @@ my $dbh = db_connect ('mysql', $conf{'dbname'}, $conf{'dbhost'}, $conf{'dbport'} my $history_dbh = ($conf{'_history_db_enabled'} eq '1') ? db_connect ('mysql', $conf{'_history_db_name'}, $conf{'_history_db_host'}, '3306', $conf{'_history_db_user'}, $conf{'_history_db_pass'}) : undef; +# Read shared config file +pandora_get_sharedconfig (\%conf, $dbh); + my $conf = \%conf; # Main @@ -166,6 +169,7 @@ sub help_screen{ help_screen_line('--validate_policy_alerts', '', 'Validate the alerts of a given policy'); help_screen_line('--get_policy_modules', '', 'Get the modules of a policy'); help_screen_line('--get_policies', '[]', "Get all the policies (without parameters) or \n\tthe policies of a given agent (agent name as parameter)"); + help_screen_line('--recreate_collection', '', 'Recreate the files of a collection'); print "\nNETFLOW:\n\n" unless $param ne ''; help_screen_line('--create_netflow_filter', " \n\t ", "Create a new netflow filter"); @@ -2813,6 +2817,24 @@ sub cli_apply_all_policies() { } } +############################################################################## +# Recreate the files of a collection. +# Related option: --recreate_collection +############################################################################## + +sub cli_recreate_collection () { + my $collection_id = @ARGV[2]; + + my $result = enterprise_hook('pandora_recreate_collection', [$conf, $collection_id, $dbh]); + + if ($result == 1) { + print_log "[INFO] Collection recreated successfully.\n"; + } + elsif ($result == 0) { + print_log "[ERROR] Collection not recreated.\n"; + } +} + ############################################################################## # Validate all the alerts # Related option: --validate_all_alerts @@ -3899,6 +3921,10 @@ sub pandora_manage_main ($$$) { param_check($ltotal, 35, 33); cli_create_local_component(); } + elsif ($param eq '--recreate_collection') { + param_check($ltotal, 1); + cli_recreate_collection(); + } else { print_log "[ERROR] Invalid option '$param'.\n\n"; $param = '';