1package App::Netdisco::Util::Worker;
2
3use Dancer ':syntax';
4use App::Netdisco::JobQueue 'jq_insert';
5
6use Encode 'encode';
7use MIME::Base64 'encode_base64';
8
9use Storable 'dclone';
10use Data::Visitor::Tiny;
11
12use base 'Exporter';
13our @EXPORT = ('queue_hook');
14
15sub queue_hook {
16  my ($hook, $conf) = @_;
17  my $extra = { action_conf => dclone ($conf->{'with'} || {}),
18                event_data  => dclone (vars->{'hook_data'} || {}) };
19
20  # remove scalar references which to_json cannot handle
21  visit( $extra->{'event_data'}, sub {
22    my ($key, $valueref) = @_;
23    $$valueref = '' if ref $$valueref eq 'SCALAR';
24  });
25
26  jq_insert({
27    action => ('hook::'. lc($conf->{'type'})),
28    extra  => encode_base64( encode('UTF-8', to_json( $extra )) ),
29  });
30
31  return 1;
32}
33
34true;
35