Title: [opsview] [10087] merge in 10086 (row counts in topology map API)

Property changes on: trunk
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/DEV-capside/release-3.9.0:6365-6370
/branches/DEV-extra-notification-data:6734-6746
/branches/DEV-odw-calculations:9016-9160
/branches/DEV-restapi-monitoringservers:9778
/branches/DEV-snmp-multi:7324-7376
/branches/US187:9403-9479
/branches/US198b:8875-8994
/branches/US310:9851-9873
/branches/enterprise/BRAN-3.14:6874,6882,6956
/branches/enterprise/DEV-professional:6494-8475,8477-8478,8486,8490,8492,8494,8499-8500,8515,8518-8519,8524,8527-8529,8531-8532,8536,8538,8540-8544,8547-8552,8554,8557,8600-8601,8637,8749,8772,8897,8917,8944-8945,8947,8950-8952,8967,8969,8979,8982,8987,8998,9006,9008,9011,9013,9026,9033-9036,9038,9040,9042,9044,9048,9050-9053,9062,9064-9065,9069,9078,9081,9088,9096,9099-9101,9103,9105,9115,9118,9347,9353-9354,9411,9432,9445,9486,9538-9550,9569-9571,9620,9635,9637-9638,9645-9647,9693,9699,9721,9814,9825,9857,9879,9881,9939,10002,10029,10038-10041,10070
/branches/nagvis-iframe:9764-9786
/branches/us168:8759,8762-8763,8766-8768,8770,8774-8777,8794,8798-8799,8801-8803,8821-8822,8834,8837-8838,8932,8937,8947,8969,8977,8981,9004,9007,9009-9010,9012,9024,9049
/commercial/branches/US306-slaves:9804-9823
/commercial/branches/US307-network-map:9685-9837
   + /branches/DEV-capside/release-3.9.0:6365-6370
/branches/DEV-extra-notification-data:6734-6746
/branches/DEV-odw-calculations:9016-9160
/branches/DEV-restapi-monitoringservers:9778
/branches/DEV-snmp-multi:7324-7376
/branches/US187:9403-9479
/branches/US198b:8875-8994
/branches/US310:9851-9873
/branches/enterprise/BRAN-3.14:6874,6882,6956
/branches/enterprise/DEV-professional:6494-8475,8477-8478,8486,8490,8492,8494,8499-8500,8515,8518-8519,8524,8527-8529,8531-8532,8536,8538,8540-8544,8547-8552,8554,8557,8600-8601,8637,8749,8772,8897,8917,8944-8945,8947,8950-8952,8967,8969,8979,8982,8987,8998,9006,9008,9011,9013,9026,9033-9036,9038,9040,9042,9044,9048,9050-9053,9062,9064-9065,9069,9078,9081,9088,9096,9099-9101,9103,9105,9115,9118,9347,9353-9354,9411,9432,9445,9486,9538-9550,9569-9571,9620,9635,9637-9638,9645-9647,9693,9699,9721,9814,9825,9857,9879,9881,9939,10002,10029,10038-10041,10070,10086
/branches/nagvis-iframe:9764-9786
/branches/us168:8759,8762-8763,8766-8768,8770,8774-8777,8794,8798-8799,8801-8803,8821-8822,8834,8837-8838,8932,8937,8947,8969,8977,8981,9004,9007,9009-9010,9012,9024,9049
/commercial/branches/US306-slaves:9804-9823
/commercial/branches/US307-network-map:9685-9837

Modified: trunk/opsview-core/lib/Runtime/ResultSet/OpsviewTopologyMap.pm
===================================================================
--- trunk/opsview-core/lib/Runtime/ResultSet/OpsviewTopologyMap.pm	2012-09-18 16:32:17 UTC (rev 10086)
+++ trunk/opsview-core/lib/Runtime/ResultSet/OpsviewTopologyMap.pm	2012-09-18 16:34:49 UTC (rev 10087)
@@ -117,46 +117,76 @@
     my ( $self, $filters, $args ) = @_;
     $args ||= {};
 
