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 2018/05/01 14:42:55 UTC
[incubator-trafficcontrol] 01/02: revert perl changes from crconfig
PR
This is an automated email from the ASF dual-hosted git repository.
dewrich pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git
commit fa0e7d4d3ddb76f5ac42747c9048b10a84d9326d
Author: Dan Kirkwood <da...@apache.org>
AuthorDate: Mon Apr 30 21:21:18 2018 +0000
revert perl changes from crconfig PR
---
traffic_ops/app/lib/API/Topology.pm | 103 ++++++++++++++++++++++++++++++++
traffic_ops/app/lib/TrafficOpsRoutes.pm | 10 +++-
traffic_ops/app/lib/UI/Tools.pm | 22 +++++--
traffic_ops/app/lib/UI/Topology.pm | 16 +++++
4 files changed, 144 insertions(+), 7 deletions(-)
diff --git a/traffic_ops/app/lib/API/Topology.pm b/traffic_ops/app/lib/API/Topology.pm
new file mode 100644
index 0000000..ff72b57
--- /dev/null
+++ b/traffic_ops/app/lib/API/Topology.pm
@@ -0,0 +1,103 @@
+package API::Topology;
+#
+##
+## Licensed under the Apache License, Version 2.0 (the "License");
+## you may not use this file except in compliance with the License.
+## You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+##
+##
+##
+#
+## 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 Mojo::Base 'Mojolicious::Controller';
+use JSON;
+use MojoPlugins::Response;
+use UI::Utils;
+use UI::Topology;
+use Data::Dumper;
+
+sub SnapshotCRConfig {
+ my $self = shift;
+ my $cdn_id = $self->param('id');
+ my $cdn_name = $self->param('cdn_name');
+ my $cdn;
+
+ if ( !&is_oper($self) ) {
+ return $self->forbidden("You must be an ADMIN or OPER to perform this operation!");
+ }
+
+ if ( defined $cdn_id ) {
+ $cdn = $self->db->resultset("Cdn")->find( { id => $cdn_id } );
+ $cdn_name = $cdn->name if defined $cdn;
+ }
+
+ if ( !defined $cdn ) {
+ $cdn = $self->db->resultset('Cdn')->find( { name => $cdn_name } );
+ if ( !defined($cdn) ) {
+ return $self->not_found();
+ }
+ }
+
+ my @cdn_names = $self->db->resultset('Server')->search({ 'type.name' => 'EDGE' }, { prefetch => [ 'cdn', 'type' ], group_by => 'cdn.name' } )->get_column('cdn.name')->all();
+ my $num = grep /^$cdn_name$/, @cdn_names;
+ if ($num <= 0) {
+ return $self->alert("CDN_name [" . $cdn_name. "] is not found in edge server cdn");
+ }
+
+ my $json = &UI::Topology::gen_crconfig_json($self, $cdn_name);
+ &UI::Topology::write_crconfig_json_to_db($self, $cdn_name, $json);
+ &UI::Utils::log($self, "Snapshot of CRConfig performed for $cdn_name", "APICHANGE");
+ return $self->success("SUCCESS");
+}
+
+sub get_snapshot {
+ my $self = shift;
+ my $cdn_name = $self->param('name');
+
+ if ( !&is_oper($self) ) {
+ return $self->forbidden();
+ }
+
+ my $cdn = $self->db->resultset('Cdn')->find( { name => $cdn_name } );
+ if ( !defined($cdn) ) {
+ return $self->not_found();
+ }
+
+ my $snapshot = $self->db->resultset('Snapshot')->search( { cdn => $cdn_name } )->get_column('content')->single();
+ if ( !defined($snapshot) ) {
+ return $self->success( {} );
+ }
+
+ $self->success( decode_json($snapshot) );
+}
+
+sub get_new_snapshot {
+ my $self = shift;
+ my $cdn_name = $self->param('name');
+
+ if ( !&is_oper($self) ) {
+ return $self->forbidden();
+ }
+
+ my $cdn = $self->db->resultset('Cdn')->find( { name => $cdn_name } );
+ if ( !defined($cdn) ) {
+ return $self->not_found();
+ }
+
+ my $json = &UI::Topology::gen_crconfig_json($self, $cdn_name);
+
+ $self->success( $json );
+}
+
+1;
diff --git a/traffic_ops/app/lib/TrafficOpsRoutes.pm b/traffic_ops/app/lib/TrafficOpsRoutes.pm
index 81bf55b..78b3e05 100644
--- a/traffic_ops/app/lib/TrafficOpsRoutes.pm
+++ b/traffic_ops/app/lib/TrafficOpsRoutes.pm
@@ -338,8 +338,7 @@ sub ui_routes {
$r->get('/tools/queue_updates')->over( authenticated => 1, not_ldap => 1 )->to( 'Tools#queue_updates', namespace => $namespace );
$r->get('/tools/snapshot_crconfig')->over( authenticated => 1, not_ldap => 1 )->to( 'Tools#snapshot_crconfig', namespace => $namespace );
$r->get('/tools/diff_crconfig/:cdn_name')->over( authenticated => 1, not_ldap => 1 )->to( 'Tools#diff_crconfig_iframe', namespace => $namespace );
- # flash_and_close is a helper for the traffic_ops_golang migration, to allow Go handlers to intercept GUI routes, do their work, then redirect to this to perform the GUI operation
- $r->get('/tools/flash_and_close/:msg')->over( authenticated => 1, not_ldap => 1 )->to( 'Tools#flash_and_close', namespace => $namespace );
+ $r->get('/tools/write_crconfig/:cdn_name')->over( authenticated => 1, not_ldap => 1 )->to( 'Tools#write_crconfig', namespace => $namespace );
$r->get('/tools/invalidate_content/')->over( authenticated => 1, not_ldap => 1 )->to( 'Tools#invalidate_content', namespace => $namespace );
# -- Topology - CCR Config, rewrote in json
@@ -449,6 +448,13 @@ sub api_routes {
# -- CDNS: ROUTING
$r->get("/api/$version/cdns/routing")->over( authenticated => 1, not_ldap => 1 )->to( 'Cdn#routing', namespace => $namespace );
+ # -- CDNS: SNAPSHOT
+ $r->get("/api/$version/cdns/:name/snapshot")->over( authenticated => 1, not_ldap => 1 )->to( 'Topology#get_snapshot', namespace => $namespace );
+ $r->get("/api/$version/cdns/:name/snapshot/new")->over( authenticated => 1, not_ldap => 1 )->to( 'Topology#get_new_snapshot', namespace => $namespace );
+ $r->put( "/api/$version/cdns/:id/snapshot" => [ id => qr/\d+/ ] )->over( authenticated => 1, not_ldap => 1 )
+ ->to( 'Topology#SnapshotCRConfig', namespace => $namespace );
+ $r->put("/api/$version/snapshot/:cdn_name")->over( authenticated => 1, not_ldap => 1 )->to( 'Topology#SnapshotCRConfig', namespace => $namespace );
+
# -- CDNS: METRICS
#WARNING: this is an intentionally "unauthenticated" route.
$r->get("/api/$version/cdns/metric_types/:metric_type/start_date/:start_date/end_date/:end_date")->to( 'Cdn#metrics', namespace => $namespace );
diff --git a/traffic_ops/app/lib/UI/Tools.pm b/traffic_ops/app/lib/UI/Tools.pm
index 639c9ff..3ab70c1 100644
--- a/traffic_ops/app/lib/UI/Tools.pm
+++ b/traffic_ops/app/lib/UI/Tools.pm
@@ -105,11 +105,23 @@ sub diff_crconfig_iframe {
);
}
-sub flash_and_close {
- my $self = shift;
- my $msg = $self->param('msg');
- $self->flash( alertmsg => $msg );
- return $self->redirect_to('/utils/close_fancybox');
+sub write_crconfig {
+ my $self = shift;
+ my $cdn_name = $self->param('cdn_name');
+ my ( $json, $error ) = UI::Topology::gen_crconfig_json( $self, $cdn_name );
+ if ( defined $error ) {
+ $self->flash( alertmsg => $error );
+ }
+ else {
+ if ( !&is_oper($self) ) {
+ $self->flash( alertmsg => "No can do. Get more privs." );
+ } else {
+ UI::Topology::write_crconfig_json_to_db( $self, $cdn_name, $json );
+ &log( $self, "Snapshot CRConfig created.", "OPER" );
+ $self->flash( alertmsg => "Successfully wrote CRConfig.json!" );
+ }
+ }
+ return $self->redirect_to('/utils/close_fancybox');
}
sub queue_updates {
diff --git a/traffic_ops/app/lib/UI/Topology.pm b/traffic_ops/app/lib/UI/Topology.pm
index aef8cad..ee0e750 100644
--- a/traffic_ops/app/lib/UI/Topology.pm
+++ b/traffic_ops/app/lib/UI/Topology.pm
@@ -573,6 +573,22 @@ sub gen_crconfig_json {
return ($data_obj);
}
+sub write_crconfig_json_to_db {
+ my $self = shift;
+ my $cdn_name = shift;
+ my $crconfig_db = shift;
+ my $crconfig_json = encode_json($crconfig_db);
+
+ my $snapshot = $self->db->resultset('Snapshot')->find( { cdn => $cdn_name } );
+ if ( defined($snapshot) ) {
+ $snapshot->update({ content => $crconfig_json });
+ } else {
+ my $insert = $self->db->resultset('Snapshot')->create( { cdn => $cdn_name, content => $crconfig_json } );
+ $insert->insert();
+ }
+
+}
+
sub diff_crconfig_json {
my $self = shift;
my $json = shift;
--
To stop receiving notification emails like this one, please contact
dewrich@apache.org.