You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by dg...@apache.org on 2019/08/20 11:11:03 UTC

[trafficcontrol] branch 3.1.x updated: Backbport 3326 logging yaml (#3881)

This is an automated email from the ASF dual-hosted git repository.

dgelinas pushed a commit to branch 3.1.x
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/3.1.x by this push:
     new f6ff7b5  Backbport 3326 logging yaml (#3881)
f6ff7b5 is described below

commit f6ff7b58f6f881777ed01033ee683ba031575358
Author: Steve Malenfant <sm...@users.noreply.github.com>
AuthorDate: Tue Aug 20 07:10:57 2019 -0400

    Backbport 3326 logging yaml (#3881)
    
    * Added logging.yaml support (#3326)
    
    Added logging.yaml support to generate a yaml file if the logging.yaml file is specified as output. Tested with CIAB and it appears to work
    
    (cherry picked from commit 8fcde36019e37965ad5d1dd137032f26e3e4113d)
    
    * Updating changelog related to logging.yaml
---
 CHANGELOG.md                                       |  1 +
 .../app/lib/API/Configs/ApacheTrafficServer.pm     | 90 ++++++++++++++++++++++
 traffic_ops/app/lib/UI/ConfigFiles.pm              | 59 ++++++++++++++
 traffic_ops/bin/traffic_ops_ort.pl                 |  1 +
 4 files changed, 151 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 615feed..cee1dc4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 
 ## [3.1.0] - 2019-08-16
 ### Added
+- Added logging.yaml support
 
 ### Changed
 - Fix TO Servers validation to allow "" ipv6
diff --git a/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm b/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
index d33cefe..706ec31 100755
--- a/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
+++ b/traffic_ops/app/lib/API/Configs/ApacheTrafficServer.pm
@@ -299,6 +299,7 @@ sub get_profile_config {
 	elsif ( $filename eq "drop_qstring.config" ) { $file_contents = $self->drop_qstring_dot_config( $profile_obj, $filename ); }
 	elsif ( $filename eq "logs_xml.config" ) { $file_contents = $self->logs_xml_dot_config( $profile_obj, $filename ); }
 	elsif ( $filename eq "logging.config" ) { $file_contents = $self->logging_dot_config( $profile_obj, $filename ); }
+	elsif ( $filename eq "logging.yaml" ) { $file_contents = $self->logging_dot_yaml( $profile_obj, $filename ); }
 	elsif ( $filename eq "plugin.config" ) { $file_contents = $self->generic_profile_config( $profile_obj, $filename ); }
 	elsif ( $filename eq "records.config" ) { $file_contents = $self->generic_profile_config( $profile_obj, $filename ); }
 	elsif ( $filename eq "storage.config" ) { $file_contents = $self->storage_dot_config( $profile_obj, $filename ); }
@@ -356,6 +357,7 @@ sub get_scope {
 	elsif ( $fname eq "drop_qstring.config" )                  { $scope = 'profiles' }
 	elsif ( $fname eq "logs_xml.config" )                      { $scope = 'profiles' }
 	elsif ( $fname eq "logging.config" )                       { $scope = 'profiles' }
+	elsif ( $fname eq "logging.yaml" )                         { $scope = 'profiles' }
 	elsif ( $fname eq "plugin.config" )                        { $scope = 'profiles' }
 	elsif ( $fname eq "records.config" )                       { $scope = 'profiles' }
 	elsif ( $fname eq "storage.config" )                       { $scope = 'profiles' }
@@ -1421,6 +1423,94 @@ sub drop_qstring_dot_config {
 	return $text;
 }
 
+sub logging_dot_yaml {
+	my $self        = shift;
+	my $profile_obj = shift;
+
+	my $data = $self->profile_param_data( $profile_obj->id, "logging.yaml" );
+
+	# This is an YAML file, the default comment works.
+	my $text = $self->header_comment( $profile_obj->name );
+	$text =~ s/\n//;
+
+	my $max_log_objects = 10;
+
+	# Add formats and filters separately to the top of the file
+	$text .= "\nformats: \n";
+	for ( my $i = 0; $i < $max_log_objects; $i = $i + 1) {
+		my $log_format_field = "LogFormat";
+		if ( $i > 0 ) {
+			$log_format_field = $log_format_field . "$i";
+		}
+		my $log_format_name = $data->{$log_format_field . ".Name"} || "";
+		if ( length($log_format_name) > 0 ) {
+			my $format = $data->{$log_format_field . ".Format"};
+			$text .= " - name: " . $log_format_name ." \n";
+			$text .= "   format: '" . $format . "'\n"
+		}
+	}
+
+	$text .= "filters:\n";
+	for ( my $i = 0; $i < $max_log_objects; $i = $i + 1) {
+		my $log_filter_field = "LogFilter";
+		if ( $i > 0 ) {
+			$log_filter_field = $log_filter_field . "$i";
+		}
+		my $log_filter_name = $data->{$log_filter_field . ".Name"} || "";
+		if ( length($log_filter_name) > 0) {
+			my $filter = $data->{$log_filter_field . ".Filter"};
+			my $log_filter_type = $data->{$log_filter_field . ".Type"} || "accept";
+			$text .= "- name: " . $log_filter_name ."\n";
+			$text .= "  action: " . $log_filter_type . "\n";
+			$text .= "  condition: " . $filter ."\n";
+		}
+	}
+
+	for ( my $i = 0; $i < $max_log_objects; $i = $i + 1 ) {
+		my $log_object_field = "LogObject";
+		if ( $i > 0 ) {
+			$log_object_field = $log_object_field . "$i";
+		}
+
+		my $log_object_filename = $data->{$log_object_field . ".Filename"} || "";
+		if ( length($log_object_filename) > 0 ) {
+			my $log_object_type                 = $data->{$log_object_field . ".Type"}               || "ascii";
+			my $log_object_format               = $data->{$log_object_field . ".Format"}             || "";
+			my $log_object_rolling_enabled      = $data->{$log_object_field . ".RollingEnabled"}     || "";
+			my $log_object_rolling_interval_sec = $data->{$log_object_field . ".RollingIntervalSec"} || "";
+			my $log_object_rolling_offset_hr    = $data->{$log_object_field . ".RollingOffsetHr"}    || "";
+			my $log_object_rolling_size_mb      = $data->{$log_object_field . ".RollingSizeMb"}      || "";
+			my $log_object_filters              = $data->{$log_object_field . ".Filters"}            || "";
+
+			$text .= "\nlogs:\n";
+			$text .= "- mode: " . $log_object_type . "\n";
+			$text .= "  filename: " . $log_object_filename ."\n";
+			$text .= "  format: " . $log_object_format . "\n";
+
+			if ( $log_object_type ne "pipe") {
+				if ($log_object_rolling_enabled ne ""){
+					$text .= "  rolling_enabled: ". $log_object_rolling_enabled . "\n";
+				}
+				if ($log_object_rolling_interval_sec ne "") {
+					$text .= "  rolling_interval_sec: ". $log_object_rolling_interval_sec . "\n";
+				}
+				if ($log_object_rolling_offset_hr ne "") {
+					$text .= "  rolling_offset_hr: ". $log_object_rolling_offset_hr . "\n";
+				}
+				if ($log_object_rolling_size_mb ne "") {
+					$text .= "  rolling_size_mb: ". $log_object_rolling_size_mb . "\n";
+				}
+			}
+			if ( length($log_object_filters) > 0 ) {	
+				$log_object_filters =~ s/\v//g;		
+				$text .= "  filters: [" . $log_object_filters . "]";
+			}
+		}
+	}
+
+	return $text;
+}
+
 sub logging_dot_config {
 	my $self        = shift;
 	my $profile_obj = shift;
diff --git a/traffic_ops/app/lib/UI/ConfigFiles.pm b/traffic_ops/app/lib/UI/ConfigFiles.pm
index 90c4bd2..73c97f1 100644
--- a/traffic_ops/app/lib/UI/ConfigFiles.pm
+++ b/traffic_ops/app/lib/UI/ConfigFiles.pm
@@ -30,6 +30,7 @@ use URI;
 my $dispatch_table ||= {
 	"logs_xml.config"         => sub { logs_xml_dot_config(@_) },
 	"logging.config"		  => sub { logging_dot_config(@_) },
+	"logging.yaml"		  	  => sub { logging_dot_yaml(@_) },
 	"cacheurl.config"         => sub { cacheurl_dot_config(@_) },
 	"records.config"          => sub { generic_config(@_) },
 	"plugin.config"           => sub { generic_config(@_) },
@@ -643,6 +644,64 @@ sub facts {
 	return $text;
 }
 
+sub logging_dot_yaml {
+	my $self     = shift;
+	my $id       = shift;
+	my $filename = shift;
+
+	my $server = $self->server_data($id);
+	my $data   = $self->param_data( $server, $filename );
+
+	my $text   = "# Generated for " . $server->host_name . " by " . &name_version_string($self) . " - Do not edit!! \n";
+
+	my $max_log_objects = 10;
+	for ( my $i = 0; $i < $max_log_objects; $i = $i + 1 ) {
+		my $log_format_field = "LogFormat";
+		my $log_object_field = "LogObject";
+		if ( $i > 0 ) {
+			$log_format_field = $log_format_field . "$i";
+			$log_object_field = $log_object_field . "$i";
+		}
+
+		my $log_format_name = $data->{$log_format_field . ".Name"} || "";
+		if ( length($log_format_name) > 0 ) {
+			my $format = $data->{$log_format_field . ".Format"};
+			$text .= "formats: \n";
+			$text .= " - name: " . $log_format_name ." \n";
+			$text .= "   format: '" . $format . "'\n";
+		}
+
+		my $log_object_filename = $data->{$log_object_field . ".Filename"} || "";
+		if ( length($log_object_filename) > 0 ) {
+			my $log_object_format               = $data->{$log_object_field . ".Format"}             || "";
+			my $log_object_rolling_enabled      = $data->{$log_object_field . ".RollingEnabled"}     || "";
+			my $log_object_rolling_interval_sec = $data->{$log_object_field . ".RollingIntervalSec"} || "";
+			my $log_object_rolling_offset_hr    = $data->{$log_object_field . ".RollingOffsetHr"}    || "";
+			my $log_object_rolling_size_mb      = $data->{$log_object_field . ".RollingSizeMb"}      || "";
+			my $log_object_header               = $data->{$log_object_field . ".Header"}             || "";
+
+			$text .= "\nlogs:\n";
+			$text .= "- mode: ascii\n";
+			$text .= "  filename: " . $log_object_filename ."\n";
+			$text .= "  format: ". $log_format_name . "\n";
+			if ($log_object_rolling_enabled ne ""){
+				$text .= "  rolling_enabled: ". $log_object_rolling_enabled . "\n";
+			}
+			if ($log_object_rolling_interval_sec ne "") {
+				$text .= "  rolling_interval_sec: ". $log_object_rolling_interval_sec . "\n";
+			}
+			if ($log_object_rolling_offset_hr ne "") {
+				$text .= "  rolling_offset_hr: ". $log_object_rolling_offset_hr . "\n";
+			}
+			if ($log_object_rolling_size_mb ne "") {
+				$text .= "  rolling_size_mb: ". $log_object_rolling_size_mb . "\n";
+			}
+		}
+	}
+
+	return $text;
+}
+
 sub logging_dot_config {
 	my $self     = shift;
 	my $id       = shift;
diff --git a/traffic_ops/bin/traffic_ops_ort.pl b/traffic_ops/bin/traffic_ops_ort.pl
index 17b94c9..11b251f 100755
--- a/traffic_ops/bin/traffic_ops_ort.pl
+++ b/traffic_ops/bin/traffic_ops_ort.pl
@@ -1106,6 +1106,7 @@ sub process_config_files {
 				|| $file =~ m/\.key$/
 				|| $file eq "logs_xml.config"
 				|| $file eq "logging.config"
+				|| $file eq "logging.yaml"
 				|| $file eq "ssl_multicert.config" )
 			)
 		{