-    my $opts = { result_class => "DBIx::Class::ResultClass::HashRefInflator", };
-    $opts->{select} =
-      [qw( opsview_host_id name parent_id parent_name child_id child_name )];
-    $opts->{as} =
-      [qw( opsview_host_id name parent_id parent_name child_id child_name )];
-    $opts->{order_by} = ["me.id"];
+    # all accessible by current contact hosts
+    my $total = $self->search(
+        {},
+        {
+            columns  => ['opsview_host_id'],
+            group_by => 'opsview_host_id'
+        }
+    )->count;
 
+    my $opts = {
+        result_class => "DBIx::Class::ResultClass::HashRefInflator",
+        columns      => [
+            qw( opsview_host_id name parent_id parent_name child_id child_name )
+        ],
+        order_by => ["me.id"],
+    };
     $self = $self->search( {}, $opts, );
 
+    # filter objects (hostgrups/monitored by etc.)
     $self = $self->filter_objects( $filters, $args );
-    my $allrows = $self->count;
 
     my @list           = ();
-    my $object         = {};
     my $last_object_id = 0;
+    my $req_limit      = $filters->{limit} ? $filters->{limit} - 1 : 0;
+    my $limit_reached  = -1;
+    my %host_ids       = ();
+
     while ( my $row = $self->next ) {
+        ++$host_ids{ $row->{opsview_host_id} };
+
+        next if $limit_reached > 0;
+
         if ( $last_object_id != $row->{opsview_host_id} ) {
-            push @list, $object if $last_object_id;
 
-            $last_object_id = $row->{opsview_host_id};
-            $object         = {
+            # loaded all host parents and children - now just count allrows
+            if ( $limit_reached == 0 ) {
+                $limit_reached = 1;
+                next;
+
+                # reached last host - now load parents and children
+            }
+            elsif ( $req_limit && scalar @list >= $req_limit ) {
+                $limit_reached = 0;
+            }
+
+            push @list,
+              {
                 name     => $row->{name},
                 parents  => [],
                 children => [],
-            };
+              };
+
+            $last_object_id = $row->{opsview_host_id};
         }
         if ( $row->{parent_id} ) {
-            push @{ $object->{parents} },
+            push @{ $list[-1]->{parents} },
               $row->{parent_visible} ? $row->{parent_name} : undef;
         }
         if ( $row->{child_id} ) {
-            push @{ $object->{children} },
+            push @{ $list[-1]->{children} },
               $row->{child_visible} ? $row->{child_name} : undef;
         }
     }
-    if ($last_object_id) {
-        push @list, $object;
-    }
 
-    return \@list;
+    return {
+        list    => \@list,
+        rows    => scalar @list,
+        allrows => scalar keys %host_ids,
+        total   => $total,
+    };
 }
 
 1;

Modified: trunk/opsview-web/lib/Opsview/Web/Controller/REST/Runtime/Network.pm
===================================================================
--- trunk/opsview-web/lib/Opsview/Web/Controller/REST/Runtime/Network.pm	2012-09-18 16:32:17 UTC (rev 10086)
+++ trunk/opsview-web/lib/Opsview/Web/Controller/REST/Runtime/Network.pm	2012-09-18 16:34:49 UTC (rev 10087)
@@ -35,6 +35,7 @@
         { restricted_contactid => $c->stash->{restricted_contactid} }
       );
 
+    $c->stash->{_skip_dt_formatting} = 1;
     $c->stash( "rest" => $result );
 }
 

Modified: trunk/opsview-web/lib/Opsview/Web/ControllerBase/REST.pm
===================================================================
--- trunk/opsview-web/lib/Opsview/Web/ControllerBase/REST.pm	2012-09-18 16:32:17 UTC (rev 10086)
+++ trunk/opsview-web/lib/Opsview/Web/ControllerBase/REST.pm	2012-09-18 16:34:49 UTC (rev 10087)
@@ -90,8 +90,8 @@
                   . $c->res->status . "): "
                   . $c->req->method . " "
                   . $c->uri_for( "/", $c->req->path, $c->req->query_params )
