1package App::Netdisco::Web::Plugin::AdminTask::DuplicateDevices;
2
3use Dancer ':syntax';
4use Dancer::Plugin::Ajax;
5use Dancer::Plugin::DBIC;
6use Dancer::Plugin::Auth::Extensible;
7
8use App::Netdisco::Web::Plugin;
9
10register_admin_task({
11  tag => 'duplicatedevices',
12  label => 'Duplicate Devices',
13});
14
15ajax '/ajax/content/admin/duplicatedevices' => require_role admin => sub {
16    my @set = schema('netdisco')->resultset('Device')->search({
17      serial => { '-in' => schema('netdisco')->resultset('Device')->search({
18          '-and' => [serial => { '!=', undef }, serial => { '!=', '' }],
19        }, {
20          group_by => ['serial'],
21          having => \'count(*) > 1',
22          columns => 'serial',
23        })->as_query
24      },
25    }, { columns => [qw/ip dns contact location name model os_ver serial/] })
26      ->with_times->hri->all;
27
28    content_type('text/html');
29    template 'ajax/admintask/duplicatedevices.tt', {
30      results => \@set
31    }, { layout => undef };
32};
33
34true;
35