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