-                  ->path_query 
-                  . " Data:" 
+                  ->path_query
+                  . " Data:"
                   . Data::Dump::dump($data)
             );
         }
@@ -101,8 +101,8 @@
                         "REST response (OK): "
                       . $c->req->method . " "
                       . $c->uri_for( "/", $c->req->path, $c->req->query_params )
-                      ->path_query 
-                      . " Data:" 
+                      ->path_query
+                      . " Data:"
                       . Data::Dump::dump($data)
                 );
             }
@@ -113,21 +113,24 @@
             $dt_formatter = $c->stash->{dt_formatter};
         }
 
-        # Convert all values into strings - this is so JSON returns back as string values, rather than "last used" type
-        try {
-            $c->stash->{rest} =
-              Opsview::Utils->convert_all_values_to_string( $data,
-                $dt_formatter );
+        unless ( delete $c->stash->{_skip_dt_formatting} ) {
+
+            # Convert all values into strings - this is so JSON returns back as string values, rather than "last used" type
+            try {
+                $c->stash->{rest} =
+                  Opsview::Utils->convert_all_values_to_string( $data,
+                    $dt_formatter );
+            }
+            catch {
+                $c->res->status(400);
+                $c->stash(
+                    "rest" => {
+                        message => "Error converting values to string",
+                        detail  => $_
+                    }
+                );
+            }
         }
-        catch {
-            $c->res->status(400);
-            $c->stash(
-                "rest" => {
-                    message => "Error converting values to string",
-                    detail  => $_
-                }
-            );
-        }
     }
 
     # If alwaysReturn200 is set, then wrap status in the json response

Modified: trunk/opsview-web/t/tests/Test/Opsview/Web/REST/Runtime.pm
===================================================================
--- trunk/opsview-web/t/tests/Test/Opsview/Web/REST/Runtime.pm	2012-09-18 16:32:17 UTC (rev 10086)
+++ trunk/opsview-web/t/tests/Test/Opsview/Web/REST/Runtime.pm	2012-09-18 16:34:49 UTC (rev 10087)
@@ -4,7 +4,8 @@
 use warnings;
 use Data::Dumper;
 use FindBin '$Bin';
-use Test::Most;
+use Test::More;
+use Test::Deep qw( cmp_deeply );
 use Time::HiRes 'gettimeofday';
 
 use lib '/usr/local/opsview-web/t/tests';
