package App::Netdisco::Worker::Plugin::Discover::Snapshot; use Dancer ':syntax'; use Dancer::Plugin::DBIC 'schema'; use App::Netdisco::Worker::Plugin; use App::Netdisco::Transport::SNMP (); use App::Netdisco::Util::Snapshot 'dump_cache_to_browserdata'; use Storable 'nfreeze'; use MIME::Base64 'encode_base64'; use aliased 'App::Netdisco::Worker::Status'; register_worker({ phase => 'late' }, sub { my ($job, $workerconf) = @_; my $device = $job->device; my $snmp = App::Netdisco::Transport::SNMP->reader_for($device) or return Status->defer("discover failed: could not SNMP connect to $device"); return unless $device->in_storage and not $device->oids->count and $snmp->offline; dump_cache_to_browserdata( $device, $snmp ); my $frozen = encode_base64( nfreeze( $snmp->cache ) ); $device->update_or_create_related('snapshot', { cache => $frozen }); return Status ->info(sprintf ' [%s] discover - oids and cache stored', $device); }); true;