3 # This script asks the Evergreen Telephony mediator (eg-pbx-mediator) via
4 # XML-RPC call for the A/T event IDs involved in failed notifications.
6 # With those IDs in hand, it uses cstore to find the events and make new,
7 # similar events with a different event_defintion. The idea is to make it
8 # possible to "rollover" failed telephony notification events as, say, print
9 # or email notification events.
11 # Search further in this file for 'CONFIGURE HERE'.
13 require "/openils/bin/oils_header.pl";
17 use OpenSRF::Utils::Logger qw/$logger/;
18 use OpenSRF::Utils::SettingsClient;
24 # Keys and values should both be event defintion IDs. The keys should be
25 # the original event defintions, the values should be the rolled-over event
28 # CONFIGURE HERE. e.g. 24 => 1 # telephone overdue => email overdue
31 sub create_event_for_object {
32 my ($editor, $event_def, $target) = @_;
34 # there is no consideration of usr opt_in_settings, and no consideration of
37 my $event = Fieldmapper::action_trigger::event->new();
38 $event->target($target);
39 $event->event_def($event_def);
40 $event->run_time("now");
42 # state will be 'pending' by default
44 $editor->create_action_trigger_event($event);
48 sub rollover_events_phone_to_print {
49 my ($editor, $event_ids) = @_;
52 foreach my $id (@$event_ids) {
53 my $event = $editor->retrieve_action_trigger_event($id);
56 $logger->warn("couldn't find event $id for rollover");
58 } elsif (not exists $rollover_map{$event->event_def}) {
61 "event %d has event_def %d which is not in rollover map",
62 $id, $event->event_def
66 } elsif (not $event->target) {
67 $logger->warn("event $id has no target, cannot rollover");
71 if (my $new_id = create_event_for_object(
73 $rollover_map{$event->event_def},
76 $logger->info("rollover created event $new_id from event " . $event->id);
77 push @$finished, $new_id;
84 #############################################################################
87 if (not scalar keys %rollover_map) {
88 die("You must first define some mappings in \%rollover_map (see source)\n");
91 osrf_connect($ENV{SRF_CORE} || "/openils/conf/opensrf_core.xml");
93 my $settings = OpenSRF::Utils::SettingsClient->new;
94 my $mediator_host = $settings->config_value(notifications => telephony => "host");
95 my $mediator_port = $settings->config_value(notifications => telephony => "port");
97 my $url = "http://$mediator_host:$mediator_port/";
99 my $rpc_client = new RPC::XML::Client($url);
100 my $event_ids = $rpc_client->simple_request("get_failures");
102 my $editor = new OpenILS::Utils::CStoreEditor("xact" => 1);
104 my $done = rollover_events_phone_to_print($editor, $event_ids);
107 my $acked = $rpc_client->simple_request("ack_failures", $done);
108 $logger->info("after rollover, mediator acknowledged $acked callfiles");