@@ -30,111 +31,118 @@
     subtest 'Get whole network' => sub {
         plan tests => 2;
 
-        $expected = [
-            {
-                'name'     => 'opsview',
-                'children' => [
-                    'opsviewdev1',          'host_locally_monitored',
-                    'resolved_services',    'cisco',
-                    'cisco1',               'cisco3',
-                    'toclone',              'host_locally_monitored_v3',
-                    'doesnt_exist_1',       'doesnt_exist_2',
-                    'singlehostgroup',      'opsviewdev46',
-                    'monitored_by_cluster', 'PassiveNode'
-                ],
-                'parents' => []
-            },
-            {
-                'name'     => 'opsviewdev1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'host_locally_monitored',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'monitored_by_slave',
-                'children' => [],
-                'parents'  => [ 'cisco', 'cisco3' ]
-            },
-            {
-                'name'     => 'resolved_services',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco',
-                'children' => [ 'monitored_by_slave', 'cisco4' ],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco3',
-                'children' => ['monitored_by_slave'],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco4',
-                'children' => ['fake_ipv6'],
-                'parents'  => ['cisco']
-            },
-            {
-                'name'     => 'toclone',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'host_locally_monitored_v3',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'doesnt_exist_1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'doesnt_exist_2',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'singlehostgroup',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'fake_ipv6',
-                'children' => [],
-                'parents'  => ['cisco4']
-            },
-            {
-                'name'     => 'opsviewdev46',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'monitored_by_cluster',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'PassiveNode',
-                'children' => [],
-                'parents'  => ['opsview']
-            }
-        ];
+        $url = ""
 
-        $mech->get_ok($path);
+        $expected = {
+            rows    => 18,
+            total   => 18,
+            allrows => 18,
+            list    => [
+                {
+                    'name'     => 'opsview',
+                    'children' => [
+                        'opsviewdev1',          'host_locally_monitored',
+                        'resolved_services',    'cisco',
+                        'cisco1',               'cisco3',
+                        'toclone',              'host_locally_monitored_v3',
+                        'doesnt_exist_1',       'doesnt_exist_2',
+                        'singlehostgroup',      'opsviewdev46',
+                        'monitored_by_cluster', 'PassiveNode'
+                    ],
+                    'parents' => []
+                },
+                {
+                    'name'     => 'opsviewdev1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'host_locally_monitored',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'monitored_by_slave',
+                    'children' => [],
+                    'parents'  => [ 'cisco', 'cisco3' ]
+                },
+                {
+                    'name'     => 'resolved_services',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco',
+                    'children' => [ 'monitored_by_slave', 'cisco4' ],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco3',
+                    'children' => ['monitored_by_slave'],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco4',
+                    'children' => ['fake_ipv6'],
+                    'parents'  => ['cisco']
+                },
+                {
+                    'name'     => 'toclone',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'host_locally_monitored_v3',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'doesnt_exist_1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'doesnt_exist_2',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'singlehostgroup',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'fake_ipv6',
+                    'children' => [],
+                    'parents'  => ['cisco4']
+                },
+                {
+                    'name'     => 'opsviewdev46',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'monitored_by_cluster',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'PassiveNode',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                }
+            ]
+        };
+
+        $mech->get_ok($url);
         eval { $got = $json->decode( $mech->content ) };
         die "Bad expected JSON: $@" if $@;
-        cmp_bag( $got, $expected, "Correct response for $path" )
+        cmp_deeply( $got, $expected, "Correct response for $path" )
           or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
     };
@@ -143,41 +151,46 @@
         plan tests => 2;
 
         $url      = ""
-        $expected = [
-            {
-                'name'     => 'opsview',
-                'children' => [
-                    'opsviewdev1',          'host_locally_monitored',
-                    'resolved_services',    'cisco',
-                    'cisco1',               'cisco3',
-                    'toclone',              'host_locally_monitored_v3',
-                    'doesnt_exist_1',       'doesnt_exist_2',
-                    'singlehostgroup',      'opsviewdev46',
-                    'monitored_by_cluster', 'PassiveNode'
-                ],
-                'parents' => []
-            },
-            {
-                'name'     => 'cisco',
-                'children' => [ 'monitored_by_slave', 'cisco4' ],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco3',
-                'children' => ['monitored_by_slave'],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco4',
-                'children' => ['fake_ipv6'],
-                'parents'  => ['cisco']
-            },
-        ];
+        $expected = {
+            rows    => 4,
+            total   => 18,
+            allrows => 4,
+            list    => [
+                {
+                    'name'     => 'opsview',
+                    'children' => [
+                        'opsviewdev1',          'host_locally_monitored',
+                        'resolved_services',    'cisco',
+                        'cisco1',               'cisco3',
+                        'toclone',              'host_locally_monitored_v3',
+                        'doesnt_exist_1',       'doesnt_exist_2',
+                        'singlehostgroup',      'opsviewdev46',
+                        'monitored_by_cluster', 'PassiveNode'
+                    ],
+                    'parents' => []
+                },
+                {
+                    'name'     => 'cisco',
+                    'children' => [ 'monitored_by_slave', 'cisco4' ],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco3',
+                    'children' => ['monitored_by_slave'],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco4',
+                    'children' => ['fake_ipv6'],
+                    'parents'  => ['cisco']
+                },
+            ]
+        };
 
         $mech->get_ok($url);
         eval { $got = $json->decode( $mech->content ) };
         die "Bad expected JSON: $@" if $@;
-        cmp_bag( $got, $expected, "Correct response for $url" )
+        cmp_deeply( $got, $expected, "Correct response for $url" )
           or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
     };
