You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by de...@apache.org on 2017/03/22 17:26:52 UTC

[2/2] incubator-trafficcontrol git commit: Change TO monitoring.json to raw SQL

Change TO monitoring.json to raw SQL

This is 3-10x faster, and this endpoint is one of the slowest.


Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/8942ce09
Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/8942ce09
Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/8942ce09

Branch: refs/heads/master
Commit: 8942ce09e78e0b4e89e02075537ae65434189fc5
Parents: fe90d11
Author: Robert Butts <ro...@gmail.com>
Authored: Tue Mar 21 15:19:03 2017 -0600
Committer: Dewayne Richardson <de...@apache.org>
Committed: Wed Mar 22 11:26:46 2017 -0600

----------------------------------------------------------------------
 traffic_ops/app/lib/API/Cdn.pm | 66 ++++++++++++++++---------------------
 1 file changed, 28 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/8942ce09/traffic_ops/app/lib/API/Cdn.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/API/Cdn.pm b/traffic_ops/app/lib/API/Cdn.pm
index 93987e5..9fa1fb7 100644
--- a/traffic_ops/app/lib/API/Cdn.pm
+++ b/traffic_ops/app/lib/API/Cdn.pm
@@ -421,44 +421,34 @@ sub get_traffic_monitor_config {
 		push( @{ $data_obj->{'deliveryServices'} }, $delivery_service );
 	}
 
-	my $rs_caches = $self->db->resultset('Server')->search(
-		{ 'cdn.name' => $cdn_name },
-		{
-			prefetch => [ 'type',      'status',      'cachegroup', 'profile',        'cdn' ],
-			columns  => [ 'host_name', 'domain_name', 'tcp_port',   'interface_name', 'ip_address', 'ip6_address', 'id', 'xmpp_id' ]
-		}
-	);
-
-	while ( my $row = $rs_caches->next ) {
-		if ( $row->type->name eq "RASCAL" ) {
-			my $traffic_monitor;
-			$traffic_monitor->{'hostName'}   = $row->host_name;
-			$traffic_monitor->{'fqdn'}       = $row->host_name . "." . $row->domain_name;
-			$traffic_monitor->{'status'}     = $row->status->name;
-			$traffic_monitor->{'cachegroup'} = $row->cachegroup->name;
-			$traffic_monitor->{'port'}       = int( $row->tcp_port );
-			$traffic_monitor->{'ip'}         = $row->ip_address;
-			$traffic_monitor->{'ip6'}        = $row->ip6_address;
-			$traffic_monitor->{'profile'}    = $row->profile->name;
-			push( @{ $data_obj->{'trafficMonitors'} }, $traffic_monitor );
-
-		}
-		elsif ( $row->type->name =~ m/^EDGE/ || $row->type->name =~ m/^MID/ ) {
-			my $traffic_server;
-			$traffic_server->{'cachegroup'}    = $row->cachegroup->name;
-			$traffic_server->{'hostName'}      = $row->host_name;
-			$traffic_server->{'fqdn'}          = $row->host_name . "." . $row->domain_name;
-			$traffic_server->{'port'}          = int( $row->tcp_port );
-			$traffic_server->{'interfaceName'} = $row->interface_name;
-			$traffic_server->{'status'}        = $row->status->name;
-			$traffic_server->{'ip'}            = $row->ip_address;
-			$traffic_server->{'ip6'}           = ( $row->ip6_address || "" );
-			$traffic_server->{'profile'}       = $row->profile->name;
-			$traffic_server->{'type'}          = $row->type->name;
-			$traffic_server->{'hashId'}        = $row->xmpp_id;
-			push( @{ $data_obj->{'trafficServers'} }, $traffic_server );
-		}
-
+        my $caches_query = 'SELECT
+                              me.host_name as hostName,
+                              CONCAT(me.host_name, \'.\', me.domain_name) as fqdn,
+                              status.name as status,
+                              cachegroup.name as cachegroup,
+                              me.tcp_port as port,
+                              me.ip_address as ip,
+                              me.ip6_address as ip6,
+                              profile.name as profile,
+                              me.interface_name as interfaceName,
+                              type.name as type,
+                              me.xmpp_id as hashId
+                            FROM server me
+                              JOIN type type ON type.id = me.type
+                              JOIN status status ON status.id = me.status
+                              JOIN cachegroup cachegroup ON cachegroup.id = me.cachegroup
+                              JOIN profile profile ON profile.id = me.profile
+                              JOIN cdn cdn ON cdn.id = me.cdn_id
+                            WHERE cdn.name = ?;';
+	my $dbh = $self->db->storage->dbh;
+	my $caches_servers = $dbh->selectall_arrayref( $caches_query, {Columns=>{}}, ($cdn_name) );
+	foreach (@{ $caches_servers }) {
+			if ( $_->{'type'} eq "RASCAL" ) {
+					push( @{ $data_obj->{'trafficMonitors'} }, $_ );
+			}
+			elsif ( $_->{'type'} =~ m/^EDGE/ || $_->{'type'} =~ m/^MID/ ) {
+					push( @{ $data_obj->{'trafficServers'} }, $_ );
+			}
 	}
 
 	my $rs_loc = $self->db->resultset('Server')->search(