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!! -->