@@ -186,58 +199,63 @@
         plan tests => 2;
 
         $url      = ""
-        $expected = [
-            {
-                'name'     => 'host_locally_monitored',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco',
-                'children' => [ 'monitored_by_slave', 'cisco4' ],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco3',
-                'children' => ['monitored_by_slave'],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco4',
-                'children' => ['fake_ipv6'],
-                'parents'  => ['cisco']
-            },
-            {
-                'name'     => 'host_locally_monitored_v3',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'doesnt_exist_1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'doesnt_exist_2',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'fake_ipv6',
-                'children' => [],
-                'parents'  => ['cisco4']
-            }
-        ];
+        $expected = {
+            rows    => 9,
+            total   => 18,
+            allrows => 9,
+            list    => [
+                {
+                    'name'     => 'host_locally_monitored',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco',
+                    'children' => [ 'monitored_by_slave', 'cisco4' ],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco3',
+                    'children' => ['monitored_by_slave'],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco4',
+                    'children' => ['fake_ipv6'],
+                    'parents'  => ['cisco']
+                },
+                {
+                    'name'     => 'host_locally_monitored_v3',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'doesnt_exist_1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'doesnt_exist_2',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'fake_ipv6',
+                    'children' => [],
+                    'parents'  => ['cisco4']
+                }
+            ]
+        };
 
         $mech->get_ok($url);
         eval { $got = $json->decode( $mech->content ) };
         die "Bad expected JSON: $@" if $@;
-        cmp_bag( $got, $expected, "Correct response for $url" )
+        cmp_deeply( $got, $expected, "Correct response for $url" )
           or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
     };
@@ -246,28 +264,33 @@
         plan tests => 2;
 
         $url      = ""
-        $expected = [
-            {
-                'name'     => 'cisco',
-                'children' => [ 'monitored_by_slave', 'cisco4' ],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco3',
-                'children' => ['monitored_by_slave'],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco4',
-                'children' => ['fake_ipv6'],
-                'parents'  => ['cisco']
-            },
-        ];
+        $expected = {
+            rows    => 3,
+            total   => 18,
+            allrows => 3,
+            list    => [
+                {
+                    'name'     => 'cisco',
+                    'children' => [ 'monitored_by_slave', 'cisco4' ],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco3',
+                    'children' => ['monitored_by_slave'],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco4',
+                    'children' => ['fake_ipv6'],
+                    'parents'  => ['cisco']
+                },
+            ]
+        };
 
         $mech->get_ok($url);
         eval { $got = $json->decode( $mech->content ) };
         die "Bad expected JSON: $@" if $@;
-        cmp_bag( $got, $expected, "Correct response for $url" )
+        cmp_deeply( $got, $expected, "Correct response for $url" )
           or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
     };
@@ -276,111 +299,169 @@
         plan tests => 2;
 
         $url      = ""
