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 2018/06/14 17:31:30 UTC
[trafficcontrol] 03/05: Augment Steering API to allow CRUD of
geo-targets
This is an automated email from the ASF dual-hosted git repository.
elsloo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git
commit 291f3567dd800b552dd70df60225b592bd29d70e
Author: Rawlin Peters <ra...@comcast.com>
AuthorDate: Tue Apr 3 16:37:32 2018 -0600
Augment Steering API to allow CRUD of geo-targets
Add two new steering_target types:
- STEERING_GEO_ORDER
- STEERING_GEO_WEIGHT
---
traffic_ops/app/db/seeds.sql | 2 ++
.../app/lib/API/DeliveryService/Steering.pm | 35 +++++++++++++++-------
traffic_ops/app/lib/UI/Steering.pm | 9 ++++--
3 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/traffic_ops/app/db/seeds.sql b/traffic_ops/app/db/seeds.sql
index 6c11adb..5928970 100644
--- a/traffic_ops/app/db/seeds.sql
+++ b/traffic_ops/app/db/seeds.sql
@@ -400,6 +400,8 @@ insert into type (name, description, use_in_table) values ('TXT_RECORD', 'Static
--steering_target types
insert into type (name, description, use_in_table) values ('STEERING_WEIGHT', 'Weighted steering target', 'steering_target') ON CONFLICT (name) DO NOTHING;
insert into type (name, description, use_in_table) values ('STEERING_ORDER', 'Ordered steering target', 'steering_target') ON CONFLICT (name) DO NOTHING;
+insert into type (name, description, use_in_table) values ('STEERING_GEO_ORDER', 'Geo-ordered steering target', 'steering_target') ON CONFLICT (name) DO NOTHING;
+insert into type (name, description, use_in_table) values ('STEERING_GEO_WEIGHT', 'Geo-weighted steering target', 'steering_target') ON CONFLICT (name) DO NOTHING;
-- users
insert into tm_user (username, role, full_name, token) values ('extension', (select id from role where name = 'operations'), 'Extension User, DO NOT DELETE', '91504CE6-8E4A-46B2-9F9F-FE7C15228498') ON CONFLICT DO NOTHING;
diff --git a/traffic_ops/app/lib/API/DeliveryService/Steering.pm b/traffic_ops/app/lib/API/DeliveryService/Steering.pm
index 6ce009a..002a95a 100644
--- a/traffic_ops/app/lib/API/DeliveryService/Steering.pm
+++ b/traffic_ops/app/lib/API/DeliveryService/Steering.pm
@@ -43,12 +43,10 @@ sub find_steering {
my %steering;
- my $rs_data = $self->db->resultset('SteeringView')->search({}, {order_by => ['steering_xml_id', 'target_xml_id']});
+ my %criteria = length $steering_xml_id ? (steering_xml_id => $steering_xml_id) : ();
+ my $rs_data = $self->db->resultset('SteeringView')->search(\%criteria, {order_by => ['steering_xml_id', 'target_xml_id']});
while ( my $row = $rs_data->next ) {
- if ($steering_xml_id && $row->steering_xml_id ne $steering_xml_id) { # TODO: can this be optimized into the SQL query?
- next;
- }
if (!&is_admin($self)) {
my $name = $self->current_user()->{username};
@@ -92,9 +90,6 @@ sub find_steering {
my $targets = $steering_entry->{"targets"};
- # TODO: add new STEERING_GEO_WEIGHT and STEERING_GEO_ORDER types, handle them here
- # verify if STEERING_ORDER and STEERING_WEIGHT should omit latitude, longitude, and geoOrder
- # if GEO, get the target DS's lat/long, add it to result (add it to SteeringView?)
if ( $row->type eq "STEERING_ORDER" ) {
push(@{$targets},{
'deliveryService' => $row->target_xml_id,
@@ -102,10 +97,30 @@ sub find_steering {
'weight' => 0
});
}
- else {
+ elsif ( $row->type eq "STEERING_WEIGHT" ) {
+ push(@{$targets},{
+ 'deliveryService' => $row->target_xml_id,
+ 'order' => 0,
+ 'weight' => $row->value
+ });
+ }
+ elsif ( $row->type eq "STEERING_GEO_ORDER" ) {
+ push(@{$targets},{
+ 'deliveryService' => $row->target_xml_id,
+ 'order' => 0,
+ 'geoOrder' => $row->value,
+ 'latitude' => 0, # TODO: fill these in w/ the DeliveryService Origin lat/lon
+ 'longitude' => 0,
+ 'weight' => 0
+ });
+ }
+ elsif ( $row->type eq "STEERING_GEO_WEIGHT" ) {
push(@{$targets},{
'deliveryService' => $row->target_xml_id,
'order' => 0,
+ 'geoOrder' => 0,
+ 'latitude' => 0, # TODO: fill these in w/ the DeliveryService Origin lat/lon
+ 'longitude' => 0,
'weight' => $row->value
});
}
@@ -151,6 +166,8 @@ sub get_type {
return $type;
}
+# NOTE: STEERING_GEO* types are deliberately ignored in the following endpoint b/c it's soon to be deprecated (use
+# the non-internal PUT endpoint instead)
sub update() {
my $self = shift;
@@ -194,7 +211,6 @@ sub update() {
my $req_targets = $self->req->json->{'targets'};
foreach my $req_target (@{$req_targets}) {
- # TODO: update this validation to handle new GEO types
if (!$req_target->{'deliveryService'} && ( !$req_target->{'weight'} || !$req_target->{'order'} ) || ( $req_target->{'weight'} && $req_target->{'order'} ) ) {
return $self->render(json => {"message" => "please provide a valid json for targets"}, status => 400);
}
@@ -222,7 +238,6 @@ sub update() {
foreach my $req_target (@{$req_targets}) {
my $target_id = $valid_targets->{$req_target->{'deliveryService'}};
- # TODO: update this to handle GEO-type targets
if ($req_target->{'weight'}) {
my $steering_target_row = $self->db->resultset('SteeringTarget')->find({ deliveryservice => $steering_id, target => $target_id});
$steering_target_row->value($req_target->{weight});
diff --git a/traffic_ops/app/lib/UI/Steering.pm b/traffic_ops/app/lib/UI/Steering.pm
index 1e7f98b..a69b375 100644
--- a/traffic_ops/app/lib/UI/Steering.pm
+++ b/traffic_ops/app/lib/UI/Steering.pm
@@ -83,6 +83,7 @@ sub get_target_data {
my @weight_steering;
my @pos_order_steering;
my @neg_order_steering;
+ my @geo_steering;
my $target_rs = $self->db->resultset('SteeringTarget')->search( { deliveryservice => $ds_id } );
@@ -101,6 +102,9 @@ sub get_target_data {
elsif ( $row->type->name eq "STEERING_ORDER" && $row->value >= 0 ) {
push (@pos_order_steering, $t);
}
+ elsif ( $row->type->name =~ m/^STEERING_GEO/ ) {
+ push (@geo_steering, $t);
+ }
else { push (@weight_steering, $t); }
$i++;
}
@@ -108,9 +112,10 @@ sub get_target_data {
@weight_steering = sort { $b->{target_value} <=> $a->{target_value} } @weight_steering;
@neg_order_steering = sort { $a->{target_value} <=> $b->{target_value} } @neg_order_steering;
@pos_order_steering = sort { $a->{target_value} <=> $b->{target_value} } @pos_order_steering;
+ # TODO: group geo_steering targets by Origin lat/lon
- #push everything into an a single array - negative order values first, weights second, positive order last.
- push (@steering, @neg_order_steering, @weight_steering, @pos_order_steering);
+ #push everything into an a single array - negative order values 1st, geo 2nd, weights 3rd, positive order last.
+ push (@steering, @neg_order_steering, @geo_steering, @weight_steering, @pos_order_steering);
}
return @steering;
}
--
To stop receiving notification emails like this one, please contact
elsloo@apache.org.