You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by el...@apache.org on 2017/06/22 20:21:06 UTC

[13/17] incubator-trafficcontrol git commit: allows for a variable number of delivery services

allows for a variable number of delivery services


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

Branch: refs/heads/master
Commit: 20cce96cab4a8309fdbe909904dd340a97192937
Parents: 237a4e6
Author: Derek Gelinas <de...@cable.comcast.com>
Authored: Tue May 30 17:02:42 2017 +0000
Committer: Jeff Elsloo <je...@cable.comcast.com>
Committed: Thu Jun 22 14:18:17 2017 -0600

----------------------------------------------------------------------
 traffic_ops/app/lib/UI/Steering.pm              | 152 +++++++++++++------
 .../app/templates/steering/index.html.ep        |  70 ++++-----
 2 files changed, 133 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/20cce96c/traffic_ops/app/lib/UI/Steering.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/UI/Steering.pm b/traffic_ops/app/lib/UI/Steering.pm
index 0a6a7bd..1a09be7 100644
--- a/traffic_ops/app/lib/UI/Steering.pm
+++ b/traffic_ops/app/lib/UI/Steering.pm
@@ -19,6 +19,7 @@ package UI::Steering;
 # JvD Note: you always want to put Utils as the first use. Sh*t don't work if it's after the Mojo lines.
 use UI::Utils;
 use Mojo::Base 'Mojolicious::Controller';
+use Mojo::Parameters;
 use Data::Dumper;
 use UI::DeliveryService;
 use API::Cdn;
@@ -31,11 +32,14 @@ use Data::Dumper;
 sub index {
 	my $self  = shift;
 	my $ds_id = $self->param('id');
+	#print STDERR Dumper($ds_id);
 
 	&navbarpage($self);
 
 	# select * from steering_target where deliveryservice = ds_id;
-	my $steering = { ds_id => $ds_id, ds_name => $self->get_ds_name($ds_id) };
+	#my $steering = { ds_id => $ds_id, ds_name => $self->get_ds_name($ds_id) };
+	my $steering_obj;
+	my @steering;
 	my $st_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id } );
 	if ( $st_rs > 0 ) {
 		my %steering_targets;
@@ -43,25 +47,24 @@ sub index {
 			$steering_targets{ $row->target } = $row->weight;
 		}
 		my $i = 0;
+		#print STDERR Dumper(\%steering_targets);
 		my @keys = sort keys %steering_targets;
 		while ( (my $target, my $weight) = each %steering_targets ) {
-			$steering->{"target_id_$i"} = $target;
-			$steering->{"target_name_$i"}   = $self->get_ds_name( $target );
-			$steering->{"target_weight_id_$i"}   = $weight;
-			if (!defined($steering->{"target_weight_id_$i"})) { $steering->{"target_weight_id_$i"} = 0; }
+			$steering_obj->{"target_$i"}->{'target_id'} = $target;
+			$steering_obj->{"target_$i"}->{'target_name'}   = $self->get_ds_name( $target );
+			$steering_obj->{"target_$i"}->{'target_weight'}   = $weight;
+			if (!defined($steering_obj->{"target_$i"}->{'target_weight'})) { $steering_obj->{"target_$i"}->{'target_weight'} = 0; }
+			#print STDERR Dumper($steering_obj->{"target_$i"}->{'target_name'});
+			push ( @steering, $steering_obj->{"target_$i"} );
 			$i++;
 		}
 	}
-	print STDERR Dumper($steering->{'target_id_0'});
-	print STDERR Dumper($steering->{'target_name_0'});
-	print STDERR Dumper($steering->{'target_weight_id_0'});
-	print STDERR Dumper($steering->{'target_id_1'});
-	print STDERR Dumper($steering->{'target_name_1'});
-	print STDERR Dumper($steering->{'target_weight_id_1'});
-
 	
+	#print STDERR Dumper(\@steering);
 	$self->stash(
-		steering       => $steering,
+		ds_id          => $ds_id,
+		ds_name        => $self->get_ds_name($ds_id),
+		steering       => \@steering,
 		ds_data        => $self->get_deliveryservices(),
 		fbox_layout    => 1
 	);