-        $expected = [
-            {
-                'name'     => 'opsview',
-                'children' => [
-                    'opsviewdev1',          'host_locally_monitored',
-                    'resolved_services',    'cisco',
-                    'cisco1',               'cisco3',
-                    'toclone',              'host_locally_monitored_v3',
-                    'doesnt_exist_1',       'doesnt_exist_2',
-                    'singlehostgroup',      'opsviewdev46',
-                    'monitored_by_cluster', 'PassiveNode'
-                ],
-                'parents' => []
-            },
-            {
-                'name'     => 'opsviewdev1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'host_locally_monitored',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco',
-                'children' => [ 'monitored_by_slave', 'cisco4' ],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco3',
-                'children' => ['monitored_by_slave'],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco4',
-                'children' => ['fake_ipv6'],
-                'parents'  => ['cisco']
-            },
-            {
-                'name'     => 'host_locally_monitored_v3',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'doesnt_exist_1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'doesnt_exist_2',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'fake_ipv6',
-                'children' => [],
-                'parents'  => ['cisco4']
-            },
-            {
-                'name'     => 'opsviewdev46',
-                'children' => [],
-                'parents'  => ['opsview']
-            }
-        ];
+        $expected = {
+            rows    => 12,
+            total   => 18,
+            allrows => 12,
+            list    => [
+                {
+                    'name'     => 'opsview',
+                    'children' => [
+                        'opsviewdev1',          'host_locally_monitored',
+                        'resolved_services',    'cisco',
+                        'cisco1',               'cisco3',
+                        'toclone',              'host_locally_monitored_v3',
+                        'doesnt_exist_1',       'doesnt_exist_2',
+                        'singlehostgroup',      'opsviewdev46',
+                        'monitored_by_cluster', 'PassiveNode'
+                    ],
+                    'parents' => []
+                },
+                {
+                    'name'     => 'opsviewdev1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'host_locally_monitored',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco',
+                    'children' => [ 'monitored_by_slave', 'cisco4' ],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco3',
+                    'children' => ['monitored_by_slave'],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco4',
+                    'children' => ['fake_ipv6'],
+                    'parents'  => ['cisco']
+                },
+                {
+                    'name'     => 'host_locally_monitored_v3',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'doesnt_exist_1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'doesnt_exist_2',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'fake_ipv6',
+                    'children' => [],
+                    'parents'  => ['cisco4']
+                },
+                {
+                    'name'     => 'opsviewdev46',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                }
+            ]
+        };
 
         $mech->get_ok($url);
         eval { $got = $json->decode( $mech->content ) };
         die "Bad expected JSON: $@" if $@;
-        cmp_bag( $got, $expected, "Correct response for $url" )
+        cmp_deeply( $got, $expected, "Correct response for $url" )
           or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
     };
 
+    subtest 'Filter by parent host group (with limit)' => sub {
+        plan tests => 2;
+
+        $url      = ""
+        $expected = {
+            rows    => 4,
+            total   => 18,
+            allrows => 12,
+            list    => [
+                {
+                    'name'     => 'opsview',
+                    'children' => [
+                        'opsviewdev1',          'host_locally_monitored',
+                        'resolved_services',    'cisco',
+                        'cisco1',               'cisco3',
+                        'toclone',              'host_locally_monitored_v3',
+                        'doesnt_exist_1',       'doesnt_exist_2',
+                        'singlehostgroup',      'opsviewdev46',
+                        'monitored_by_cluster', 'PassiveNode'
+                    ],
+                    'parents' => []
+                },
+                {
+                    'name'     => 'opsviewdev1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'host_locally_monitored',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco',
+                    'children' => [ 'monitored_by_slave', 'cisco4' ],
+                    'parents'  => ['opsview']
+                },
+            ]
+        };
+
+        $mech->get_ok($url);
+        eval { $got = $json->decode( $mech->content ) };
+        die "Bad expected JSON: $@" if $@;
+        cmp_deeply( $got, $expected, "Correct response for $url" )
+          or diag( Data::Dumper->Dump( [$got], ['got'] ) );
+
+    };
+
     subtest 'Filter by monitored_by' => sub {
         plan tests => 2;
 
         $url      = ""
-        $expected = [
-            {
-                'name'     => 'opsviewdev1',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'host_locally_monitored',
-                'children' => [],
-                'parents'  => ['opsview']
-            },
-            {
-                'name'     => 'cisco',
-                'children' => ['monitored_by_slave'],
-                'parents'  => []
-            }
-        ];
+        $expected = {
+            rows    => 3,
+            total   => 18,
+            allrows => 3,
+            list    => [
+                {
+                    'name'     => 'opsviewdev1',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'host_locally_monitored',
+                    'children' => [],
+                    'parents'  => ['opsview']
+                },
+                {
+                    'name'     => 'cisco',
+                    'children' => ['monitored_by_slave'],
+                    'parents'  => []
+                }
+            ]
+        };
 
         $mech->get_ok($url);
         eval { $got = $json->decode( $mech->content ) };
         die "Bad expected JSON: $@" if $@;
-        cmp_bag( $got, $expected, "Correct response for $url" )
+        cmp_deeply( $got, $expected, "Correct response for $url" )
           or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
     };
@@ -388,36 +469,75 @@
     subtest 'Log in as viewkeywords' => sub {
         plan tests => 3;
 
-        $expected = [
-            {
-                'name'     => 'cisco',
-                'children' => [ undef, 'cisco4' ],
-                'parents'  => [undef]
-            },
-            {
-                'name'     => 'cisco1',
-                'children' => [],
-                'parents'  => [undef]
-            },
-            {
-                'name'     => 'cisco3',
-                'children' => [undef],
-                'parents'  => [undef]
-            },
-            {
-                'name'     => 'cisco4',
-                'children' => [undef],
-                'parents'  => ['cisco']
-            }
-        ];
+        $url = ""
 
+        $expected = {
+            rows    => 4,
+            total   => 4,
+            allrows => 4,
+            list    => [
+                {
+                    'name'     => 'cisco',
+                    'children' => [ undef, 'cisco4' ],
+                    'parents'  => [undef]
+                },
+                {
+                    'name'     => 'cisco1',
+                    'children' => [],
+                    'parents'  => [undef]
+                },
+                {
+                    'name'     => 'cisco3',
+                    'children' => [undef],
+                    'parents'  => [undef]
+                },
+                {
+                    'name'     => 'cisco4',
+                    'children' => [undef],
+                    'parents'  => ['cisco']
+                }
+            ]
+        };
+
         $self->mech_rest_api_login( 'viewkeywords', 'viewkeywords' );
 
-        $mech->get_ok($path);
+        $mech->get_ok($url);
         eval { $got = $json->decode( $mech->content ) };
         die "Bad expected JSON: $@" if $@;
+        cmp_deeply( $got, $expected, "Correct response for $path" )
+          or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
-        cmp_bag( $got, $expected, "Correct response for $path" )
+    };
+
+    subtest 'Log in as viewkeywords (with limit)' => sub {
+        plan tests => 3;
+
+        $url = ""
+
+        $expected = {
+            rows    => 2,
+            total   => 4,
+            allrows => 4,
+            list    => [
+                {
+                    'name'     => 'cisco',
+                    'children' => [ undef, 'cisco4' ],
+                    'parents'  => [undef]
+                },
+                {
+                    'name'     => 'cisco1',
+                    'children' => [],
+                    'parents'  => [undef]
+                },
+            ]
+        };
+
+        $self->mech_rest_api_login( 'viewkeywords', 'viewkeywords' );
+
+        $mech->get_ok($url);
+        eval { $got = $json->decode( $mech->content ) };
+        die "Bad expected JSON: $@" if $@;
+        cmp_deeply( $got, $expected, "Correct response for $path" )
           or diag( Data::Dumper->Dump( [$got], ['got'] ) );
 
     };
@@ -431,6 +551,8 @@
             $self->setup_db( 'runtime.big_topology_test.db' );
             $self->mech_rest_api_login; # Log back in as admin
 
+            $url = ""
+
             $expected = do {
                 local ( @ARGV, $/ ) =
                   "$Bin/var/api-non-testcases/runtime_network_topology_map.json";
@@ -438,7 +560,7 @@
             };
 
             my $start = gettimeofday();
-            $mech->get_ok($path);
+            $mech->get_ok($url);
             $mech->save_content( '/tmp/z.json' );
             note( "Request took " . ( gettimeofday() - $start ) . " seconds" );
             is( $mech->content, $expected );

Modified: trunk/opsview-web/t/var/api-non-testcases/runtime_network_topology_map.json
===================================================================
--- trunk/opsview-web/t/var/api-non-testcases/runtime_network_topology_map.json	2012-09-18 16:32:17 UTC (rev 10086)
+++ trunk/opsview-web/t/var/api-non-testcases/runtime_network_topology_map.json	2012-09-18 16:34:49 UTC (rev 10087)
@@ -1 +1 @@

@@ Diff output truncated at 102400 characters. @@
_______________________________________________
Opsview-checkins mailing list
[email protected]
http://lists.opsview.org/lists/listinfo/opsview-checkins

Reply via email to