@@ -95,6 +98,77 @@ sub get_deliveryservices {
 }
 
 sub update {
+	my $self = shift;
+	my $ds_id = $self->param('id');
+	my $st = $self->param('st');
+	my $targets;
+	foreach my $id (@{$st->{'target_id'}}) {
+		print STDERR Dumper($id);
+		print STDERR Dumper($st->{"target_weight_$id"});
+		if ( $st->{"target_weight_$id"} eq "" ) { $st->{"target_weight_$id"} = 0 };
+		$targets->{$id} = $st->{"target_weight_$id"};
+	}
+	print STDERR Dumper($targets);
+	if ( $self->is_valid($targets) ) {
+		#delete current entries
+		my $delete = $self->db->resultset('SteeringTarget')
+			->search( { deliveryservice => $ds_id } );
+		if ( defined($delete) ) {
+			$delete->delete();
+		}
+		
+		#add new entries
+		foreach my $target ( keys %$targets ) {
+			my $insert = $self->db->resultset('SteeringTarget')->create(
+				{   deliveryservice => $ds_id,
+					target          => $target,
+					weight          => $targets->{$target},
+				}
+			);
+			$insert->insert();
+		}
+		
+		$self->flash(
+			      message => "Successfully saved steering assignments for "
+				. $self->get_ds_name($ds_id)
+				. "!" );
+	}
+	else {
+		print STDERR Dumper("at else somehow");
+		my $steering_obj;
+		my @steering;
+		my $st_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id } );
+		my %steering_targets;
+		while ( my $row = $st_rs->next ) {
+			$steering_targets{ $row->target } = $row->weight;
+		}
+		my $i = 0;
+		#print STDERR Dumper(\%steering_targets);
+		my @keys = sort keys %steering_targets;
+		while ( (my $target, my $weight) = each %steering_targets ) {
+			$steering_obj->{"target_$i"}->{'target_id'} = $target;
+			$steering_obj->{"target_$i"}->{'target_name'}   = $self->get_ds_name( $target );
+			$steering_obj->{"target_$i"}->{'target_weight'}   = $weight;
+			if (!defined($steering_obj->{"target_$i"}->{'target_weight'})) { $steering_obj->{"target_$i"}->{'target_weight'} = 0; }
+			#print STDERR Dumper($steering_obj->{"target_$i"}->{'target_name'});
+			push ( @steering, $steering_obj->{"target_$i"} );
+			$i++;
+		}
+		&stash_role($self);
+		$self->stash(
+			ds_id          => $ds_id,
+			ds_name        => $self->get_ds_name($ds_id),
+			steering       => \@steering,
+			ds_data        => $self->get_deliveryservices(),
+			fbox_layout    => 1
+		);
+		$self->render("steering/index");
+	}
+
+	$self->redirect_to("/ds/$ds_id/steering");
+}
+
+sub old_update {
 	my $self  = shift;
 	my $ds_id = $self->param('id');
 	my $tid1  = $self->param('steering.target_id_1');
@@ -169,42 +243,30 @@ sub update {
 
 sub is_valid {
 	my $self  = shift;
+	my $targets = shift;
+	my $last_cdn;
 
-	#validate DSs are in the same CDN (same profile...)
-	my $t1 = $self->param('steering.target_id_1');
-	my $t2 = $self->param('steering.target_id_2');
-	my $t1_profile;
-	my $t2_profile;
-	my $tid1_weight = $self->param('steering.target_id_1_weight');
-	my $t1_name = $self->param('steering.target_name_1');
-	my $tid2_weight = $self->param('steering.target_id_2_weight');
-	my $t2_name = $self->param('steering.target_name_2');
-
-	unless ( $t1 eq '' ) {
-		$t1_profile = $self->get_ds_cdn( $self->param('steering.target_id_1') );
-	}
-	unless ( $t2 eq '' ) {
-		$t2_profile = $self->get_ds_cdn( $self->param('steering.target_id_2') );
-	}
-	
-	unless ( $t1 ) {
-		$self->field('steering.target_id_1')->is_equal( "",  "Steering targets cannot be blank!" );
-	}
-	unless ( $t2 ) {
-		$self->field('steering.target_id_2')->is_equal( "",  "Steering targets cannot be blank!" );
-	}
-
-	unless ( $t1_profile eq $t2_profile ) {
-		$self->field('steering.target_id_1')->is_equal( "",  "Target Deliveryservices must be in the same CDN!" );
-	}
-	unless ( $tid1_weight eq int($tid1_weight) && $tid1_weight >= 0 ) {
-		$self->field('steering.target_id_1_weight')->is_equal( "", "Error: \"$tid1_weight\" is not a valid integer of 0 or greater." );
-	}
-	unless ( $tid2_weight eq int($tid2_weight) && $tid2_weight >= 0 ) {
-		$self->field('steering.target_id_2_weight')->is_equal( "", "Error: \"$tid2_weight\" is not a valid integer of 0 or greater." );
+	foreach my $target ( keys %$targets ) {
+		my $cdn = $self->get_ds_cdn( $target );
+		if ( defined($last_cdn) ) {
+			if ( $cdn == $last_cdn ) {
+				next;
+			}
+			else { 
+				$self->flash(message => "Target Deliveryservices must be in the same CDN!" );
+				return;
+			}
+		}
+		else {
+			$last_cdn = $cdn;
+			
+			next;
+		}
+		
 	}
 
 	return $self->valid;
+
 }
 
 sub get_ds_cdn {

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/20cce96c/traffic_ops/app/templates/steering/index.html.ep
----------------------------------------------------------------------
diff --git a/traffic_ops/app/templates/steering/index.html.ep b/traffic_ops/app/templates/steering/index.html.ep
index 3284924..0e8e63b 100644
--- a/traffic_ops/app/templates/steering/index.html.ep
+++ b/traffic_ops/app/templates/steering/index.html.ep
@@ -33,55 +33,37 @@
 				%= include 'common/_flash'
 				<div class="main">
 					<h1>Steering Information:</h1>
-					<form method="post" action="/ds/<%= $steering->{ds_id} %>/steering/update" id="steering_form">
+					<form method="post" action="/ds/<%= $ds_id %>/steering/update" id="steering_form">
 						<div class="block">
-							%= label_for 'steering.ds_name' => 'Steering Delivery Service: ', class => 'label', style=>"width:150px;"
-							%= field('steering.ds_name')->text(class => 'readonly_field', id => 'ds_name', name => 'steering.ds_name', readonly => 'readonly');
+							%= label_for 'ds_name' => 'Steering Delivery Service: ', class => 'label', style=>"width:150px;"
+							%= field('ds_name')->text(class => 'readonly_field', id => 'ds_name', name => 'ds_name', readonly => 'readonly');
 						</div><br><br>
-						<div>
-							<% unless (field('steering.target_id_0')->valid) { %>
-							<span class="field-with-error"><%= field('steering.target_id_0')->error %></span><br>
-							<% } %>
-							%= label_for 'steering.target_name_0' => 'Target Name:', class => 'label', style=>"width:150px;"
-							<select style="max-width:250px" name="steering.target_id_0">
-								<% if (defined($steering->{target_id_0})) { %>
-								<option value="<%=$steering->{target_id_0}%>" selected><%=$steering->{target_name_0}%></option>
-								<% } else { %>
-								<option value="" selected></option>
+						<% foreach my $st (@{$steering}) { %>
+							<div>
+								<% unless (field('st.target_id')->valid) { %>
+									<span class="field-with-error"><%= field('st.target_id')->error %></span><br>
 								<% } %>
-								% foreach my $id (sort{$ds_data->{$a} cmp $ds_data->{$b}} keys %$ds_data) {
-								<option value="<%=$id%>"><%=$ds_data->{$id}%></option>
-								% }
-							</select>
-						</div><br>
-						<div>
-							<% unless (field('steering.target_weight_id_0')->valid) { %>
-							<span class="field-with-error"><%= field('steering.target_weight_id_0')->error %></span><br><br>
-							<% } %>
-							%= label_for 'steering.target_weight_id_0' => 'Target Weight (0 is default): ', class => 'label'
-									%= field('steering.target_weight_id_0')->text(class => 'field', id => 'steering.target_weight_id_0', style => 'width:60px', name => 'steering.target_weight_id_0');
-						</div><br>
-					</div>
-					<div>
-						%= label_for 'steering.target_name_1' => 'Target Name:', class => 'label', style=>"width:150px;"
-						<select style="max-width:250px" name="steering.target_id_1">
-							<% if (defined($steering->{target_id_1})) { %>
-							<option value="<%=$steering->{target_id_1}%>" selected><%=$steering->{target_name_1}%></option>
-							<% } else { %>
-							<option value="" selected></option>
-							<% } %>
-							% foreach my $id (sort{$ds_data->{$a} cmp $ds_data->{$b}} keys %$ds_data) {
-							<option value="<%=$id%>"><%=$ds_data->{$id}%></option>
-							% }
-						</select>
-					</div><br>
-						<div>
-							<% unless (field('steering.target_weight_id_1')->valid) { %>
-							<span class="field-with-error"><%= field('steering.target_weight_id_1')->error %></span><br><br>
+								%= label_for 'st.target_name' => 'Target Name:', class => 'label', style=>"width:150px;"
+								<select style="max-width:250px" name="st.target_id">
+									<% if (defined($st->{target_id})) { %>
+									<option value="<%=$st->{target_id}%>" selected><%=$st->{target_name}%></option>
+									<% } else { %>
+									<option value="" selected></option>
+									<% } %>
+									<% foreach my $id (sort{$ds_data->{$a} cmp $ds_data->{$b}} keys %$ds_data) { %>
+									<option value="<%=$id%>"><%=$ds_data->{$id}%></option>
+									<% } %>
+								</select>
+							</div><br>
+							<div>
+								<% unless (field('st.target_weight')->valid) { %>
+								<span class="field-with-error"><%= field('st.target_weight')->error %></span><br><br>
 							<% } %>
-							%= label_for 'steering.target_weight_id_1' => 'Target Weight (0 is default): ', class => 'label'
-									%= field('steering.target_weight_id_1')->text(class => 'field', id => 'steering.target_weight_id_1', style => 'width:60px', name => 'steering.target_weight_id_1');
+							%= label_for 'st.target_weight' => 'Target Weight (0 is default): ', class => 'label'
+							<input type="text" name="st.target_weight_<%= $st->{target_id} %>" value = "<%= $st->{target_weight} %>">
+							<!-- %= field('st.target_weight')->text(class => 'field', id => 'st.target_weight', style => 'width:60px', name => 'st.target_weight'); -->
 						</div><br>
+						<% } %>
 					<div class="buttons-section" style="margin-bottom: 20px;">
 						<div style="margin-top: 25px; margin-left: 10px; position: relative; display: inline-block; float: left;">
 							<% if ($priv_level >= 20) { %>  <!-- operations and admins only!! -->